@sunertech/docx 10.0.1 → 10.0.3

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.
@@ -10489,9 +10489,34 @@ var __async = (__this, __arguments, generator) => {
10489
10489
  }
10490
10490
  return o;
10491
10491
  }
10492
+ function Base64_encode_arr(input) {
10493
+ var o = "";
10494
+ var c1 = 0, c2 = 0, c3 = 0, e1 = 0, e2 = 0, e3 = 0, e4 = 0;
10495
+ for (var i = 0; i < input.length; ) {
10496
+ c1 = input[i++];
10497
+ e1 = c1 >> 2;
10498
+ c2 = input[i++];
10499
+ e2 = (c1 & 3) << 4 | c2 >> 4;
10500
+ c3 = input[i++];
10501
+ e3 = (c2 & 15) << 2 | c3 >> 6;
10502
+ e4 = c3 & 63;
10503
+ if (isNaN(c2)) {
10504
+ e3 = e4 = 64;
10505
+ } else if (isNaN(c3)) {
10506
+ e4 = 64;
10507
+ }
10508
+ o += Base64_map.charAt(e1) + Base64_map.charAt(e2) + Base64_map.charAt(e3) + Base64_map.charAt(e4);
10509
+ }
10510
+ return o;
10511
+ }
10492
10512
  function Base64_decode(input) {
10493
10513
  var o = "";
10494
10514
  var c1 = 0, c2 = 0, c3 = 0, e1 = 0, e2 = 0, e3 = 0, e4 = 0;
10515
+ if (input.slice(0, 5) == "data:") {
10516
+ var i = input.slice(0, 1024).indexOf(";base64,");
10517
+ if (i > -1)
10518
+ input = input.slice(i + 8);
10519
+ }
10495
10520
  input = input.replace(/[^\w\+\/\=]/g, "");
10496
10521
  for (var i = 0; i < input.length; ) {
10497
10522
  e1 = Base64_map.indexOf(input.charAt(i++));
@@ -10529,6 +10554,13 @@ var __async = (__this, __arguments, generator) => {
10529
10554
  return function() {
10530
10555
  };
10531
10556
  })();
10557
+ var buf_utf16le = /* @__PURE__ */ (function() {
10558
+ if (typeof Buffer === "undefined") return false;
10559
+ var x = Buffer_from([65, 0]);
10560
+ if (!x) return false;
10561
+ var o = x.toString("utf16le");
10562
+ return o.length == 1;
10563
+ })();
10532
10564
  function new_raw_buf(len) {
10533
10565
  if (has_buf) return Buffer.alloc ? Buffer.alloc(len) : new Buffer(len);
10534
10566
  return typeof Uint8Array != "undefined" ? new Uint8Array(len) : new Array(len);
@@ -10574,9 +10606,8 @@ var __async = (__this, __arguments, generator) => {
10574
10606
  for (i = 0, maxlen = 0; i < bufs.length; maxlen += len, ++i) {
10575
10607
  len = bufs[i].length;
10576
10608
  if (bufs[i] instanceof Uint8Array) o.set(bufs[i], maxlen);
10577
- else if (typeof bufs[i] == "string") {
10578
- throw "wtf";
10579
- } else o.set(new Uint8Array(bufs[i]), maxlen);
10609
+ else if (typeof bufs[i] == "string") o.set(new Uint8Array(s2a(bufs[i])), maxlen);
10610
+ else o.set(new Uint8Array(bufs[i]), maxlen);
10580
10611
  }
10581
10612
  return o;
10582
10613
  }
@@ -10845,8 +10876,19 @@ var __async = (__this, __arguments, generator) => {
10845
10876
  var q = Math.floor(sgn * P / Q);
10846
10877
  return [q, sgn * P - q * Q, Q];
10847
10878
  }
10879
+ function SSF_normalize_xl_unsafe(v) {
10880
+ var s = v.toPrecision(16);
10881
+ if (s.indexOf("e") > -1) {
10882
+ var m = s.slice(0, s.indexOf("e"));
10883
+ m = m.indexOf(".") > -1 ? m.slice(0, m.slice(0, 2) == "0." ? 17 : 16) : m.slice(0, 15) + fill("0", m.length - 15);
10884
+ return m + s.slice(s.indexOf("e"));
10885
+ }
10886
+ var n = s.indexOf(".") > -1 ? s.slice(0, s.slice(0, 2) == "0." ? 17 : 16) : s.slice(0, 15) + fill("0", s.length - 15);
10887
+ return Number(n);
10888
+ }
10848
10889
  function SSF_parse_date_code(v, opts, b2) {
10849
10890
  if (v > 2958465 || v < 0) return null;
10891
+ v = SSF_normalize_xl_unsafe(v);
10850
10892
  var date = v | 0, time = Math.floor(86400 * (v - date)), dow = 0;
10851
10893
  var dout = [];
10852
10894
  var out = { D: date, T: time, u: 86400 * (v - date) - time, y: 0, m: 0, d: 0, H: 0, M: 0, S: 0, q: 0 };
@@ -10886,15 +10928,6 @@ var __async = (__this, __arguments, generator) => {
10886
10928
  out.q = dow;
10887
10929
  return out;
10888
10930
  }
10889
- var SSFbasedate = /* @__PURE__ */ new Date(1899, 11, 31, 0, 0, 0);
10890
- var SSFdnthresh = /* @__PURE__ */ SSFbasedate.getTime();
10891
- var SSFbase1904 = /* @__PURE__ */ new Date(1900, 2, 1, 0, 0, 0);
10892
- function datenum_local(v, date1904) {
10893
- var epoch = /* @__PURE__ */ v.getTime();
10894
- if (date1904) epoch -= 1461 * 24 * 60 * 60 * 1e3;
10895
- else if (v >= SSFbase1904) epoch += 24 * 60 * 60 * 1e3;
10896
- return (epoch - (SSFdnthresh + (/* @__PURE__ */ v.getTimezoneOffset() - /* @__PURE__ */ SSFbasedate.getTimezoneOffset()) * 6e4)) / (24 * 60 * 60 * 1e3);
10897
- }
10898
10931
  function SSF_strip_decimal(o) {
10899
10932
  return o.indexOf(".") == -1 ? o : o.replace(/(?:\.0*|(\.\d*[1-9])0+)$/, "$1");
10900
10933
  }
@@ -10915,6 +10948,7 @@ var __async = (__this, __arguments, generator) => {
10915
10948
  return o.length > (v < 0 ? 12 : 11) || o === "0" || o === "-0" ? v.toPrecision(6) : o;
10916
10949
  }
10917
10950
  function SSF_general_num(v) {
10951
+ if (!isFinite(v)) return isNaN(v) ? "#NUM!" : "#DIV/0!";
10918
10952
  var V = Math.floor(Math.log(Math.abs(v)) * Math.LOG10E), o;
10919
10953
  if (V >= -4 && V <= -1) o = v.toPrecision(10 + V);
10920
10954
  else if (Math.abs(V) <= 9) o = SSF_small_exp(v);
@@ -10934,7 +10968,7 @@ var __async = (__this, __arguments, generator) => {
10934
10968
  return "";
10935
10969
  case "object":
10936
10970
  if (v == null) return "";
10937
- if (v instanceof Date) return SSF_format(14, datenum_local(v, opts && opts.date1904), opts);
10971
+ if (v instanceof Date) return SSF_format(14, datenum(v, opts && opts.date1904), opts);
10938
10972
  }
10939
10973
  throw new Error("unsupported value in General format: " + v);
10940
10974
  }
@@ -11047,7 +11081,7 @@ var __async = (__this, __arguments, generator) => {
11047
11081
  break;
11048
11082
  case "[s]":
11049
11083
  case "[ss]":
11050
- out = ((val.D * 24 + val.H) * 60 + val.M) * 60 + Math.round(val.S + val.u);
11084
+ out = ((val.D * 24 + val.H) * 60 + val.M) * 60 + (ss0 == 0 ? Math.round(val.S + val.u) : val.S);
11051
11085
  break;
11052
11086
  default:
11053
11087
  throw "bad abstime format: " + fmt;
@@ -11118,7 +11152,7 @@ var __async = (__this, __arguments, generator) => {
11118
11152
  return sign2 + (aval === 0 ? "" : "" + aval) + fill(" ", r[1].length + 2 + r[4].length);
11119
11153
  }
11120
11154
  var dec1 = /^#*0*\.([0#]+)/;
11121
- var closeparen = /\).*[0#]/;
11155
+ var closeparen = /\)[^)]*[0#]/;
11122
11156
  var phone = /\(###\) ###\\?-####/;
11123
11157
  function hashq(str) {
11124
11158
  var o = "", cc;
@@ -11602,7 +11636,7 @@ var __async = (__this, __arguments, generator) => {
11602
11636
  var q = { t: c, v: c };
11603
11637
  if (dt == null) dt = SSF_parse_date_code(v, opts);
11604
11638
  if (fmt.substr(i, 3).toUpperCase() === "A/P") {
11605
- if (dt != null) q.v = dt.H >= 12 ? "P" : "A";
11639
+ if (dt != null) q.v = dt.H >= 12 ? fmt.charAt(i + 2) : c;
11606
11640
  q.t = "T";
11607
11641
  hr = "h";
11608
11642
  i += 3;
@@ -11709,15 +11743,21 @@ var __async = (__this, __arguments, generator) => {
11709
11743
  if (bt < 1) bt = 1;
11710
11744
  break;
11711
11745
  case "s":
11712
- if (ssm = out[i].v.match(/\.0+$/)) ss0 = Math.max(ss0, ssm[0].length - 1);
11746
+ if (ssm = out[i].v.match(/\.0+$/)) {
11747
+ ss0 = Math.max(ss0, ssm[0].length - 1);
11748
+ bt = 4;
11749
+ }
11713
11750
  if (bt < 3) bt = 3;
11714
11751
  /* falls through */
11715
11752
  case "d":
11716
11753
  case "y":
11717
- case "M":
11718
11754
  case "e":
11719
11755
  lst = out[i].t;
11720
11756
  break;
11757
+ case "M":
11758
+ lst = out[i].t;
11759
+ if (bt < 2) bt = 2;
11760
+ break;
11721
11761
  case "m":
11722
11762
  if (lst === "s") {
11723
11763
  out[i].t = "M";
@@ -11732,10 +11772,13 @@ var __async = (__this, __arguments, generator) => {
11732
11772
  if (bt < 3 && out[i].v.match(/[Ss]/)) bt = 3;
11733
11773
  }
11734
11774
  }
11775
+ var _dt;
11735
11776
  switch (bt) {
11736
11777
  case 0:
11737
11778
  break;
11738
11779
  case 1:
11780
+ case 2:
11781
+ case 3:
11739
11782
  if (dt.u >= 0.5) {
11740
11783
  dt.u = 0;
11741
11784
  ++dt.S;
@@ -11748,9 +11791,30 @@ var __async = (__this, __arguments, generator) => {
11748
11791
  dt.M = 0;
11749
11792
  ++dt.H;
11750
11793
  }
11794
+ if (dt.H >= 24) {
11795
+ dt.H = 0;
11796
+ ++dt.D;
11797
+ _dt = SSF_parse_date_code(dt.D);
11798
+ _dt.u = dt.u;
11799
+ _dt.S = dt.S;
11800
+ _dt.M = dt.M;
11801
+ _dt.H = dt.H;
11802
+ dt = _dt;
11803
+ }
11751
11804
  break;
11752
- case 2:
11753
- if (dt.u >= 0.5) {
11805
+ case 4:
11806
+ switch (ss0) {
11807
+ case 1:
11808
+ dt.u = Math.round(dt.u * 10) / 10;
11809
+ break;
11810
+ case 2:
11811
+ dt.u = Math.round(dt.u * 100) / 100;
11812
+ break;
11813
+ case 3:
11814
+ dt.u = Math.round(dt.u * 1e3) / 1e3;
11815
+ break;
11816
+ }
11817
+ if (dt.u >= 1) {
11754
11818
  dt.u = 0;
11755
11819
  ++dt.S;
11756
11820
  }
@@ -11758,6 +11822,20 @@ var __async = (__this, __arguments, generator) => {
11758
11822
  dt.S = 0;
11759
11823
  ++dt.M;
11760
11824
  }
11825
+ if (dt.M >= 60) {
11826
+ dt.M = 0;
11827
+ ++dt.H;
11828
+ }
11829
+ if (dt.H >= 24) {
11830
+ dt.H = 0;
11831
+ ++dt.D;
11832
+ _dt = SSF_parse_date_code(dt.D);
11833
+ _dt.u = dt.u;
11834
+ _dt.S = dt.S;
11835
+ _dt.M = dt.M;
11836
+ _dt.H = dt.H;
11837
+ dt = _dt;
11838
+ }
11761
11839
  break;
11762
11840
  }
11763
11841
  var nstr = "", jj;
@@ -11906,6 +11984,7 @@ var __async = (__this, __arguments, generator) => {
11906
11984
  if (l < 4 && lat > -1) --l;
11907
11985
  if (fmt.length > 4) throw new Error("cannot find right format for |" + fmt.join("|") + "|");
11908
11986
  if (typeof v !== "number") return [4, fmt.length === 4 || lat > -1 ? fmt[fmt.length - 1] : "@"];
11987
+ if (typeof v === "number" && !isFinite(v)) v = 0;
11909
11988
  switch (fmt.length) {
11910
11989
  case 1:
11911
11990
  fmt = lat > -1 ? ["General", "General", "General", fmt[0]] : [fmt[0], fmt[0], fmt[0], "@"];
@@ -11942,12 +12021,14 @@ var __async = (__this, __arguments, generator) => {
11942
12021
  break;
11943
12022
  }
11944
12023
  if (SSF_isgeneral(sfmt, 0)) return SSF_general(v, o);
11945
- if (v instanceof Date) v = datenum_local(v, o.date1904);
12024
+ if (v instanceof Date) v = datenum(v, o.date1904);
11946
12025
  var f = choose_fmt(sfmt, v);
11947
12026
  if (SSF_isgeneral(f[1])) return SSF_general(v, o);
11948
12027
  if (v === true) v = "TRUE";
11949
12028
  else if (v === false) v = "FALSE";
11950
12029
  else if (v === "" || v == null) return "";
12030
+ else if (isNaN(v) && f[1].indexOf("0") > -1) return "#NUM!";
12031
+ else if (!isFinite(v) && f[1].indexOf("0") > -1) return "#DIV/0!";
11951
12032
  return eval_fmt(f[1], v, o, f[0]);
11952
12033
  }
11953
12034
  function SSF_load(fmt, idx) {
@@ -11975,6 +12056,13 @@ var __async = (__this, __arguments, generator) => {
11975
12056
  function make_ssf() {
11976
12057
  table_fmt = SSF_init_table();
11977
12058
  }
12059
+ var bad_formats = {
12060
+ "d.m": "d\\.m"
12061
+ // Issue #2571 Google Sheets writes invalid format 'd.m', correct format is 'd"."m' or 'd\\.m'
12062
+ };
12063
+ function SSF__load(fmt, idx) {
12064
+ return SSF_load(bad_formats[fmt] || fmt, idx);
12065
+ }
11978
12066
  var CRC32 = /* @__PURE__ */ (function() {
11979
12067
  var CRC322 = {};
11980
12068
  CRC322.version = "1.2.0";
@@ -12003,7 +12091,7 @@ var __async = (__this, __arguments, generator) => {
12003
12091
  for (c = 256 + n; c < 4096; c += 256) v = table[c] = v >>> 8 ^ T[v & 255];
12004
12092
  }
12005
12093
  var out = [];
12006
- for (n = 1; n != 16; ++n) out[n - 1] = typeof Int32Array !== "undefined" ? table.subarray(n * 256, n * 256 + 256) : table.slice(n * 256, n * 256 + 256);
12094
+ for (n = 1; n != 16; ++n) out[n - 1] = typeof Int32Array !== "undefined" && typeof table.subarray == "function" ? table.subarray(n * 256, n * 256 + 256) : table.slice(n * 256, n * 256 + 256);
12007
12095
  return out;
12008
12096
  }
12009
12097
  var TT = slice_by_16_tables(T0);
@@ -12053,8 +12141,11 @@ var __async = (__this, __arguments, generator) => {
12053
12141
  return CRC322;
12054
12142
  })();
12055
12143
  var CFB = /* @__PURE__ */ (function _CFB() {
12056
- var exports3 = {};
12057
- exports3.version = "1.2.1";
12144
+ var exports3 = (
12145
+ /*::(*/
12146
+ {}
12147
+ );
12148
+ exports3.version = "1.2.2";
12058
12149
  function namecmp(l, r) {
12059
12150
  var L = l.split("/"), R = r.split("/");
12060
12151
  for (var i2 = 0, c = 0, Z = Math.min(L.length, R.length); i2 < Z; ++i2) {
@@ -12129,6 +12220,16 @@ var __async = (__this, __arguments, generator) => {
12129
12220
  if (p.mtime) p.mt = new Date(p.mtime * 1e3);
12130
12221
  }
12131
12222
  break;
12223
+ /* ZIP64 Extended Information Field */
12224
+ case 1:
12225
+ {
12226
+ var sz1 = blob.read_shift(4), sz2 = blob.read_shift(4);
12227
+ p.usz = sz2 * Math.pow(2, 32) + sz1;
12228
+ sz1 = blob.read_shift(4);
12229
+ sz2 = blob.read_shift(4);
12230
+ p.csz = sz2 * Math.pow(2, 32) + sz1;
12231
+ }
12232
+ break;
12132
12233
  }
12133
12234
  blob.l = tgt;
12134
12235
  o[type2] = p;
@@ -12137,7 +12238,7 @@ var __async = (__this, __arguments, generator) => {
12137
12238
  }
12138
12239
  var fs;
12139
12240
  function get_fs() {
12140
- return fs || (fs = {});
12241
+ return fs || (fs = _fs);
12141
12242
  }
12142
12243
  function parse(file, options) {
12143
12244
  if (file[0] == 80 && file[1] == 75) return parse_zip(file, options);
@@ -12200,7 +12301,7 @@ var __async = (__this, __arguments, generator) => {
12200
12301
  var sectors = sectorify(file, ssz);
12201
12302
  sleuth_fat(difat_start, difat_sec_cnt, sectors, ssz, fat_addrs);
12202
12303
  var sector_list = make_sector_list(sectors, dir_start, fat_addrs, ssz);
12203
- sector_list[dir_start].name = "!Directory";
12304
+ if (dir_start < sector_list.length) sector_list[dir_start].name = "!Directory";
12204
12305
  if (nmfs > 0 && minifat_start !== ENDOFCHAIN) sector_list[minifat_start].name = "!MiniFAT";
12205
12306
  sector_list[fat_addrs[0]].name = "!FAT";
12206
12307
  sector_list.fat_addrs = fat_addrs;
@@ -12313,7 +12414,7 @@ var __async = (__this, __arguments, generator) => {
12313
12414
  if ((q2 = __readInt32LE(sector, i2 * 4)) === ENDOFCHAIN) break;
12314
12415
  fat_addrs.push(q2);
12315
12416
  }
12316
- sleuth_fat(__readInt32LE(sector, ssz - 4), cnt - 1, sectors, ssz, fat_addrs);
12417
+ if (cnt >= 1) sleuth_fat(__readInt32LE(sector, ssz - 4), cnt - 1, sectors, ssz, fat_addrs);
12317
12418
  }
12318
12419
  }
12319
12420
  function get_sector_list(sectors, start, fat_addrs, ssz, chkd) {
@@ -12501,7 +12602,8 @@ var __async = (__this, __arguments, generator) => {
12501
12602
  for (i2 = 0; i2 < data.length; ++i2) {
12502
12603
  var dad = dirname(data[i2][0]);
12503
12604
  s = fullPaths[dad];
12504
- if (!s) {
12605
+ while (!s) {
12606
+ while (dirname(dad) && !fullPaths[dirname(dad)]) dad = dirname(dad);
12505
12607
  data.push([dad, {
12506
12608
  name: filename(dad).replace("/", ""),
12507
12609
  type: 1,
@@ -12511,6 +12613,8 @@ var __async = (__this, __arguments, generator) => {
12511
12613
  content: null
12512
12614
  }]);
12513
12615
  fullPaths[dad] = true;
12616
+ dad = dirname(data[i2][0]);
12617
+ s = fullPaths[dad];
12514
12618
  }
12515
12619
  }
12516
12620
  data.sort(function(x, y) {
@@ -12650,6 +12754,10 @@ var __async = (__this, __arguments, generator) => {
12650
12754
  file = cfb.FileIndex[i2];
12651
12755
  if (i2 === 0) file.start = file.size ? file.start - 1 : ENDOFCHAIN;
12652
12756
  var _nm = i2 === 0 && _opts.root || file.name;
12757
+ if (_nm.length > 31) {
12758
+ console.error("Name " + _nm + " will be truncated to " + _nm.slice(0, 31));
12759
+ _nm = _nm.slice(0, 31);
12760
+ }
12653
12761
  flen = 2 * (_nm.length + 1);
12654
12762
  o.write_shift(64, _nm, "utf16le");
12655
12763
  o.write_shift(2, flen);
@@ -13253,6 +13361,10 @@ var __async = (__this, __arguments, generator) => {
13253
13361
  blob.l += namelen + efsz + fcsz;
13254
13362
  var L = blob.l;
13255
13363
  blob.l = offset + 4;
13364
+ if (EF && EF[1]) {
13365
+ if ((EF[1] || {}).usz) usz = EF[1].usz;
13366
+ if ((EF[1] || {}).csz) csz = EF[1].csz;
13367
+ }
13256
13368
  parse_local_file(blob, csz, usz, o, EF);
13257
13369
  blob.l = L;
13258
13370
  }
@@ -13278,7 +13390,13 @@ var __async = (__this, __arguments, generator) => {
13278
13390
  /*:: :any)*/
13279
13391
  );
13280
13392
  if ((ef[21589] || {}).mt) date = ef[21589].mt;
13281
- if (((EF || {})[21589] || {}).mt) date = EF[21589].mt;
13393
+ if ((ef[1] || {}).usz) _usz = ef[1].usz;
13394
+ if ((ef[1] || {}).csz) _csz = ef[1].csz;
13395
+ if (EF) {
13396
+ if ((EF[21589] || {}).mt) date = EF[21589].mt;
13397
+ if ((EF[1] || {}).usz) _usz = EF[1].usz;
13398
+ if ((EF[1] || {}).csz) _csz = EF[1].csz;
13399
+ }
13282
13400
  }
13283
13401
  blob.l += efsz;
13284
13402
  var data = blob.slice(blob.l, blob.l + _csz);
@@ -13287,6 +13405,7 @@ var __async = (__this, __arguments, generator) => {
13287
13405
  data = _inflateRawSync(blob, _usz);
13288
13406
  break;
13289
13407
  case 0:
13408
+ blob.l += _csz;
13290
13409
  break;
13291
13410
  // TODO: scan for magic number
13292
13411
  default:
@@ -13319,17 +13438,17 @@ var __async = (__this, __arguments, generator) => {
13319
13438
  for (i2 = 1; i2 < cfb.FullPaths.length; ++i2) {
13320
13439
  fp = cfb.FullPaths[i2].slice(root.length);
13321
13440
  fi = cfb.FileIndex[i2];
13322
- if (!fi.size || !fi.content || fp == "Sh33tJ5") continue;
13441
+ if (!fi.size || !fi.content || Array.isArray(fi.content) && fi.content.length == 0 || fp == "Sh33tJ5") continue;
13323
13442
  var start = start_cd;
13324
13443
  var namebuf = new_buf(fp.length);
13325
13444
  for (j = 0; j < fp.length; ++j) namebuf.write_shift(1, fp.charCodeAt(j) & 127);
13326
13445
  namebuf = namebuf.slice(0, namebuf.l);
13327
- crcs[fcnt] = CRC32.buf(
13446
+ crcs[fcnt] = typeof fi.content == "string" ? CRC32.bstr(fi.content, 0) : CRC32.buf(
13328
13447
  /*::((*/
13329
13448
  fi.content,
13330
13449
  0
13331
13450
  );
13332
- var outbuf = fi.content;
13451
+ var outbuf = typeof fi.content == "string" ? s2a(fi.content) : fi.content;
13333
13452
  if (method == 8) outbuf = _deflateRawSync(outbuf);
13334
13453
  o = new_buf(30);
13335
13454
  o.write_shift(4, 67324752);
@@ -13464,7 +13583,7 @@ var __async = (__this, __arguments, generator) => {
13464
13583
  for (; di < 10; ++di) {
13465
13584
  var line = data[di];
13466
13585
  if (!line || line.match(/^\s*$/)) break;
13467
- var m = line.match(/^(.*?):\s*([^\s].*)$/);
13586
+ var m = line.match(/^([^:]*?):\s*([^\s].*)$/);
13468
13587
  if (m) switch (m[1].toLowerCase()) {
13469
13588
  case "content-location":
13470
13589
  fname = m[2].trim();
@@ -13641,6 +13760,7 @@ var __async = (__this, __arguments, generator) => {
13641
13760
  };
13642
13761
  return exports3;
13643
13762
  })();
13763
+ var _fs;
13644
13764
  function blobify(data) {
13645
13765
  if (typeof data === "string") return s2ab(data);
13646
13766
  if (Array.isArray(data)) return a2u(data);
@@ -13676,6 +13796,9 @@ var __async = (__this, __arguments, generator) => {
13676
13796
  }, 6e4);
13677
13797
  return url;
13678
13798
  }
13799
+ } else if (typeof URL !== "undefined" && !URL.createObjectURL && typeof chrome === "object") {
13800
+ var b64 = "data:application/octet-stream;base64," + Base64_encode_arr(new Uint8Array(blobify(data)));
13801
+ return chrome.downloads.download({ url: b64, filename: fname, saveAs: true });
13679
13802
  }
13680
13803
  }
13681
13804
  if (typeof $ !== "undefined" && typeof File !== "undefined" && typeof Folder !== "undefined") try {
@@ -13687,7 +13810,7 @@ var __async = (__this, __arguments, generator) => {
13687
13810
  out.close();
13688
13811
  return payload;
13689
13812
  } catch (e) {
13690
- if (!e.message || !e.message.match(/onstruct/)) throw e;
13813
+ if (!e.message || e.message.indexOf("onstruct") == -1) throw e;
13691
13814
  }
13692
13815
  throw new Error("cannot save file " + fname);
13693
13816
  }
@@ -13714,34 +13837,38 @@ var __async = (__this, __arguments, generator) => {
13714
13837
  }
13715
13838
  return o;
13716
13839
  }
13717
- var basedate = /* @__PURE__ */ new Date(1899, 11, 30, 0, 0, 0);
13840
+ var dnthresh = /* @__PURE__ */ Date.UTC(1899, 11, 30, 0, 0, 0);
13841
+ var dnthresh1 = /* @__PURE__ */ Date.UTC(1899, 11, 31, 0, 0, 0);
13842
+ var dnthresh2 = /* @__PURE__ */ Date.UTC(1904, 0, 1, 0, 0, 0);
13718
13843
  function datenum(v, date1904) {
13719
13844
  var epoch = /* @__PURE__ */ v.getTime();
13720
- var dnthresh = /* @__PURE__ */ basedate.getTime() + (/* @__PURE__ */ v.getTimezoneOffset() - /* @__PURE__ */ basedate.getTimezoneOffset()) * 6e4;
13721
- return (epoch - dnthresh) / (24 * 60 * 60 * 1e3);
13722
- }
13723
- var good_pd_date_1 = /* @__PURE__ */ new Date("2017-02-19T19:06:09.000Z");
13724
- var good_pd_date = /* @__PURE__ */ isNaN(/* @__PURE__ */ good_pd_date_1.getFullYear()) ? /* @__PURE__ */ new Date("2/19/17") : good_pd_date_1;
13725
- var good_pd = /* @__PURE__ */ good_pd_date.getFullYear() == 2017;
13726
- function parseDate(str, fixdate) {
13727
- var d = new Date(str);
13728
- if (good_pd) {
13729
- if (fixdate > 0) d.setTime(d.getTime() + d.getTimezoneOffset() * 60 * 1e3);
13730
- else if (fixdate < 0) d.setTime(d.getTime() - d.getTimezoneOffset() * 60 * 1e3);
13731
- return d;
13845
+ var res = (epoch - dnthresh) / (24 * 60 * 60 * 1e3);
13846
+ if (date1904) {
13847
+ res -= 1462;
13848
+ return res < -1402 ? res - 1 : res;
13732
13849
  }
13733
- if (str instanceof Date) return str;
13734
- if (good_pd_date.getFullYear() == 1917 && !isNaN(d.getFullYear())) {
13735
- var s = d.getFullYear();
13736
- if (str.indexOf("" + s) > -1) return d;
13737
- d.setFullYear(d.getFullYear() + 100);
13738
- return d;
13739
- }
13740
- var n = str.match(/\d+/g) || ["2017", "2", "19", "0", "0", "0"];
13741
- var out = new Date(+n[0], +n[1] - 1, +n[2], +n[3] || 0, +n[4] || 0, +n[5] || 0);
13742
- if (str.indexOf("Z") > -1) out = new Date(out.getTime() - out.getTimezoneOffset() * 60 * 1e3);
13850
+ return res < 60 ? res - 1 : res;
13851
+ }
13852
+ function numdate(v) {
13853
+ if (v >= 60 && v < 61) return v;
13854
+ var out = /* @__PURE__ */ new Date();
13855
+ out.setTime((v > 60 ? v : v + 1) * 24 * 60 * 60 * 1e3 + dnthresh);
13743
13856
  return out;
13744
13857
  }
13858
+ var pdre1 = /^(\d+):(\d+)(:\d+)?(\.\d+)?$/;
13859
+ var pdre2 = /^(\d+)-(\d+)-(\d+)$/;
13860
+ var pdre3 = /^(\d+)-(\d+)-(\d+)[T ](\d+):(\d+)(:\d+)?(\.\d+)?$/;
13861
+ function parseDate(str, date1904) {
13862
+ if (str instanceof Date) return str;
13863
+ var m = str.match(pdre1);
13864
+ 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)) * 1e3 + (m[4] ? parseInt((m[4] + "000").slice(1, 4), 10) : 0));
13865
+ m = str.match(pdre2);
13866
+ if (m) return new Date(Date.UTC(+m[1], +m[2] - 1, +m[3], 0, 0, 0, 0));
13867
+ m = str.match(pdre3);
13868
+ if (m) return new Date(Date.UTC(+m[1], +m[2] - 1, +m[3], +m[4], +m[5], m[6] && parseInt(m[6].slice(1), 10) || 0, m[7] && parseInt((m[7] + "0000").slice(1, 4), 10) || 0));
13869
+ var d = new Date(str);
13870
+ return d;
13871
+ }
13745
13872
  function dup(o) {
13746
13873
  if (typeof JSON != "undefined" && !Array.isArray(o)) return JSON.parse(JSON.stringify(o));
13747
13874
  if (typeof o != "object" || o == null) return o;
@@ -13765,30 +13892,67 @@ var __async = (__this, __arguments, generator) => {
13765
13892
  return "";
13766
13893
  });
13767
13894
  if (!isNaN(v = Number(ss))) return v / wt;
13768
- ss = ss.replace(/[(](.*)[)]/, function($$, $1) {
13895
+ ss = ss.replace(/[(]([^()]*)[)]/, function($$, $1) {
13769
13896
  wt = -wt;
13770
13897
  return $1;
13771
13898
  });
13772
13899
  if (!isNaN(v = Number(ss))) return v / wt;
13773
13900
  return v;
13774
13901
  }
13902
+ var FDRE1 = /^(0?\d|1[0-2])(?:|:([0-5]?\d)(?:|(\.\d+)(?:|:([0-5]?\d))|:([0-5]?\d)(|\.\d+)))\s+([ap])m?$/;
13903
+ var FDRE2 = /^([01]?\d|2[0-3])(?:|:([0-5]?\d)(?:|(\.\d+)(?:|:([0-5]?\d))|:([0-5]?\d)(|\.\d+)))$/;
13904
+ var FDISO = /^(\d+)-(\d+)-(\d+)[T ](\d+):(\d+)(:\d+)(\.\d+)?[Z]?$/;
13905
+ var utc_append_works = (/* @__PURE__ */ new Date("6/9/69 00:00 UTC")).valueOf() == -177984e5;
13906
+ function fuzzytime1(M) {
13907
+ if (!M[2]) return new Date(Date.UTC(1899, 11, 31, +M[1] % 12 + (M[7] == "p" ? 12 : 0), 0, 0, 0));
13908
+ if (M[3]) {
13909
+ if (M[4]) return new Date(Date.UTC(1899, 11, 31, +M[1] % 12 + (M[7] == "p" ? 12 : 0), +M[2], +M[4], parseFloat(M[3]) * 1e3));
13910
+ else return new Date(Date.UTC(1899, 11, 31, M[7] == "p" ? 12 : 0, +M[1], +M[2], parseFloat(M[3]) * 1e3));
13911
+ } else if (M[5]) return new Date(Date.UTC(1899, 11, 31, +M[1] % 12 + (M[7] == "p" ? 12 : 0), +M[2], +M[5], M[6] ? parseFloat(M[6]) * 1e3 : 0));
13912
+ else return new Date(Date.UTC(1899, 11, 31, +M[1] % 12 + (M[7] == "p" ? 12 : 0), +M[2], 0, 0));
13913
+ }
13914
+ function fuzzytime2(M) {
13915
+ if (!M[2]) return new Date(Date.UTC(1899, 11, 31, +M[1], 0, 0, 0));
13916
+ if (M[3]) {
13917
+ if (M[4]) return new Date(Date.UTC(1899, 11, 31, +M[1], +M[2], +M[4], parseFloat(M[3]) * 1e3));
13918
+ else return new Date(Date.UTC(1899, 11, 31, 0, +M[1], +M[2], parseFloat(M[3]) * 1e3));
13919
+ } else if (M[5]) return new Date(Date.UTC(1899, 11, 31, +M[1], +M[2], +M[5], M[6] ? parseFloat(M[6]) * 1e3 : 0));
13920
+ else return new Date(Date.UTC(1899, 11, 31, +M[1], +M[2], 0, 0));
13921
+ }
13775
13922
  var lower_months = ["january", "february", "march", "april", "may", "june", "july", "august", "september", "october", "november", "december"];
13776
13923
  function fuzzydate(s) {
13777
- var o = new Date(s), n = /* @__PURE__ */ new Date(NaN);
13778
- var y = o.getYear(), m = o.getMonth(), d = o.getDate();
13779
- if (isNaN(d)) return n;
13924
+ if (FDISO.test(s)) return s.indexOf("Z") == -1 ? local_to_utc(new Date(s)) : new Date(s);
13780
13925
  var lower = s.toLowerCase();
13926
+ var lnos = lower.replace(/\s+/g, " ").trim();
13927
+ var M = lnos.match(FDRE1);
13928
+ if (M) return fuzzytime1(M);
13929
+ M = lnos.match(FDRE2);
13930
+ if (M) return fuzzytime2(M);
13931
+ M = lnos.match(pdre3);
13932
+ if (M) return new Date(Date.UTC(+M[1], +M[2] - 1, +M[3], +M[4], +M[5], M[6] && parseInt(M[6].slice(1), 10) || 0, M[7] && parseInt((M[7] + "0000").slice(1, 4), 10) || 0));
13933
+ var o = new Date(utc_append_works && s.indexOf("UTC") == -1 ? s + " UTC" : s), n = /* @__PURE__ */ new Date(NaN);
13934
+ var y = o.getYear();
13935
+ o.getMonth();
13936
+ var d = o.getDate();
13937
+ if (isNaN(d)) return n;
13781
13938
  if (lower.match(/jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec/)) {
13782
13939
  lower = lower.replace(/[^a-z]/g, "").replace(/([^a-z]|^)[ap]m?([^a-z]|$)/, "");
13783
13940
  if (lower.length > 3 && lower_months.indexOf(lower) == -1) return n;
13784
- } else if (lower.match(/[a-z]/)) return n;
13785
- if (y < 0 || y > 8099) return n;
13786
- if ((m > 0 || d > 1) && y != 101) return o;
13787
- if (s.match(/[^-0-9:,\/\\]/)) return n;
13941
+ } else if (lower.replace(/[ap]m?/, "").match(/[a-z]/)) return n;
13942
+ if (y < 0 || y > 8099 || s.match(/[^-0-9:,\/\\\ ]/)) return n;
13788
13943
  return o;
13789
13944
  }
13945
+ function utc_to_local(utc) {
13946
+ return new Date(utc.getUTCFullYear(), utc.getUTCMonth(), utc.getUTCDate(), utc.getUTCHours(), utc.getUTCMinutes(), utc.getUTCSeconds(), utc.getUTCMilliseconds());
13947
+ }
13948
+ function local_to_utc(local) {
13949
+ return new Date(Date.UTC(local.getFullYear(), local.getMonth(), local.getDate(), local.getHours(), local.getMinutes(), local.getSeconds(), local.getMilliseconds()));
13950
+ }
13790
13951
  function zip_add_file(zip, path, content) {
13791
13952
  if (zip.FullPaths) {
13953
+ if (Array.isArray(content) && typeof content[0] == "string") {
13954
+ content = content.join("");
13955
+ }
13792
13956
  if (typeof content == "string") {
13793
13957
  var res;
13794
13958
  if (has_buf) res = Buffer_from(content);
@@ -13810,7 +13974,7 @@ var __async = (__this, __arguments, generator) => {
13810
13974
  "&amp;": "&"
13811
13975
  };
13812
13976
  var rencoding = /* @__PURE__ */ evert(encodings);
13813
- var decregex = /[&<>'"]/g, charegex = /[\u0000-\u0008\u000b-\u001f]/g;
13977
+ var decregex = /[&<>'"]/g, charegex = /[\u0000-\u0008\u000b-\u001f\uFFFE-\uFFFF]/g;
13814
13978
  function escapexml(text) {
13815
13979
  var s = text + "";
13816
13980
  return s.replace(decregex, function(y) {
@@ -13931,7 +14095,7 @@ var __async = (__this, __arguments, generator) => {
13931
14095
  return [new RegExp("&" + x[0] + ";", "ig"), x[1]];
13932
14096
  });
13933
14097
  return function htmldecode2(str) {
13934
- var o = str.replace(/^[\t\n\r ]+/, "").replace(/[\t\n\r ]+$/, "").replace(/>\s+/g, ">").replace(/\s+</g, "<").replace(/[\t\n\r ]+/g, " ").replace(/<\s*[bB][rR]\s*\/?>/g, "\n").replace(/<[^>]*>/g, "");
14098
+ var o = str.replace(/^[\t\n\r ]+/, "").replace(/(^|[^\t\n\r ])[\t\n\r ]+$/, "$1").replace(/>\s+/g, ">").replace(/\b\s+</g, "<").replace(/[\t\n\r ]+/g, " ").replace(/<\s*[bB][rR]\s*\/?>/g, "\n").replace(/<[^<>]*>/g, "");
13935
14099
  for (var i = 0; i < entities.length; ++i) o = o.replace(entities[i][0], entities[i][1]);
13936
14100
  return o;
13937
14101
  };
@@ -14047,7 +14211,7 @@ var __async = (__this, __arguments, generator) => {
14047
14211
  return ss.join("").replace(chr0, "");
14048
14212
  };
14049
14213
  var __utf16le = has_buf ? function(b, s, e) {
14050
- if (!Buffer.isBuffer(b)) return ___utf16le(b, s, e);
14214
+ if (!Buffer.isBuffer(b) || !buf_utf16le) return ___utf16le(b, s, e);
14051
14215
  return b.toString("utf16le", s, e).replace(chr0, "");
14052
14216
  } : ___utf16le;
14053
14217
  var ___hexlify = function(b, s, l) {
@@ -14107,12 +14271,12 @@ var __async = (__this, __arguments, generator) => {
14107
14271
  return len > 0 ? b.toString("utf8", i + 4, i + 4 + len - 1) : "";
14108
14272
  };
14109
14273
  __lpwstr = function lpwstr_b(b, i) {
14110
- if (!Buffer.isBuffer(b)) return ___lpwstr(b, i);
14274
+ if (!Buffer.isBuffer(b) || !buf_utf16le) return ___lpwstr(b, i);
14111
14275
  var len = 2 * b.readUInt32LE(i);
14112
14276
  return b.toString("utf16le", i + 4, i + 4 + len - 1);
14113
14277
  };
14114
14278
  __lpp4 = function lpp4_b(b, i) {
14115
- if (!Buffer.isBuffer(b)) return ___lpp4(b, i);
14279
+ if (!Buffer.isBuffer(b) || !buf_utf16le) return ___lpp4(b, i);
14116
14280
  var len = b.readUInt32LE(i);
14117
14281
  return b.toString("utf16le", i + 4, i + 4 + len);
14118
14282
  };
@@ -14150,7 +14314,7 @@ var __async = (__this, __arguments, generator) => {
14150
14314
  switch (t) {
14151
14315
  case "dbcs":
14152
14316
  loc = this.l;
14153
- if (has_buf && Buffer.isBuffer(this)) o = this.slice(this.l, this.l + 2 * size).toString("utf16le");
14317
+ if (has_buf && Buffer.isBuffer(this) && buf_utf16le) o = this.slice(this.l, this.l + 2 * size).toString("utf16le");
14154
14318
  else for (i = 0; i < size; ++i) {
14155
14319
  o += String.fromCharCode(__readUInt16LE(this, loc));
14156
14320
  loc += 2;
@@ -14301,12 +14465,12 @@ var __async = (__this, __arguments, generator) => {
14301
14465
  if (f === "dbcs") {
14302
14466
  for (i = 0; i != val.length; ++i) __writeUInt16LE(this, val.charCodeAt(i), this.l + 2 * i);
14303
14467
  size = 2 * val.length;
14304
- } else if (f === "sbcs") {
14468
+ } else if (f === "sbcs" || f == "cpstr") {
14305
14469
  {
14306
14470
  val = val.replace(/[^\x00-\x7F]/g, "_");
14307
14471
  for (i = 0; i != val.length; ++i) this[this.l + i] = val.charCodeAt(i) & 255;
14472
+ size = val.length;
14308
14473
  }
14309
- size = val.length;
14310
14474
  } else if (f === "hex") {
14311
14475
  for (; i < t; ++i) {
14312
14476
  this[this.l++] = parseInt(val.slice(2 * i, 2 * i + 2), 16) || 0;
@@ -14432,6 +14596,15 @@ var __async = (__this, __arguments, generator) => {
14432
14596
  if (typeof ce !== "string") ce = encode_cell(ce);
14433
14597
  return cs == ce ? cs : cs + ":" + ce;
14434
14598
  }
14599
+ function fix_range(a1) {
14600
+ var s = decode_range(a1);
14601
+ return "$" + encode_col(s.s.c) + "$" + encode_row(s.s.r) + ":$" + encode_col(s.e.c) + "$" + encode_row(s.e.r);
14602
+ }
14603
+ function formula_quote_sheet_name(sname, opts) {
14604
+ if (!sname && true) throw new Error("empty sheet name");
14605
+ if (/[^\w\u4E00-\u9FFF\u3040-\u30FF]/.test(sname)) return "'" + sname.replace(/'/g, "''") + "'";
14606
+ return sname;
14607
+ }
14435
14608
  function safe_decode_range(range2) {
14436
14609
  var o = { s: { c: 0, r: 0 }, e: { c: 0, r: 0 } };
14437
14610
  var idx = 0, i = 0, cc = 0;
@@ -14490,10 +14663,17 @@ var __async = (__this, __arguments, generator) => {
14490
14663
  sheets[n] = sheet;
14491
14664
  return { SheetNames: [n], Sheets: sheets };
14492
14665
  }
14666
+ function sheet_new(opts) {
14667
+ var out = {};
14668
+ var o = opts || {};
14669
+ if (o.dense) out["!data"] = [];
14670
+ return out;
14671
+ }
14493
14672
  function sheet_add_aoa(_ws, data, opts) {
14494
14673
  var o = opts || {};
14495
- var dense = _ws ? Array.isArray(_ws) : o.dense;
14496
- var ws = _ws || (dense ? [] : {});
14674
+ var dense = _ws ? _ws["!data"] != null : o.dense;
14675
+ var ws = _ws || (dense ? { "!data": [] } : {});
14676
+ if (dense && !ws["!data"]) ws["!data"] = [];
14497
14677
  var _R = 0, _C = 0;
14498
14678
  if (ws && o.origin != null) {
14499
14679
  if (typeof o.origin == "number") _R = o.origin;
@@ -14502,7 +14682,6 @@ var __async = (__this, __arguments, generator) => {
14502
14682
  _R = _origin.r;
14503
14683
  _C = _origin.c;
14504
14684
  }
14505
- if (!ws["!ref"]) ws["!ref"] = "A1:A1";
14506
14685
  }
14507
14686
  var range2 = { s: { c: 1e7, r: 1e7 }, e: { c: 0, r: 0 } };
14508
14687
  if (ws["!ref"]) {
@@ -14511,23 +14690,33 @@ var __async = (__this, __arguments, generator) => {
14511
14690
  range2.s.r = _range.s.r;
14512
14691
  range2.e.c = Math.max(range2.e.c, _range.e.c);
14513
14692
  range2.e.r = Math.max(range2.e.r, _range.e.r);
14514
- if (_R == -1) range2.e.r = _R = _range.e.r + 1;
14693
+ if (_R == -1) range2.e.r = _R = ws["!ref"] ? _range.e.r + 1 : 0;
14694
+ } else {
14695
+ range2.s.c = range2.e.c = range2.s.r = range2.e.r = 0;
14515
14696
  }
14697
+ var row = [], seen = false;
14516
14698
  for (var R = 0; R != data.length; ++R) {
14517
14699
  if (!data[R]) continue;
14518
14700
  if (!Array.isArray(data[R])) throw new Error("aoa_to_sheet expects an array of arrays");
14519
- for (var C = 0; C != data[R].length; ++C) {
14520
- if (typeof data[R][C] === "undefined") continue;
14521
- var cell = { v: data[R][C] };
14522
- var __R = _R + R, __C = _C + C;
14701
+ var __R = _R + R;
14702
+ if (dense) {
14703
+ if (!ws["!data"][__R]) ws["!data"][__R] = [];
14704
+ row = ws["!data"][__R];
14705
+ }
14706
+ var data_R = data[R];
14707
+ for (var C = 0; C != data_R.length; ++C) {
14708
+ if (typeof data_R[C] === "undefined") continue;
14709
+ var cell = { v: data_R[C], t: "" };
14710
+ var __C = _C + C;
14523
14711
  if (range2.s.r > __R) range2.s.r = __R;
14524
14712
  if (range2.s.c > __C) range2.s.c = __C;
14525
14713
  if (range2.e.r < __R) range2.e.r = __R;
14526
14714
  if (range2.e.c < __C) range2.e.c = __C;
14527
- if (data[R][C] && typeof data[R][C] === "object" && !Array.isArray(data[R][C]) && !(data[R][C] instanceof Date)) cell = data[R][C];
14715
+ seen = true;
14716
+ if (data_R[C] && typeof data_R[C] === "object" && !Array.isArray(data_R[C]) && !(data_R[C] instanceof Date)) cell = data_R[C];
14528
14717
  else {
14529
14718
  if (Array.isArray(cell.v)) {
14530
- cell.f = data[R][C][1];
14719
+ cell.f = data_R[C][1];
14531
14720
  cell.v = cell.v[0];
14532
14721
  }
14533
14722
  if (cell.v === null) {
@@ -14537,57 +14726,67 @@ var __async = (__this, __arguments, generator) => {
14537
14726
  cell.v = 0;
14538
14727
  } else if (!o.sheetStubs) continue;
14539
14728
  else cell.t = "z";
14540
- } else if (typeof cell.v === "number") cell.t = "n";
14541
- else if (typeof cell.v === "boolean") cell.t = "b";
14729
+ } else if (typeof cell.v === "number") {
14730
+ if (isFinite(cell.v)) cell.t = "n";
14731
+ else if (isNaN(cell.v)) {
14732
+ cell.t = "e";
14733
+ cell.v = 15;
14734
+ } else {
14735
+ cell.t = "e";
14736
+ cell.v = 7;
14737
+ }
14738
+ } else if (typeof cell.v === "boolean") cell.t = "b";
14542
14739
  else if (cell.v instanceof Date) {
14543
14740
  cell.z = o.dateNF || table_fmt[14];
14741
+ if (!o.UTC) cell.v = local_to_utc(cell.v);
14544
14742
  if (o.cellDates) {
14545
14743
  cell.t = "d";
14546
- cell.w = SSF_format(cell.z, datenum(cell.v));
14744
+ cell.w = SSF_format(cell.z, datenum(cell.v, o.date1904));
14547
14745
  } else {
14548
14746
  cell.t = "n";
14549
- cell.v = datenum(cell.v);
14747
+ cell.v = datenum(cell.v, o.date1904);
14550
14748
  cell.w = SSF_format(cell.z, cell.v);
14551
14749
  }
14552
14750
  } else cell.t = "s";
14553
14751
  }
14554
14752
  if (dense) {
14555
- if (!ws[__R]) ws[__R] = [];
14556
- if (ws[__R][__C] && ws[__R][__C].z) cell.z = ws[__R][__C].z;
14557
- ws[__R][__C] = cell;
14753
+ if (row[__C] && row[__C].z) cell.z = row[__C].z;
14754
+ row[__C] = cell;
14558
14755
  } else {
14559
- var cell_ref = encode_cell({ c: __C, r: __R });
14756
+ var cell_ref = encode_col(__C) + (__R + 1);
14560
14757
  if (ws[cell_ref] && ws[cell_ref].z) cell.z = ws[cell_ref].z;
14561
14758
  ws[cell_ref] = cell;
14562
14759
  }
14563
14760
  }
14564
14761
  }
14565
- if (range2.s.c < 1e7) ws["!ref"] = encode_range(range2);
14762
+ if (seen && range2.s.c < 104e5) ws["!ref"] = encode_range(range2);
14566
14763
  return ws;
14567
14764
  }
14568
14765
  function aoa_to_sheet(data, opts) {
14569
14766
  return sheet_add_aoa(null, data, opts);
14570
14767
  }
14571
14768
  var BErr = {
14572
- /*::[*/
14573
14769
  0: "#NULL!",
14574
- /*::[*/
14575
14770
  7: "#DIV/0!",
14576
- /*::[*/
14577
14771
  15: "#VALUE!",
14578
- /*::[*/
14579
14772
  23: "#REF!",
14580
- /*::[*/
14581
14773
  29: "#NAME?",
14582
- /*::[*/
14583
14774
  36: "#NUM!",
14584
- /*::[*/
14585
14775
  42: "#N/A",
14586
- /*::[*/
14587
14776
  43: "#GETTING_DATA",
14588
- /*::[*/
14589
14777
  255: "#WTF?"
14590
14778
  };
14779
+ var RBErr = {
14780
+ "#NULL!": 0,
14781
+ "#DIV/0!": 7,
14782
+ "#VALUE!": 15,
14783
+ "#REF!": 23,
14784
+ "#NAME?": 29,
14785
+ "#NUM!": 36,
14786
+ "#N/A": 42,
14787
+ "#GETTING_DATA": 43,
14788
+ "#WTF?": 255
14789
+ };
14591
14790
  var ct2type = {
14592
14791
  /* Workbook */
14593
14792
  "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml": "workbooks",
@@ -14799,35 +14998,37 @@ var __async = (__this, __arguments, generator) => {
14799
14998
  xmlns: ""
14800
14999
  };
14801
15000
  }
14802
- function write_ct(ct, opts) {
15001
+ function write_ct(ct, opts, raw) {
14803
15002
  var type2ct = evert_arr(ct2type);
14804
15003
  var o = [], v;
14805
- o[o.length] = XML_HEADER;
14806
- o[o.length] = writextag("Types", null, {
14807
- "xmlns": XMLNS.CT,
14808
- "xmlns:xsd": XMLNS.xsd,
14809
- "xmlns:xsi": XMLNS.xsi
14810
- });
14811
- o = o.concat([
14812
- ["xml", "application/xml"],
14813
- ["bin", "application/vnd.ms-excel.sheet.binary.macroEnabled.main"],
14814
- ["vml", "application/vnd.openxmlformats-officedocument.vmlDrawing"],
14815
- ["data", "application/vnd.openxmlformats-officedocument.model+data"],
14816
- /* from test files */
14817
- ["bmp", "image/bmp"],
14818
- ["png", "image/png"],
14819
- ["gif", "image/gif"],
14820
- ["emf", "image/x-emf"],
14821
- ["wmf", "image/x-wmf"],
14822
- ["jpg", "image/jpeg"],
14823
- ["jpeg", "image/jpeg"],
14824
- ["tif", "image/tiff"],
14825
- ["tiff", "image/tiff"],
14826
- ["pdf", "application/pdf"],
14827
- ["rels", "application/vnd.openxmlformats-package.relationships+xml"]
14828
- ].map(function(x) {
14829
- return writextag("Default", null, { "Extension": x[0], "ContentType": x[1] });
14830
- }));
15004
+ {
15005
+ o[o.length] = XML_HEADER;
15006
+ o[o.length] = writextag("Types", null, {
15007
+ "xmlns": XMLNS.CT,
15008
+ "xmlns:xsd": XMLNS.xsd,
15009
+ "xmlns:xsi": XMLNS.xsi
15010
+ });
15011
+ o = o.concat([
15012
+ ["xml", "application/xml"],
15013
+ ["bin", "application/vnd.ms-excel.sheet.binary.macroEnabled.main"],
15014
+ ["vml", "application/vnd.openxmlformats-officedocument.vmlDrawing"],
15015
+ ["data", "application/vnd.openxmlformats-officedocument.model+data"],
15016
+ /* from test files */
15017
+ ["bmp", "image/bmp"],
15018
+ ["png", "image/png"],
15019
+ ["gif", "image/gif"],
15020
+ ["emf", "image/x-emf"],
15021
+ ["wmf", "image/x-wmf"],
15022
+ ["jpg", "image/jpeg"],
15023
+ ["jpeg", "image/jpeg"],
15024
+ ["tif", "image/tiff"],
15025
+ ["tiff", "image/tiff"],
15026
+ ["pdf", "application/pdf"],
15027
+ ["rels", "application/vnd.openxmlformats-package.relationships+xml"]
15028
+ ].map(function(x) {
15029
+ return writextag("Default", null, { "Extension": x[0], "ContentType": x[1] });
15030
+ }));
15031
+ }
14831
15032
  var f1 = function(w) {
14832
15033
  if (ct[w] && ct[w].length > 0) {
14833
15034
  v = ct[w][0];
@@ -15063,6 +15264,7 @@ var __async = (__this, __arguments, generator) => {
15063
15264
  else {
15064
15265
  sitag += "<t";
15065
15266
  if (!s.t) s.t = "";
15267
+ if (typeof s.t !== "string") s.t = String(s.t);
15066
15268
  if (s.t.match(straywsregex)) sitag += ' xml:space="preserve"';
15067
15269
  sitag += ">" + escapexml(s.t) + "</t>";
15068
15270
  }
@@ -15326,58 +15528,61 @@ var __async = (__this, __arguments, generator) => {
15326
15528
  o.push('<metadata xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:xlrd="http://schemas.microsoft.com/office/spreadsheetml/2017/richdata" xmlns:xda="http://schemas.microsoft.com/office/spreadsheetml/2017/dynamicarray">\n <metadataTypes count="1">\n <metadataType name="XLDAPR" minSupportedVersion="120000" copy="1" pasteAll="1" pasteValues="1" merge="1" splitFirst="1" rowColShift="1" clearFormats="1" clearComments="1" assign="1" coerce="1" cellMeta="1"/>\n </metadataTypes>\n <futureMetadata name="XLDAPR" count="1">\n <bk>\n <extLst>\n <ext uri="{bdbb8cdc-fa1e-496e-a857-3c3f30c029c3}">\n <xda:dynamicArrayProperties fDynamic="1" fCollapsed="0"/>\n </ext>\n </extLst>\n </bk>\n </futureMetadata>\n <cellMetadata count="1">\n <bk>\n <rc t="1" v="0"/>\n </bk>\n </cellMetadata>\n</metadata>');
15327
15529
  return o.join("");
15328
15530
  }
15329
- var _shapeid = 1024;
15330
- function write_comments_vml(rId, comments) {
15531
+ function write_vml(rId, comments, ws) {
15331
15532
  var csize = [21600, 21600];
15332
15533
  var bbox = ["m0,0l0", csize[1], csize[0], csize[1], csize[0], "0xe"].join(",");
15333
15534
  var o = [
15334
15535
  writextag("xml", null, { "xmlns:v": XLMLNS.v, "xmlns:o": XLMLNS.o, "xmlns:x": XLMLNS.x, "xmlns:mv": XLMLNS.mv }).replace(/\/>/, ">"),
15335
- writextag("o:shapelayout", writextag("o:idmap", null, { "v:ext": "edit", "data": rId }), { "v:ext": "edit" }),
15336
- writextag("v:shapetype", [
15337
- writextag("v:stroke", null, { joinstyle: "miter" }),
15338
- writextag("v:path", null, { gradientshapeok: "t", "o:connecttype": "rect" })
15339
- ].join(""), { id: "_x0000_t202", "o:spt": 202, coordsize: csize.join(","), path: bbox })
15536
+ writextag("o:shapelayout", writextag("o:idmap", null, { "v:ext": "edit", "data": rId }), { "v:ext": "edit" })
15340
15537
  ];
15341
- while (_shapeid < rId * 1e3) _shapeid += 1e3;
15342
- comments.forEach(function(x) {
15343
- var c = decode_cell(x[0]);
15344
- var fillopts = (
15345
- /*::(*/
15346
- { "color2": "#BEFF82", "type": "gradient" }
15347
- );
15348
- if (fillopts.type == "gradient") fillopts.angle = "-180";
15349
- var fillparm = fillopts.type == "gradient" ? writextag("o:fill", null, { type: "gradientUnscaled", "v:ext": "view" }) : null;
15350
- var fillxml = writextag("v:fill", fillparm, fillopts);
15351
- var shadata = { on: "t", "obscured": "t" };
15538
+ var _shapeid = 65536 * rId;
15539
+ var _comments = comments || [];
15540
+ if (_comments.length > 0) o.push(writextag("v:shapetype", [
15541
+ writextag("v:stroke", null, { joinstyle: "miter" }),
15542
+ writextag("v:path", null, { gradientshapeok: "t", "o:connecttype": "rect" })
15543
+ ].join(""), { id: "_x0000_t202", coordsize: csize.join(","), "o:spt": 202, path: bbox }));
15544
+ _comments.forEach(function(x) {
15352
15545
  ++_shapeid;
15353
- o = o.concat([
15354
- "<v:shape" + wxt_helper({
15355
- id: "_x0000_s" + _shapeid,
15356
- type: "#_x0000_t202",
15357
- style: "position:absolute; margin-left:80pt;margin-top:5pt;width:104pt;height:64pt;z-index:10" + (x[1].hidden ? ";visibility:hidden" : ""),
15358
- fillcolor: "#ECFAD4",
15359
- strokecolor: "#edeaa1"
15360
- }) + ">",
15361
- fillxml,
15362
- writextag("v:shadow", null, shadata),
15363
- writextag("v:path", null, { "o:connecttype": "none" }),
15364
- '<v:textbox><div style="text-align:left"></div></v:textbox>',
15365
- '<x:ClientData ObjectType="Note">',
15366
- "<x:MoveWithCells/>",
15367
- "<x:SizeWithCells/>",
15368
- /* Part 4 19.4.2.3 Anchor (Anchor) */
15369
- writetag("x:Anchor", [c.c + 1, 0, c.r + 1, 0, c.c + 3, 20, c.r + 5, 20].join(",")),
15370
- writetag("x:AutoFill", "False"),
15371
- writetag("x:Row", String(c.r)),
15372
- writetag("x:Column", String(c.c)),
15373
- x[1].hidden ? "" : "<x:Visible/>",
15374
- "</x:ClientData>",
15375
- "</v:shape>"
15376
- ]);
15546
+ o.push(write_vml_comment(x, _shapeid));
15377
15547
  });
15378
15548
  o.push("</xml>");
15379
15549
  return o.join("");
15380
15550
  }
15551
+ function write_vml_comment(x, _shapeid, ws) {
15552
+ var c = decode_cell(x[0]);
15553
+ var fillopts = (
15554
+ /*::(*/
15555
+ { "color2": "#BEFF82", "type": "gradient" }
15556
+ );
15557
+ if (fillopts.type == "gradient") fillopts.angle = "-180";
15558
+ var fillparm = fillopts.type == "gradient" ? writextag("o:fill", null, { type: "gradientUnscaled", "v:ext": "view" }) : null;
15559
+ var fillxml = writextag("v:fill", fillparm, fillopts);
15560
+ var shadata = { on: "t", "obscured": "t" };
15561
+ return [
15562
+ "<v:shape" + wxt_helper({
15563
+ id: "_x0000_s" + _shapeid,
15564
+ type: "#_x0000_t202",
15565
+ style: "position:absolute; margin-left:80pt;margin-top:5pt;width:104pt;height:64pt;z-index:10" + (x[1].hidden ? ";visibility:hidden" : ""),
15566
+ fillcolor: "#ECFAD4",
15567
+ strokecolor: "#edeaa1"
15568
+ }) + ">",
15569
+ fillxml,
15570
+ writextag("v:shadow", null, shadata),
15571
+ writextag("v:path", null, { "o:connecttype": "none" }),
15572
+ '<v:textbox><div style="text-align:left"></div></v:textbox>',
15573
+ '<x:ClientData ObjectType="Note">',
15574
+ "<x:MoveWithCells/>",
15575
+ "<x:SizeWithCells/>",
15576
+ /* Part 4 19.4.2.3 Anchor (Anchor) */
15577
+ writetag("x:Anchor", [c.c + 1, 0, c.r + 1, 0, c.c + 3, 20, c.r + 5, 20].join(",")),
15578
+ writetag("x:AutoFill", "False"),
15579
+ writetag("x:Row", String(c.r)),
15580
+ writetag("x:Column", String(c.c)),
15581
+ x[1].hidden ? "" : "<x:Visible/>",
15582
+ "</x:ClientData>",
15583
+ "</v:shape>"
15584
+ ].join("");
15585
+ }
15381
15586
  function write_comments_xml(data) {
15382
15587
  var o = [XML_HEADER, writextag("comments", null, { "xmlns": XMLNS_main[0] })];
15383
15588
  var iauthor = [];
@@ -15402,20 +15607,27 @@ var __async = (__this, __arguments, generator) => {
15402
15607
  o.push("</authors>");
15403
15608
  o.push("<commentList>");
15404
15609
  data.forEach(function(d) {
15405
- var lastauthor = 0, ts = [];
15610
+ var lastauthor = 0, ts = [], tcnt = 0;
15406
15611
  if (d[1][0] && d[1][0].T && d[1][0].ID) lastauthor = iauthor.indexOf("tc=" + d[1][0].ID);
15407
- else d[1].forEach(function(c) {
15612
+ d[1].forEach(function(c) {
15408
15613
  if (c.a) lastauthor = iauthor.indexOf(escapexml(c.a));
15409
- ts.push(c.t || "");
15614
+ if (c.T) ++tcnt;
15615
+ ts.push(c.t == null ? "" : escapexml(c.t));
15410
15616
  });
15411
- o.push('<comment ref="' + d[0] + '" authorId="' + lastauthor + '"><text>');
15412
- if (ts.length <= 1) o.push(writetag("t", escapexml(ts[0] || "")));
15413
- else {
15617
+ if (tcnt === 0) {
15618
+ d[1].forEach(function(c) {
15619
+ o.push('<comment ref="' + d[0] + '" authorId="' + iauthor.indexOf(escapexml(c.a)) + '"><text>');
15620
+ o.push(writetag("t", c.t == null ? "" : escapexml(c.t)));
15621
+ o.push("</text></comment>");
15622
+ });
15623
+ } else {
15624
+ if (d[1][0] && d[1][0].T && d[1][0].ID) lastauthor = iauthor.indexOf("tc=" + d[1][0].ID);
15625
+ o.push('<comment ref="' + d[0] + '" authorId="' + lastauthor + '"><text>');
15414
15626
  var t = "Comment:\n " + ts[0] + "\n";
15415
15627
  for (var i = 1; i < ts.length; ++i) t += "Reply:\n " + ts[i] + "\n";
15416
15628
  o.push(writetag("t", escapexml(t)));
15629
+ o.push("</text></comment>");
15417
15630
  }
15418
- o.push("</text></comment>");
15419
15631
  });
15420
15632
  o.push("</commentList>");
15421
15633
  if (o.length > 2) {
@@ -15465,6 +15677,11 @@ var __async = (__this, __arguments, generator) => {
15465
15677
  return o.join("");
15466
15678
  }
15467
15679
  var VBAFMTS = ["xlsb", "xlsm", "xlam", "biff8", "xla"];
15680
+ var crefregex = /(^|[^._A-Z0-9])(\$?)([A-Z]{1,2}|[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D])(\$?)(\d{1,7})(?![_.\(A-Za-z0-9])/g;
15681
+ try {
15682
+ crefregex = /(^|[^._A-Z0-9])([$]?)([A-Z]{1,2}|[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D])([$]?)(10[0-3]\d{4}|104[0-7]\d{3}|1048[0-4]\d{2}|10485[0-6]\d|104857[0-6]|[1-9]\d{0,5})(?![_.\(A-Za-z0-9])/g;
15683
+ } catch (e) {
15684
+ }
15468
15685
  var browser_has_Map = typeof Map !== "undefined";
15469
15686
  function get_sst_id(sst, str, rev) {
15470
15687
  var i = 0, len = sst.length;
@@ -15530,7 +15747,7 @@ var __async = (__this, __arguments, generator) => {
15530
15747
  var i = 60, len = styles.length;
15531
15748
  if (z == null && opts.ssf) {
15532
15749
  for (; i < 392; ++i) if (opts.ssf[i] == null) {
15533
- SSF_load(cell.z, i);
15750
+ SSF__load(cell.z, i);
15534
15751
  opts.ssf[i] = cell.z;
15535
15752
  opts.revssf[cell.z] = z = i;
15536
15753
  break;
@@ -15632,7 +15849,7 @@ var __async = (__this, __arguments, generator) => {
15632
15849
  var name = names[i];
15633
15850
  if (name.Name != "_xlnm._FilterDatabase") continue;
15634
15851
  if (name.Sheet != idx) continue;
15635
- name.Ref = "'" + wb.SheetNames[idx] + "'!" + ref2;
15852
+ name.Ref = formula_quote_sheet_name(wb.SheetNames[idx]) + "!" + fix_range(ref2);
15636
15853
  break;
15637
15854
  }
15638
15855
  if (i == names.length) names.push({ Name: "_xlnm._FilterDatabase", Sheet: idx, Ref: "'" + wb.SheetNames[idx] + "'!" + ref2 });
@@ -15643,9 +15860,9 @@ var __async = (__this, __arguments, generator) => {
15643
15860
  if ((((wb || {}).Workbook || {}).Views || [])[0]) sview.rightToLeft = wb.Workbook.Views[0].RTL ? "1" : "0";
15644
15861
  return writextag("sheetViews", writextag("sheetView", null, sview), {});
15645
15862
  }
15646
- function write_ws_xml_cell(cell, ref2, ws, opts) {
15863
+ function write_ws_xml_cell(cell, ref2, ws, opts, idx, wb, date1904) {
15647
15864
  if (cell.c) ws["!comments"].push([ref2, cell.c]);
15648
- if (cell.v === void 0 && typeof cell.f !== "string" || cell.t === "z" && !cell.f) return "";
15865
+ if ((cell.v === void 0 || cell.t === "z" && !(opts || {}).sheetStubs) && typeof cell.f !== "string" && typeof cell.z == "undefined") return "";
15649
15866
  var vv = "";
15650
15867
  var oldt = cell.t, oldv = cell.v;
15651
15868
  if (cell.t !== "z") switch (cell.t) {
@@ -15653,17 +15870,26 @@ var __async = (__this, __arguments, generator) => {
15653
15870
  vv = cell.v ? "1" : "0";
15654
15871
  break;
15655
15872
  case "n":
15656
- vv = "" + cell.v;
15873
+ if (isNaN(cell.v)) {
15874
+ cell.t = "e";
15875
+ vv = BErr[cell.v = 36];
15876
+ } else if (!isFinite(cell.v)) {
15877
+ cell.t = "e";
15878
+ vv = BErr[cell.v = 7];
15879
+ } else vv = "" + cell.v;
15657
15880
  break;
15658
15881
  case "e":
15659
15882
  vv = BErr[cell.v];
15660
15883
  break;
15661
15884
  case "d":
15662
- if (opts && opts.cellDates) vv = parseDate(cell.v, -1).toISOString();
15663
- else {
15885
+ if (opts && opts.cellDates) {
15886
+ var _vv = parseDate(cell.v, date1904);
15887
+ vv = _vv.toISOString();
15888
+ if (_vv.getUTCFullYear() < 1900) vv = vv.slice(vv.indexOf("T") + 1).replace("Z", "");
15889
+ } else {
15664
15890
  cell = dup(cell);
15665
15891
  cell.t = "n";
15666
- vv = "" + (cell.v = datenum(parseDate(cell.v)));
15892
+ vv = "" + (cell.v = datenum(parseDate(cell.v, date1904), date1904));
15667
15893
  }
15668
15894
  if (typeof cell.z === "undefined") cell.z = table_fmt[14];
15669
15895
  break;
@@ -15671,7 +15897,7 @@ var __async = (__this, __arguments, generator) => {
15671
15897
  vv = cell.v;
15672
15898
  break;
15673
15899
  }
15674
- var v = writetag("v", escapexml(vv)), o = { r: ref2 };
15900
+ var v = cell.t == "z" || cell.v == null ? "" : writetag("v", escapexml(vv)), o = { r: ref2 };
15675
15901
  var os = get_cell_style(opts.cellXfs, cell, opts);
15676
15902
  if (os !== 0) o.s = os;
15677
15903
  switch (cell.t) {
@@ -15698,8 +15924,7 @@ var __async = (__this, __arguments, generator) => {
15698
15924
  v = writetag("v", "" + get_sst_id(opts.Strings, cell.v, opts.revStrings));
15699
15925
  o.t = "s";
15700
15926
  break;
15701
- }
15702
- o.t = "str";
15927
+ } else o.t = "str";
15703
15928
  break;
15704
15929
  }
15705
15930
  if (cell.t != oldt) {
@@ -15710,23 +15935,28 @@ var __async = (__this, __arguments, generator) => {
15710
15935
  var ff = cell.F && cell.F.slice(0, ref2.length) == ref2 ? { t: "array", ref: cell.F } : null;
15711
15936
  v = writextag("f", escapexml(cell.f), ff) + (cell.v != null ? v : "");
15712
15937
  }
15713
- if (cell.l) ws["!links"].push([ref2, cell.l]);
15938
+ if (cell.l) {
15939
+ cell.l.display = escapexml(vv);
15940
+ ws["!links"].push([ref2, cell.l]);
15941
+ }
15714
15942
  if (cell.D) o.cm = 1;
15715
15943
  return writextag("c", v, o);
15716
15944
  }
15717
15945
  function write_ws_xml_data(ws, opts, idx, wb) {
15718
15946
  var o = [], r = [], range2 = safe_decode_range(ws["!ref"]), cell = "", ref2, rr = "", cols = [], R = 0, C = 0, rows = ws["!rows"];
15719
- var dense = Array.isArray(ws);
15947
+ var dense = ws["!data"] != null, data = dense ? ws["!data"] : [];
15720
15948
  var params = { r: rr }, row, height = -1;
15949
+ var date1904 = (((wb || {}).Workbook || {}).WBProps || {}).date1904;
15721
15950
  for (C = range2.s.c; C <= range2.e.c; ++C) cols[C] = encode_col(C);
15722
15951
  for (R = range2.s.r; R <= range2.e.r; ++R) {
15723
15952
  r = [];
15724
15953
  rr = encode_row(R);
15954
+ var data_R = dense ? data[R] : [];
15725
15955
  for (C = range2.s.c; C <= range2.e.c; ++C) {
15726
15956
  ref2 = cols[C] + rr;
15727
- var _cell = dense ? (ws[R] || [])[C] : ws[ref2];
15957
+ var _cell = dense ? data_R[C] : ws[ref2];
15728
15958
  if (_cell === void 0) continue;
15729
- if ((cell = write_ws_xml_cell(_cell, ref2, ws, opts)) != null) r.push(cell);
15959
+ if ((cell = write_ws_xml_cell(_cell, ref2, ws, opts, idx, wb, date1904)) != null) r.push(cell);
15730
15960
  }
15731
15961
  if (r.length > 0 || rows && rows[R]) {
15732
15962
  params = { r: rr };
@@ -15798,7 +16028,7 @@ var __async = (__this, __arguments, generator) => {
15798
16028
  o[sidx = o.length] = "<sheetData/>";
15799
16029
  ws["!links"] = [];
15800
16030
  if (ws["!ref"] != null) {
15801
- rdata = write_ws_xml_data(ws, opts);
16031
+ rdata = write_ws_xml_data(ws, opts, idx, wb);
15802
16032
  if (rdata.length > 0) o[o.length] = rdata;
15803
16033
  }
15804
16034
  if (o.length > sidx + 1) {
@@ -15818,11 +16048,12 @@ var __async = (__this, __arguments, generator) => {
15818
16048
  if (!l[1].Target) return;
15819
16049
  rel = { "ref": l[0] };
15820
16050
  if (l[1].Target.charAt(0) != "#") {
15821
- rId = add_rels(rels, -1, escapexml(l[1].Target).replace(/#.*$/, ""), RELS.HLINK);
16051
+ rId = add_rels(rels, -1, escapexml(l[1].Target).replace(/#[\s\S]*$/, ""), RELS.HLINK);
15822
16052
  rel["r:id"] = "rId" + rId;
15823
16053
  }
15824
16054
  if ((relc = l[1].Target.indexOf("#")) > -1) rel.location = escapexml(l[1].Target.slice(relc + 1));
15825
16055
  if (l[1].Tooltip) rel.tooltip = escapexml(l[1].Tooltip);
16056
+ rel.display = l[1].display;
15826
16057
  o[o.length] = writextag("hyperlink", null, rel);
15827
16058
  });
15828
16059
  o[o.length] = "</hyperlinks>";
@@ -15866,17 +16097,21 @@ var __async = (__this, __arguments, generator) => {
15866
16097
  ["showPivotChartFilter", false, "bool"],
15867
16098
  ["updateLinks", "userSet"]
15868
16099
  ];
15869
- var badchars = /* @__PURE__ */ "][*?/\\".split("");
16100
+ var badchars = /* @__PURE__ */ ":][*?/\\".split("");
15870
16101
  function check_ws_name(n, safe) {
15871
- if (n.length > 31) {
15872
- throw new Error("Sheet names cannot exceed 31 chars");
16102
+ try {
16103
+ if (n == "") throw new Error("Sheet name cannot be blank");
16104
+ if (n.length > 31) throw new Error("Sheet name cannot exceed 31 chars");
16105
+ if (n.charCodeAt(0) == 39 || n.charCodeAt(n.length - 1) == 39) throw new Error("Sheet name cannot start or end with apostrophe (')");
16106
+ if (n.toLowerCase() == "history") throw new Error("Sheet name cannot be 'History'");
16107
+ badchars.forEach(function(c) {
16108
+ if (n.indexOf(c) == -1) return;
16109
+ throw new Error("Sheet name cannot contain : \\ / ? * [ ]");
16110
+ });
16111
+ } catch (e) {
16112
+ throw e;
15873
16113
  }
15874
- var _good = true;
15875
- badchars.forEach(function(c) {
15876
- if (n.indexOf(c) == -1) return;
15877
- throw new Error("Sheet name cannot contain : \\ / ? * [ ]");
15878
- });
15879
- return _good;
16114
+ return true;
15880
16115
  }
15881
16116
  function check_wb_names(N, S, codes) {
15882
16117
  N.forEach(function(n, i) {
@@ -15894,6 +16129,19 @@ var __async = (__this, __arguments, generator) => {
15894
16129
  var Sheets = wb.Workbook && wb.Workbook.Sheets || [];
15895
16130
  check_wb_names(wb.SheetNames, Sheets, !!wb.vbaraw);
15896
16131
  for (var i = 0; i < wb.SheetNames.length; ++i) check_ws(wb.Sheets[wb.SheetNames[i]], wb.SheetNames[i], i);
16132
+ wb.SheetNames.forEach(function(n, i2) {
16133
+ var ws = wb.Sheets[n];
16134
+ if (!ws || !ws["!autofilter"]) return;
16135
+ var DN;
16136
+ if (!wb.Workbook) wb.Workbook = {};
16137
+ if (!wb.Workbook.Names) wb.Workbook.Names = [];
16138
+ wb.Workbook.Names.forEach(function(dn) {
16139
+ if (dn.Name == "_xlnm._FilterDatabase" && dn.Sheet == i2) DN = dn;
16140
+ });
16141
+ var nn = formula_quote_sheet_name(n) + "!" + fix_range(ws["!autofilter"].ref);
16142
+ if (DN) DN.Ref = nn;
16143
+ else wb.Workbook.Names.push({ Name: "_xlnm._FilterDatabase", Sheet: i2, Ref: nn });
16144
+ });
15897
16145
  }
15898
16146
  function write_wb_xml(wb) {
15899
16147
  var o = [XML_HEADER];
@@ -15966,6 +16214,8 @@ var __async = (__this, __arguments, generator) => {
15966
16214
  function make_html_row(ws, r, R, o) {
15967
16215
  var M = ws["!merges"] || [];
15968
16216
  var oo = [];
16217
+ var sp = {};
16218
+ var dense = ws["!data"] != null;
15969
16219
  for (var C = r.s.c; C <= r.e.c; ++C) {
15970
16220
  var RS = 0, CS = 0;
15971
16221
  for (var j = 0; j < M.length; ++j) {
@@ -15980,18 +16230,22 @@ var __async = (__this, __arguments, generator) => {
15980
16230
  break;
15981
16231
  }
15982
16232
  if (RS < 0) continue;
15983
- var coord = encode_cell({ r: R, c: C });
15984
- var cell = o.dense ? (ws[R] || [])[C] : ws[coord];
16233
+ var coord = encode_col(C) + encode_row(R);
16234
+ var cell = dense ? (ws["!data"][R] || [])[C] : ws[coord];
16235
+ if (cell && cell.t == "n" && cell.v != null && !isFinite(cell.v)) {
16236
+ if (isNaN(cell.v)) cell = { t: "e", v: 36, w: BErr[36] };
16237
+ else cell = { t: "e", v: 7, w: BErr[7] };
16238
+ }
15985
16239
  var w = cell && cell.v != null && (cell.h || escapehtml(cell.w || (format_cell(cell), cell.w) || "")) || "";
15986
- var sp = {};
16240
+ sp = {};
15987
16241
  if (RS > 1) sp.rowspan = RS;
15988
16242
  if (CS > 1) sp.colspan = CS;
15989
16243
  if (o.editable) w = '<span contenteditable="true">' + w + "</span>";
15990
16244
  else if (cell) {
15991
16245
  sp["data-t"] = cell && cell.t || "z";
15992
- if (cell.v != null) sp["data-v"] = cell.v;
16246
+ if (cell.v != null) sp["data-v"] = escapehtml(cell.v instanceof Date ? cell.v.toISOString() : cell.v);
15993
16247
  if (cell.z != null) sp["data-z"] = cell.z;
15994
- if (cell.l && (cell.l.Target || "#").charAt(0) != "#") w = '<a href="' + cell.l.Target + '">' + w + "</a>";
16248
+ if (cell.l && (cell.l.Target || "#").charAt(0) != "#") w = '<a href="' + escapehtml(cell.l.Target) + '">' + w + "</a>";
15995
16249
  }
15996
16250
  sp.id = (o.id || "sjs") + "-" + coord;
15997
16251
  oo.push(writextag("td", w, sp));
@@ -16010,15 +16264,19 @@ var __async = (__this, __arguments, generator) => {
16010
16264
  var header = o.header != null ? o.header : HTML_BEGIN;
16011
16265
  var footer = o.footer != null ? o.footer : HTML_END;
16012
16266
  var out = [header];
16013
- var r = decode_range(ws["!ref"]);
16014
- o.dense = Array.isArray(ws);
16267
+ var r = decode_range(ws["!ref"] || "A1");
16015
16268
  out.push(make_html_preamble(ws, r, o));
16016
- for (var R = r.s.r; R <= r.e.r; ++R) out.push(make_html_row(ws, r, R, o));
16269
+ if (ws["!ref"]) for (var R = r.s.r; R <= r.e.r; ++R) out.push(make_html_row(ws, r, R, o));
16017
16270
  out.push("</table>" + footer);
16018
16271
  return out.join("");
16019
16272
  }
16020
16273
  function sheet_add_dom(ws, table, _opts) {
16274
+ var rows = table.rows;
16275
+ if (!rows) {
16276
+ throw "Unsupported origin when " + table.tagName + " is not a TABLE";
16277
+ }
16021
16278
  var opts = _opts || {};
16279
+ var dense = ws["!data"] != null;
16022
16280
  var or_R = 0, or_C = 0;
16023
16281
  if (opts.origin != null) {
16024
16282
  if (typeof opts.origin == "number") or_R = opts.origin;
@@ -16028,7 +16286,6 @@ var __async = (__this, __arguments, generator) => {
16028
16286
  or_C = _origin.c;
16029
16287
  }
16030
16288
  }
16031
- var rows = table.getElementsByTagName("tr");
16032
16289
  var sheetRows = Math.min(opts.sheetRows || 1e7, rows.length);
16033
16290
  var range2 = { s: { r: 0, c: 0 }, e: { r: or_R, c: or_C } };
16034
16291
  if (ws["!ref"]) {
@@ -16049,7 +16306,7 @@ var __async = (__this, __arguments, generator) => {
16049
16306
  if (opts.display) continue;
16050
16307
  rowinfo[R] = { hidden: true };
16051
16308
  }
16052
- var elts = row.children;
16309
+ var elts = row.cells;
16053
16310
  for (_C = C = 0; _C < elts.length; ++_C) {
16054
16311
  var elt = elts[_C];
16055
16312
  if (opts.display && is_dom_element_hidden(elt)) continue;
@@ -16069,14 +16326,16 @@ var __async = (__this, __arguments, generator) => {
16069
16326
  if (v != null) {
16070
16327
  if (v.length == 0) o.t = _t || "z";
16071
16328
  else if (opts.raw || v.trim().length == 0 || _t == "s") ;
16329
+ else if (_t == "e" && BErr[+v]) o = { t: "e", v: +v, w: BErr[+v] };
16072
16330
  else if (v === "TRUE") o = { t: "b", v: true };
16073
16331
  else if (v === "FALSE") o = { t: "b", v: false };
16074
16332
  else if (!isNaN(fuzzynum(v))) o = { t: "n", v: fuzzynum(v) };
16075
16333
  else if (!isNaN(fuzzydate(v).getDate())) {
16076
16334
  o = { t: "d", v: parseDate(v) };
16335
+ if (opts.UTC) o.v = local_to_utc(o.v);
16077
16336
  if (!opts.cellDates) o = { t: "n", v: datenum(o.v) };
16078
16337
  o.z = opts.dateNF || table_fmt[14];
16079
- }
16338
+ } else if (v.charCodeAt(0) == 35 && RBErr[v] != null) o = { t: "e", v: RBErr[v], w: v };
16080
16339
  }
16081
16340
  if (o.z === void 0 && z != null) o.z = z;
16082
16341
  var l = "", Aelts = elt.getElementsByTagName("A");
@@ -16086,10 +16345,10 @@ var __async = (__this, __arguments, generator) => {
16086
16345
  if (l.charAt(0) != "#") break;
16087
16346
  }
16088
16347
  }
16089
- if (l && l.charAt(0) != "#") o.l = { Target: l };
16090
- if (opts.dense) {
16091
- if (!ws[R + or_R]) ws[R + or_R] = [];
16092
- ws[R + or_R][C + or_C] = o;
16348
+ if (l && l.charAt(0) != "#" && l.slice(0, 11).toLowerCase() != "javascript:") o.l = { Target: l };
16349
+ if (dense) {
16350
+ if (!ws["!data"][R + or_R]) ws["!data"][R + or_R] = [];
16351
+ ws["!data"][R + or_R][C + or_C] = o;
16093
16352
  } else ws[encode_cell({ c: C + or_C, r: R + or_R })] = o;
16094
16353
  if (range2.e.c < C + or_C) range2.e.c = C + or_C;
16095
16354
  C += CS;
@@ -16104,11 +16363,13 @@ var __async = (__this, __arguments, generator) => {
16104
16363
  }
16105
16364
  function parse_dom_table(table, _opts) {
16106
16365
  var opts = _opts || {};
16107
- var ws = opts.dense ? [] : {};
16366
+ var ws = {};
16367
+ if (opts.dense) ws["!data"] = [];
16108
16368
  return sheet_add_dom(ws, table, _opts);
16109
16369
  }
16110
16370
  function table_to_book(table, opts) {
16111
- return sheet_to_workbook(parse_dom_table(table, opts), opts);
16371
+ var o = sheet_to_workbook(parse_dom_table(table, opts), opts);
16372
+ return o;
16112
16373
  }
16113
16374
  function is_dom_element_hidden(element) {
16114
16375
  var display = "";
@@ -16122,6 +16383,25 @@ var __async = (__this, __arguments, generator) => {
16122
16383
  if (typeof getComputedStyle === "function") return getComputedStyle;
16123
16384
  return null;
16124
16385
  }
16386
+ /*! sheetjs (C) 2013-present SheetJS -- http://sheetjs.com */
16387
+ (function() {
16388
+ try {
16389
+ if (typeof Uint8Array == "undefined")
16390
+ return "slice";
16391
+ if (typeof Uint8Array.prototype.subarray == "undefined")
16392
+ return "slice";
16393
+ if (typeof Buffer !== "undefined") {
16394
+ if (typeof Buffer.prototype.subarray == "undefined")
16395
+ return "slice";
16396
+ if ((typeof Buffer.from == "function" ? Buffer.from([72, 62]) : new Buffer([72, 62])) instanceof Uint8Array)
16397
+ return "subarray";
16398
+ return "slice";
16399
+ }
16400
+ return "subarray";
16401
+ } catch (e) {
16402
+ return "slice";
16403
+ }
16404
+ })();
16125
16405
  function fix_opts_func(defaults) {
16126
16406
  return function fix_opts(opts) {
16127
16407
  for (var i = 0; i != defaults.length; ++i) {
@@ -16146,7 +16426,6 @@ var __async = (__this, __arguments, generator) => {
16146
16426
  ])(opts);
16147
16427
  }
16148
16428
  function write_zip_xlsx(wb, opts) {
16149
- _shapeid = 1024;
16150
16429
  if (wb && !wb.SSF) {
16151
16430
  wb.SSF = dup(table_fmt);
16152
16431
  }
@@ -16228,10 +16507,10 @@ var __async = (__this, __arguments, generator) => {
16228
16507
  });
16229
16508
  });
16230
16509
  if (needtc) {
16231
- cf = "xl/threadedComments/threadedComment" + rId + "." + wbext;
16510
+ cf = "xl/threadedComments/threadedComment" + rId + ".xml";
16232
16511
  zip_add_file(zip, cf, write_tcmnt_xml(comments, people, opts));
16233
16512
  ct.threadedcomments.push(cf);
16234
- add_rels(wsrels, -1, "../threadedComments/threadedComment" + rId + "." + wbext, RELS.TCMNT);
16513
+ add_rels(wsrels, -1, "../threadedComments/threadedComment" + rId + ".xml", RELS.TCMNT);
16235
16514
  }
16236
16515
  cf = "xl/comments" + rId + "." + wbext;
16237
16516
  zip_add_file(zip, cf, write_comments_xml(comments));
@@ -16240,7 +16519,7 @@ var __async = (__this, __arguments, generator) => {
16240
16519
  need_vml = true;
16241
16520
  }
16242
16521
  if (ws["!legacy"]) {
16243
- if (need_vml) zip_add_file(zip, "xl/drawings/vmlDrawing" + rId + ".vml", write_comments_vml(rId, ws["!comments"]));
16522
+ if (need_vml) zip_add_file(zip, "xl/drawings/vmlDrawing" + rId + ".vml", write_vml(rId, ws["!comments"]));
16244
16523
  }
16245
16524
  delete ws["!comments"];
16246
16525
  delete ws["!legacy"];
@@ -16365,10 +16644,10 @@ var __async = (__this, __arguments, generator) => {
16365
16644
  }
16366
16645
  return write_zip_typeXLSX(wb, o);
16367
16646
  }
16368
- function make_json_row(sheet, r, R, cols, header, hdr, dense, o) {
16647
+ function make_json_row(sheet, r, R, cols, header, hdr, o) {
16369
16648
  var rr = encode_row(R);
16370
16649
  var defval = o.defval, raw = o.raw || !Object.prototype.hasOwnProperty.call(o, "raw");
16371
- var isempty = true;
16650
+ var isempty = true, dense = sheet["!data"] != null;
16372
16651
  var row = header === 1 ? [] : {};
16373
16652
  if (header !== 1) {
16374
16653
  if (Object.defineProperty) try {
@@ -16378,9 +16657,9 @@ var __async = (__this, __arguments, generator) => {
16378
16657
  }
16379
16658
  else row.__rowNum__ = R;
16380
16659
  }
16381
- if (!dense || sheet[R]) for (var C = r.s.c; C <= r.e.c; ++C) {
16382
- var val = dense ? sheet[R][C] : sheet[cols[C] + rr];
16383
- if (val === void 0 || val.t === void 0) {
16660
+ if (!dense || sheet["!data"][R]) for (var C = r.s.c; C <= r.e.c; ++C) {
16661
+ var val = dense ? (sheet["!data"][R] || [])[C] : sheet[cols[C] + rr];
16662
+ if (val == null || val.t === void 0) {
16384
16663
  if (defval === void 0) continue;
16385
16664
  if (hdr[C] != null) {
16386
16665
  row[hdr[C]] = defval;
@@ -16396,9 +16675,14 @@ var __async = (__this, __arguments, generator) => {
16396
16675
  v = v == 0 ? null : void 0;
16397
16676
  break;
16398
16677
  case "s":
16399
- case "d":
16400
16678
  case "b":
16401
16679
  case "n":
16680
+ if (!val.z || !fmt_is_date(val.z)) break;
16681
+ v = numdate(v);
16682
+ if (typeof v == "number") break;
16683
+ /* falls through */
16684
+ case "d":
16685
+ if (!(o && (o.UTC || o.raw === false))) v = utc_to_local(new Date(v));
16402
16686
  break;
16403
16687
  default:
16404
16688
  throw new Error("unrecognized type " + val.t);
@@ -16410,7 +16694,7 @@ var __async = (__this, __arguments, generator) => {
16410
16694
  else if (raw && v === null) row[hdr[C]] = null;
16411
16695
  else continue;
16412
16696
  } else {
16413
- row[hdr[C]] = raw && (val.t !== "n" || val.t === "n" && o.rawNumbers !== false) ? v : format_cell(val, v, o);
16697
+ row[hdr[C]] = (val.t === "n" && typeof o.rawNumbers === "boolean" ? o.rawNumbers : raw) ? v : format_cell(val, v, o);
16414
16698
  }
16415
16699
  if (v != null) isempty = false;
16416
16700
  }
@@ -16443,16 +16727,16 @@ var __async = (__this, __arguments, generator) => {
16443
16727
  var cols = [];
16444
16728
  var out = [];
16445
16729
  var outi = 0, counter = 0;
16446
- var dense = Array.isArray(sheet);
16730
+ var dense = sheet["!data"] != null;
16447
16731
  var R = r.s.r, C = 0;
16448
16732
  var header_cnt = {};
16449
- if (dense && !sheet[R]) sheet[R] = [];
16733
+ if (dense && !sheet["!data"][R]) sheet["!data"][R] = [];
16450
16734
  var colinfo = o.skipHidden && sheet["!cols"] || [];
16451
16735
  var rowinfo = o.skipHidden && sheet["!rows"] || [];
16452
16736
  for (C = r.s.c; C <= r.e.c; ++C) {
16453
16737
  if ((colinfo[C] || {}).hidden) continue;
16454
16738
  cols[C] = encode_col(C);
16455
- val = dense ? sheet[R][C] : sheet[cols[C] + rr];
16739
+ val = dense ? sheet["!data"][R][C] : sheet[cols[C] + rr];
16456
16740
  switch (header) {
16457
16741
  case 1:
16458
16742
  hdr[C] = C - r.s.c;
@@ -16480,19 +16764,21 @@ var __async = (__this, __arguments, generator) => {
16480
16764
  }
16481
16765
  for (R = r.s.r + offset; R <= r.e.r; ++R) {
16482
16766
  if ((rowinfo[R] || {}).hidden) continue;
16483
- var row = make_json_row(sheet, r, R, cols, header, hdr, dense, o);
16767
+ var row = make_json_row(sheet, r, R, cols, header, hdr, o);
16484
16768
  if (row.isempty === false || (header === 1 ? o.blankrows !== false : !!o.blankrows)) out[outi++] = row.row;
16485
16769
  }
16486
16770
  out.length = outi;
16487
16771
  return out;
16488
16772
  }
16489
16773
  var qreg = /"/g;
16490
- function make_csv_row(sheet, r, R, cols, fs, rs, FS, o) {
16774
+ function make_csv_row(sheet, r, R, cols, fs, rs, FS, w, o) {
16491
16775
  var isempty = true;
16492
16776
  var row = [], txt = "", rr = encode_row(R);
16777
+ var dense = sheet["!data"] != null;
16778
+ var datarow = dense && sheet["!data"][R] || [];
16493
16779
  for (var C = r.s.c; C <= r.e.c; ++C) {
16494
16780
  if (!cols[C]) continue;
16495
- var val = o.dense ? (sheet[R] || [])[C] : sheet[cols[C] + rr];
16781
+ var val = dense ? datarow[C] : sheet[cols[C] + rr];
16496
16782
  if (val == null) txt = "";
16497
16783
  else if (val.v != null) {
16498
16784
  isempty = false;
@@ -16501,7 +16787,7 @@ var __async = (__this, __arguments, generator) => {
16501
16787
  txt = '"' + txt.replace(qreg, '""') + '"';
16502
16788
  break;
16503
16789
  }
16504
- if (txt == "ID") txt = '"ID"';
16790
+ if (txt == "ID" && w == 0 && row.length == 0) txt = '"ID"';
16505
16791
  } else if (val.f != null && !val.F) {
16506
16792
  isempty = false;
16507
16793
  txt = "=" + val.f;
@@ -16509,6 +16795,7 @@ var __async = (__this, __arguments, generator) => {
16509
16795
  } else txt = "";
16510
16796
  row.push(txt);
16511
16797
  }
16798
+ if (o.strip) while (row[row.length - 1] === "") --row.length;
16512
16799
  if (o.blankrows === false && isempty) return null;
16513
16800
  return row.join(FS);
16514
16801
  }
@@ -16519,23 +16806,19 @@ var __async = (__this, __arguments, generator) => {
16519
16806
  var r = safe_decode_range(sheet["!ref"]);
16520
16807
  var FS = o.FS !== void 0 ? o.FS : ",", fs = FS.charCodeAt(0);
16521
16808
  var RS = o.RS !== void 0 ? o.RS : "\n", rs = RS.charCodeAt(0);
16522
- var endregex = new RegExp((FS == "|" ? "\\|" : FS) + "+$");
16523
16809
  var row = "", cols = [];
16524
- o.dense = Array.isArray(sheet);
16525
16810
  var colinfo = o.skipHidden && sheet["!cols"] || [];
16526
16811
  var rowinfo = o.skipHidden && sheet["!rows"] || [];
16527
16812
  for (var C = r.s.c; C <= r.e.c; ++C) if (!(colinfo[C] || {}).hidden) cols[C] = encode_col(C);
16528
16813
  var w = 0;
16529
16814
  for (var R = r.s.r; R <= r.e.r; ++R) {
16530
16815
  if ((rowinfo[R] || {}).hidden) continue;
16531
- row = make_csv_row(sheet, r, R, cols, fs, rs, FS, o);
16816
+ row = make_csv_row(sheet, r, R, cols, fs, rs, FS, w, o);
16532
16817
  if (row == null) {
16533
16818
  continue;
16534
16819
  }
16535
- if (o.strip) row = row.replace(endregex, "");
16536
16820
  if (row || o.blankrows !== false) out.push((w++ ? RS : "") + row);
16537
16821
  }
16538
- delete o.dense;
16539
16822
  return out.join("");
16540
16823
  }
16541
16824
  function sheet_to_txt(sheet, opts) {
@@ -16545,18 +16828,18 @@ var __async = (__this, __arguments, generator) => {
16545
16828
  var s = sheet_to_csv(sheet, opts);
16546
16829
  return s;
16547
16830
  }
16548
- function sheet_to_formulae(sheet) {
16831
+ function sheet_to_formulae(sheet, opts) {
16549
16832
  var y = "", x, val = "";
16550
16833
  if (sheet == null || sheet["!ref"] == null) return [];
16551
16834
  var r = safe_decode_range(sheet["!ref"]), rr = "", cols = [], C;
16552
16835
  var cmds = [];
16553
- var dense = Array.isArray(sheet);
16836
+ var dense = sheet["!data"] != null;
16554
16837
  for (C = r.s.c; C <= r.e.c; ++C) cols[C] = encode_col(C);
16555
16838
  for (var R = r.s.r; R <= r.e.r; ++R) {
16556
16839
  rr = encode_row(R);
16557
16840
  for (C = r.s.c; C <= r.e.c; ++C) {
16558
16841
  y = cols[C] + rr;
16559
- x = dense ? (sheet[R] || [])[C] : sheet[y];
16842
+ x = dense ? (sheet["!data"][R] || [])[C] : sheet[y];
16560
16843
  val = "";
16561
16844
  if (x === void 0) continue;
16562
16845
  else if (x.F != null) {
@@ -16566,6 +16849,7 @@ var __async = (__this, __arguments, generator) => {
16566
16849
  if (y.indexOf(":") == -1) y = y + ":" + y;
16567
16850
  }
16568
16851
  if (x.f != null) val = x.f;
16852
+ else if (opts && opts.values === false) continue;
16569
16853
  else if (x.t == "z") continue;
16570
16854
  else if (x.t == "n" && x.v != null) val = "" + x.v;
16571
16855
  else if (x.t == "b") val = x.v ? "TRUE" : "FALSE";
@@ -16580,8 +16864,10 @@ var __async = (__this, __arguments, generator) => {
16580
16864
  }
16581
16865
  function sheet_add_json(_ws, js, opts) {
16582
16866
  var o = opts || {};
16867
+ var dense = _ws ? _ws["!data"] != null : o.dense;
16583
16868
  var offset = +!o.skipHeader;
16584
16869
  var ws = _ws || {};
16870
+ if (!_ws && dense) ws["!data"] = [];
16585
16871
  var _R = 0, _C = 0;
16586
16872
  if (ws && o.origin != null) {
16587
16873
  if (typeof o.origin == "number") _R = o.origin;
@@ -16591,7 +16877,6 @@ var __async = (__this, __arguments, generator) => {
16591
16877
  _C = _origin.c;
16592
16878
  }
16593
16879
  }
16594
- var cell;
16595
16880
  var range2 = { s: { c: 0, r: 0 }, e: { c: _C, r: _R + js.length - 1 + offset } };
16596
16881
  if (ws["!ref"]) {
16597
16882
  var _range = safe_decode_range(ws["!ref"]);
@@ -16608,33 +16893,40 @@ var __async = (__this, __arguments, generator) => {
16608
16893
  }
16609
16894
  }
16610
16895
  var hdr = o.header || [], C = 0;
16896
+ var ROW = [];
16611
16897
  js.forEach(function(JS, R) {
16898
+ if (dense && !ws["!data"][_R + R + offset]) ws["!data"][_R + R + offset] = [];
16899
+ if (dense) ROW = ws["!data"][_R + R + offset];
16612
16900
  keys(JS).forEach(function(k) {
16613
16901
  if ((C = hdr.indexOf(k)) == -1) hdr[C = hdr.length] = k;
16614
16902
  var v = JS[k];
16615
16903
  var t = "z";
16616
16904
  var z = "";
16617
- var ref2 = encode_cell({ c: _C + C, r: _R + R + offset });
16618
- cell = ws_get_cell_stub(ws, ref2);
16905
+ var ref2 = dense ? "" : encode_col(_C + C) + encode_row(_R + R + offset);
16906
+ var cell = dense ? ROW[_C + C] : ws[ref2];
16619
16907
  if (v && typeof v === "object" && !(v instanceof Date)) {
16620
- ws[ref2] = v;
16908
+ if (dense) ROW[_C + C] = v;
16909
+ else ws[ref2] = v;
16621
16910
  } else {
16622
16911
  if (typeof v == "number") t = "n";
16623
16912
  else if (typeof v == "boolean") t = "b";
16624
16913
  else if (typeof v == "string") t = "s";
16625
16914
  else if (v instanceof Date) {
16626
16915
  t = "d";
16916
+ if (!o.UTC) v = local_to_utc(v);
16627
16917
  if (!o.cellDates) {
16628
16918
  t = "n";
16629
16919
  v = datenum(v);
16630
16920
  }
16631
- z = o.dateNF || table_fmt[14];
16921
+ z = cell != null && cell.z && fmt_is_date(cell.z) ? cell.z : o.dateNF || table_fmt[14];
16632
16922
  } else if (v === null && o.nullError) {
16633
16923
  t = "e";
16634
16924
  v = 0;
16635
16925
  }
16636
- if (!cell) ws[ref2] = cell = { t, v };
16637
- else {
16926
+ if (!cell) {
16927
+ if (!dense) ws[ref2] = cell = { t, v };
16928
+ else ROW[_C + C] = cell = { t, v };
16929
+ } else {
16638
16930
  cell.t = t;
16639
16931
  cell.v = v;
16640
16932
  delete cell.w;
@@ -16647,7 +16939,11 @@ var __async = (__this, __arguments, generator) => {
16647
16939
  });
16648
16940
  range2.e.c = Math.max(range2.e.c, _C + hdr.length - 1);
16649
16941
  var __R = encode_row(_R);
16650
- if (offset) for (C = 0; C < hdr.length; ++C) ws[encode_col(C + _C) + __R] = { t: "s", v: hdr[C] };
16942
+ if (dense && !ws["!data"][_R]) ws["!data"][_R] = [];
16943
+ if (offset) for (C = 0; C < hdr.length; ++C) {
16944
+ if (dense) ws["!data"][_R][C + _C] = { t: "s", v: hdr[C] };
16945
+ else ws[encode_col(C + _C) + __R] = { t: "s", v: hdr[C] };
16946
+ }
16651
16947
  ws["!ref"] = encode_range(range2);
16652
16948
  return ws;
16653
16949
  }
@@ -16656,15 +16952,15 @@ var __async = (__this, __arguments, generator) => {
16656
16952
  }
16657
16953
  function ws_get_cell_stub(ws, R, C) {
16658
16954
  if (typeof R == "string") {
16659
- if (Array.isArray(ws)) {
16955
+ if (ws["!data"] != null) {
16660
16956
  var RC = decode_cell(R);
16661
- if (!ws[RC.r]) ws[RC.r] = [];
16662
- return ws[RC.r][RC.c] || (ws[RC.r][RC.c] = { t: "z" });
16957
+ if (!ws["!data"][RC.r]) ws["!data"][RC.r] = [];
16958
+ return ws["!data"][RC.r][RC.c] || (ws["!data"][RC.r][RC.c] = { t: "z" });
16663
16959
  }
16664
16960
  return ws[R] || (ws[R] = { t: "z" });
16665
16961
  }
16666
16962
  if (typeof R != "number") return ws_get_cell_stub(ws, encode_cell(R));
16667
- return ws_get_cell_stub(ws, encode_cell({ r: R, c: C || 0 }));
16963
+ return ws_get_cell_stub(ws, encode_col(C || 0) + encode_row(R));
16668
16964
  }
16669
16965
  function wb_sheet_idx(wb, sh) {
16670
16966
  if (typeof sh == "number") {
@@ -16676,8 +16972,10 @@ var __async = (__this, __arguments, generator) => {
16676
16972
  throw new Error("Cannot find sheet name |" + sh + "|");
16677
16973
  } else throw new Error("Cannot find sheet |" + sh + "|");
16678
16974
  }
16679
- function book_new() {
16680
- return { SheetNames: [], Sheets: {} };
16975
+ function book_new(ws, wsname) {
16976
+ var wb = { SheetNames: [], Sheets: {} };
16977
+ if (ws) book_append_sheet(wb, ws, wsname || "Sheet1");
16978
+ return wb;
16681
16979
  }
16682
16980
  function book_append_sheet(wb, ws, name, roll) {
16683
16981
  var i = 1;
@@ -16685,10 +16983,10 @@ var __async = (__this, __arguments, generator) => {
16685
16983
  for (; i <= 65535; ++i, name = void 0) if (wb.SheetNames.indexOf(name = "Sheet" + i) == -1) break;
16686
16984
  }
16687
16985
  if (!name || wb.SheetNames.length >= 65535) throw new Error("Too many worksheets");
16688
- if (roll && wb.SheetNames.indexOf(name) >= 0) {
16689
- var m = name.match(/(^.*?)(\d+)$/);
16690
- i = m && +m[2] || 0;
16691
- var root = m && m[1] || name;
16986
+ if (roll && wb.SheetNames.indexOf(name) >= 0 && name.length < 32) {
16987
+ var m = name.match(/\d+$/);
16988
+ i = m && +m[0] || 0;
16989
+ var root = m && name.slice(0, m.index) || name;
16692
16990
  for (++i; i <= 65535; ++i) if (wb.SheetNames.indexOf(name = root + i) == -1) break;
16693
16991
  }
16694
16992
  check_ws_name(name);
@@ -16745,6 +17043,12 @@ var __async = (__this, __arguments, generator) => {
16745
17043
  if (dynamic) cell.D = true;
16746
17044
  }
16747
17045
  }
17046
+ var wsr = decode_range(ws["!ref"]);
17047
+ if (wsr.s.r > rng.s.r) wsr.s.r = rng.s.r;
17048
+ if (wsr.s.c > rng.s.c) wsr.s.c = rng.s.c;
17049
+ if (wsr.e.r < rng.e.r) wsr.e.r = rng.e.r;
17050
+ if (wsr.e.c < rng.e.c) wsr.e.c = rng.e.c;
17051
+ ws["!ref"] = encode_range(wsr);
16748
17052
  return ws;
16749
17053
  }
16750
17054
  var utils$1 = {
@@ -16758,6 +17062,7 @@ var __async = (__this, __arguments, generator) => {
16758
17062
  decode_cell,
16759
17063
  decode_range,
16760
17064
  format_cell,
17065
+ sheet_new,
16761
17066
  sheet_add_aoa,
16762
17067
  sheet_add_json,
16763
17068
  sheet_add_dom,
@@ -16958,7 +17263,7 @@ var __async = (__this, __arguments, generator) => {
16958
17263
  errorBars,
16959
17264
  categories,
16960
17265
  values,
16961
- shape,
17266
+ shapeFmt,
16962
17267
  extensionList
16963
17268
  } = _l, options = __objRest(_l, [
16964
17269
  "invertIfNegative",
@@ -16969,7 +17274,7 @@ var __async = (__this, __arguments, generator) => {
16969
17274
  "errorBars",
16970
17275
  "categories",
16971
17276
  "values",
16972
- "shape",
17277
+ "shapeFmt",
16973
17278
  "extensionList"
16974
17279
  ]);
16975
17280
  super("c:ser");
@@ -17012,8 +17317,8 @@ var __async = (__this, __arguments, generator) => {
17012
17317
  })
17013
17318
  );
17014
17319
  }
17015
- if (shape) {
17016
- this.root.push(new StringEnumValueElement("c:shape", shape, ""));
17320
+ if (shapeFmt) {
17321
+ this.root.push(new StringEnumValueElement("c:shape", shapeFmt, ""));
17017
17322
  }
17018
17323
  if (extensionList) {
17019
17324
  this.root.push(new ExtensionList(extensionList));
@@ -29487,7 +29792,7 @@ var __async = (__this, __arguments, generator) => {
29487
29792
  relationshipAdditions.push({
29488
29793
  key,
29489
29794
  entries: chartEntries.map(([tempId], index) => ({
29490
- name: `chart${index + 1}`,
29795
+ name: `chart${index + 1}.xml`,
29491
29796
  path: "charts",
29492
29797
  type: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart",
29493
29798
  repl: tempId