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