@cosmotech/core 1.11.6 → 1.13.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/CHANGELOG.md +16 -0
- package/dist/index.cjs.js +325 -37
- package/dist/index.esm.js +325 -37
- package/package.json +3 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,19 @@
|
|
|
1
|
+
## **1.13.0** <sub><sup>2023-09-22 (9dd046f...45122b9)</sup></sub>
|
|
2
|
+
|
|
3
|
+
### Features
|
|
4
|
+
|
|
5
|
+
- add utils functions for dates and timezones ([f784395](https://github.com/Cosmo-Tech/webapp-component-core/commit/f784395))
|
|
6
|
+
|
|
7
|
+
## **1.12.0** <sub><sup>2023-09-05 (e96188d...05e2b63)</sup></sub>
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
- add new function getFlattenColumnsWithoutGroups ([e96188d](https://github.com/Cosmo-Tech/webapp-component-core/commit/e96188d))
|
|
12
|
+
|
|
13
|
+
### Bug Fixes
|
|
14
|
+
|
|
15
|
+
- fix import & export of CSV/XLSX files when some columns are grouped ([193ac62](https://github.com/Cosmo-Tech/webapp-component-core/commit/193ac62))
|
|
16
|
+
|
|
1
17
|
## **1.11.6** <sub><sup>2023-08-28 (a1a83d2...a1a83d2)</sup></sub>
|
|
2
18
|
|
|
3
19
|
### Bug Fixes
|
package/dist/index.cjs.js
CHANGED
|
@@ -3985,7 +3985,7 @@ var pdre1 = /^(\d+):(\d+)(:\d+)?(\.\d+)?$/; // HH:MM[:SS[.UUU]]
|
|
|
3985
3985
|
var pdre2 = /^(\d+)-(\d+)-(\d+)$/; // YYYY-mm-dd
|
|
3986
3986
|
var pdre3 = /^(\d+)-(\d+)-(\d+)[T ](\d+):(\d+)(:\d+)?(\.\d+)?$/; // YYYY-mm-dd(T or space)HH:MM[:SS[.UUU]], sans "Z"
|
|
3987
3987
|
/* parses a date string as a UTC date */
|
|
3988
|
-
function parseDate(str/*:string*/, date1904/*:boolean*/)/*:Date*/ {
|
|
3988
|
+
function parseDate$1(str/*:string*/, date1904/*:boolean*/)/*:Date*/ {
|
|
3989
3989
|
if(str instanceof Date) return str;
|
|
3990
3990
|
var m = str.match(pdre1);
|
|
3991
3991
|
if(m) return new Date((date1904 ? dnthresh2 : dnthresh1) + ((parseInt(m[1], 10)*60 + parseInt(m[2], 10))*60 + (m[3] ? parseInt(m[3].slice(1), 10) : 0))*1000 + (m[4] ? parseInt((m[4]+"000").slice(1,4), 10) : 0));
|
|
@@ -6203,7 +6203,7 @@ function parse_core_props(data) {
|
|
|
6203
6203
|
for(var i = 0; i < CORE_PROPS.length; ++i) {
|
|
6204
6204
|
var f = CORE_PROPS[i], cur = data.match(CORE_PROPS_REGEX[i]);
|
|
6205
6205
|
if(cur != null && cur.length > 0) p[f[1]] = unescapexml(cur[1]);
|
|
6206
|
-
if(f[2] === 'date' && p[f[1]]) p[f[1]] = parseDate(p[f[1]]);
|
|
6206
|
+
if(f[2] === 'date' && p[f[1]]) p[f[1]] = parseDate$1(p[f[1]]);
|
|
6207
6207
|
}
|
|
6208
6208
|
|
|
6209
6209
|
return p;
|
|
@@ -6389,7 +6389,7 @@ function parse_cust_props(data/*:string*/, opts) {
|
|
|
6389
6389
|
p[name] = parseFloat(text);
|
|
6390
6390
|
break;
|
|
6391
6391
|
case 'filetime': case 'date':
|
|
6392
|
-
p[name] = parseDate(text);
|
|
6392
|
+
p[name] = parseDate$1(text);
|
|
6393
6393
|
break;
|
|
6394
6394
|
case 'cy': case 'error':
|
|
6395
6395
|
p[name] = unescapexml(text);
|
|
@@ -6754,7 +6754,7 @@ function parse_PropertySet(blob, PIDSI) {
|
|
|
6754
6754
|
case 0x13 /*VT_UI4*/: blob.l += 4; val = blob.read_shift(4); break;
|
|
6755
6755
|
case 0x05 /*VT_R8*/: blob.l += 4; val = blob.read_shift(8, 'f'); break;
|
|
6756
6756
|
case 0x0B /*VT_BOOL*/: blob.l += 4; val = parsebool(blob, 4); break;
|
|
6757
|
-
case 0x40 /*VT_FILETIME*/: blob.l += 4; val = parseDate(parse_FILETIME(blob)); break;
|
|
6757
|
+
case 0x40 /*VT_FILETIME*/: blob.l += 4; val = parseDate$1(parse_FILETIME(blob)); break;
|
|
6758
6758
|
default: throw new Error("unparsed value: " + blob[blob.l]);
|
|
6759
6759
|
}
|
|
6760
6760
|
PropH[name] = val;
|
|
@@ -8930,7 +8930,7 @@ var SYLK = /*#__PURE__*/(function() {
|
|
|
8930
8930
|
if(cell.f && !cell.F) o += ";E" + a1_to_rc(cell.f, {r:R, c:C}); break;
|
|
8931
8931
|
case 'b': o += cell.v ? "TRUE" : "FALSE"; break;
|
|
8932
8932
|
case 'e': o += cell.w || cell.v; break;
|
|
8933
|
-
case 'd': o += datenum(parseDate(cell.v, date1904), date1904); break;
|
|
8933
|
+
case 'd': o += datenum(parseDate$1(cell.v, date1904), date1904); break;
|
|
8934
8934
|
case 's': o += '"' + (cell.v == null ? "" : String(cell.v)).replace(/"/g,"").replace(/;/g, ";;") + '"'; break;
|
|
8935
8935
|
}
|
|
8936
8936
|
return o;
|
|
@@ -9053,7 +9053,7 @@ var DIF = /*#__PURE__*/(function() {
|
|
|
9053
9053
|
else if(data === 'FALSE') arr[R][C] = false;
|
|
9054
9054
|
else if(!isNaN(fuzzynum(value))) arr[R][C] = fuzzynum(value);
|
|
9055
9055
|
else if(!isNaN(fuzzydate(value).getDate())) {
|
|
9056
|
-
arr[R][C] = parseDate(value);
|
|
9056
|
+
arr[R][C] = parseDate$1(value);
|
|
9057
9057
|
if(!(opts && opts.UTC)) { arr[R][C] = utc_to_local(arr[R][C]); }
|
|
9058
9058
|
}
|
|
9059
9059
|
else arr[R][C] = value;
|
|
@@ -9111,7 +9111,7 @@ var DIF = /*#__PURE__*/(function() {
|
|
|
9111
9111
|
p +=(make_value_str((isNaN(+cell.v)) ? cell.v : '="' + cell.v + '"'));
|
|
9112
9112
|
break;
|
|
9113
9113
|
case 'd':
|
|
9114
|
-
if(!cell.w) cell.w = SSF_format(cell.z || table_fmt[14], datenum(parseDate(cell.v)));
|
|
9114
|
+
if(!cell.w) cell.w = SSF_format(cell.z || table_fmt[14], datenum(parseDate$1(cell.v)));
|
|
9115
9115
|
p +=(make_value(cell.w, "V"));
|
|
9116
9116
|
break;
|
|
9117
9117
|
default: p +=("1,0\r\n\"\"");
|
|
@@ -9202,7 +9202,7 @@ var ETH = /*#__PURE__*/(function() {
|
|
|
9202
9202
|
oo[5] = encode(cell.f||(cell.v?'TRUE':'FALSE'));
|
|
9203
9203
|
break;
|
|
9204
9204
|
case 'd':
|
|
9205
|
-
var t = datenum(parseDate(cell.v));
|
|
9205
|
+
var t = datenum(parseDate$1(cell.v));
|
|
9206
9206
|
oo[2] = 'vtc'; oo[3] = 'nd'; oo[4] = ""+t;
|
|
9207
9207
|
oo[5] = cell.w || SSF_format(cell.z || table_fmt[14], t);
|
|
9208
9208
|
break;
|
|
@@ -9236,7 +9236,7 @@ var PRN = /*#__PURE__*/(function() {
|
|
|
9236
9236
|
else if(data === 'TRUE') arr[R][C] = true;
|
|
9237
9237
|
else if(data === 'FALSE') arr[R][C] = false;
|
|
9238
9238
|
else if(!isNaN(fuzzynum(data))) arr[R][C] = fuzzynum(data);
|
|
9239
|
-
else if(!isNaN(fuzzydate(data).getDate())) arr[R][C] = parseDate(data);
|
|
9239
|
+
else if(!isNaN(fuzzydate(data).getDate())) arr[R][C] = parseDate$1(data);
|
|
9240
9240
|
else arr[R][C] = data;
|
|
9241
9241
|
}
|
|
9242
9242
|
|
|
@@ -9347,7 +9347,7 @@ var PRN = /*#__PURE__*/(function() {
|
|
|
9347
9347
|
else if(!isNaN(v = fuzzynum(s))) { cell.t = 'n'; cell.v = v; }
|
|
9348
9348
|
else if(!isNaN((v = fuzzydate(s)).getDate()) || _re && s.match(_re)) {
|
|
9349
9349
|
cell.z = o.dateNF || table_fmt[14];
|
|
9350
|
-
if(_re && s.match(_re)){ var news=dateNF_fix(s, o.dateNF, (s.match(_re)||[])); v = parseDate(news); if(o && o.UTC === false) v = utc_to_local(v); }
|
|
9350
|
+
if(_re && s.match(_re)){ var news=dateNF_fix(s, o.dateNF, (s.match(_re)||[])); v = parseDate$1(news); if(o && o.UTC === false) v = utc_to_local(v); }
|
|
9351
9351
|
else if(o && o.UTC === false) v = utc_to_local(v);
|
|
9352
9352
|
else if(o.cellText !== false && o.dateNF) cell.w = SSF_format(cell.z, v);
|
|
9353
9353
|
if(o.cellDates) { cell.t = 'd'; cell.v = v; }
|
|
@@ -16044,7 +16044,7 @@ function safe_format(p/*:Cell*/, fmtid/*:number*/, fillid/*:?number*/, opts, the
|
|
|
16044
16044
|
if(opts.cellNF) p.z = table_fmt[fmtid];
|
|
16045
16045
|
} catch(e) { if(opts.WTF) throw e; }
|
|
16046
16046
|
if(p.t === 'z' && !opts.cellStyles) return;
|
|
16047
|
-
if(p.t === 'd' && typeof p.v === 'string') p.v = parseDate(p.v);
|
|
16047
|
+
if(p.t === 'd' && typeof p.v === 'string') p.v = parseDate$1(p.v);
|
|
16048
16048
|
if((!opts || opts.cellText !== false) && p.t !== 'z') try {
|
|
16049
16049
|
if(table_fmt[fmtid] == null) SSF__load(SSFImplicit[fmtid] || "General", fmtid);
|
|
16050
16050
|
if(p.t === 'e') p.w = p.w || BErr[p.v];
|
|
@@ -16361,13 +16361,13 @@ function write_ws_xml_cell(cell/*:Cell*/, ref, ws, opts, idx, wb, date1904)/*:st
|
|
|
16361
16361
|
case 'e': vv = BErr[cell.v]; break;
|
|
16362
16362
|
case 'd':
|
|
16363
16363
|
if(opts && opts.cellDates) {
|
|
16364
|
-
var _vv = parseDate(cell.v, date1904);
|
|
16364
|
+
var _vv = parseDate$1(cell.v, date1904);
|
|
16365
16365
|
vv = _vv.toISOString();
|
|
16366
16366
|
if(_vv.getUTCFullYear() < 1900) vv = vv.slice(vv.indexOf("T") + 1).replace("Z","");
|
|
16367
16367
|
} else {
|
|
16368
16368
|
cell = dup(cell);
|
|
16369
16369
|
cell.t = 'n';
|
|
16370
|
-
vv = ''+(cell.v = datenum(parseDate(cell.v, date1904), date1904));
|
|
16370
|
+
vv = ''+(cell.v = datenum(parseDate$1(cell.v, date1904), date1904));
|
|
16371
16371
|
}
|
|
16372
16372
|
if(typeof cell.z === 'undefined') cell.z = table_fmt[14];
|
|
16373
16373
|
break;
|
|
@@ -16566,8 +16566,8 @@ return function parse_ws_xml_data(sdata/*:string*/, s, opts, guess/*:Range*/, th
|
|
|
16566
16566
|
break;
|
|
16567
16567
|
case 'b': p.v = parsexmlbool(p.v); break;
|
|
16568
16568
|
case 'd':
|
|
16569
|
-
if(opts.cellDates) p.v = parseDate(p.v, date1904);
|
|
16570
|
-
else { p.v = datenum(parseDate(p.v, date1904), date1904); p.t = 'n'; }
|
|
16569
|
+
if(opts.cellDates) p.v = parseDate$1(p.v, date1904);
|
|
16570
|
+
else { p.v = datenum(parseDate$1(p.v, date1904), date1904); p.t = 'n'; }
|
|
16571
16571
|
break;
|
|
16572
16572
|
/* error string in .w, number in .v */
|
|
16573
16573
|
case 'e':
|
|
@@ -17589,7 +17589,7 @@ function write_ws_bin_cell(ba/*:BufArray*/, cell/*:Cell*/, R/*:number*/, C/*:num
|
|
|
17589
17589
|
case 'd': // no BrtCellDate :(
|
|
17590
17590
|
cell = dup(cell);
|
|
17591
17591
|
cell.z = cell.z || table_fmt[14];
|
|
17592
|
-
cell.v = datenum(parseDate(cell.v, date1904), date1904); cell.t = 'n';
|
|
17592
|
+
cell.v = datenum(parseDate$1(cell.v, date1904), date1904); cell.t = 'n';
|
|
17593
17593
|
break;
|
|
17594
17594
|
/* falls through */
|
|
17595
17595
|
case 'n': case 'e': vv = ''+cell.v; break;
|
|
@@ -18826,7 +18826,7 @@ function xlml_set_custprop(Custprops, key, cp, val/*:string*/) {
|
|
|
18826
18826
|
case "boolean": oval = parsexmlbool(val); break;
|
|
18827
18827
|
case "i2": case "int": oval = parseInt(val, 10); break;
|
|
18828
18828
|
case "r4": case "float": oval = parseFloat(val); break;
|
|
18829
|
-
case "date": case "dateTime.tz": oval = parseDate(val); break;
|
|
18829
|
+
case "date": case "dateTime.tz": oval = parseDate$1(val); break;
|
|
18830
18830
|
case "i8": case "string": case "fixed": case "uuid": case "bin.base64": break;
|
|
18831
18831
|
default: throw new Error("bad custprop:" + cp[0]);
|
|
18832
18832
|
}
|
|
@@ -18889,7 +18889,7 @@ function parse_xlml_data(xml, ss, data, cell/*:any*/, base, styles, csty, row, a
|
|
|
18889
18889
|
break;
|
|
18890
18890
|
case 'DateTime':
|
|
18891
18891
|
if(xml.slice(-1) != "Z") xml += "Z";
|
|
18892
|
-
cell.v = datenum(parseDate(xml, date1904), date1904);
|
|
18892
|
+
cell.v = datenum(parseDate$1(xml, date1904), date1904);
|
|
18893
18893
|
if(cell.v !== cell.v) cell.v = unescapexml(xml);
|
|
18894
18894
|
if(!nf || nf == "General") nf = "yyyy-mm-dd";
|
|
18895
18895
|
/* falls through */
|
|
@@ -22169,7 +22169,7 @@ function write_ws_biff2_cell(ba/*:BufArray*/, cell/*:Cell*/, R/*:number*/, C/*:n
|
|
|
22169
22169
|
}
|
|
22170
22170
|
if(cell.v != null) switch(cell.t) {
|
|
22171
22171
|
case 'd': case 'n':
|
|
22172
|
-
var v = cell.t == 'd' ? datenum(parseDate(cell.v, date1904), date1904) : cell.v;
|
|
22172
|
+
var v = cell.t == 'd' ? datenum(parseDate$1(cell.v, date1904), date1904) : cell.v;
|
|
22173
22173
|
if(opts.biff == 2 && (v == (v|0)) && (v >= 0) && (v < 65536))
|
|
22174
22174
|
// 0x027E (RK) in BIFF3/4
|
|
22175
22175
|
write_biff_rec(ba, 0x0002, write_BIFF2INT(R, C, v, ixfe, ifmt));
|
|
@@ -22579,7 +22579,7 @@ function write_ws_biff8_cell(ba/*:BufArray*/, cell/*:Cell*/, R/*:number*/, C/*:n
|
|
|
22579
22579
|
if(cell.bf) write_biff_rec(ba, 0x0006 /* Formula */, write_Formula(cell, R, C, opts, os));
|
|
22580
22580
|
else switch(cell.t) {
|
|
22581
22581
|
case 'd': case 'n':
|
|
22582
|
-
var v = cell.t == 'd' ? datenum(parseDate(cell.v, date1904), date1904) : cell.v;
|
|
22582
|
+
var v = cell.t == 'd' ? datenum(parseDate$1(cell.v, date1904), date1904) : cell.v;
|
|
22583
22583
|
if(isNaN(v)) write_biff_rec(ba, 0x0205 /* BoolErr */, write_BoolErr(R, C, 0x24, os, opts, "e")); // #NUM!
|
|
22584
22584
|
else if(!isFinite(v)) write_biff_rec(ba, 0x0205 /* BoolErr */, write_BoolErr(R, C, 0x07, os, opts, "e")); // #DIV/0!
|
|
22585
22585
|
/* TODO: emit RK as appropriate */
|
|
@@ -22853,7 +22853,7 @@ function html_to_sheet(str/*:string*/, _opts)/*:Workbook*/ {
|
|
|
22853
22853
|
else if(m === 'FALSE') o = {t:'b', v:false};
|
|
22854
22854
|
else if(!isNaN(fuzzynum(m))) o = {t:'n', v:fuzzynum(m)};
|
|
22855
22855
|
else if(!isNaN(fuzzydate(m).getDate())) {
|
|
22856
|
-
o = ({t:'d', v:parseDate(m)}/*:any*/);
|
|
22856
|
+
o = ({t:'d', v:parseDate$1(m)}/*:any*/);
|
|
22857
22857
|
if(opts.UTC === false) o.v = utc_to_local(o.v);
|
|
22858
22858
|
if(!opts.cellDates) o = ({t:'n', v:datenum(o.v)}/*:any*/);
|
|
22859
22859
|
o.z = opts.dateNF || table_fmt[14];
|
|
@@ -22998,7 +22998,7 @@ function sheet_add_dom(ws/*:Worksheet*/, table/*:HTMLElement*/, _opts/*:?any*/)/
|
|
|
22998
22998
|
else if(v === 'FALSE') o = {t:'b', v:false};
|
|
22999
22999
|
else if(!isNaN(fuzzynum(v))) o = {t:'n', v:fuzzynum(v)};
|
|
23000
23000
|
else if(!isNaN(fuzzydate(v).getDate())) {
|
|
23001
|
-
o = ({t:'d', v:parseDate(v)}/*:any*/);
|
|
23001
|
+
o = ({t:'d', v:parseDate$1(v)}/*:any*/);
|
|
23002
23002
|
if(opts.UTC) o.v = local_to_utc(o.v);
|
|
23003
23003
|
if(!opts.cellDates) o = ({t:'n', v:datenum(o.v)}/*:any*/);
|
|
23004
23004
|
o.z = opts.dateNF || table_fmt[14];
|
|
@@ -23428,7 +23428,7 @@ function parse_content_xml(d/*:string*/, _opts, _nfm)/*:Workbook*/ {
|
|
|
23428
23428
|
break;
|
|
23429
23429
|
case 'percentage': q.t = 'n'; q.v = parseFloat(ctag.value); break;
|
|
23430
23430
|
case 'currency': q.t = 'n'; q.v = parseFloat(ctag.value); break;
|
|
23431
|
-
case 'date': q.t = 'd'; q.v = parseDate(ctag['date-value'], WB.WBProps.date1904);
|
|
23431
|
+
case 'date': q.t = 'd'; q.v = parseDate$1(ctag['date-value'], WB.WBProps.date1904);
|
|
23432
23432
|
if(!opts.cellDates) { q.t = 'n'; q.v = datenum(q.v, WB.WBProps.date1904); }
|
|
23433
23433
|
if(!q.z) q.z = 'm/d/yy'; break;
|
|
23434
23434
|
/* NOTE: for `time`, Excel ODS export incorrectly uses durations relative to 1900 epoch even if 1904 is specified */
|
|
@@ -24114,9 +24114,9 @@ var write_content_ods/*:{(wb:any, opts:any):string}*/ = /* @__PURE__ */(function
|
|
|
24114
24114
|
ct['office:value-type'] = "string";
|
|
24115
24115
|
break;
|
|
24116
24116
|
case 'd':
|
|
24117
|
-
textp = (cell.w||(parseDate(cell.v, date1904).toISOString()));
|
|
24117
|
+
textp = (cell.w||(parseDate$1(cell.v, date1904).toISOString()));
|
|
24118
24118
|
ct['office:value-type'] = "date";
|
|
24119
|
-
ct['office:date-value'] = (parseDate(cell.v, date1904).toISOString());
|
|
24119
|
+
ct['office:date-value'] = (parseDate$1(cell.v, date1904).toISOString());
|
|
24120
24120
|
ct['table:style-name'] = "ce1";
|
|
24121
24121
|
break;
|
|
24122
24122
|
//case 'e': // TODO: translate to ODS errors
|
|
@@ -30680,7 +30680,7 @@ function normalizeTwoDigitYear(twoDigitYear, currentYear) {
|
|
|
30680
30680
|
}
|
|
30681
30681
|
return isCommonEra ? result : 1 - result;
|
|
30682
30682
|
}
|
|
30683
|
-
function isLeapYearIndex(year) {
|
|
30683
|
+
function isLeapYearIndex$1(year) {
|
|
30684
30684
|
return year % 400 === 0 || year % 4 === 0 && year % 100 !== 0;
|
|
30685
30685
|
}
|
|
30686
30686
|
|
|
@@ -31319,7 +31319,7 @@ var DateParser = /*#__PURE__*/function (_Parser) {
|
|
|
31319
31319
|
key: "validate",
|
|
31320
31320
|
value: function validate(date, value) {
|
|
31321
31321
|
var year = date.getUTCFullYear();
|
|
31322
|
-
var isLeapYear = isLeapYearIndex(year);
|
|
31322
|
+
var isLeapYear = isLeapYearIndex$1(year);
|
|
31323
31323
|
var month = date.getUTCMonth();
|
|
31324
31324
|
if (isLeapYear) {
|
|
31325
31325
|
return value >= 1 && value <= DAYS_IN_MONTH_LEAP_YEAR[month];
|
|
@@ -31372,7 +31372,7 @@ var DayOfYearParser = /*#__PURE__*/function (_Parser) {
|
|
|
31372
31372
|
key: "validate",
|
|
31373
31373
|
value: function validate(date, value) {
|
|
31374
31374
|
var year = date.getUTCFullYear();
|
|
31375
|
-
var isLeapYear = isLeapYearIndex(year);
|
|
31375
|
+
var isLeapYear = isLeapYearIndex$1(year);
|
|
31376
31376
|
if (isLeapYear) {
|
|
31377
31377
|
return value >= 1 && value <= 366;
|
|
31378
31378
|
} else {
|
|
@@ -33274,9 +33274,256 @@ function isMatch(dateString, formatString, options) {
|
|
|
33274
33274
|
return isValid$2(parse$1(dateString, formatString, new Date(), options));
|
|
33275
33275
|
}
|
|
33276
33276
|
|
|
33277
|
+
/**
|
|
33278
|
+
* @name parseISO
|
|
33279
|
+
* @category Common Helpers
|
|
33280
|
+
* @summary Parse ISO string
|
|
33281
|
+
*
|
|
33282
|
+
* @description
|
|
33283
|
+
* Parse the given string in ISO 8601 format and return an instance of Date.
|
|
33284
|
+
*
|
|
33285
|
+
* Function accepts complete ISO 8601 formats as well as partial implementations.
|
|
33286
|
+
* ISO 8601: http://en.wikipedia.org/wiki/ISO_8601
|
|
33287
|
+
*
|
|
33288
|
+
* If the argument isn't a string, the function cannot parse the string or
|
|
33289
|
+
* the values are invalid, it returns Invalid Date.
|
|
33290
|
+
*
|
|
33291
|
+
* @param {String} argument - the value to convert
|
|
33292
|
+
* @param {Object} [options] - an object with options.
|
|
33293
|
+
* @param {0|1|2} [options.additionalDigits=2] - the additional number of digits in the extended year format
|
|
33294
|
+
* @returns {Date} the parsed date in the local time zone
|
|
33295
|
+
* @throws {TypeError} 1 argument required
|
|
33296
|
+
* @throws {RangeError} `options.additionalDigits` must be 0, 1 or 2
|
|
33297
|
+
*
|
|
33298
|
+
* @example
|
|
33299
|
+
* // Convert string '2014-02-11T11:30:30' to date:
|
|
33300
|
+
* const result = parseISO('2014-02-11T11:30:30')
|
|
33301
|
+
* //=> Tue Feb 11 2014 11:30:30
|
|
33302
|
+
*
|
|
33303
|
+
* @example
|
|
33304
|
+
* // Convert string '+02014101' to date,
|
|
33305
|
+
* // if the additional number of digits in the extended year format is 1:
|
|
33306
|
+
* const result = parseISO('+02014101', { additionalDigits: 1 })
|
|
33307
|
+
* //=> Fri Apr 11 2014 00:00:00
|
|
33308
|
+
*/
|
|
33309
|
+
function parseISO$1(argument, options) {
|
|
33310
|
+
var _options$additionalDi;
|
|
33311
|
+
requiredArgs(1, arguments);
|
|
33312
|
+
var additionalDigits = toInteger((_options$additionalDi = options === null || options === void 0 ? void 0 : options.additionalDigits) !== null && _options$additionalDi !== void 0 ? _options$additionalDi : 2);
|
|
33313
|
+
if (additionalDigits !== 2 && additionalDigits !== 1 && additionalDigits !== 0) {
|
|
33314
|
+
throw new RangeError('additionalDigits must be 0, 1 or 2');
|
|
33315
|
+
}
|
|
33316
|
+
if (!(typeof argument === 'string' || Object.prototype.toString.call(argument) === '[object String]')) {
|
|
33317
|
+
return new Date(NaN);
|
|
33318
|
+
}
|
|
33319
|
+
var dateStrings = splitDateString(argument);
|
|
33320
|
+
var date;
|
|
33321
|
+
if (dateStrings.date) {
|
|
33322
|
+
var parseYearResult = parseYear(dateStrings.date, additionalDigits);
|
|
33323
|
+
date = parseDate(parseYearResult.restDateString, parseYearResult.year);
|
|
33324
|
+
}
|
|
33325
|
+
if (!date || isNaN(date.getTime())) {
|
|
33326
|
+
return new Date(NaN);
|
|
33327
|
+
}
|
|
33328
|
+
var timestamp = date.getTime();
|
|
33329
|
+
var time = 0;
|
|
33330
|
+
var offset;
|
|
33331
|
+
if (dateStrings.time) {
|
|
33332
|
+
time = parseTime(dateStrings.time);
|
|
33333
|
+
if (isNaN(time)) {
|
|
33334
|
+
return new Date(NaN);
|
|
33335
|
+
}
|
|
33336
|
+
}
|
|
33337
|
+
if (dateStrings.timezone) {
|
|
33338
|
+
offset = parseTimezone(dateStrings.timezone);
|
|
33339
|
+
if (isNaN(offset)) {
|
|
33340
|
+
return new Date(NaN);
|
|
33341
|
+
}
|
|
33342
|
+
} else {
|
|
33343
|
+
var dirtyDate = new Date(timestamp + time);
|
|
33344
|
+
// js parsed string assuming it's in UTC timezone
|
|
33345
|
+
// but we need it to be parsed in our timezone
|
|
33346
|
+
// so we use utc values to build date in our timezone.
|
|
33347
|
+
// Year values from 0 to 99 map to the years 1900 to 1999
|
|
33348
|
+
// so set year explicitly with setFullYear.
|
|
33349
|
+
var result = new Date(0);
|
|
33350
|
+
result.setFullYear(dirtyDate.getUTCFullYear(), dirtyDate.getUTCMonth(), dirtyDate.getUTCDate());
|
|
33351
|
+
result.setHours(dirtyDate.getUTCHours(), dirtyDate.getUTCMinutes(), dirtyDate.getUTCSeconds(), dirtyDate.getUTCMilliseconds());
|
|
33352
|
+
return result;
|
|
33353
|
+
}
|
|
33354
|
+
return new Date(timestamp + time + offset);
|
|
33355
|
+
}
|
|
33356
|
+
var patterns$1 = {
|
|
33357
|
+
dateTimeDelimiter: /[T ]/,
|
|
33358
|
+
timeZoneDelimiter: /[Z ]/i,
|
|
33359
|
+
timezone: /([Z+-].*)$/
|
|
33360
|
+
};
|
|
33361
|
+
var dateRegex = /^-?(?:(\d{3})|(\d{2})(?:-?(\d{2}))?|W(\d{2})(?:-?(\d{1}))?|)$/;
|
|
33362
|
+
var timeRegex = /^(\d{2}(?:[.,]\d*)?)(?::?(\d{2}(?:[.,]\d*)?))?(?::?(\d{2}(?:[.,]\d*)?))?$/;
|
|
33363
|
+
var timezoneRegex = /^([+-])(\d{2})(?::?(\d{2}))?$/;
|
|
33364
|
+
function splitDateString(dateString) {
|
|
33365
|
+
var dateStrings = {};
|
|
33366
|
+
var array = dateString.split(patterns$1.dateTimeDelimiter);
|
|
33367
|
+
var timeString;
|
|
33368
|
+
|
|
33369
|
+
// The regex match should only return at maximum two array elements.
|
|
33370
|
+
// [date], [time], or [date, time].
|
|
33371
|
+
if (array.length > 2) {
|
|
33372
|
+
return dateStrings;
|
|
33373
|
+
}
|
|
33374
|
+
if (/:/.test(array[0])) {
|
|
33375
|
+
timeString = array[0];
|
|
33376
|
+
} else {
|
|
33377
|
+
dateStrings.date = array[0];
|
|
33378
|
+
timeString = array[1];
|
|
33379
|
+
if (patterns$1.timeZoneDelimiter.test(dateStrings.date)) {
|
|
33380
|
+
dateStrings.date = dateString.split(patterns$1.timeZoneDelimiter)[0];
|
|
33381
|
+
timeString = dateString.substr(dateStrings.date.length, dateString.length);
|
|
33382
|
+
}
|
|
33383
|
+
}
|
|
33384
|
+
if (timeString) {
|
|
33385
|
+
var token = patterns$1.timezone.exec(timeString);
|
|
33386
|
+
if (token) {
|
|
33387
|
+
dateStrings.time = timeString.replace(token[1], '');
|
|
33388
|
+
dateStrings.timezone = token[1];
|
|
33389
|
+
} else {
|
|
33390
|
+
dateStrings.time = timeString;
|
|
33391
|
+
}
|
|
33392
|
+
}
|
|
33393
|
+
return dateStrings;
|
|
33394
|
+
}
|
|
33395
|
+
function parseYear(dateString, additionalDigits) {
|
|
33396
|
+
var regex = new RegExp('^(?:(\\d{4}|[+-]\\d{' + (4 + additionalDigits) + '})|(\\d{2}|[+-]\\d{' + (2 + additionalDigits) + '})$)');
|
|
33397
|
+
var captures = dateString.match(regex);
|
|
33398
|
+
// Invalid ISO-formatted year
|
|
33399
|
+
if (!captures) return {
|
|
33400
|
+
year: NaN,
|
|
33401
|
+
restDateString: ''
|
|
33402
|
+
};
|
|
33403
|
+
var year = captures[1] ? parseInt(captures[1]) : null;
|
|
33404
|
+
var century = captures[2] ? parseInt(captures[2]) : null;
|
|
33405
|
+
|
|
33406
|
+
// either year or century is null, not both
|
|
33407
|
+
return {
|
|
33408
|
+
year: century === null ? year : century * 100,
|
|
33409
|
+
restDateString: dateString.slice((captures[1] || captures[2]).length)
|
|
33410
|
+
};
|
|
33411
|
+
}
|
|
33412
|
+
function parseDate(dateString, year) {
|
|
33413
|
+
// Invalid ISO-formatted year
|
|
33414
|
+
if (year === null) return new Date(NaN);
|
|
33415
|
+
var captures = dateString.match(dateRegex);
|
|
33416
|
+
// Invalid ISO-formatted string
|
|
33417
|
+
if (!captures) return new Date(NaN);
|
|
33418
|
+
var isWeekDate = !!captures[4];
|
|
33419
|
+
var dayOfYear = parseDateUnit(captures[1]);
|
|
33420
|
+
var month = parseDateUnit(captures[2]) - 1;
|
|
33421
|
+
var day = parseDateUnit(captures[3]);
|
|
33422
|
+
var week = parseDateUnit(captures[4]);
|
|
33423
|
+
var dayOfWeek = parseDateUnit(captures[5]) - 1;
|
|
33424
|
+
if (isWeekDate) {
|
|
33425
|
+
if (!validateWeekDate(year, week, dayOfWeek)) {
|
|
33426
|
+
return new Date(NaN);
|
|
33427
|
+
}
|
|
33428
|
+
return dayOfISOWeekYear(year, week, dayOfWeek);
|
|
33429
|
+
} else {
|
|
33430
|
+
var date = new Date(0);
|
|
33431
|
+
if (!validateDate(year, month, day) || !validateDayOfYearDate(year, dayOfYear)) {
|
|
33432
|
+
return new Date(NaN);
|
|
33433
|
+
}
|
|
33434
|
+
date.setUTCFullYear(year, month, Math.max(dayOfYear, day));
|
|
33435
|
+
return date;
|
|
33436
|
+
}
|
|
33437
|
+
}
|
|
33438
|
+
function parseDateUnit(value) {
|
|
33439
|
+
return value ? parseInt(value) : 1;
|
|
33440
|
+
}
|
|
33441
|
+
function parseTime(timeString) {
|
|
33442
|
+
var captures = timeString.match(timeRegex);
|
|
33443
|
+
if (!captures) return NaN; // Invalid ISO-formatted time
|
|
33444
|
+
|
|
33445
|
+
var hours = parseTimeUnit(captures[1]);
|
|
33446
|
+
var minutes = parseTimeUnit(captures[2]);
|
|
33447
|
+
var seconds = parseTimeUnit(captures[3]);
|
|
33448
|
+
if (!validateTime(hours, minutes, seconds)) {
|
|
33449
|
+
return NaN;
|
|
33450
|
+
}
|
|
33451
|
+
return hours * millisecondsInHour + minutes * millisecondsInMinute + seconds * 1000;
|
|
33452
|
+
}
|
|
33453
|
+
function parseTimeUnit(value) {
|
|
33454
|
+
return value && parseFloat(value.replace(',', '.')) || 0;
|
|
33455
|
+
}
|
|
33456
|
+
function parseTimezone(timezoneString) {
|
|
33457
|
+
if (timezoneString === 'Z') return 0;
|
|
33458
|
+
var captures = timezoneString.match(timezoneRegex);
|
|
33459
|
+
if (!captures) return 0;
|
|
33460
|
+
var sign = captures[1] === '+' ? -1 : 1;
|
|
33461
|
+
var hours = parseInt(captures[2]);
|
|
33462
|
+
var minutes = captures[3] && parseInt(captures[3]) || 0;
|
|
33463
|
+
if (!validateTimezone(hours, minutes)) {
|
|
33464
|
+
return NaN;
|
|
33465
|
+
}
|
|
33466
|
+
return sign * (hours * millisecondsInHour + minutes * millisecondsInMinute);
|
|
33467
|
+
}
|
|
33468
|
+
function dayOfISOWeekYear(isoWeekYear, week, day) {
|
|
33469
|
+
var date = new Date(0);
|
|
33470
|
+
date.setUTCFullYear(isoWeekYear, 0, 4);
|
|
33471
|
+
var fourthOfJanuaryDay = date.getUTCDay() || 7;
|
|
33472
|
+
var diff = (week - 1) * 7 + day + 1 - fourthOfJanuaryDay;
|
|
33473
|
+
date.setUTCDate(date.getUTCDate() + diff);
|
|
33474
|
+
return date;
|
|
33475
|
+
}
|
|
33476
|
+
|
|
33477
|
+
// Validation functions
|
|
33478
|
+
|
|
33479
|
+
// February is null to handle the leap year (using ||)
|
|
33480
|
+
var daysInMonths = [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
|
|
33481
|
+
function isLeapYearIndex(year) {
|
|
33482
|
+
return year % 400 === 0 || year % 4 === 0 && year % 100 !== 0;
|
|
33483
|
+
}
|
|
33484
|
+
function validateDate(year, month, date) {
|
|
33485
|
+
return month >= 0 && month <= 11 && date >= 1 && date <= (daysInMonths[month] || (isLeapYearIndex(year) ? 29 : 28));
|
|
33486
|
+
}
|
|
33487
|
+
function validateDayOfYearDate(year, dayOfYear) {
|
|
33488
|
+
return dayOfYear >= 1 && dayOfYear <= (isLeapYearIndex(year) ? 366 : 365);
|
|
33489
|
+
}
|
|
33490
|
+
function validateWeekDate(_year, week, day) {
|
|
33491
|
+
return week >= 1 && week <= 53 && day >= 0 && day <= 6;
|
|
33492
|
+
}
|
|
33493
|
+
function validateTime(hours, minutes, seconds) {
|
|
33494
|
+
if (hours === 24) {
|
|
33495
|
+
return minutes === 0 && seconds === 0;
|
|
33496
|
+
}
|
|
33497
|
+
return seconds >= 0 && seconds < 60 && minutes >= 0 && minutes < 60 && hours >= 0 && hours < 25;
|
|
33498
|
+
}
|
|
33499
|
+
function validateTimezone(_hours, minutes) {
|
|
33500
|
+
return minutes >= 0 && minutes <= 59;
|
|
33501
|
+
}
|
|
33502
|
+
|
|
33277
33503
|
// Copyright (c) Cosmo Tech.
|
|
33278
33504
|
// Licensed under the MIT license.
|
|
33279
33505
|
|
|
33506
|
+
var decreaseDateByOffset = (date, offset) => {
|
|
33507
|
+
if (date instanceof Date === false) throw new TypeError('"date" parameter must be a Date object');
|
|
33508
|
+
return new Date(date - offset * 60 * 1000);
|
|
33509
|
+
};
|
|
33510
|
+
var increaseDateByOffset = (date, offset) => {
|
|
33511
|
+
return decreaseDateByOffset(date, -offset);
|
|
33512
|
+
};
|
|
33513
|
+
var addLocalDateToUTCOffset = date => {
|
|
33514
|
+
if (date instanceof Date === false) throw new TypeError('"date" parameter must be a Date object');
|
|
33515
|
+
// Example: if local time is 15:00, UTC time is 13:00, timezoneOffset is -120, then we need to "increase" the local
|
|
33516
|
+
// datetime by -120 to find UTC time
|
|
33517
|
+
return increaseDateByOffset(date, date.getTimezoneOffset());
|
|
33518
|
+
};
|
|
33519
|
+
var addUTCToLocalDateOffset = date => {
|
|
33520
|
+
if (date instanceof Date === false) throw new TypeError('"date" parameter must be a Date object');
|
|
33521
|
+
return decreaseDateByOffset(date, date.getTimezoneOffset());
|
|
33522
|
+
};
|
|
33523
|
+
var getDateAtMidnightUTC = date => {
|
|
33524
|
+
if (date instanceof Date === false) throw new TypeError('"date" parameter must be a Date object');
|
|
33525
|
+
return new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), 0, 0, 0));
|
|
33526
|
+
};
|
|
33280
33527
|
var parse = (dateStr, dateFormat) => {
|
|
33281
33528
|
try {
|
|
33282
33529
|
return parse$1(dateStr, dateFormat, new Date());
|
|
@@ -33284,6 +33531,7 @@ var parse = (dateStr, dateFormat) => {
|
|
|
33284
33531
|
console.error(error);
|
|
33285
33532
|
}
|
|
33286
33533
|
};
|
|
33534
|
+
var parseISO = dateStr => parseISO$1(dateStr);
|
|
33287
33535
|
var format = function format(date) {
|
|
33288
33536
|
var dateFormat = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "yyyy-MM-dd'T'HH:mm:ss.SSSX";
|
|
33289
33537
|
if (date) {
|
|
@@ -33295,9 +33543,24 @@ var format = function format(date) {
|
|
|
33295
33543
|
}
|
|
33296
33544
|
return '';
|
|
33297
33545
|
};
|
|
33546
|
+
var formatUTCDateAsLocal = function formatUTCDateAsLocal(date) {
|
|
33547
|
+
var dateFormat = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "yyyy-MM-dd'T'HH:mm:ss.SSSX";
|
|
33548
|
+
try {
|
|
33549
|
+
var dateWithReverseOffset = addLocalDateToUTCOffset(date);
|
|
33550
|
+
return format(dateWithReverseOffset, dateFormat);
|
|
33551
|
+
} catch (error) {
|
|
33552
|
+
console.error(error);
|
|
33553
|
+
}
|
|
33554
|
+
return '';
|
|
33555
|
+
};
|
|
33556
|
+
|
|
33557
|
+
// TODO: (breaking change) rename to something like "isFormatValid" to prevent confusion with the check of invalid dates
|
|
33298
33558
|
var isValid$1 = (dateStr, dateFormat) => {
|
|
33299
33559
|
return isMatch(dateStr, dateFormat);
|
|
33300
33560
|
};
|
|
33561
|
+
var isValidDate = date => {
|
|
33562
|
+
return isValid$2(date);
|
|
33563
|
+
};
|
|
33301
33564
|
var min = (dateA, dateB) => {
|
|
33302
33565
|
if (dateA && dateB) {
|
|
33303
33566
|
return dateA < dateB ? dateA : dateB;
|
|
@@ -33327,9 +33590,17 @@ var strMax = (dateStrA, dateStrB, dateFormat) => {
|
|
|
33327
33590
|
}
|
|
33328
33591
|
};
|
|
33329
33592
|
var DateUtils = {
|
|
33593
|
+
decreaseDateByOffset,
|
|
33594
|
+
increaseDateByOffset,
|
|
33595
|
+
addLocalDateToUTCOffset,
|
|
33596
|
+
addUTCToLocalDateOffset,
|
|
33597
|
+
getDateAtMidnightUTC,
|
|
33330
33598
|
parse,
|
|
33599
|
+
parseISO,
|
|
33331
33600
|
format,
|
|
33601
|
+
formatUTCDateAsLocal,
|
|
33332
33602
|
isValid: isValid$1,
|
|
33603
|
+
isValidDate,
|
|
33333
33604
|
min,
|
|
33334
33605
|
max,
|
|
33335
33606
|
strMin,
|
|
@@ -41495,6 +41766,18 @@ let Error$1 = class Error {
|
|
|
41495
41766
|
}
|
|
41496
41767
|
};
|
|
41497
41768
|
|
|
41769
|
+
var getFlattenColumnsWithoutGroups = columns => {
|
|
41770
|
+
if (columns == null) {
|
|
41771
|
+
console.warn("Columns list shouldn't be null or undefined");
|
|
41772
|
+
return [];
|
|
41773
|
+
}
|
|
41774
|
+
return columns.flatMap(columnOrGroup => {
|
|
41775
|
+
if (columnOrGroup == null) {
|
|
41776
|
+
console.warn('Null or undefined values found in columns list');
|
|
41777
|
+
}
|
|
41778
|
+
return columnOrGroup !== null && columnOrGroup !== void 0 && columnOrGroup.children ? getFlattenColumnsWithoutGroups(columnOrGroup.children) : columnOrGroup;
|
|
41779
|
+
}).filter(column => column != null);
|
|
41780
|
+
};
|
|
41498
41781
|
var _buildEmptyFieldError = (rowLineNumber, expectedCols, colIndex) => {
|
|
41499
41782
|
var errorSummary = "Empty field";
|
|
41500
41783
|
var errorLoc = "Line ".concat(rowLineNumber, ", Column ").concat(colIndex + 1, " (\"").concat(expectedCols[colIndex].field, "\")");
|
|
@@ -41637,9 +41920,9 @@ var _buildRows = (rows, hasHeader, cols) => {
|
|
|
41637
41920
|
};
|
|
41638
41921
|
var fromCSV = function fromCSV(dataStr) {
|
|
41639
41922
|
var hasHeader = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
41640
|
-
var
|
|
41923
|
+
var nestedCols = arguments.length > 2 ? arguments[2] : undefined;
|
|
41641
41924
|
var options = arguments.length > 3 ? arguments[3] : undefined;
|
|
41642
|
-
if (!hasHeader && !
|
|
41925
|
+
if (!hasHeader && !nestedCols) {
|
|
41643
41926
|
return {
|
|
41644
41927
|
error: [new Error$1('cols must be defined if hasHeader=false', null, null)]
|
|
41645
41928
|
};
|
|
@@ -41650,6 +41933,7 @@ var fromCSV = function fromCSV(dataStr) {
|
|
|
41650
41933
|
rows: []
|
|
41651
41934
|
};
|
|
41652
41935
|
}
|
|
41936
|
+
var cols = getFlattenColumnsWithoutGroups(nestedCols);
|
|
41653
41937
|
var rows = [];
|
|
41654
41938
|
var csvLines;
|
|
41655
41939
|
var emptyCols = _calculateEmptyCols(cols);
|
|
@@ -41660,7 +41944,7 @@ var fromCSV = function fromCSV(dataStr) {
|
|
|
41660
41944
|
error: [err]
|
|
41661
41945
|
};
|
|
41662
41946
|
}
|
|
41663
|
-
if (!cols) {
|
|
41947
|
+
if (!cols || cols.length === 0) {
|
|
41664
41948
|
cols = _buildCols(csvLines[0]);
|
|
41665
41949
|
}
|
|
41666
41950
|
var errors = _validateFormat(csvLines, hasHeader, cols, options);
|
|
@@ -41689,12 +41973,13 @@ var _generateRows = function _generateRows(rows, cols) {
|
|
|
41689
41973
|
var rowSep = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '\n';
|
|
41690
41974
|
return rows.map(row => _generateRow(row, cols, colSep)).join(rowSep);
|
|
41691
41975
|
};
|
|
41692
|
-
var toCSV = (rows,
|
|
41693
|
-
if (
|
|
41976
|
+
var toCSV = (rows, nestedCols, options) => {
|
|
41977
|
+
if (nestedCols == null || nestedCols.length === 0) {
|
|
41694
41978
|
return {
|
|
41695
41979
|
error: ["Cols must be defined"]
|
|
41696
41980
|
};
|
|
41697
41981
|
}
|
|
41982
|
+
var cols = getFlattenColumnsWithoutGroups(nestedCols);
|
|
41698
41983
|
if (!rows) {
|
|
41699
41984
|
rows = [];
|
|
41700
41985
|
}
|
|
@@ -41712,10 +41997,11 @@ var toCSV = (rows, cols, options) => {
|
|
|
41712
41997
|
|
|
41713
41998
|
// TODO: some metadata of cols & options ('acceptsEmptyFields', columns types, dates format, ...) are not used right
|
|
41714
41999
|
// now, but they could be used in a future version to improve the format of the exported Excel file
|
|
41715
|
-
var toXLSX = (rows,
|
|
42000
|
+
var toXLSX = (rows, nestedCols, options) => {
|
|
41716
42001
|
if (!rows) {
|
|
41717
42002
|
rows = [];
|
|
41718
42003
|
}
|
|
42004
|
+
var cols = getFlattenColumnsWithoutGroups(nestedCols);
|
|
41719
42005
|
options = _objectSpread2(_objectSpread2({}, DEFAULT_XLSX_EXPORT_OPTIONS), options);
|
|
41720
42006
|
var header = options.writeHeader ? cols.map(col => col.field) : null;
|
|
41721
42007
|
return XLSXUtils.write(rows, header);
|
|
@@ -41723,9 +42009,9 @@ var toXLSX = (rows, cols, options) => {
|
|
|
41723
42009
|
var fromXLSX = /*#__PURE__*/function () {
|
|
41724
42010
|
var _ref2 = _asyncToGenerator(function* (fileBlob) {
|
|
41725
42011
|
var hasHeader = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
41726
|
-
var
|
|
42012
|
+
var nestedCols = arguments.length > 2 ? arguments[2] : undefined;
|
|
41727
42013
|
var options = arguments.length > 3 ? arguments[3] : undefined;
|
|
41728
|
-
if (!hasHeader && !
|
|
42014
|
+
if (!hasHeader && !nestedCols) {
|
|
41729
42015
|
return {
|
|
41730
42016
|
error: [new Error$1('cols must be defined if hasHeader=false', null, null)]
|
|
41731
42017
|
};
|
|
@@ -41736,6 +42022,7 @@ var fromXLSX = /*#__PURE__*/function () {
|
|
|
41736
42022
|
rows: []
|
|
41737
42023
|
};
|
|
41738
42024
|
}
|
|
42025
|
+
var cols = getFlattenColumnsWithoutGroups(nestedCols);
|
|
41739
42026
|
var rows = [];
|
|
41740
42027
|
var xlsxLines;
|
|
41741
42028
|
var emptyCols = _calculateEmptyCols(cols);
|
|
@@ -41747,7 +42034,7 @@ var fromXLSX = /*#__PURE__*/function () {
|
|
|
41747
42034
|
error: [new Error$1((err === null || err === void 0 ? void 0 : err.message) || err, fileBlob.name, (err === null || err === void 0 ? void 0 : err.stack) || null)]
|
|
41748
42035
|
};
|
|
41749
42036
|
}
|
|
41750
|
-
if (!cols) {
|
|
42037
|
+
if (!cols || cols.length === 0) {
|
|
41751
42038
|
cols = _buildCols(xlsxLines[0]);
|
|
41752
42039
|
}
|
|
41753
42040
|
var errors = _validateFormat(xlsxLines, hasHeader, cols, options);
|
|
@@ -41767,6 +42054,7 @@ var fromXLSX = /*#__PURE__*/function () {
|
|
|
41767
42054
|
var AgGridUtils = {
|
|
41768
42055
|
fromCSV,
|
|
41769
42056
|
fromXLSX,
|
|
42057
|
+
getFlattenColumnsWithoutGroups,
|
|
41770
42058
|
toCSV,
|
|
41771
42059
|
toXLSX
|
|
41772
42060
|
};
|
package/dist/index.esm.js
CHANGED
|
@@ -3983,7 +3983,7 @@ var pdre1 = /^(\d+):(\d+)(:\d+)?(\.\d+)?$/; // HH:MM[:SS[.UUU]]
|
|
|
3983
3983
|
var pdre2 = /^(\d+)-(\d+)-(\d+)$/; // YYYY-mm-dd
|
|
3984
3984
|
var pdre3 = /^(\d+)-(\d+)-(\d+)[T ](\d+):(\d+)(:\d+)?(\.\d+)?$/; // YYYY-mm-dd(T or space)HH:MM[:SS[.UUU]], sans "Z"
|
|
3985
3985
|
/* parses a date string as a UTC date */
|
|
3986
|
-
function parseDate(str/*:string*/, date1904/*:boolean*/)/*:Date*/ {
|
|
3986
|
+
function parseDate$1(str/*:string*/, date1904/*:boolean*/)/*:Date*/ {
|
|
3987
3987
|
if(str instanceof Date) return str;
|
|
3988
3988
|
var m = str.match(pdre1);
|
|
3989
3989
|
if(m) return new Date((date1904 ? dnthresh2 : dnthresh1) + ((parseInt(m[1], 10)*60 + parseInt(m[2], 10))*60 + (m[3] ? parseInt(m[3].slice(1), 10) : 0))*1000 + (m[4] ? parseInt((m[4]+"000").slice(1,4), 10) : 0));
|
|
@@ -6201,7 +6201,7 @@ function parse_core_props(data) {
|
|
|
6201
6201
|
for(var i = 0; i < CORE_PROPS.length; ++i) {
|
|
6202
6202
|
var f = CORE_PROPS[i], cur = data.match(CORE_PROPS_REGEX[i]);
|
|
6203
6203
|
if(cur != null && cur.length > 0) p[f[1]] = unescapexml(cur[1]);
|
|
6204
|
-
if(f[2] === 'date' && p[f[1]]) p[f[1]] = parseDate(p[f[1]]);
|
|
6204
|
+
if(f[2] === 'date' && p[f[1]]) p[f[1]] = parseDate$1(p[f[1]]);
|
|
6205
6205
|
}
|
|
6206
6206
|
|
|
6207
6207
|
return p;
|
|
@@ -6387,7 +6387,7 @@ function parse_cust_props(data/*:string*/, opts) {
|
|
|
6387
6387
|
p[name] = parseFloat(text);
|
|
6388
6388
|
break;
|
|
6389
6389
|
case 'filetime': case 'date':
|
|
6390
|
-
p[name] = parseDate(text);
|
|
6390
|
+
p[name] = parseDate$1(text);
|
|
6391
6391
|
break;
|
|
6392
6392
|
case 'cy': case 'error':
|
|
6393
6393
|
p[name] = unescapexml(text);
|
|
@@ -6752,7 +6752,7 @@ function parse_PropertySet(blob, PIDSI) {
|
|
|
6752
6752
|
case 0x13 /*VT_UI4*/: blob.l += 4; val = blob.read_shift(4); break;
|
|
6753
6753
|
case 0x05 /*VT_R8*/: blob.l += 4; val = blob.read_shift(8, 'f'); break;
|
|
6754
6754
|
case 0x0B /*VT_BOOL*/: blob.l += 4; val = parsebool(blob, 4); break;
|
|
6755
|
-
case 0x40 /*VT_FILETIME*/: blob.l += 4; val = parseDate(parse_FILETIME(blob)); break;
|
|
6755
|
+
case 0x40 /*VT_FILETIME*/: blob.l += 4; val = parseDate$1(parse_FILETIME(blob)); break;
|
|
6756
6756
|
default: throw new Error("unparsed value: " + blob[blob.l]);
|
|
6757
6757
|
}
|
|
6758
6758
|
PropH[name] = val;
|
|
@@ -8928,7 +8928,7 @@ var SYLK = /*#__PURE__*/(function() {
|
|
|
8928
8928
|
if(cell.f && !cell.F) o += ";E" + a1_to_rc(cell.f, {r:R, c:C}); break;
|
|
8929
8929
|
case 'b': o += cell.v ? "TRUE" : "FALSE"; break;
|
|
8930
8930
|
case 'e': o += cell.w || cell.v; break;
|
|
8931
|
-
case 'd': o += datenum(parseDate(cell.v, date1904), date1904); break;
|
|
8931
|
+
case 'd': o += datenum(parseDate$1(cell.v, date1904), date1904); break;
|
|
8932
8932
|
case 's': o += '"' + (cell.v == null ? "" : String(cell.v)).replace(/"/g,"").replace(/;/g, ";;") + '"'; break;
|
|
8933
8933
|
}
|
|
8934
8934
|
return o;
|
|
@@ -9051,7 +9051,7 @@ var DIF = /*#__PURE__*/(function() {
|
|
|
9051
9051
|
else if(data === 'FALSE') arr[R][C] = false;
|
|
9052
9052
|
else if(!isNaN(fuzzynum(value))) arr[R][C] = fuzzynum(value);
|
|
9053
9053
|
else if(!isNaN(fuzzydate(value).getDate())) {
|
|
9054
|
-
arr[R][C] = parseDate(value);
|
|
9054
|
+
arr[R][C] = parseDate$1(value);
|
|
9055
9055
|
if(!(opts && opts.UTC)) { arr[R][C] = utc_to_local(arr[R][C]); }
|
|
9056
9056
|
}
|
|
9057
9057
|
else arr[R][C] = value;
|
|
@@ -9109,7 +9109,7 @@ var DIF = /*#__PURE__*/(function() {
|
|
|
9109
9109
|
p +=(make_value_str((isNaN(+cell.v)) ? cell.v : '="' + cell.v + '"'));
|
|
9110
9110
|
break;
|
|
9111
9111
|
case 'd':
|
|
9112
|
-
if(!cell.w) cell.w = SSF_format(cell.z || table_fmt[14], datenum(parseDate(cell.v)));
|
|
9112
|
+
if(!cell.w) cell.w = SSF_format(cell.z || table_fmt[14], datenum(parseDate$1(cell.v)));
|
|
9113
9113
|
p +=(make_value(cell.w, "V"));
|
|
9114
9114
|
break;
|
|
9115
9115
|
default: p +=("1,0\r\n\"\"");
|
|
@@ -9200,7 +9200,7 @@ var ETH = /*#__PURE__*/(function() {
|
|
|
9200
9200
|
oo[5] = encode(cell.f||(cell.v?'TRUE':'FALSE'));
|
|
9201
9201
|
break;
|
|
9202
9202
|
case 'd':
|
|
9203
|
-
var t = datenum(parseDate(cell.v));
|
|
9203
|
+
var t = datenum(parseDate$1(cell.v));
|
|
9204
9204
|
oo[2] = 'vtc'; oo[3] = 'nd'; oo[4] = ""+t;
|
|
9205
9205
|
oo[5] = cell.w || SSF_format(cell.z || table_fmt[14], t);
|
|
9206
9206
|
break;
|
|
@@ -9234,7 +9234,7 @@ var PRN = /*#__PURE__*/(function() {
|
|
|
9234
9234
|
else if(data === 'TRUE') arr[R][C] = true;
|
|
9235
9235
|
else if(data === 'FALSE') arr[R][C] = false;
|
|
9236
9236
|
else if(!isNaN(fuzzynum(data))) arr[R][C] = fuzzynum(data);
|
|
9237
|
-
else if(!isNaN(fuzzydate(data).getDate())) arr[R][C] = parseDate(data);
|
|
9237
|
+
else if(!isNaN(fuzzydate(data).getDate())) arr[R][C] = parseDate$1(data);
|
|
9238
9238
|
else arr[R][C] = data;
|
|
9239
9239
|
}
|
|
9240
9240
|
|
|
@@ -9345,7 +9345,7 @@ var PRN = /*#__PURE__*/(function() {
|
|
|
9345
9345
|
else if(!isNaN(v = fuzzynum(s))) { cell.t = 'n'; cell.v = v; }
|
|
9346
9346
|
else if(!isNaN((v = fuzzydate(s)).getDate()) || _re && s.match(_re)) {
|
|
9347
9347
|
cell.z = o.dateNF || table_fmt[14];
|
|
9348
|
-
if(_re && s.match(_re)){ var news=dateNF_fix(s, o.dateNF, (s.match(_re)||[])); v = parseDate(news); if(o && o.UTC === false) v = utc_to_local(v); }
|
|
9348
|
+
if(_re && s.match(_re)){ var news=dateNF_fix(s, o.dateNF, (s.match(_re)||[])); v = parseDate$1(news); if(o && o.UTC === false) v = utc_to_local(v); }
|
|
9349
9349
|
else if(o && o.UTC === false) v = utc_to_local(v);
|
|
9350
9350
|
else if(o.cellText !== false && o.dateNF) cell.w = SSF_format(cell.z, v);
|
|
9351
9351
|
if(o.cellDates) { cell.t = 'd'; cell.v = v; }
|
|
@@ -16042,7 +16042,7 @@ function safe_format(p/*:Cell*/, fmtid/*:number*/, fillid/*:?number*/, opts, the
|
|
|
16042
16042
|
if(opts.cellNF) p.z = table_fmt[fmtid];
|
|
16043
16043
|
} catch(e) { if(opts.WTF) throw e; }
|
|
16044
16044
|
if(p.t === 'z' && !opts.cellStyles) return;
|
|
16045
|
-
if(p.t === 'd' && typeof p.v === 'string') p.v = parseDate(p.v);
|
|
16045
|
+
if(p.t === 'd' && typeof p.v === 'string') p.v = parseDate$1(p.v);
|
|
16046
16046
|
if((!opts || opts.cellText !== false) && p.t !== 'z') try {
|
|
16047
16047
|
if(table_fmt[fmtid] == null) SSF__load(SSFImplicit[fmtid] || "General", fmtid);
|
|
16048
16048
|
if(p.t === 'e') p.w = p.w || BErr[p.v];
|
|
@@ -16359,13 +16359,13 @@ function write_ws_xml_cell(cell/*:Cell*/, ref, ws, opts, idx, wb, date1904)/*:st
|
|
|
16359
16359
|
case 'e': vv = BErr[cell.v]; break;
|
|
16360
16360
|
case 'd':
|
|
16361
16361
|
if(opts && opts.cellDates) {
|
|
16362
|
-
var _vv = parseDate(cell.v, date1904);
|
|
16362
|
+
var _vv = parseDate$1(cell.v, date1904);
|
|
16363
16363
|
vv = _vv.toISOString();
|
|
16364
16364
|
if(_vv.getUTCFullYear() < 1900) vv = vv.slice(vv.indexOf("T") + 1).replace("Z","");
|
|
16365
16365
|
} else {
|
|
16366
16366
|
cell = dup(cell);
|
|
16367
16367
|
cell.t = 'n';
|
|
16368
|
-
vv = ''+(cell.v = datenum(parseDate(cell.v, date1904), date1904));
|
|
16368
|
+
vv = ''+(cell.v = datenum(parseDate$1(cell.v, date1904), date1904));
|
|
16369
16369
|
}
|
|
16370
16370
|
if(typeof cell.z === 'undefined') cell.z = table_fmt[14];
|
|
16371
16371
|
break;
|
|
@@ -16564,8 +16564,8 @@ return function parse_ws_xml_data(sdata/*:string*/, s, opts, guess/*:Range*/, th
|
|
|
16564
16564
|
break;
|
|
16565
16565
|
case 'b': p.v = parsexmlbool(p.v); break;
|
|
16566
16566
|
case 'd':
|
|
16567
|
-
if(opts.cellDates) p.v = parseDate(p.v, date1904);
|
|
16568
|
-
else { p.v = datenum(parseDate(p.v, date1904), date1904); p.t = 'n'; }
|
|
16567
|
+
if(opts.cellDates) p.v = parseDate$1(p.v, date1904);
|
|
16568
|
+
else { p.v = datenum(parseDate$1(p.v, date1904), date1904); p.t = 'n'; }
|
|
16569
16569
|
break;
|
|
16570
16570
|
/* error string in .w, number in .v */
|
|
16571
16571
|
case 'e':
|
|
@@ -17587,7 +17587,7 @@ function write_ws_bin_cell(ba/*:BufArray*/, cell/*:Cell*/, R/*:number*/, C/*:num
|
|
|
17587
17587
|
case 'd': // no BrtCellDate :(
|
|
17588
17588
|
cell = dup(cell);
|
|
17589
17589
|
cell.z = cell.z || table_fmt[14];
|
|
17590
|
-
cell.v = datenum(parseDate(cell.v, date1904), date1904); cell.t = 'n';
|
|
17590
|
+
cell.v = datenum(parseDate$1(cell.v, date1904), date1904); cell.t = 'n';
|
|
17591
17591
|
break;
|
|
17592
17592
|
/* falls through */
|
|
17593
17593
|
case 'n': case 'e': vv = ''+cell.v; break;
|
|
@@ -18824,7 +18824,7 @@ function xlml_set_custprop(Custprops, key, cp, val/*:string*/) {
|
|
|
18824
18824
|
case "boolean": oval = parsexmlbool(val); break;
|
|
18825
18825
|
case "i2": case "int": oval = parseInt(val, 10); break;
|
|
18826
18826
|
case "r4": case "float": oval = parseFloat(val); break;
|
|
18827
|
-
case "date": case "dateTime.tz": oval = parseDate(val); break;
|
|
18827
|
+
case "date": case "dateTime.tz": oval = parseDate$1(val); break;
|
|
18828
18828
|
case "i8": case "string": case "fixed": case "uuid": case "bin.base64": break;
|
|
18829
18829
|
default: throw new Error("bad custprop:" + cp[0]);
|
|
18830
18830
|
}
|
|
@@ -18887,7 +18887,7 @@ function parse_xlml_data(xml, ss, data, cell/*:any*/, base, styles, csty, row, a
|
|
|
18887
18887
|
break;
|
|
18888
18888
|
case 'DateTime':
|
|
18889
18889
|
if(xml.slice(-1) != "Z") xml += "Z";
|
|
18890
|
-
cell.v = datenum(parseDate(xml, date1904), date1904);
|
|
18890
|
+
cell.v = datenum(parseDate$1(xml, date1904), date1904);
|
|
18891
18891
|
if(cell.v !== cell.v) cell.v = unescapexml(xml);
|
|
18892
18892
|
if(!nf || nf == "General") nf = "yyyy-mm-dd";
|
|
18893
18893
|
/* falls through */
|
|
@@ -22167,7 +22167,7 @@ function write_ws_biff2_cell(ba/*:BufArray*/, cell/*:Cell*/, R/*:number*/, C/*:n
|
|
|
22167
22167
|
}
|
|
22168
22168
|
if(cell.v != null) switch(cell.t) {
|
|
22169
22169
|
case 'd': case 'n':
|
|
22170
|
-
var v = cell.t == 'd' ? datenum(parseDate(cell.v, date1904), date1904) : cell.v;
|
|
22170
|
+
var v = cell.t == 'd' ? datenum(parseDate$1(cell.v, date1904), date1904) : cell.v;
|
|
22171
22171
|
if(opts.biff == 2 && (v == (v|0)) && (v >= 0) && (v < 65536))
|
|
22172
22172
|
// 0x027E (RK) in BIFF3/4
|
|
22173
22173
|
write_biff_rec(ba, 0x0002, write_BIFF2INT(R, C, v, ixfe, ifmt));
|
|
@@ -22577,7 +22577,7 @@ function write_ws_biff8_cell(ba/*:BufArray*/, cell/*:Cell*/, R/*:number*/, C/*:n
|
|
|
22577
22577
|
if(cell.bf) write_biff_rec(ba, 0x0006 /* Formula */, write_Formula(cell, R, C, opts, os));
|
|
22578
22578
|
else switch(cell.t) {
|
|
22579
22579
|
case 'd': case 'n':
|
|
22580
|
-
var v = cell.t == 'd' ? datenum(parseDate(cell.v, date1904), date1904) : cell.v;
|
|
22580
|
+
var v = cell.t == 'd' ? datenum(parseDate$1(cell.v, date1904), date1904) : cell.v;
|
|
22581
22581
|
if(isNaN(v)) write_biff_rec(ba, 0x0205 /* BoolErr */, write_BoolErr(R, C, 0x24, os, opts, "e")); // #NUM!
|
|
22582
22582
|
else if(!isFinite(v)) write_biff_rec(ba, 0x0205 /* BoolErr */, write_BoolErr(R, C, 0x07, os, opts, "e")); // #DIV/0!
|
|
22583
22583
|
/* TODO: emit RK as appropriate */
|
|
@@ -22851,7 +22851,7 @@ function html_to_sheet(str/*:string*/, _opts)/*:Workbook*/ {
|
|
|
22851
22851
|
else if(m === 'FALSE') o = {t:'b', v:false};
|
|
22852
22852
|
else if(!isNaN(fuzzynum(m))) o = {t:'n', v:fuzzynum(m)};
|
|
22853
22853
|
else if(!isNaN(fuzzydate(m).getDate())) {
|
|
22854
|
-
o = ({t:'d', v:parseDate(m)}/*:any*/);
|
|
22854
|
+
o = ({t:'d', v:parseDate$1(m)}/*:any*/);
|
|
22855
22855
|
if(opts.UTC === false) o.v = utc_to_local(o.v);
|
|
22856
22856
|
if(!opts.cellDates) o = ({t:'n', v:datenum(o.v)}/*:any*/);
|
|
22857
22857
|
o.z = opts.dateNF || table_fmt[14];
|
|
@@ -22996,7 +22996,7 @@ function sheet_add_dom(ws/*:Worksheet*/, table/*:HTMLElement*/, _opts/*:?any*/)/
|
|
|
22996
22996
|
else if(v === 'FALSE') o = {t:'b', v:false};
|
|
22997
22997
|
else if(!isNaN(fuzzynum(v))) o = {t:'n', v:fuzzynum(v)};
|
|
22998
22998
|
else if(!isNaN(fuzzydate(v).getDate())) {
|
|
22999
|
-
o = ({t:'d', v:parseDate(v)}/*:any*/);
|
|
22999
|
+
o = ({t:'d', v:parseDate$1(v)}/*:any*/);
|
|
23000
23000
|
if(opts.UTC) o.v = local_to_utc(o.v);
|
|
23001
23001
|
if(!opts.cellDates) o = ({t:'n', v:datenum(o.v)}/*:any*/);
|
|
23002
23002
|
o.z = opts.dateNF || table_fmt[14];
|
|
@@ -23426,7 +23426,7 @@ function parse_content_xml(d/*:string*/, _opts, _nfm)/*:Workbook*/ {
|
|
|
23426
23426
|
break;
|
|
23427
23427
|
case 'percentage': q.t = 'n'; q.v = parseFloat(ctag.value); break;
|
|
23428
23428
|
case 'currency': q.t = 'n'; q.v = parseFloat(ctag.value); break;
|
|
23429
|
-
case 'date': q.t = 'd'; q.v = parseDate(ctag['date-value'], WB.WBProps.date1904);
|
|
23429
|
+
case 'date': q.t = 'd'; q.v = parseDate$1(ctag['date-value'], WB.WBProps.date1904);
|
|
23430
23430
|
if(!opts.cellDates) { q.t = 'n'; q.v = datenum(q.v, WB.WBProps.date1904); }
|
|
23431
23431
|
if(!q.z) q.z = 'm/d/yy'; break;
|
|
23432
23432
|
/* NOTE: for `time`, Excel ODS export incorrectly uses durations relative to 1900 epoch even if 1904 is specified */
|
|
@@ -24112,9 +24112,9 @@ var write_content_ods/*:{(wb:any, opts:any):string}*/ = /* @__PURE__ */(function
|
|
|
24112
24112
|
ct['office:value-type'] = "string";
|
|
24113
24113
|
break;
|
|
24114
24114
|
case 'd':
|
|
24115
|
-
textp = (cell.w||(parseDate(cell.v, date1904).toISOString()));
|
|
24115
|
+
textp = (cell.w||(parseDate$1(cell.v, date1904).toISOString()));
|
|
24116
24116
|
ct['office:value-type'] = "date";
|
|
24117
|
-
ct['office:date-value'] = (parseDate(cell.v, date1904).toISOString());
|
|
24117
|
+
ct['office:date-value'] = (parseDate$1(cell.v, date1904).toISOString());
|
|
24118
24118
|
ct['table:style-name'] = "ce1";
|
|
24119
24119
|
break;
|
|
24120
24120
|
//case 'e': // TODO: translate to ODS errors
|
|
@@ -30678,7 +30678,7 @@ function normalizeTwoDigitYear(twoDigitYear, currentYear) {
|
|
|
30678
30678
|
}
|
|
30679
30679
|
return isCommonEra ? result : 1 - result;
|
|
30680
30680
|
}
|
|
30681
|
-
function isLeapYearIndex(year) {
|
|
30681
|
+
function isLeapYearIndex$1(year) {
|
|
30682
30682
|
return year % 400 === 0 || year % 4 === 0 && year % 100 !== 0;
|
|
30683
30683
|
}
|
|
30684
30684
|
|
|
@@ -31317,7 +31317,7 @@ var DateParser = /*#__PURE__*/function (_Parser) {
|
|
|
31317
31317
|
key: "validate",
|
|
31318
31318
|
value: function validate(date, value) {
|
|
31319
31319
|
var year = date.getUTCFullYear();
|
|
31320
|
-
var isLeapYear = isLeapYearIndex(year);
|
|
31320
|
+
var isLeapYear = isLeapYearIndex$1(year);
|
|
31321
31321
|
var month = date.getUTCMonth();
|
|
31322
31322
|
if (isLeapYear) {
|
|
31323
31323
|
return value >= 1 && value <= DAYS_IN_MONTH_LEAP_YEAR[month];
|
|
@@ -31370,7 +31370,7 @@ var DayOfYearParser = /*#__PURE__*/function (_Parser) {
|
|
|
31370
31370
|
key: "validate",
|
|
31371
31371
|
value: function validate(date, value) {
|
|
31372
31372
|
var year = date.getUTCFullYear();
|
|
31373
|
-
var isLeapYear = isLeapYearIndex(year);
|
|
31373
|
+
var isLeapYear = isLeapYearIndex$1(year);
|
|
31374
31374
|
if (isLeapYear) {
|
|
31375
31375
|
return value >= 1 && value <= 366;
|
|
31376
31376
|
} else {
|
|
@@ -33272,9 +33272,256 @@ function isMatch(dateString, formatString, options) {
|
|
|
33272
33272
|
return isValid$2(parse$1(dateString, formatString, new Date(), options));
|
|
33273
33273
|
}
|
|
33274
33274
|
|
|
33275
|
+
/**
|
|
33276
|
+
* @name parseISO
|
|
33277
|
+
* @category Common Helpers
|
|
33278
|
+
* @summary Parse ISO string
|
|
33279
|
+
*
|
|
33280
|
+
* @description
|
|
33281
|
+
* Parse the given string in ISO 8601 format and return an instance of Date.
|
|
33282
|
+
*
|
|
33283
|
+
* Function accepts complete ISO 8601 formats as well as partial implementations.
|
|
33284
|
+
* ISO 8601: http://en.wikipedia.org/wiki/ISO_8601
|
|
33285
|
+
*
|
|
33286
|
+
* If the argument isn't a string, the function cannot parse the string or
|
|
33287
|
+
* the values are invalid, it returns Invalid Date.
|
|
33288
|
+
*
|
|
33289
|
+
* @param {String} argument - the value to convert
|
|
33290
|
+
* @param {Object} [options] - an object with options.
|
|
33291
|
+
* @param {0|1|2} [options.additionalDigits=2] - the additional number of digits in the extended year format
|
|
33292
|
+
* @returns {Date} the parsed date in the local time zone
|
|
33293
|
+
* @throws {TypeError} 1 argument required
|
|
33294
|
+
* @throws {RangeError} `options.additionalDigits` must be 0, 1 or 2
|
|
33295
|
+
*
|
|
33296
|
+
* @example
|
|
33297
|
+
* // Convert string '2014-02-11T11:30:30' to date:
|
|
33298
|
+
* const result = parseISO('2014-02-11T11:30:30')
|
|
33299
|
+
* //=> Tue Feb 11 2014 11:30:30
|
|
33300
|
+
*
|
|
33301
|
+
* @example
|
|
33302
|
+
* // Convert string '+02014101' to date,
|
|
33303
|
+
* // if the additional number of digits in the extended year format is 1:
|
|
33304
|
+
* const result = parseISO('+02014101', { additionalDigits: 1 })
|
|
33305
|
+
* //=> Fri Apr 11 2014 00:00:00
|
|
33306
|
+
*/
|
|
33307
|
+
function parseISO$1(argument, options) {
|
|
33308
|
+
var _options$additionalDi;
|
|
33309
|
+
requiredArgs(1, arguments);
|
|
33310
|
+
var additionalDigits = toInteger((_options$additionalDi = options === null || options === void 0 ? void 0 : options.additionalDigits) !== null && _options$additionalDi !== void 0 ? _options$additionalDi : 2);
|
|
33311
|
+
if (additionalDigits !== 2 && additionalDigits !== 1 && additionalDigits !== 0) {
|
|
33312
|
+
throw new RangeError('additionalDigits must be 0, 1 or 2');
|
|
33313
|
+
}
|
|
33314
|
+
if (!(typeof argument === 'string' || Object.prototype.toString.call(argument) === '[object String]')) {
|
|
33315
|
+
return new Date(NaN);
|
|
33316
|
+
}
|
|
33317
|
+
var dateStrings = splitDateString(argument);
|
|
33318
|
+
var date;
|
|
33319
|
+
if (dateStrings.date) {
|
|
33320
|
+
var parseYearResult = parseYear(dateStrings.date, additionalDigits);
|
|
33321
|
+
date = parseDate(parseYearResult.restDateString, parseYearResult.year);
|
|
33322
|
+
}
|
|
33323
|
+
if (!date || isNaN(date.getTime())) {
|
|
33324
|
+
return new Date(NaN);
|
|
33325
|
+
}
|
|
33326
|
+
var timestamp = date.getTime();
|
|
33327
|
+
var time = 0;
|
|
33328
|
+
var offset;
|
|
33329
|
+
if (dateStrings.time) {
|
|
33330
|
+
time = parseTime(dateStrings.time);
|
|
33331
|
+
if (isNaN(time)) {
|
|
33332
|
+
return new Date(NaN);
|
|
33333
|
+
}
|
|
33334
|
+
}
|
|
33335
|
+
if (dateStrings.timezone) {
|
|
33336
|
+
offset = parseTimezone(dateStrings.timezone);
|
|
33337
|
+
if (isNaN(offset)) {
|
|
33338
|
+
return new Date(NaN);
|
|
33339
|
+
}
|
|
33340
|
+
} else {
|
|
33341
|
+
var dirtyDate = new Date(timestamp + time);
|
|
33342
|
+
// js parsed string assuming it's in UTC timezone
|
|
33343
|
+
// but we need it to be parsed in our timezone
|
|
33344
|
+
// so we use utc values to build date in our timezone.
|
|
33345
|
+
// Year values from 0 to 99 map to the years 1900 to 1999
|
|
33346
|
+
// so set year explicitly with setFullYear.
|
|
33347
|
+
var result = new Date(0);
|
|
33348
|
+
result.setFullYear(dirtyDate.getUTCFullYear(), dirtyDate.getUTCMonth(), dirtyDate.getUTCDate());
|
|
33349
|
+
result.setHours(dirtyDate.getUTCHours(), dirtyDate.getUTCMinutes(), dirtyDate.getUTCSeconds(), dirtyDate.getUTCMilliseconds());
|
|
33350
|
+
return result;
|
|
33351
|
+
}
|
|
33352
|
+
return new Date(timestamp + time + offset);
|
|
33353
|
+
}
|
|
33354
|
+
var patterns$1 = {
|
|
33355
|
+
dateTimeDelimiter: /[T ]/,
|
|
33356
|
+
timeZoneDelimiter: /[Z ]/i,
|
|
33357
|
+
timezone: /([Z+-].*)$/
|
|
33358
|
+
};
|
|
33359
|
+
var dateRegex = /^-?(?:(\d{3})|(\d{2})(?:-?(\d{2}))?|W(\d{2})(?:-?(\d{1}))?|)$/;
|
|
33360
|
+
var timeRegex = /^(\d{2}(?:[.,]\d*)?)(?::?(\d{2}(?:[.,]\d*)?))?(?::?(\d{2}(?:[.,]\d*)?))?$/;
|
|
33361
|
+
var timezoneRegex = /^([+-])(\d{2})(?::?(\d{2}))?$/;
|
|
33362
|
+
function splitDateString(dateString) {
|
|
33363
|
+
var dateStrings = {};
|
|
33364
|
+
var array = dateString.split(patterns$1.dateTimeDelimiter);
|
|
33365
|
+
var timeString;
|
|
33366
|
+
|
|
33367
|
+
// The regex match should only return at maximum two array elements.
|
|
33368
|
+
// [date], [time], or [date, time].
|
|
33369
|
+
if (array.length > 2) {
|
|
33370
|
+
return dateStrings;
|
|
33371
|
+
}
|
|
33372
|
+
if (/:/.test(array[0])) {
|
|
33373
|
+
timeString = array[0];
|
|
33374
|
+
} else {
|
|
33375
|
+
dateStrings.date = array[0];
|
|
33376
|
+
timeString = array[1];
|
|
33377
|
+
if (patterns$1.timeZoneDelimiter.test(dateStrings.date)) {
|
|
33378
|
+
dateStrings.date = dateString.split(patterns$1.timeZoneDelimiter)[0];
|
|
33379
|
+
timeString = dateString.substr(dateStrings.date.length, dateString.length);
|
|
33380
|
+
}
|
|
33381
|
+
}
|
|
33382
|
+
if (timeString) {
|
|
33383
|
+
var token = patterns$1.timezone.exec(timeString);
|
|
33384
|
+
if (token) {
|
|
33385
|
+
dateStrings.time = timeString.replace(token[1], '');
|
|
33386
|
+
dateStrings.timezone = token[1];
|
|
33387
|
+
} else {
|
|
33388
|
+
dateStrings.time = timeString;
|
|
33389
|
+
}
|
|
33390
|
+
}
|
|
33391
|
+
return dateStrings;
|
|
33392
|
+
}
|
|
33393
|
+
function parseYear(dateString, additionalDigits) {
|
|
33394
|
+
var regex = new RegExp('^(?:(\\d{4}|[+-]\\d{' + (4 + additionalDigits) + '})|(\\d{2}|[+-]\\d{' + (2 + additionalDigits) + '})$)');
|
|
33395
|
+
var captures = dateString.match(regex);
|
|
33396
|
+
// Invalid ISO-formatted year
|
|
33397
|
+
if (!captures) return {
|
|
33398
|
+
year: NaN,
|
|
33399
|
+
restDateString: ''
|
|
33400
|
+
};
|
|
33401
|
+
var year = captures[1] ? parseInt(captures[1]) : null;
|
|
33402
|
+
var century = captures[2] ? parseInt(captures[2]) : null;
|
|
33403
|
+
|
|
33404
|
+
// either year or century is null, not both
|
|
33405
|
+
return {
|
|
33406
|
+
year: century === null ? year : century * 100,
|
|
33407
|
+
restDateString: dateString.slice((captures[1] || captures[2]).length)
|
|
33408
|
+
};
|
|
33409
|
+
}
|
|
33410
|
+
function parseDate(dateString, year) {
|
|
33411
|
+
// Invalid ISO-formatted year
|
|
33412
|
+
if (year === null) return new Date(NaN);
|
|
33413
|
+
var captures = dateString.match(dateRegex);
|
|
33414
|
+
// Invalid ISO-formatted string
|
|
33415
|
+
if (!captures) return new Date(NaN);
|
|
33416
|
+
var isWeekDate = !!captures[4];
|
|
33417
|
+
var dayOfYear = parseDateUnit(captures[1]);
|
|
33418
|
+
var month = parseDateUnit(captures[2]) - 1;
|
|
33419
|
+
var day = parseDateUnit(captures[3]);
|
|
33420
|
+
var week = parseDateUnit(captures[4]);
|
|
33421
|
+
var dayOfWeek = parseDateUnit(captures[5]) - 1;
|
|
33422
|
+
if (isWeekDate) {
|
|
33423
|
+
if (!validateWeekDate(year, week, dayOfWeek)) {
|
|
33424
|
+
return new Date(NaN);
|
|
33425
|
+
}
|
|
33426
|
+
return dayOfISOWeekYear(year, week, dayOfWeek);
|
|
33427
|
+
} else {
|
|
33428
|
+
var date = new Date(0);
|
|
33429
|
+
if (!validateDate(year, month, day) || !validateDayOfYearDate(year, dayOfYear)) {
|
|
33430
|
+
return new Date(NaN);
|
|
33431
|
+
}
|
|
33432
|
+
date.setUTCFullYear(year, month, Math.max(dayOfYear, day));
|
|
33433
|
+
return date;
|
|
33434
|
+
}
|
|
33435
|
+
}
|
|
33436
|
+
function parseDateUnit(value) {
|
|
33437
|
+
return value ? parseInt(value) : 1;
|
|
33438
|
+
}
|
|
33439
|
+
function parseTime(timeString) {
|
|
33440
|
+
var captures = timeString.match(timeRegex);
|
|
33441
|
+
if (!captures) return NaN; // Invalid ISO-formatted time
|
|
33442
|
+
|
|
33443
|
+
var hours = parseTimeUnit(captures[1]);
|
|
33444
|
+
var minutes = parseTimeUnit(captures[2]);
|
|
33445
|
+
var seconds = parseTimeUnit(captures[3]);
|
|
33446
|
+
if (!validateTime(hours, minutes, seconds)) {
|
|
33447
|
+
return NaN;
|
|
33448
|
+
}
|
|
33449
|
+
return hours * millisecondsInHour + minutes * millisecondsInMinute + seconds * 1000;
|
|
33450
|
+
}
|
|
33451
|
+
function parseTimeUnit(value) {
|
|
33452
|
+
return value && parseFloat(value.replace(',', '.')) || 0;
|
|
33453
|
+
}
|
|
33454
|
+
function parseTimezone(timezoneString) {
|
|
33455
|
+
if (timezoneString === 'Z') return 0;
|
|
33456
|
+
var captures = timezoneString.match(timezoneRegex);
|
|
33457
|
+
if (!captures) return 0;
|
|
33458
|
+
var sign = captures[1] === '+' ? -1 : 1;
|
|
33459
|
+
var hours = parseInt(captures[2]);
|
|
33460
|
+
var minutes = captures[3] && parseInt(captures[3]) || 0;
|
|
33461
|
+
if (!validateTimezone(hours, minutes)) {
|
|
33462
|
+
return NaN;
|
|
33463
|
+
}
|
|
33464
|
+
return sign * (hours * millisecondsInHour + minutes * millisecondsInMinute);
|
|
33465
|
+
}
|
|
33466
|
+
function dayOfISOWeekYear(isoWeekYear, week, day) {
|
|
33467
|
+
var date = new Date(0);
|
|
33468
|
+
date.setUTCFullYear(isoWeekYear, 0, 4);
|
|
33469
|
+
var fourthOfJanuaryDay = date.getUTCDay() || 7;
|
|
33470
|
+
var diff = (week - 1) * 7 + day + 1 - fourthOfJanuaryDay;
|
|
33471
|
+
date.setUTCDate(date.getUTCDate() + diff);
|
|
33472
|
+
return date;
|
|
33473
|
+
}
|
|
33474
|
+
|
|
33475
|
+
// Validation functions
|
|
33476
|
+
|
|
33477
|
+
// February is null to handle the leap year (using ||)
|
|
33478
|
+
var daysInMonths = [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
|
|
33479
|
+
function isLeapYearIndex(year) {
|
|
33480
|
+
return year % 400 === 0 || year % 4 === 0 && year % 100 !== 0;
|
|
33481
|
+
}
|
|
33482
|
+
function validateDate(year, month, date) {
|
|
33483
|
+
return month >= 0 && month <= 11 && date >= 1 && date <= (daysInMonths[month] || (isLeapYearIndex(year) ? 29 : 28));
|
|
33484
|
+
}
|
|
33485
|
+
function validateDayOfYearDate(year, dayOfYear) {
|
|
33486
|
+
return dayOfYear >= 1 && dayOfYear <= (isLeapYearIndex(year) ? 366 : 365);
|
|
33487
|
+
}
|
|
33488
|
+
function validateWeekDate(_year, week, day) {
|
|
33489
|
+
return week >= 1 && week <= 53 && day >= 0 && day <= 6;
|
|
33490
|
+
}
|
|
33491
|
+
function validateTime(hours, minutes, seconds) {
|
|
33492
|
+
if (hours === 24) {
|
|
33493
|
+
return minutes === 0 && seconds === 0;
|
|
33494
|
+
}
|
|
33495
|
+
return seconds >= 0 && seconds < 60 && minutes >= 0 && minutes < 60 && hours >= 0 && hours < 25;
|
|
33496
|
+
}
|
|
33497
|
+
function validateTimezone(_hours, minutes) {
|
|
33498
|
+
return minutes >= 0 && minutes <= 59;
|
|
33499
|
+
}
|
|
33500
|
+
|
|
33275
33501
|
// Copyright (c) Cosmo Tech.
|
|
33276
33502
|
// Licensed under the MIT license.
|
|
33277
33503
|
|
|
33504
|
+
var decreaseDateByOffset = (date, offset) => {
|
|
33505
|
+
if (date instanceof Date === false) throw new TypeError('"date" parameter must be a Date object');
|
|
33506
|
+
return new Date(date - offset * 60 * 1000);
|
|
33507
|
+
};
|
|
33508
|
+
var increaseDateByOffset = (date, offset) => {
|
|
33509
|
+
return decreaseDateByOffset(date, -offset);
|
|
33510
|
+
};
|
|
33511
|
+
var addLocalDateToUTCOffset = date => {
|
|
33512
|
+
if (date instanceof Date === false) throw new TypeError('"date" parameter must be a Date object');
|
|
33513
|
+
// Example: if local time is 15:00, UTC time is 13:00, timezoneOffset is -120, then we need to "increase" the local
|
|
33514
|
+
// datetime by -120 to find UTC time
|
|
33515
|
+
return increaseDateByOffset(date, date.getTimezoneOffset());
|
|
33516
|
+
};
|
|
33517
|
+
var addUTCToLocalDateOffset = date => {
|
|
33518
|
+
if (date instanceof Date === false) throw new TypeError('"date" parameter must be a Date object');
|
|
33519
|
+
return decreaseDateByOffset(date, date.getTimezoneOffset());
|
|
33520
|
+
};
|
|
33521
|
+
var getDateAtMidnightUTC = date => {
|
|
33522
|
+
if (date instanceof Date === false) throw new TypeError('"date" parameter must be a Date object');
|
|
33523
|
+
return new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), 0, 0, 0));
|
|
33524
|
+
};
|
|
33278
33525
|
var parse = (dateStr, dateFormat) => {
|
|
33279
33526
|
try {
|
|
33280
33527
|
return parse$1(dateStr, dateFormat, new Date());
|
|
@@ -33282,6 +33529,7 @@ var parse = (dateStr, dateFormat) => {
|
|
|
33282
33529
|
console.error(error);
|
|
33283
33530
|
}
|
|
33284
33531
|
};
|
|
33532
|
+
var parseISO = dateStr => parseISO$1(dateStr);
|
|
33285
33533
|
var format = function format(date) {
|
|
33286
33534
|
var dateFormat = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "yyyy-MM-dd'T'HH:mm:ss.SSSX";
|
|
33287
33535
|
if (date) {
|
|
@@ -33293,9 +33541,24 @@ var format = function format(date) {
|
|
|
33293
33541
|
}
|
|
33294
33542
|
return '';
|
|
33295
33543
|
};
|
|
33544
|
+
var formatUTCDateAsLocal = function formatUTCDateAsLocal(date) {
|
|
33545
|
+
var dateFormat = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "yyyy-MM-dd'T'HH:mm:ss.SSSX";
|
|
33546
|
+
try {
|
|
33547
|
+
var dateWithReverseOffset = addLocalDateToUTCOffset(date);
|
|
33548
|
+
return format(dateWithReverseOffset, dateFormat);
|
|
33549
|
+
} catch (error) {
|
|
33550
|
+
console.error(error);
|
|
33551
|
+
}
|
|
33552
|
+
return '';
|
|
33553
|
+
};
|
|
33554
|
+
|
|
33555
|
+
// TODO: (breaking change) rename to something like "isFormatValid" to prevent confusion with the check of invalid dates
|
|
33296
33556
|
var isValid$1 = (dateStr, dateFormat) => {
|
|
33297
33557
|
return isMatch(dateStr, dateFormat);
|
|
33298
33558
|
};
|
|
33559
|
+
var isValidDate = date => {
|
|
33560
|
+
return isValid$2(date);
|
|
33561
|
+
};
|
|
33299
33562
|
var min = (dateA, dateB) => {
|
|
33300
33563
|
if (dateA && dateB) {
|
|
33301
33564
|
return dateA < dateB ? dateA : dateB;
|
|
@@ -33325,9 +33588,17 @@ var strMax = (dateStrA, dateStrB, dateFormat) => {
|
|
|
33325
33588
|
}
|
|
33326
33589
|
};
|
|
33327
33590
|
var DateUtils = {
|
|
33591
|
+
decreaseDateByOffset,
|
|
33592
|
+
increaseDateByOffset,
|
|
33593
|
+
addLocalDateToUTCOffset,
|
|
33594
|
+
addUTCToLocalDateOffset,
|
|
33595
|
+
getDateAtMidnightUTC,
|
|
33328
33596
|
parse,
|
|
33597
|
+
parseISO,
|
|
33329
33598
|
format,
|
|
33599
|
+
formatUTCDateAsLocal,
|
|
33330
33600
|
isValid: isValid$1,
|
|
33601
|
+
isValidDate,
|
|
33331
33602
|
min,
|
|
33332
33603
|
max,
|
|
33333
33604
|
strMin,
|
|
@@ -41493,6 +41764,18 @@ let Error$1 = class Error {
|
|
|
41493
41764
|
}
|
|
41494
41765
|
};
|
|
41495
41766
|
|
|
41767
|
+
var getFlattenColumnsWithoutGroups = columns => {
|
|
41768
|
+
if (columns == null) {
|
|
41769
|
+
console.warn("Columns list shouldn't be null or undefined");
|
|
41770
|
+
return [];
|
|
41771
|
+
}
|
|
41772
|
+
return columns.flatMap(columnOrGroup => {
|
|
41773
|
+
if (columnOrGroup == null) {
|
|
41774
|
+
console.warn('Null or undefined values found in columns list');
|
|
41775
|
+
}
|
|
41776
|
+
return columnOrGroup !== null && columnOrGroup !== void 0 && columnOrGroup.children ? getFlattenColumnsWithoutGroups(columnOrGroup.children) : columnOrGroup;
|
|
41777
|
+
}).filter(column => column != null);
|
|
41778
|
+
};
|
|
41496
41779
|
var _buildEmptyFieldError = (rowLineNumber, expectedCols, colIndex) => {
|
|
41497
41780
|
var errorSummary = "Empty field";
|
|
41498
41781
|
var errorLoc = "Line ".concat(rowLineNumber, ", Column ").concat(colIndex + 1, " (\"").concat(expectedCols[colIndex].field, "\")");
|
|
@@ -41635,9 +41918,9 @@ var _buildRows = (rows, hasHeader, cols) => {
|
|
|
41635
41918
|
};
|
|
41636
41919
|
var fromCSV = function fromCSV(dataStr) {
|
|
41637
41920
|
var hasHeader = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
41638
|
-
var
|
|
41921
|
+
var nestedCols = arguments.length > 2 ? arguments[2] : undefined;
|
|
41639
41922
|
var options = arguments.length > 3 ? arguments[3] : undefined;
|
|
41640
|
-
if (!hasHeader && !
|
|
41923
|
+
if (!hasHeader && !nestedCols) {
|
|
41641
41924
|
return {
|
|
41642
41925
|
error: [new Error$1('cols must be defined if hasHeader=false', null, null)]
|
|
41643
41926
|
};
|
|
@@ -41648,6 +41931,7 @@ var fromCSV = function fromCSV(dataStr) {
|
|
|
41648
41931
|
rows: []
|
|
41649
41932
|
};
|
|
41650
41933
|
}
|
|
41934
|
+
var cols = getFlattenColumnsWithoutGroups(nestedCols);
|
|
41651
41935
|
var rows = [];
|
|
41652
41936
|
var csvLines;
|
|
41653
41937
|
var emptyCols = _calculateEmptyCols(cols);
|
|
@@ -41658,7 +41942,7 @@ var fromCSV = function fromCSV(dataStr) {
|
|
|
41658
41942
|
error: [err]
|
|
41659
41943
|
};
|
|
41660
41944
|
}
|
|
41661
|
-
if (!cols) {
|
|
41945
|
+
if (!cols || cols.length === 0) {
|
|
41662
41946
|
cols = _buildCols(csvLines[0]);
|
|
41663
41947
|
}
|
|
41664
41948
|
var errors = _validateFormat(csvLines, hasHeader, cols, options);
|
|
@@ -41687,12 +41971,13 @@ var _generateRows = function _generateRows(rows, cols) {
|
|
|
41687
41971
|
var rowSep = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '\n';
|
|
41688
41972
|
return rows.map(row => _generateRow(row, cols, colSep)).join(rowSep);
|
|
41689
41973
|
};
|
|
41690
|
-
var toCSV = (rows,
|
|
41691
|
-
if (
|
|
41974
|
+
var toCSV = (rows, nestedCols, options) => {
|
|
41975
|
+
if (nestedCols == null || nestedCols.length === 0) {
|
|
41692
41976
|
return {
|
|
41693
41977
|
error: ["Cols must be defined"]
|
|
41694
41978
|
};
|
|
41695
41979
|
}
|
|
41980
|
+
var cols = getFlattenColumnsWithoutGroups(nestedCols);
|
|
41696
41981
|
if (!rows) {
|
|
41697
41982
|
rows = [];
|
|
41698
41983
|
}
|
|
@@ -41710,10 +41995,11 @@ var toCSV = (rows, cols, options) => {
|
|
|
41710
41995
|
|
|
41711
41996
|
// TODO: some metadata of cols & options ('acceptsEmptyFields', columns types, dates format, ...) are not used right
|
|
41712
41997
|
// now, but they could be used in a future version to improve the format of the exported Excel file
|
|
41713
|
-
var toXLSX = (rows,
|
|
41998
|
+
var toXLSX = (rows, nestedCols, options) => {
|
|
41714
41999
|
if (!rows) {
|
|
41715
42000
|
rows = [];
|
|
41716
42001
|
}
|
|
42002
|
+
var cols = getFlattenColumnsWithoutGroups(nestedCols);
|
|
41717
42003
|
options = _objectSpread2(_objectSpread2({}, DEFAULT_XLSX_EXPORT_OPTIONS), options);
|
|
41718
42004
|
var header = options.writeHeader ? cols.map(col => col.field) : null;
|
|
41719
42005
|
return XLSXUtils.write(rows, header);
|
|
@@ -41721,9 +42007,9 @@ var toXLSX = (rows, cols, options) => {
|
|
|
41721
42007
|
var fromXLSX = /*#__PURE__*/function () {
|
|
41722
42008
|
var _ref2 = _asyncToGenerator(function* (fileBlob) {
|
|
41723
42009
|
var hasHeader = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
41724
|
-
var
|
|
42010
|
+
var nestedCols = arguments.length > 2 ? arguments[2] : undefined;
|
|
41725
42011
|
var options = arguments.length > 3 ? arguments[3] : undefined;
|
|
41726
|
-
if (!hasHeader && !
|
|
42012
|
+
if (!hasHeader && !nestedCols) {
|
|
41727
42013
|
return {
|
|
41728
42014
|
error: [new Error$1('cols must be defined if hasHeader=false', null, null)]
|
|
41729
42015
|
};
|
|
@@ -41734,6 +42020,7 @@ var fromXLSX = /*#__PURE__*/function () {
|
|
|
41734
42020
|
rows: []
|
|
41735
42021
|
};
|
|
41736
42022
|
}
|
|
42023
|
+
var cols = getFlattenColumnsWithoutGroups(nestedCols);
|
|
41737
42024
|
var rows = [];
|
|
41738
42025
|
var xlsxLines;
|
|
41739
42026
|
var emptyCols = _calculateEmptyCols(cols);
|
|
@@ -41745,7 +42032,7 @@ var fromXLSX = /*#__PURE__*/function () {
|
|
|
41745
42032
|
error: [new Error$1((err === null || err === void 0 ? void 0 : err.message) || err, fileBlob.name, (err === null || err === void 0 ? void 0 : err.stack) || null)]
|
|
41746
42033
|
};
|
|
41747
42034
|
}
|
|
41748
|
-
if (!cols) {
|
|
42035
|
+
if (!cols || cols.length === 0) {
|
|
41749
42036
|
cols = _buildCols(xlsxLines[0]);
|
|
41750
42037
|
}
|
|
41751
42038
|
var errors = _validateFormat(xlsxLines, hasHeader, cols, options);
|
|
@@ -41765,6 +42052,7 @@ var fromXLSX = /*#__PURE__*/function () {
|
|
|
41765
42052
|
var AgGridUtils = {
|
|
41766
42053
|
fromCSV,
|
|
41767
42054
|
fromXLSX,
|
|
42055
|
+
getFlattenColumnsWithoutGroups,
|
|
41768
42056
|
toCSV,
|
|
41769
42057
|
toXLSX
|
|
41770
42058
|
};
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cosmotech/core",
|
|
3
3
|
"private": false,
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.13.0",
|
|
5
5
|
"description": "",
|
|
6
6
|
"main": "dist/index.cjs.js",
|
|
7
7
|
"module": "dist/index.esm.js",
|
|
@@ -46,7 +46,8 @@
|
|
|
46
46
|
"rollup": "^3.12.0",
|
|
47
47
|
"rollup-plugin-peer-deps-external": "^2.2.4",
|
|
48
48
|
"rollup-plugin-postcss": "^4.0.0",
|
|
49
|
-
"rollup-plugin-visualizer": "^5.5.0"
|
|
49
|
+
"rollup-plugin-visualizer": "^5.5.0",
|
|
50
|
+
"timezone-mock": "^1.3.6"
|
|
50
51
|
},
|
|
51
52
|
"dependencies": {
|
|
52
53
|
"csv-string": "^4.0.1",
|