@dodjidev/filemodule 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ "use strict";const e=require("fs"),s=require("xlsx");module.exports=new class{configs={};logger=null;defaultLogger={info:e=>console.log(e),error:e=>console.error(new Error(e))};constructor(){}init(e){try{Object.assign(this.configs,e),this.logger=e?.logger}catch(e){this.log(`Error initializing watcher: ${e.message}`,"error")}}log(e,s="info"){this.logger&&this.logger[s](e)}excelToJson(e,r){let t={success:!0,response:[]};try{r||(r={}),r.sheetname=r.sheetname||"";let o="string"==typeof e?s.readFile(e):s.read(e),n=Object.keys(o.Sheets);if(0==n.length)return t;let l=o.Sheets[r.sheetname];l||(l=o.Sheets[n[0]]),l&&(t.response=s.utils.sheet_to_json(l))}catch(e){t.response=e.message,t.success=!1,t.code=e.code}finally{return t}}jsonToExcel(e,r="",t){let o={success:!0,response:[]};try{if(!r)throw new Error("no file specified");t.sheetname=t.sheetname||"",t.header=t.header||[],"string"==typeof t?.header&&(t.header=t.header.split(",")),Array.isArray(t?.header)&&t?.header?.length>0&&(e=e.map((e=>{let s={};for(let r of t.header)t.header.includes(r)?e[r]=e[r]||null:delete e[r],s[r]=void 0!==e[r]?e[r]:null;return s})));const n=s.readFile(r);let l=s.utils.json_to_sheet(e,{cellDates:!0});"function"==typeof t?.preprocessing&&t.preprocessing(l,n,e),void 0!==n.Sheets[t.sheetname]?n.Sheets[t.sheetname]=l:s.utils.book_append_sheet(n,l,t.sheetname),s.writeFile(n,r),o.response="file write successfully !!!"}catch(n){if("ENOENT"==n.code&&!1!==t?.createIfNotExist)try{const n=s.utils.json_to_sheet(e);let l=s.utils.book_new();"function"==typeof t?.preprocessing&&t.preprocessing(n,l,e),s.utils.book_append_sheet(l,n,t.sheetname),s.writeFile(l,r),o.response="file write successfully !!!"}catch(e){o.response=e.message,o.success=!1}else o.response=n.message,o.success=!1}finally{return o}}appendDataToExcel(e,s="",r){let t={success:!0,response:"Append successfully"};try{if(r||(r={}),!Array.isArray(e))throw new Error("The data to append must be of type array.Got:"+typeof e);let o=r?.clearOld?[]:this.excelToJson(s,r).response;Array.isArray(o)||(o=[]);let n=[...o,...e];if("update"==r?.type){if(!r?.primaryKey)throw new Error("The type is update but no primaryKey is specified");let s=r.primaryKey;e.forEach((e=>{let r=n.filter((r=>r[s]&&r[s]==e[s]));if(r.length>1){let t=n.findIndex((r=>r[s]==e[s])),o=r.reduce(((e,s)=>({...e,...s})),{});n.splice(t,1,o),n=n.filter(((r,o)=>t==o||r[s]!=e[s]))}}))}let l=this.jsonToExcel(n,s,{createIfNotExist:!0,...r});l.success?t.response="Data append successfully":t=l}catch(e){t.success=!1,t.response=e.message}finally{return t}}writeBase64=(s,r,t)=>new Promise((function(o,n){try{null==s&&n(!1);let l=s.split(";base64,"),i=l?.[0];l.length>1&&(i=l[1]);let c=Buffer.from(i,"base64");e.mkdirSync(r,{recursive:!0});let a=r+"/"+t.filename;e.writeFile(a,c,((e,s)=>{o({success:!0,response:a})}))}catch(e){o({success:!1,response:e.message,error:e})}}));jsonToFile(e,s){try{e=JSON.stringify(e)}catch(e){}}};
@@ -0,0 +1 @@
1
+ const e=require("fs"),s=require("xlsx");module.exports=new class{configs={};logger=null;defaultLogger={info:e=>console.log(e),error:e=>console.error(new Error(e))};constructor(){}init(e){try{Object.assign(this.configs,e),this.logger=e?.logger}catch(e){this.log(`Error initializing watcher: ${e.message}`,"error")}}log(e,s="info"){this.logger&&this.logger[s](e)}excelToJson(e,r){let t={success:!0,response:[]};try{r||(r={}),r.sheetname=r.sheetname||"";let o="string"==typeof e?s.readFile(e):s.read(e),n=Object.keys(o.Sheets);if(0==n.length)return t;let l=o.Sheets[r.sheetname];l||(l=o.Sheets[n[0]]),l&&(t.response=s.utils.sheet_to_json(l))}catch(e){t.response=e.message,t.success=!1,t.code=e.code}finally{return t}}jsonToExcel(e,r="",t){let o={success:!0,response:[]};try{if(!r)throw new Error("no file specified");t.sheetname=t.sheetname||"",t.header=t.header||[],"string"==typeof t?.header&&(t.header=t.header.split(",")),Array.isArray(t?.header)&&t?.header?.length>0&&(e=e.map((e=>{let s={};for(let r of t.header)t.header.includes(r)?e[r]=e[r]||null:delete e[r],s[r]=void 0!==e[r]?e[r]:null;return s})));const n=s.readFile(r);let l=s.utils.json_to_sheet(e,{cellDates:!0});"function"==typeof t?.preprocessing&&t.preprocessing(l,n,e),void 0!==n.Sheets[t.sheetname]?n.Sheets[t.sheetname]=l:s.utils.book_append_sheet(n,l,t.sheetname),s.writeFile(n,r),o.response="file write successfully !!!"}catch(n){if("ENOENT"==n.code&&!1!==t?.createIfNotExist)try{const n=s.utils.json_to_sheet(e);let l=s.utils.book_new();"function"==typeof t?.preprocessing&&t.preprocessing(n,l,e),s.utils.book_append_sheet(l,n,t.sheetname),s.writeFile(l,r),o.response="file write successfully !!!"}catch(e){o.response=e.message,o.success=!1}else o.response=n.message,o.success=!1}finally{return o}}appendDataToExcel(e,s="",r){let t={success:!0,response:"Append successfully"};try{if(r||(r={}),!Array.isArray(e))throw new Error("The data to append must be of type array.Got:"+typeof e);let o=r?.clearOld?[]:this.excelToJson(s,r).response;Array.isArray(o)||(o=[]);let n=[...o,...e];if("update"==r?.type){if(!r?.primaryKey)throw new Error("The type is update but no primaryKey is specified");let s=r.primaryKey;e.forEach((e=>{let r=n.filter((r=>r[s]&&r[s]==e[s]));if(r.length>1){let t=n.findIndex((r=>r[s]==e[s])),o=r.reduce(((e,s)=>({...e,...s})),{});n.splice(t,1,o),n=n.filter(((r,o)=>t==o||r[s]!=e[s]))}}))}let l=this.jsonToExcel(n,s,{createIfNotExist:!0,...r});l.success?t.response="Data append successfully":t=l}catch(e){t.success=!1,t.response=e.message}finally{return t}}writeBase64=(s,r,t)=>new Promise((function(o,n){try{null==s&&n(!1);let l=s.split(";base64,"),i=l?.[0];l.length>1&&(i=l[1]);let c=Buffer.from(i,"base64");e.mkdirSync(r,{recursive:!0});let a=r+"/"+t.filename;e.writeFile(a,c,((e,s)=>{o({success:!0,response:a})}))}catch(e){o({success:!1,response:e.message,error:e})}}));jsonToFile(e,s){try{e=JSON.stringify(e)}catch(e){}}};
package/dist/index.js ADDED
@@ -0,0 +1,51 @@
1
+ "use strict";const e=require("fs"),s=require("xlsx");module.exports=new class{
2
+ /**
3
+ * @type {Object}
4
+ * @property {Object} logger
5
+ */
6
+ configs={};
7
+ /**
8
+ * @type {@Object}
9
+ */
10
+ logger=null;defaultLogger={info:e=>console.log(e),error:e=>console.error(new Error(e))};constructor(){}
11
+ /**
12
+ * initialise jobs
13
+ * @param {Object} params
14
+ */init(e){try{Object.assign(this.configs,e),this.logger=e?.logger}catch(e){this.log(`Error initializing watcher: ${e.message}`,"error")}}
15
+ /**
16
+ * log message with the logger object
17
+ * @param {string} message message to display
18
+ * @param {string} type type of message: info | error
19
+ */log(e,s="info"){this.logger&&this.logger[s](e)}
20
+ /**
21
+ * Excel file to json
22
+ * @param {*} directory
23
+ * @param {*} options
24
+ * @returns
25
+ */excelToJson(e,r){let t={success:!0,response:[]};try{r||(r={}),r.sheetname=r.sheetname||"";let o="string"==typeof e?s.readFile(e):s.read(e),n=Object.keys(o.Sheets);if(0==n.length)return t;let l=o.Sheets[r.sheetname];l||(l=o.Sheets[n[0]]),l&&(t.response=s.utils.sheet_to_json(l))}catch(e){t.response=e.message,t.success=!1,t.code=e.code}finally{return t}}
26
+ /**
27
+ * write json data to excel file. Override old data
28
+ * @param {Object[]} data array of data to append
29
+ * @param {string} directory excel file directory. Will create new if not exist
30
+ * @param {Object} options
31
+ * @param {Object} options.sheetname name of the sheet where to write to
32
+ * @returns {Object}
33
+ */jsonToExcel(e,r="",t){let o={success:!0,response:[]};try{if(!r)throw new Error("no file specified");t.sheetname=t.sheetname||"",t.header=t.header||[],"string"==typeof t?.header&&(t.header=t.header.split(",")),Array.isArray(t?.header)&&t?.header?.length>0&&(e=e.map((e=>{let s={};for(let r of t.header)t.header.includes(r)?e[r]=e[r]||null:delete e[r],s[r]=void 0!==e[r]?e[r]:null;return s})));const n=s.readFile(r);let l=s.utils.json_to_sheet(e,{cellDates:!0});"function"==typeof t?.preprocessing&&t.preprocessing(l,n,e),void 0!==n.Sheets[t.sheetname]?n.Sheets[t.sheetname]=l:s.utils.book_append_sheet(n,l,t.sheetname),s.writeFile(n,r),o.response="file write successfully !!!"}catch(n){
34
+ // if file not exist create one if options.createIfNotExist = true
35
+ if("ENOENT"==n.code&&!1!==t?.createIfNotExist)try{const n=s.utils.json_to_sheet(e);let l=s.utils.book_new();"function"==typeof t?.preprocessing&&t.preprocessing(n,l,e),s.utils.book_append_sheet(l,n,t.sheetname),s.writeFile(l,r),o.response="file write successfully !!!"}catch(e){o.response=e.message,o.success=!1}else o.response=n.message,o.success=!1}finally{return o}}
36
+ /**
37
+ * append json data to excel file
38
+ * @param {Object[]} data array of data to append
39
+ * @param {string} directory excel file directory. Will create new if not exist
40
+ * @param {Object} options
41
+ * @param {string} options.sheetname name of the sheet where to write to
42
+ * @param {boolean} options.createIfNotExist create the file if not exist. Default = true
43
+ * @param {string} options.type typeof process ( update or nay other alse). Set update if to update existent
44
+ * data with new info. Need to set options.primaryKey option to filter data
45
+ * @param {string} options.primaryKey uniq key of datas. Used to update data (options.type = true)
46
+ * @param {boolean} options.clearOld Override old data
47
+ * @param {string[] | string} options.header header colomn names. can be a comma seperated string (col1,col2,col2,...) or array of string (string[])
48
+ * @returns {Object}
49
+ */appendDataToExcel(e,s="",r){let t={success:!0,response:"Append successfully"};try{if(r||(r={}),!Array.isArray(e))throw new Error("The data to append must be of type array.Got:"+typeof e);
50
+ // Get old data in file. If clearOld the set empty date
51
+ let o=r?.clearOld?[]:this.excelToJson(s,r).response;Array.isArray(o)||(o=[]);let n=[...o,...e];if("update"==r?.type){if(!r?.primaryKey)throw new Error("The type is update but no primaryKey is specified");let s=r.primaryKey;e.forEach((e=>{let r=n.filter((r=>r[s]&&r[s]==e[s]));if(r.length>1){let t=n.findIndex((r=>r[s]==e[s])),o=r.reduce(((e,s)=>({...e,...s})),{});n.splice(t,1,o),n=n.filter(((r,o)=>t==o||r[s]!=e[s]))}}))}let l=this.jsonToExcel(n,s,{createIfNotExist:!0,...r});l.success?t.response="Data append successfully":t=l}catch(e){t.success=!1,t.response=e.message}finally{return t}}writeBase64=(s,r,t)=>new Promise((function(o,n){try{null==s&&n(!1);let l=s.split(";base64,"),i=l?.[0];l.length>1&&(i=l[1]);let c=Buffer.from(i,"base64");e.mkdirSync(r,{recursive:!0});let a=r+"/"+t.filename;e.writeFile(a,c,((e,s)=>{o({success:!0,response:a})}))}catch(e){o({success:!1,response:e.message,error:e})}}))};
package/package.json ADDED
@@ -0,0 +1,20 @@
1
+ {
2
+ "version": "1.0.0",
3
+ "name": "@dodjidev/filemodule",
4
+ "exports": "./dist/index.js",
5
+ "scripts": {
6
+ "test": "nodemon src/test/index.js",
7
+ "publish": "npm run build & npm publish --access=public",
8
+ "build": "rollup -c"
9
+ },
10
+ "dependencies": {
11
+ "xlsx": "^0.18.5"
12
+ },
13
+ "devDependencies": {
14
+ "@babel/core": "^7.25.2",
15
+ "@rollup/plugin-babel": "^6.0.4",
16
+ "@rollup/plugin-terser": "^0.4.4",
17
+ "rollup": "^4.20.0",
18
+ "rollup-plugin-copy": "^3.5.0"
19
+ }
20
+ }
@@ -0,0 +1,55 @@
1
+ const babel = require('@rollup/plugin-babel')
2
+ const terser = require('@rollup/plugin-terser')
3
+ const copy = require('rollup-plugin-copy')
4
+
5
+ const pk = require('./package.json');
6
+ let version = pk.version;
7
+ let oldVersion = version
8
+
9
+ if(version){
10
+ version = version.split('.');
11
+ let lastIndex = version[version.length - 1];
12
+ let nextVersion = +lastIndex + 1;
13
+ let index = version.length - 1
14
+
15
+ if(nextVersion >= 10){
16
+ let lastIndex = version[version.length - 2];
17
+ version[version.length - 1] = 0
18
+ nextVersion = +lastIndex + 1;
19
+ index = version.length - 2
20
+ if(nextVersion >= 10){
21
+ version[version.length - 2] = 0
22
+ let lastIndex = version[version.length - 3];
23
+ nextVersion = +lastIndex + 1;
24
+ index = version.length - 3
25
+ }
26
+ }
27
+
28
+ version[index] = nextVersion
29
+
30
+ version = version.join('.')
31
+
32
+ pk.version = version
33
+
34
+ }
35
+
36
+ module.exports = [
37
+ {
38
+ input: 'src/index.js',
39
+ output: [
40
+ {file: 'dist/index.cjs.js' , format: 'cjs'},
41
+ {file: 'dist/index.esm.js' , format: 'esm'},
42
+ ],
43
+ plugins: [
44
+ babel(),
45
+ terser(),
46
+ copy({
47
+ targets: [
48
+ {src: 'package.json' , dest: './' , transform: (content)=> {
49
+ return content.toString().replace(`"${oldVersion}"` , `"${version}"`)
50
+ }}
51
+ ]
52
+ })
53
+ ]
54
+ }
55
+ ]