@cosmotech/core 1.12.0 → 1.14.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 +18 -0
- package/dist/index.cjs.js +322 -31
- package/dist/index.esm.js +322 -31
- package/package.json +3 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,21 @@
|
|
|
1
|
+
## **1.14.0** <sub><sup>2023-09-29 (bbcde1f419e4df5189974e7e9f0bbdb50c29f34d...07ada074524a18d23c39792b735590832414324e)</sup></sub>
|
|
2
|
+
|
|
3
|
+
### Features
|
|
4
|
+
* add isExtensionInFileTypeFilter function ([bbcde1f](https://github.com/Cosmo-Tech/webapp-component-core/commit/bbcde1f419e4df5189974e7e9f0bbdb50c29f34d))
|
|
5
|
+
* add a function to assign headerName to all columns ([6dff900](https://github.com/Cosmo-Tech/webapp-component-core/commit/6dff900755e3900e03145ca8ae3b1d7edb0d434b))
|
|
6
|
+
|
|
7
|
+
### Bug Fixes
|
|
8
|
+
* fix error thrown by getExtensionFromFileName when input is not a string ([ad604df](https://github.com/Cosmo-Tech/webapp-component-core/commit/ad604df1facb1155ccc51aac1edadaf71721f779))
|
|
9
|
+
* fix Excel file parsing when columns don't have types defined ([4037f68](https://github.com/Cosmo-Tech/webapp-component-core/commit/4037f689e81d0a5e9719feb500445729fa904064))
|
|
10
|
+
|
|
11
|
+
<br>
|
|
12
|
+
|
|
13
|
+
## **1.13.0** <sub><sup>2023-09-22 (9dd046f...45122b9)</sup></sub>
|
|
14
|
+
|
|
15
|
+
### Features
|
|
16
|
+
|
|
17
|
+
- add utils functions for dates and timezones ([f784395](https://github.com/Cosmo-Tech/webapp-component-core/commit/f784395))
|
|
18
|
+
|
|
1
19
|
## **1.12.0** <sub><sup>2023-09-05 (e96188d...05e2b63)</sup></sub>
|
|
2
20
|
|
|
3
21
|
### Features
|
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,
|
|
@@ -33344,7 +33615,8 @@ var _castCellValueToStr = cellValue => {
|
|
|
33344
33615
|
};
|
|
33345
33616
|
var _dateCellsToString = (cols, data, hasHeader, dateFormat) => {
|
|
33346
33617
|
cols.forEach((column, i) => {
|
|
33347
|
-
|
|
33618
|
+
var _column$type;
|
|
33619
|
+
if (column !== null && column !== void 0 && (_column$type = column.type) !== null && _column$type !== void 0 && _column$type.includes('date')) {
|
|
33348
33620
|
for (var j = 0 + hasHeader; j < data.length; j++) {
|
|
33349
33621
|
var dateCell = data[j][i];
|
|
33350
33622
|
if (dateCell instanceof Date) {
|
|
@@ -41507,6 +41779,18 @@ var getFlattenColumnsWithoutGroups = columns => {
|
|
|
41507
41779
|
return columnOrGroup !== null && columnOrGroup !== void 0 && columnOrGroup.children ? getFlattenColumnsWithoutGroups(columnOrGroup.children) : columnOrGroup;
|
|
41508
41780
|
}).filter(column => column != null);
|
|
41509
41781
|
};
|
|
41782
|
+
var getColumnsWithHeaderName = columns => {
|
|
41783
|
+
if (!Array.isArray(columns)) {
|
|
41784
|
+
console.warn('Columns list must be an array');
|
|
41785
|
+
return [];
|
|
41786
|
+
}
|
|
41787
|
+
columns.forEach(columnOrGroup => {
|
|
41788
|
+
if (columnOrGroup !== null && columnOrGroup !== void 0 && columnOrGroup.children) getColumnsWithHeaderName(columnOrGroup.children);else {
|
|
41789
|
+
if (columnOrGroup.headerName === undefined) columnOrGroup.headerName = columnOrGroup.field;
|
|
41790
|
+
}
|
|
41791
|
+
});
|
|
41792
|
+
return columns;
|
|
41793
|
+
};
|
|
41510
41794
|
var _buildEmptyFieldError = (rowLineNumber, expectedCols, colIndex) => {
|
|
41511
41795
|
var errorSummary = "Empty field";
|
|
41512
41796
|
var errorLoc = "Line ".concat(rowLineNumber, ", Column ").concat(colIndex + 1, " (\"").concat(expectedCols[colIndex].field, "\")");
|
|
@@ -41784,6 +42068,7 @@ var AgGridUtils = {
|
|
|
41784
42068
|
fromCSV,
|
|
41785
42069
|
fromXLSX,
|
|
41786
42070
|
getFlattenColumnsWithoutGroups,
|
|
42071
|
+
getColumnsWithHeaderName,
|
|
41787
42072
|
toCSV,
|
|
41788
42073
|
toXLSX
|
|
41789
42074
|
};
|
|
@@ -41863,7 +42148,7 @@ var getBaseNameFromFileName = fileName => {
|
|
|
41863
42148
|
return baseName;
|
|
41864
42149
|
};
|
|
41865
42150
|
var getExtensionFromFileName = fileName => {
|
|
41866
|
-
if (fileName.indexOf('.') === -1) {
|
|
42151
|
+
if (typeof fileName !== 'string' || fileName.indexOf('.') === -1) {
|
|
41867
42152
|
return '';
|
|
41868
42153
|
}
|
|
41869
42154
|
var nameParts = fileName.split('.');
|
|
@@ -41874,9 +42159,15 @@ var getExtensionFromFileName = fileName => {
|
|
|
41874
42159
|
}
|
|
41875
42160
|
return extension;
|
|
41876
42161
|
};
|
|
42162
|
+
var isExtensionInFileTypeFilter = (extension, fileTypeFilter) => {
|
|
42163
|
+
if (typeof extension !== 'string' || typeof fileTypeFilter !== 'string') return false;
|
|
42164
|
+
var fileTypes = fileTypeFilter.split(',').map(fileType => fileType.replace('.', '').trim());
|
|
42165
|
+
return fileTypes.includes(extension);
|
|
42166
|
+
};
|
|
41877
42167
|
var PathUtils = {
|
|
41878
42168
|
getBaseNameFromFileName,
|
|
41879
|
-
getExtensionFromFileName
|
|
42169
|
+
getExtensionFromFileName,
|
|
42170
|
+
isExtensionInFileTypeFilter
|
|
41880
42171
|
};
|
|
41881
42172
|
|
|
41882
42173
|
// Copyright (c) Cosmo Tech.
|
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,
|
|
@@ -33342,7 +33613,8 @@ var _castCellValueToStr = cellValue => {
|
|
|
33342
33613
|
};
|
|
33343
33614
|
var _dateCellsToString = (cols, data, hasHeader, dateFormat) => {
|
|
33344
33615
|
cols.forEach((column, i) => {
|
|
33345
|
-
|
|
33616
|
+
var _column$type;
|
|
33617
|
+
if (column !== null && column !== void 0 && (_column$type = column.type) !== null && _column$type !== void 0 && _column$type.includes('date')) {
|
|
33346
33618
|
for (var j = 0 + hasHeader; j < data.length; j++) {
|
|
33347
33619
|
var dateCell = data[j][i];
|
|
33348
33620
|
if (dateCell instanceof Date) {
|
|
@@ -41505,6 +41777,18 @@ var getFlattenColumnsWithoutGroups = columns => {
|
|
|
41505
41777
|
return columnOrGroup !== null && columnOrGroup !== void 0 && columnOrGroup.children ? getFlattenColumnsWithoutGroups(columnOrGroup.children) : columnOrGroup;
|
|
41506
41778
|
}).filter(column => column != null);
|
|
41507
41779
|
};
|
|
41780
|
+
var getColumnsWithHeaderName = columns => {
|
|
41781
|
+
if (!Array.isArray(columns)) {
|
|
41782
|
+
console.warn('Columns list must be an array');
|
|
41783
|
+
return [];
|
|
41784
|
+
}
|
|
41785
|
+
columns.forEach(columnOrGroup => {
|
|
41786
|
+
if (columnOrGroup !== null && columnOrGroup !== void 0 && columnOrGroup.children) getColumnsWithHeaderName(columnOrGroup.children);else {
|
|
41787
|
+
if (columnOrGroup.headerName === undefined) columnOrGroup.headerName = columnOrGroup.field;
|
|
41788
|
+
}
|
|
41789
|
+
});
|
|
41790
|
+
return columns;
|
|
41791
|
+
};
|
|
41508
41792
|
var _buildEmptyFieldError = (rowLineNumber, expectedCols, colIndex) => {
|
|
41509
41793
|
var errorSummary = "Empty field";
|
|
41510
41794
|
var errorLoc = "Line ".concat(rowLineNumber, ", Column ").concat(colIndex + 1, " (\"").concat(expectedCols[colIndex].field, "\")");
|
|
@@ -41782,6 +42066,7 @@ var AgGridUtils = {
|
|
|
41782
42066
|
fromCSV,
|
|
41783
42067
|
fromXLSX,
|
|
41784
42068
|
getFlattenColumnsWithoutGroups,
|
|
42069
|
+
getColumnsWithHeaderName,
|
|
41785
42070
|
toCSV,
|
|
41786
42071
|
toXLSX
|
|
41787
42072
|
};
|
|
@@ -41861,7 +42146,7 @@ var getBaseNameFromFileName = fileName => {
|
|
|
41861
42146
|
return baseName;
|
|
41862
42147
|
};
|
|
41863
42148
|
var getExtensionFromFileName = fileName => {
|
|
41864
|
-
if (fileName.indexOf('.') === -1) {
|
|
42149
|
+
if (typeof fileName !== 'string' || fileName.indexOf('.') === -1) {
|
|
41865
42150
|
return '';
|
|
41866
42151
|
}
|
|
41867
42152
|
var nameParts = fileName.split('.');
|
|
@@ -41872,9 +42157,15 @@ var getExtensionFromFileName = fileName => {
|
|
|
41872
42157
|
}
|
|
41873
42158
|
return extension;
|
|
41874
42159
|
};
|
|
42160
|
+
var isExtensionInFileTypeFilter = (extension, fileTypeFilter) => {
|
|
42161
|
+
if (typeof extension !== 'string' || typeof fileTypeFilter !== 'string') return false;
|
|
42162
|
+
var fileTypes = fileTypeFilter.split(',').map(fileType => fileType.replace('.', '').trim());
|
|
42163
|
+
return fileTypes.includes(extension);
|
|
42164
|
+
};
|
|
41875
42165
|
var PathUtils = {
|
|
41876
42166
|
getBaseNameFromFileName,
|
|
41877
|
-
getExtensionFromFileName
|
|
42167
|
+
getExtensionFromFileName,
|
|
42168
|
+
isExtensionInFileTypeFilter
|
|
41878
42169
|
};
|
|
41879
42170
|
|
|
41880
42171
|
// Copyright (c) Cosmo Tech.
|
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.14.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",
|