w-data-csv 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.
Files changed (53) hide show
  1. package/.editorconfig +9 -0
  2. package/.eslintignore +3 -0
  3. package/.eslintrc.js +54 -0
  4. package/.jsdoc +25 -0
  5. package/README.md +54 -0
  6. package/SECURITY.md +5 -0
  7. package/babel.config.js +14 -0
  8. package/dist/w-data-csv.umd.js +7 -0
  9. package/dist/w-data-csv.umd.js.map +1 -0
  10. package/docs/WDataCsv.mjs.html +242 -0
  11. package/docs/fonts/Montserrat/Montserrat-Bold.eot +0 -0
  12. package/docs/fonts/Montserrat/Montserrat-Bold.ttf +0 -0
  13. package/docs/fonts/Montserrat/Montserrat-Bold.woff +0 -0
  14. package/docs/fonts/Montserrat/Montserrat-Bold.woff2 +0 -0
  15. package/docs/fonts/Montserrat/Montserrat-Regular.eot +0 -0
  16. package/docs/fonts/Montserrat/Montserrat-Regular.ttf +0 -0
  17. package/docs/fonts/Montserrat/Montserrat-Regular.woff +0 -0
  18. package/docs/fonts/Montserrat/Montserrat-Regular.woff2 +0 -0
  19. package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.eot +0 -0
  20. package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.svg +978 -0
  21. package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.ttf +0 -0
  22. package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.woff +0 -0
  23. package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.woff2 +0 -0
  24. package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.eot +0 -0
  25. package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.svg +1049 -0
  26. package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.ttf +0 -0
  27. package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.woff +0 -0
  28. package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.woff2 +0 -0
  29. package/docs/global.html +787 -0
  30. package/docs/index.html +81 -0
  31. package/docs/scripts/collapse.js +20 -0
  32. package/docs/scripts/linenumber.js +25 -0
  33. package/docs/scripts/nav.js +12 -0
  34. package/docs/scripts/polyfill.js +4 -0
  35. package/docs/scripts/prettify/Apache-License-2.0.txt +202 -0
  36. package/docs/scripts/prettify/lang-css.js +2 -0
  37. package/docs/scripts/prettify/prettify.js +28 -0
  38. package/docs/scripts/search.js +83 -0
  39. package/docs/styles/jsdoc.css +765 -0
  40. package/docs/styles/prettify.css +79 -0
  41. package/g-read.mjs +15 -0
  42. package/g-test-in.csv +3 -0
  43. package/g-test-out.csv +3 -0
  44. package/g-write.mjs +16 -0
  45. package/package.json +30 -0
  46. package/src/WDataCsv.mjs +173 -0
  47. package/test/PCA.test.mjs +125 -0
  48. package/test/cluster.test.mjs +135 -0
  49. package/toolg/addVersion.mjs +4 -0
  50. package/toolg/cleanFolder.mjs +4 -0
  51. package/toolg/gDistRollup.mjs +38 -0
  52. package/toolg/gDocsExams.mjs +48 -0
  53. package/toolg/modifyReadme.mjs +4 -0
@@ -0,0 +1,79 @@
1
+ .pln {
2
+ color: #ddd;
3
+ }
4
+
5
+ /* string content */
6
+ .str {
7
+ color: #61ce3c;
8
+ }
9
+
10
+ /* a keyword */
11
+ .kwd {
12
+ color: #fbde2d;
13
+ }
14
+
15
+ /* a comment */
16
+ .com {
17
+ color: #aeaeae;
18
+ }
19
+
20
+ /* a type name */
21
+ .typ {
22
+ color: #8da6ce;
23
+ }
24
+
25
+ /* a literal value */
26
+ .lit {
27
+ color: #fbde2d;
28
+ }
29
+
30
+ /* punctuation */
31
+ .pun {
32
+ color: #ddd;
33
+ }
34
+
35
+ /* lisp open bracket */
36
+ .opn {
37
+ color: #000000;
38
+ }
39
+
40
+ /* lisp close bracket */
41
+ .clo {
42
+ color: #000000;
43
+ }
44
+
45
+ /* a markup tag name */
46
+ .tag {
47
+ color: #8da6ce;
48
+ }
49
+
50
+ /* a markup attribute name */
51
+ .atn {
52
+ color: #fbde2d;
53
+ }
54
+
55
+ /* a markup attribute value */
56
+ .atv {
57
+ color: #ddd;
58
+ }
59
+
60
+ /* a declaration */
61
+ .dec {
62
+ color: #EF5050;
63
+ }
64
+
65
+ /* a variable name */
66
+ .var {
67
+ color: #c82829;
68
+ }
69
+
70
+ /* a function name */
71
+ .fun {
72
+ color: #4271ae;
73
+ }
74
+
75
+ /* Specify class=linenums on a pre to get line numbering */
76
+ ol.linenums {
77
+ margin-top: 0;
78
+ margin-bottom: 0;
79
+ }
package/g-read.mjs ADDED
@@ -0,0 +1,15 @@
1
+ import wdc from './src/WDataCsv.mjs'
2
+
3
+
4
+ let fp = './g-test-in.csv'
5
+ wdc.readCsv(fp)
6
+ .then((ltdt) => {
7
+ console.log(ltdt)
8
+ // => [ { NAME: 'Daffy Duck', AGE: '24' }, { NAME: 'Bugs 邦妮', AGE: '22' } ]
9
+ })
10
+ .catch((err) => {
11
+ console.log(err)
12
+ })
13
+
14
+
15
+ //node --experimental-modules --es-module-specifier-resolution=node g-read.mjs
package/g-test-in.csv ADDED
@@ -0,0 +1,3 @@
1
+ NAME,AGE
2
+ Daffy Duck,24
3
+ Bugs 邦妮,22
package/g-test-out.csv ADDED
@@ -0,0 +1,3 @@
1
+ "name","value"
2
+ "大福 Duck",2.4
3
+ "Bugs 邦妮","2.2"
package/g-write.mjs ADDED
@@ -0,0 +1,16 @@
1
+ import wdc from './src/WDataCsv.mjs'
2
+
3
+
4
+ let ltdt = [{ name: '大福 Duck', value: 2.4 }, { name: 'Bugs 邦妮', value: '2.2' }]
5
+ let fp = './g-test-out.csv'
6
+ wdc.writeCsv(fp, ltdt)
7
+ .then((res) => {
8
+ console.log(res)
9
+ // => finish
10
+ })
11
+ .catch((err) => {
12
+ console.log(err)
13
+ })
14
+
15
+
16
+ //node --experimental-modules --es-module-specifier-resolution=node g-write.mjs
package/package.json ADDED
@@ -0,0 +1,30 @@
1
+ {
2
+ "name": "w-data-csv",
3
+ "version": "1.0.0",
4
+ "main": "dist/w-data-csv.umd.js",
5
+ "dependencies": {
6
+ "csv-parser": "^3.0.0",
7
+ "lodash": "^4.17.21",
8
+ "strip-bom-stream": "^5.0.0",
9
+ "wsemi": "^1.6.60"
10
+ },
11
+ "devDependencies": {
12
+ "w-package-tools": "^1.0.65"
13
+ },
14
+ "scripts": {
15
+ "test": "mocha --parallel --timeout 60000 --experimental-modules --es-module-specifier-resolution=node",
16
+ "deploy": "gh-pages -d docs"
17
+ },
18
+ "repository": {
19
+ "type": "git",
20
+ "url": "git+https://github.com/yuda-lyu/w-data-csv.git"
21
+ },
22
+ "keywords": [
23
+ "package",
24
+ "tool",
25
+ "csv",
26
+ "nodejs"
27
+ ],
28
+ "author": "yuda-lyu(semisphere)",
29
+ "license": "MIT"
30
+ }
@@ -0,0 +1,173 @@
1
+ import fs from 'fs'
2
+ import csvParse from 'csv-parser'
3
+ import stripBom from 'strip-bom-stream'
4
+ import get from 'lodash/get'
5
+ import genPm from 'wsemi/src/genPm.mjs'
6
+ import ltdtkeysheads2mat from 'wsemi/src/ltdtkeysheads2mat.mjs'
7
+ import getCsvStrFromData from 'wsemi/src/getCsvStrFromData.mjs'
8
+
9
+
10
+ /**
11
+ * 讀取CSV檔,自動清除BOM
12
+ *
13
+ * @param {String} fp 輸入檔案位置字串
14
+ * @return {Promise} 回傳Promise,resolve回傳ltdt(各數據列為物件陣列),reject回傳錯誤訊息
15
+ * @example
16
+ *
17
+ * import wdc from './src/WDataCsv.mjs'
18
+ *
19
+ * let fp = './g-test-in.csv'
20
+ * wdc.readCsv(fp)
21
+ * .then((ltdt) => {
22
+ * console.log(ltdt)
23
+ * // => [ { NAME: 'Daffy Duck', AGE: '24' }, { NAME: 'Bugs 邦妮', AGE: '22' } ]
24
+ * })
25
+ * .catch((err) => {
26
+ * console.log(err)
27
+ * })
28
+ *
29
+ */
30
+ async function readCsv(fp) {
31
+ let res = []
32
+ let pm = genPm()
33
+ fs.createReadStream(fp)
34
+ .pipe(stripBom())
35
+ .pipe(csvParse())
36
+ .on('data', (data) => {
37
+ // console.log('data', data)
38
+ res.push(data)
39
+ })
40
+ .on('end', () => {
41
+ pm.resolve(res)
42
+ })
43
+ .on('error', (err) => {
44
+ pm.reject(err)
45
+ })
46
+ return pm
47
+ }
48
+
49
+
50
+ /**
51
+ * 輸出數據至CSV檔案
52
+ *
53
+ * @param {String} fp 輸入檔案位置字串
54
+ * @param {Array} data 輸入數據陣列,為mat或ltdt格式
55
+ * @param {Object} [opt={}] 輸入設定物件,預設{}
56
+ * @param {String} [opt.mode='ltdt'] 輸入數據格式字串,可選ltdt或mat,預設ltdt
57
+ * @param {Array} [opt.keys=[]] 輸入指定欲輸出鍵值陣列,預設[]
58
+ * @param {Object} [opt.kphead={}] 輸入指定鍵值轉換物件,預設{}
59
+ * @return {Promise} 回傳Promise,resolve回傳成功訊息,reject回傳錯誤訊息
60
+ * @example
61
+ *
62
+ * import wdc from './src/WDataCsv.mjs'
63
+ *
64
+ * let ltdt = [{ name: '大福 Duck', value: 2.4 }, { name: 'Bugs 邦妮', value: '2.2' }]
65
+ * let fp = './g-test-out.csv'
66
+ * wdc.writeCsv(fp, ltdt)
67
+ * .then((res) => {
68
+ * console.log(res)
69
+ * // => finish
70
+ * })
71
+ * .catch((err) => {
72
+ * console.log(err)
73
+ * })
74
+ *
75
+ */
76
+ async function writeCsv(fp, data, opt = {}) {
77
+ let err = null
78
+ let mat
79
+ let c = ''
80
+
81
+ //mode
82
+ let mode = get(opt, 'mode')
83
+ if (mode !== 'ltdt' && mode !== 'mat') {
84
+ mode = 'ltdt'
85
+ }
86
+
87
+ if (mode === 'mat') {
88
+
89
+ //save
90
+ mat = data
91
+
92
+ }
93
+ else if (mode === 'ltdt') {
94
+ try {
95
+
96
+ //save
97
+ let ltdt = data
98
+
99
+ //keys
100
+ let keys = get(opt, 'keys')
101
+
102
+ //kphead
103
+ let kphead = get(opt, 'kphead')
104
+
105
+ //ltdtkeysheads2mat
106
+ mat = ltdtkeysheads2mat(ltdt, keys, kphead)
107
+
108
+ }
109
+ catch (e) {
110
+ err = e.toString()
111
+ return Promise.reject(err)
112
+ }
113
+ }
114
+
115
+ //getCsvStrFromData
116
+ try {
117
+ c = getCsvStrFromData(mat)
118
+ }
119
+ catch (e) {
120
+ err = e.toString()
121
+ return Promise.reject(err)
122
+ }
123
+
124
+ //writeFileSync
125
+ try {
126
+ fs.writeFileSync(fp, c, 'utf8')
127
+ }
128
+ catch (e) {
129
+ err = e.toString()
130
+ return Promise.reject(err)
131
+ }
132
+
133
+ return 'finish'
134
+ }
135
+
136
+
137
+ /**
138
+ * 讀寫CSV檔
139
+ *
140
+ * @return {Object} 回傳物件,其內有readCsv與writeCsv函式
141
+ * @example
142
+ *
143
+ * import wdc from './src/WDataCsv.mjs'
144
+ *
145
+ * let fpIn = './g-test-in.csv'
146
+ * wdc.readCsv(fpIn)
147
+ * .then((ltdtIn) => {
148
+ * console.log(ltdtIn)
149
+ * // => [ { NAME: 'Daffy Duck', AGE: '24' }, { NAME: 'Bugs 邦妮', AGE: '22' } ]
150
+ * })
151
+ * .catch((err) => {
152
+ * console.log(err)
153
+ * })
154
+ *
155
+ * let ltdtOut = [{ name: '大福 Duck', value: 2.4 }, { name: 'Bugs 邦妮', value: '2.2' }]
156
+ * let fpOut = './g-test-out.csv'
157
+ * wdc.writeCsv(fpOut, ltdtOut)
158
+ * .then((res) => {
159
+ * console.log(res)
160
+ * // => finish
161
+ * })
162
+ * .catch((err) => {
163
+ * console.log(err)
164
+ * })
165
+ *
166
+ */
167
+ let WDataCsv = {
168
+ readCsv,
169
+ writeCsv,
170
+ }
171
+
172
+
173
+ export default WDataCsv
@@ -0,0 +1,125 @@
1
+ import assert from 'assert'
2
+ import WDataCsv from '../src/WDataCsv.mjs'
3
+
4
+
5
+ describe(`PCA`, function() {
6
+
7
+ let mat = [
8
+ [40, 50, 60],
9
+ [50, 70, 60],
10
+ [80, 70, 90],
11
+ [50, 60, 80]
12
+ ]
13
+ let clmat = [
14
+ [36.76572825085965, 50.81184119955175, 61.992939427698765],
15
+ [50.520478881706346, 69.86935352609807, 59.679283942385844],
16
+ [77.39502404588043, 70.65388036857387, 91.60517102143689],
17
+ [55.318768821553576, 58.66492490577632, 76.7226056084785]
18
+ ]
19
+
20
+ it(`should return '${JSON.stringify(clmat)}' when input ${JSON.stringify(mat)}, { nCompNIPALS: 2 }`, async function() {
21
+ let r = await WDataCsv.PCA(mat, { nCompNIPALS: 2 })
22
+ assert.strict.deepStrictEqual(r, clmat)
23
+ })
24
+
25
+ it(`should return 'Error: data is not eff. array' when input 123`, async function() {
26
+ let r = ''
27
+ await WDataCsv.PCA(123)
28
+ .catch((err) => {
29
+ r = err.toString()
30
+ })
31
+ let rr = 'Error: data is not eff. array'
32
+ assert.strict.deepStrictEqual(r, rr)
33
+ })
34
+
35
+ it(`should return 'Error: data is not eff. array' when input 123.456`, async function() {
36
+ let r = ''
37
+ await WDataCsv.PCA(123.456)
38
+ .catch((err) => {
39
+ r = err.toString()
40
+ })
41
+ let rr = 'Error: data is not eff. array'
42
+ assert.strict.deepStrictEqual(r, rr)
43
+ })
44
+
45
+ it(`should return 'Error: data is not eff. array' when input '123'`, async function() {
46
+ let r = ''
47
+ await WDataCsv.PCA('123')
48
+ .catch((err) => {
49
+ r = err.toString()
50
+ })
51
+ let rr = 'Error: data is not eff. array'
52
+ assert.strict.deepStrictEqual(r, rr)
53
+ })
54
+
55
+ it(`should return 'Error: data is not eff. array' when input '123.456'`, async function() {
56
+ let r = ''
57
+ await WDataCsv.PCA('123.456')
58
+ .catch((err) => {
59
+ r = err.toString()
60
+ })
61
+ let rr = 'Error: data is not eff. array'
62
+ assert.strict.deepStrictEqual(r, rr)
63
+ })
64
+
65
+ it(`should return 'Error: data is not eff. array' when input true`, async function() {
66
+ let r = ''
67
+ await WDataCsv.PCA(true)
68
+ .catch((err) => {
69
+ r = err.toString()
70
+ })
71
+ let rr = 'Error: data is not eff. array'
72
+ assert.strict.deepStrictEqual(r, rr)
73
+ })
74
+
75
+ it(`should return 'Error: data is not eff. array' when input ''`, async function() {
76
+ let r = ''
77
+ await WDataCsv.PCA('')
78
+ .catch((err) => {
79
+ r = err.toString()
80
+ })
81
+ let rr = 'Error: data is not eff. array'
82
+ assert.strict.deepStrictEqual(r, rr)
83
+ })
84
+
85
+ it(`should return 'Error: data is not eff. array' when input []`, async function() {
86
+ let r = ''
87
+ await WDataCsv.PCA([])
88
+ .catch((err) => {
89
+ r = err.toString()
90
+ })
91
+ let rr = 'Error: data is not eff. array'
92
+ assert.strict.deepStrictEqual(r, rr)
93
+ })
94
+
95
+ it(`should return 'Error: data is not eff. array' when input {}`, async function() {
96
+ let r = ''
97
+ await WDataCsv.PCA({})
98
+ .catch((err) => {
99
+ r = err.toString()
100
+ })
101
+ let rr = 'Error: data is not eff. array'
102
+ assert.strict.deepStrictEqual(r, rr)
103
+ })
104
+
105
+ it(`should return 'Error: data is not eff. array' when input null`, async function() {
106
+ let r = ''
107
+ await WDataCsv.PCA(null)
108
+ .catch((err) => {
109
+ r = err.toString()
110
+ })
111
+ let rr = 'Error: data is not eff. array'
112
+ assert.strict.deepStrictEqual(r, rr)
113
+ })
114
+
115
+ it(`should return 'Error: data is not eff. array' when input undefined`, async function() {
116
+ let r = ''
117
+ await WDataCsv.PCA(undefined)
118
+ .catch((err) => {
119
+ r = err.toString()
120
+ })
121
+ let rr = 'Error: data is not eff. array'
122
+ assert.strict.deepStrictEqual(r, rr)
123
+ })
124
+
125
+ })
@@ -0,0 +1,135 @@
1
+ import assert from 'assert'
2
+ import WDataCsv from '../src/WDataCsv.mjs'
3
+
4
+
5
+ describe(`cluster`, function() {
6
+
7
+ let mode = 'k-medoids'
8
+
9
+ let mat = [
10
+ [40, 50, 60],
11
+ [50, 70, 60],
12
+ [80, 70, 90],
13
+ [50, 60, 80]
14
+ ]
15
+ let clmat = { 'keys': null, 'ginds': [[2], [0, 1, 3]], 'gltdt': [[[80, 70, 90]], [[40, 50, 60], [50, 70, 60], [50, 60, 80]]], 'gmat': [[[77.39502404588043, 70.65388036857387, 91.60517102143689]], [[36.76572825085965, 50.81184119955175, 61.992939427698765], [50.520478881706346, 69.86935352609807, 59.679283942385844], [55.318768821553576, 58.66492490577632, 76.7226056084785]]] }
16
+
17
+ it(`should return '${JSON.stringify(clmat)}' when input ${JSON.stringify(mat)}, { mode, kNumber: 2, nCompNIPALS: 2 }`, async function() {
18
+ let r = await WDataCsv.cluster(mat, { mode, kNumber: 2, nCompNIPALS: 2 })
19
+ assert.strict.deepStrictEqual(r, clmat)
20
+ })
21
+
22
+ let ltdt = [
23
+ { name: 'Cameron', a: 40, b: 50, c: 60 },
24
+ { name: 'Buckley', a: 50, b: 70, c: 60 },
25
+ { name: 'Paul', a: 80, b: 70, c: 90 },
26
+ { name: 'Fawcett', a: 50, b: 60, c: 80 },
27
+ ]
28
+ let clltdt = { 'keys': ['a', 'b', 'c'], 'ginds': [[2], [0, 1, 3]], 'gltdt': [[{ 'name': 'Paul', 'a': 80, 'b': 70, 'c': 90 }], [{ 'name': 'Cameron', 'a': 40, 'b': 50, 'c': 60 }, { 'name': 'Buckley', 'a': 50, 'b': 70, 'c': 60 }, { 'name': 'Fawcett', 'a': 50, 'b': 60, 'c': 80 }]], 'gmat': [[[77.39502404588043, 70.65388036857387, 91.60517102143689]], [[36.76572825085965, 50.81184119955175, 61.992939427698765], [50.520478881706346, 69.86935352609807, 59.679283942385844], [55.318768821553576, 58.66492490577632, 76.7226056084785]]] }
29
+
30
+ it(`should return '${JSON.stringify(clltdt)}' when input ${JSON.stringify(ltdt)}, { mode, kNumber: 2, nCompNIPALS: 2 }`, async function() {
31
+ let r = await WDataCsv.cluster(ltdt, { mode, kNumber: 2, nCompNIPALS: 2 })
32
+ assert.strict.deepStrictEqual(r, clltdt)
33
+ })
34
+
35
+ it(`should return 'Error: data is not eff. array' when input 123`, async function() {
36
+ let r = ''
37
+ await WDataCsv.cluster(123)
38
+ .catch((err) => {
39
+ r = err.toString()
40
+ })
41
+ let rr = 'Error: data is not eff. array'
42
+ assert.strict.deepStrictEqual(r, rr)
43
+ })
44
+
45
+ it(`should return 'Error: data is not eff. array' when input 123.456`, async function() {
46
+ let r = ''
47
+ await WDataCsv.cluster(123.456)
48
+ .catch((err) => {
49
+ r = err.toString()
50
+ })
51
+ let rr = 'Error: data is not eff. array'
52
+ assert.strict.deepStrictEqual(r, rr)
53
+ })
54
+
55
+ it(`should return 'Error: data is not eff. array' when input '123'`, async function() {
56
+ let r = ''
57
+ await WDataCsv.cluster('123')
58
+ .catch((err) => {
59
+ r = err.toString()
60
+ })
61
+ let rr = 'Error: data is not eff. array'
62
+ assert.strict.deepStrictEqual(r, rr)
63
+ })
64
+
65
+ it(`should return 'Error: data is not eff. array' when input '123.456'`, async function() {
66
+ let r = ''
67
+ await WDataCsv.cluster('123.456')
68
+ .catch((err) => {
69
+ r = err.toString()
70
+ })
71
+ let rr = 'Error: data is not eff. array'
72
+ assert.strict.deepStrictEqual(r, rr)
73
+ })
74
+
75
+ it(`should return 'Error: data is not eff. array' when input true`, async function() {
76
+ let r = ''
77
+ await WDataCsv.cluster(true)
78
+ .catch((err) => {
79
+ r = err.toString()
80
+ })
81
+ let rr = 'Error: data is not eff. array'
82
+ assert.strict.deepStrictEqual(r, rr)
83
+ })
84
+
85
+ it(`should return 'Error: data is not eff. array' when input ''`, async function() {
86
+ let r = ''
87
+ await WDataCsv.cluster('')
88
+ .catch((err) => {
89
+ r = err.toString()
90
+ })
91
+ let rr = 'Error: data is not eff. array'
92
+ assert.strict.deepStrictEqual(r, rr)
93
+ })
94
+
95
+ it(`should return 'Error: data is not eff. array' when input []`, async function() {
96
+ let r = ''
97
+ await WDataCsv.cluster([])
98
+ .catch((err) => {
99
+ r = err.toString()
100
+ })
101
+ let rr = 'Error: data is not eff. array'
102
+ assert.strict.deepStrictEqual(r, rr)
103
+ })
104
+
105
+ it(`should return 'Error: data is not eff. array' when input {}`, async function() {
106
+ let r = ''
107
+ await WDataCsv.cluster({})
108
+ .catch((err) => {
109
+ r = err.toString()
110
+ })
111
+ let rr = 'Error: data is not eff. array'
112
+ assert.strict.deepStrictEqual(r, rr)
113
+ })
114
+
115
+ it(`should return 'Error: data is not eff. array' when input null`, async function() {
116
+ let r = ''
117
+ await WDataCsv.cluster(null)
118
+ .catch((err) => {
119
+ r = err.toString()
120
+ })
121
+ let rr = 'Error: data is not eff. array'
122
+ assert.strict.deepStrictEqual(r, rr)
123
+ })
124
+
125
+ it(`should return 'Error: data is not eff. array' when input undefined`, async function() {
126
+ let r = ''
127
+ await WDataCsv.cluster(undefined)
128
+ .catch((err) => {
129
+ r = err.toString()
130
+ })
131
+ let rr = 'Error: data is not eff. array'
132
+ assert.strict.deepStrictEqual(r, rr)
133
+ })
134
+
135
+ })
@@ -0,0 +1,4 @@
1
+ import addVersion from 'w-package-tools/src/addVersion.mjs'
2
+
3
+
4
+ addVersion()
@@ -0,0 +1,4 @@
1
+ import cleanFolder from 'w-package-tools/src/cleanFolder.mjs'
2
+
3
+
4
+ cleanFolder('docs')
@@ -0,0 +1,38 @@
1
+ // import path from 'path'
2
+ import rollupFiles from 'w-package-tools/src/rollupFiles.mjs'
3
+
4
+
5
+ let fdSrc = './src'
6
+ let fdTar = './dist'
7
+
8
+
9
+ async function rp() {
10
+
11
+ await rollupFiles({ //rollupFiles預設會clean folder
12
+ fns: 'WDataCsv.mjs',
13
+ fdSrc,
14
+ fdTar,
15
+ nameDistType: 'kebabCase',
16
+ // bNodePolyfill: true,
17
+ // bMinify: false,
18
+ globals: {
19
+ 'fs': 'fs',
20
+ 'csv-parser': 'csv-parser',
21
+ 'strip-bom-stream': 'strip-bom-stream',
22
+ },
23
+ external: [
24
+ 'fs',
25
+ 'csv-parser',
26
+ 'strip-bom-stream',
27
+ ],
28
+ })
29
+ .catch((err) => {
30
+ console.log(err)
31
+ })
32
+
33
+ }
34
+ rp()
35
+ .catch((err) => {
36
+ console.log(err)
37
+ })
38
+
@@ -0,0 +1,48 @@
1
+ import fs from 'fs'
2
+ import _ from 'lodash'
3
+ import getFiles from 'w-package-tools/src/getFiles.mjs'
4
+ import getPks from 'w-package-tools/src/getPks.mjs'
5
+
6
+
7
+ let fdSrc = './examples/'
8
+ let fdTar = './docs/examples/'
9
+
10
+
11
+ function main() {
12
+ //把example裡面cdn更換, 再複製到docs的example內, 作為日後發佈為靜態網站
13
+
14
+ //pks
15
+ let pks = getPks()
16
+
17
+ //url
18
+ let url = `https://cdn.jsdelivr.net/npm/w-data-csv@${pks.version}/dist/w-data-csv.umd.js`
19
+
20
+ //mkdirSync
21
+ if (!fs.existsSync(fdTar)) {
22
+ fs.mkdirSync(fdTar)
23
+ }
24
+
25
+ //getFiles
26
+ let ltfs = getFiles(fdSrc)
27
+
28
+ _.each(ltfs, function(v) {
29
+
30
+ //fn
31
+ let fn = fdSrc + v
32
+
33
+ //c
34
+ let c = fs.readFileSync(fn, 'utf8')
35
+
36
+ //replace
37
+ let r
38
+ r = `../dist/w-data-csv.umd.js`
39
+ c = c.replace(r, url)
40
+
41
+ //write
42
+ //console.log(c)
43
+ fs.writeFileSync(fdTar + v, c, 'utf8')
44
+
45
+ })
46
+
47
+ }
48
+ // main()
@@ -0,0 +1,4 @@
1
+ import modifyReadme from 'w-package-tools/src/modifyReadme.mjs'
2
+
3
+
4
+ modifyReadme()