@borgar/fx 5.0.1 → 5.0.2

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.
@@ -85,6 +85,7 @@ var REF_BEAM = "range_beam";
85
85
  var REF_TERNARY = "range_ternary";
86
86
  var REF_NAMED = "range_named";
87
87
  var REF_STRUCT = "structured";
88
+ var REF_CELL = "cell";
88
89
  var FX_PREFIX = "fx_prefix";
89
90
  var UNKNOWN = "unknown";
90
91
  var UNARY = "UnaryExpression";
@@ -104,24 +105,26 @@ var MAX_ROWS = 2 ** 20 - 1;
104
105
  // lib/mergeRefTokens.ts
105
106
  var END = "$";
106
107
  var validRunsMerge = [
107
- [REF_RANGE, ":", REF_RANGE],
108
- [REF_RANGE, ".:", REF_RANGE],
109
- [REF_RANGE, ":.", REF_RANGE],
110
- [REF_RANGE, ".:.", REF_RANGE],
108
+ [REF_CELL, ":", REF_CELL],
109
+ [REF_CELL, ".:", REF_CELL],
110
+ [REF_CELL, ":.", REF_CELL],
111
+ [REF_CELL, ".:.", REF_CELL],
111
112
  [REF_RANGE],
112
113
  [REF_BEAM],
113
114
  [REF_TERNARY],
114
- [CONTEXT, "!", REF_RANGE, ":", REF_RANGE],
115
- [CONTEXT, "!", REF_RANGE, ".:", REF_RANGE],
116
- [CONTEXT, "!", REF_RANGE, ":.", REF_RANGE],
117
- [CONTEXT, "!", REF_RANGE, ".:.", REF_RANGE],
115
+ [CONTEXT, "!", REF_CELL, ":", REF_CELL],
116
+ [CONTEXT, "!", REF_CELL, ".:", REF_CELL],
117
+ [CONTEXT, "!", REF_CELL, ":.", REF_CELL],
118
+ [CONTEXT, "!", REF_CELL, ".:.", REF_CELL],
119
+ [CONTEXT, "!", REF_CELL],
118
120
  [CONTEXT, "!", REF_RANGE],
119
121
  [CONTEXT, "!", REF_BEAM],
120
122
  [CONTEXT, "!", REF_TERNARY],
121
- [CONTEXT_QUOTE, "!", REF_RANGE, ":", REF_RANGE],
122
- [CONTEXT_QUOTE, "!", REF_RANGE, ".:", REF_RANGE],
123
- [CONTEXT_QUOTE, "!", REF_RANGE, ":.", REF_RANGE],
124
- [CONTEXT_QUOTE, "!", REF_RANGE, ".:.", REF_RANGE],
123
+ [CONTEXT_QUOTE, "!", REF_CELL, ":", REF_CELL],
124
+ [CONTEXT_QUOTE, "!", REF_CELL, ".:", REF_CELL],
125
+ [CONTEXT_QUOTE, "!", REF_CELL, ":.", REF_CELL],
126
+ [CONTEXT_QUOTE, "!", REF_CELL, ".:.", REF_CELL],
127
+ [CONTEXT_QUOTE, "!", REF_CELL],
125
128
  [CONTEXT_QUOTE, "!", REF_RANGE],
126
129
  [CONTEXT_QUOTE, "!", REF_BEAM],
127
130
  [CONTEXT_QUOTE, "!", REF_TERNARY],
@@ -153,7 +156,11 @@ var matcher = (tokens2, currNode, anchorIndex, index = 0) => {
153
156
  while (i <= max) {
154
157
  const token = tokens2[anchorIndex - i];
155
158
  if (token) {
156
- const key = token.type === OPERATOR ? token.value : token.type;
159
+ const value = token.value;
160
+ let key = token.type === OPERATOR ? value : token.type;
161
+ if (key === REF_RANGE && !value.includes(":")) {
162
+ key = REF_CELL;
163
+ }
157
164
  if (key in node) {
158
165
  node = node[key];
159
166
  i += 1;
@@ -543,7 +550,7 @@ function lexRangeA1(str, pos, options) {
543
550
  }
544
551
  }
545
552
  }
546
- if (top && canEndRange(str, preOp)) {
553
+ if (top && canEndRange(str, preOp) && str.charCodeAt(preOp) !== 33) {
547
554
  return { type: REF_RANGE, value: str.slice(pos, preOp) };
548
555
  }
549
556
  } else {
@@ -583,6 +590,7 @@ var UC_C = 67;
583
590
  var LC_C = 99;
584
591
  var PLUS = 43;
585
592
  var MINUS = 45;
593
+ var EXCL2 = 33;
586
594
  function lexR1C1Part(str, pos, isRow = false) {
587
595
  const start = pos;
588
596
  const c0 = str.charCodeAt(pos);
@@ -637,7 +645,7 @@ function lexRangeR1C1(str, pos, options) {
637
645
  p += r1;
638
646
  const c1 = lexR1C1Part(str, p);
639
647
  p += c1;
640
- if (c1 || r1) {
648
+ if ((c1 || r1) && str.charCodeAt(p) !== EXCL2) {
641
649
  const op = advRangeOp(str, p);
642
650
  const preOp = p;
643
651
  if (op) {
@@ -854,7 +862,7 @@ function parseSRange(str, pos = 0) {
854
862
  }
855
863
 
856
864
  // lib/lexers/lexStructured.ts
857
- var EXCL2 = 33;
865
+ var EXCL3 = 33;
858
866
  function lexStructured(str, pos) {
859
867
  const structData = parseSRange(str, pos);
860
868
  if (structData && structData.length) {
@@ -862,7 +870,7 @@ function lexStructured(str, pos) {
862
870
  while (isWS(str.charCodeAt(pos + i))) {
863
871
  i++;
864
872
  }
865
- if (str.charCodeAt(pos + i) !== EXCL2) {
873
+ if (str.charCodeAt(pos + i) !== EXCL3) {
866
874
  return {
867
875
  type: REF_STRUCT,
868
876
  value: structData.token
@@ -957,9 +965,9 @@ function lexNamed(str, pos) {
957
965
  }
958
966
 
959
967
  // lib/lexers/lexRefOp.ts
960
- var EXCL3 = 33;
968
+ var EXCL4 = 33;
961
969
  function lexRefOp(str, pos, opts) {
962
- if (str.charCodeAt(pos) === EXCL3) {
970
+ if (str.charCodeAt(pos) === EXCL4) {
963
971
  return { type: OPERATOR, value: str[pos] };
964
972
  }
965
973
  if (!opts.r1c1) {
@@ -973,7 +981,7 @@ function lexRefOp(str, pos, opts) {
973
981
  // lib/lexers/lexNameFuncCntx.ts
974
982
  var BR_OPEN4 = 91;
975
983
  var PAREN_OPEN = 40;
976
- var EXCL4 = 33;
984
+ var EXCL5 = 33;
977
985
  var OFFS = 32;
978
986
  var ALLOWED = new Uint8Array(180 - OFFS);
979
987
  var OK_NAME_0 = 1;
@@ -1038,7 +1046,7 @@ function lexNameFuncCntx(str, pos, opts) {
1038
1046
  } else {
1039
1047
  if (c === PAREN_OPEN && func) {
1040
1048
  return { type: FUNCTION, value: str.slice(start, pos) };
1041
- } else if (c === EXCL4 && cntx) {
1049
+ } else if (c === EXCL5 && cntx) {
1042
1050
  return { type: CONTEXT, value: str.slice(start, pos) };
1043
1051
  }
1044
1052
  return nameOrUnknown(str, s, start, pos, name);
@@ -1818,20 +1826,38 @@ function parse(tokenlist, options = {}) {
1818
1826
 
1819
1827
  // lib/stringifyPrefix.ts
1820
1828
  var reBannedChars = /[^0-9A-Za-z._¡¤§¨ª\u00ad¯-\uffff]/;
1829
+ var reIsRangelike = /^(R|C|RC|[A-Z]{1,3}\d{1,7})$/i;
1830
+ function needQuotes(scope, yesItDoes = 0) {
1831
+ if (yesItDoes) {
1832
+ return 1;
1833
+ }
1834
+ if (scope) {
1835
+ if (reBannedChars.test(scope)) {
1836
+ return 1;
1837
+ }
1838
+ if (reIsRangelike.test(scope)) {
1839
+ return 1;
1840
+ }
1841
+ }
1842
+ return 0;
1843
+ }
1844
+ function quotePrefix(prefix2) {
1845
+ return "'" + prefix2.replace(/'/g, "''") + "'";
1846
+ }
1821
1847
  function stringifyPrefixXlsx(ref) {
1822
1848
  let pre = "";
1823
1849
  let quote = 0;
1824
1850
  const { workbookName, sheetName } = ref;
1825
1851
  if (workbookName) {
1826
1852
  pre += "[" + workbookName + "]";
1827
- quote += +reBannedChars.test(workbookName);
1853
+ quote += needQuotes(workbookName);
1828
1854
  }
1829
1855
  if (sheetName) {
1830
1856
  pre += sheetName;
1831
- quote += +reBannedChars.test(sheetName);
1857
+ quote += needQuotes(sheetName);
1832
1858
  }
1833
1859
  if (quote) {
1834
- pre = "'" + pre.replace(/'/g, "''") + "'";
1860
+ pre = quotePrefix(pre);
1835
1861
  }
1836
1862
  return pre ? pre + "!" : pre;
1837
1863
  }