@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.
- package/dist/index.cjs.js +1 -0
- package/dist/index.esm.js +1 -0
- package/dist/index.js +51 -0
- package/package.json +20 -0
- package/rollup.config.js +55 -0
- package/test.json +1447 -0
- package/test.png +1447 -0
- package/test.xlsx +0 -0
|
@@ -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
|
+
}
|
package/rollup.config.js
ADDED
|
@@ -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
|
+
]
|