@devmm/puredocs-excel-formula 1.0.9 → 1.1.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/dist/index.cjs +55 -15
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +55 -15
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.cjs
CHANGED
|
@@ -31,6 +31,13 @@ var FormulaError = /* @__PURE__ */ ((FormulaError2) => {
|
|
|
31
31
|
FormulaError2[FormulaError2["Spill"] = 9] = "Spill";
|
|
32
32
|
return FormulaError2;
|
|
33
33
|
})(FormulaError || {});
|
|
34
|
+
var DECIMAL = /^[+-]?(?:\d+\.?\d*|\.\d+)(?:[eE][+-]?\d+)?$/;
|
|
35
|
+
function numericText(text) {
|
|
36
|
+
const trimmed = text.trim();
|
|
37
|
+
if (!DECIMAL.test(trimmed)) return null;
|
|
38
|
+
const n = Number(trimmed);
|
|
39
|
+
return Number.isFinite(n) ? n : null;
|
|
40
|
+
}
|
|
34
41
|
var TailCall = class {
|
|
35
42
|
constructor(lambda, args) {
|
|
36
43
|
this.lambda = lambda;
|
|
@@ -1443,6 +1450,7 @@ var indexes = /* @__PURE__ */ new WeakMap();
|
|
|
1443
1450
|
function build(arr) {
|
|
1444
1451
|
const byText = /* @__PURE__ */ new Map();
|
|
1445
1452
|
const byNumber = /* @__PURE__ */ new Map();
|
|
1453
|
+
const byTextNumber = /* @__PURE__ */ new Map();
|
|
1446
1454
|
const classes = /* @__PURE__ */ new Map();
|
|
1447
1455
|
const addToClass = (kind, v, i2) => {
|
|
1448
1456
|
const group = classes.get(kind);
|
|
@@ -1462,6 +1470,14 @@ function build(arr) {
|
|
|
1462
1470
|
else byNumber.set(n, [i]);
|
|
1463
1471
|
} else {
|
|
1464
1472
|
addToClass(v.kind, v, i);
|
|
1473
|
+
if (v.isText) {
|
|
1474
|
+
const n = numericText(v.textValue);
|
|
1475
|
+
if (n !== null) {
|
|
1476
|
+
const atText2 = byTextNumber.get(n);
|
|
1477
|
+
if (atText2) atText2.push(i);
|
|
1478
|
+
else byTextNumber.set(n, [i]);
|
|
1479
|
+
}
|
|
1480
|
+
}
|
|
1465
1481
|
}
|
|
1466
1482
|
i++;
|
|
1467
1483
|
}
|
|
@@ -1470,7 +1486,15 @@ function build(arr) {
|
|
|
1470
1486
|
for (let k = 0; k < sortedNumbers.length; k++) {
|
|
1471
1487
|
cumulative[k + 1] = cumulative[k] + byNumber.get(sortedNumbers[k]).length;
|
|
1472
1488
|
}
|
|
1473
|
-
return {
|
|
1489
|
+
return {
|
|
1490
|
+
byText,
|
|
1491
|
+
byNumber,
|
|
1492
|
+
sortedNumbers,
|
|
1493
|
+
cumulative,
|
|
1494
|
+
byTextNumber,
|
|
1495
|
+
sortedTextNumbers: Float64Array.from(byTextNumber.keys()).sort(),
|
|
1496
|
+
classes: [...classes.values()]
|
|
1497
|
+
};
|
|
1474
1498
|
}
|
|
1475
1499
|
function indexOf(arr) {
|
|
1476
1500
|
let idx = indexes.get(arr);
|
|
@@ -1508,19 +1532,25 @@ function matchingPositions(criteriaRange, criteria, minSize) {
|
|
|
1508
1532
|
if (criteria.kind === "equalsNumber") {
|
|
1509
1533
|
const target = criteria.number;
|
|
1510
1534
|
const idx = indexOf(arr);
|
|
1511
|
-
const
|
|
1512
|
-
|
|
1513
|
-
|
|
1514
|
-
|
|
1515
|
-
|
|
1516
|
-
|
|
1517
|
-
|
|
1518
|
-
|
|
1519
|
-
|
|
1520
|
-
|
|
1535
|
+
const groups = [];
|
|
1536
|
+
const collect = (byValue, sorted) => {
|
|
1537
|
+
const exact2 = byValue.get(target);
|
|
1538
|
+
if (exact2) groups.push(exact2);
|
|
1539
|
+
for (let k = lowerBound(sorted, target - EPSILON); k < sorted.length; k++) {
|
|
1540
|
+
const value2 = sorted[k];
|
|
1541
|
+
if (value2 > target + EPSILON) break;
|
|
1542
|
+
if (value2 === target) continue;
|
|
1543
|
+
if (!criteria.test(FormulaValue.number(value2))) continue;
|
|
1544
|
+
groups.push(byValue.get(value2));
|
|
1545
|
+
}
|
|
1546
|
+
};
|
|
1547
|
+
collect(idx.byNumber, idx.sortedNumbers);
|
|
1548
|
+
collect(idx.byTextNumber, idx.sortedTextNumbers);
|
|
1521
1549
|
const blanks = criteria.test(FormulaValue.blank) ? blankPositions(idx) : void 0;
|
|
1522
|
-
if (
|
|
1523
|
-
|
|
1550
|
+
if (blanks?.length) groups.push(blanks);
|
|
1551
|
+
if (groups.length === 0) return EMPTY;
|
|
1552
|
+
if (groups.length === 1) return groups[0];
|
|
1553
|
+
const merged = groups.flat();
|
|
1524
1554
|
merged.sort((a, b) => a - b);
|
|
1525
1555
|
return merged;
|
|
1526
1556
|
}
|
|
@@ -4702,7 +4732,8 @@ exports.FormulaHelper = void 0;
|
|
|
4702
4732
|
return rhsNum !== null ? numberEquality(rhsNum) : textEquality(rhs);
|
|
4703
4733
|
}
|
|
4704
4734
|
if (op === "<>") {
|
|
4705
|
-
|
|
4735
|
+
const equals = rhsNum !== null ? numberEquality(rhsNum) : textEquality(rhs);
|
|
4736
|
+
return { kind: "other", test: (v) => !equals.test(v) };
|
|
4706
4737
|
}
|
|
4707
4738
|
const wanted = op === ">" ? (c) => c > 0 : op === ">=" ? (c) => c >= 0 : op === "<" ? (c) => c < 0 : (c) => c <= 0;
|
|
4708
4739
|
const test = (v) => wanted(FormulaValue.compare(v, rhsValue));
|
|
@@ -4718,7 +4749,16 @@ exports.FormulaHelper = void 0;
|
|
|
4718
4749
|
FormulaHelper2.compileCriteria = compileCriteria;
|
|
4719
4750
|
function numberEquality(n) {
|
|
4720
4751
|
const target = FormulaValue.number(n);
|
|
4721
|
-
return {
|
|
4752
|
+
return {
|
|
4753
|
+
kind: "equalsNumber",
|
|
4754
|
+
number: n,
|
|
4755
|
+
test: (v) => {
|
|
4756
|
+
if (FormulaValue.areEqual(v, target)) return true;
|
|
4757
|
+
if (!v.isText) return false;
|
|
4758
|
+
const asNumber = numericText(v.textValue);
|
|
4759
|
+
return asNumber !== null && Math.abs(asNumber - n) < 1e-10;
|
|
4760
|
+
}
|
|
4761
|
+
};
|
|
4722
4762
|
}
|
|
4723
4763
|
function textEquality(s) {
|
|
4724
4764
|
const upper2 = s.toUpperCase();
|