@pixerate/editor 0.47.0 → 0.48.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/agent/index.cjs +246 -29
- package/dist/agent/index.cjs.map +1 -1
- package/dist/agent/index.d.cts +18 -6
- package/dist/agent/index.d.ts +18 -6
- package/dist/agent/index.js +226 -9
- package/dist/agent/index.js.map +1 -1
- package/dist/{builtins-xs7rK6ys.d.cts → builtins-1kqwLUnb.d.cts} +1 -1
- package/dist/{builtins-D2nMtw2W.d.ts → builtins-BKYlHH1s.d.ts} +1 -1
- package/dist/chart/index.cjs +214 -3541
- package/dist/chart/index.cjs.map +1 -1
- package/dist/chart/index.d.cts +4 -494
- package/dist/chart/index.d.ts +4 -494
- package/dist/chart/index.js +135 -3462
- package/dist/chart/index.js.map +1 -1
- package/dist/{chunk-5VXI5GED.js → chunk-2CJ3LPYQ.js} +3 -3
- package/dist/{chunk-ZFBBVGCI.js → chunk-EKYHKQPG.js} +243 -243
- package/dist/{chunk-ZFBBVGCI.js.map → chunk-EKYHKQPG.js.map} +1 -1
- package/dist/chunk-HXUL3LS7.js +113 -0
- package/dist/chunk-HXUL3LS7.js.map +1 -0
- package/dist/{chunk-REAGGLXS.js → chunk-JQ3BB3E6.js} +2 -2
- package/dist/chunk-LTUM52X6.js +4074 -0
- package/dist/chunk-LTUM52X6.js.map +1 -0
- package/dist/{chunk-J3R2OWOE.cjs → chunk-MUCYWI6W.cjs} +608 -15
- package/dist/chunk-MUCYWI6W.cjs.map +1 -0
- package/dist/chunk-PIMCHMZE.cjs +521 -0
- package/dist/chunk-PIMCHMZE.cjs.map +1 -0
- package/dist/{chunk-TK2XZK6Z.js → chunk-PKBWLEL7.js} +594 -1
- package/dist/chunk-PKBWLEL7.js.map +1 -0
- package/dist/chunk-PRSJJZBS.cjs +4074 -0
- package/dist/chunk-PRSJJZBS.cjs.map +1 -0
- package/dist/chunk-U6IZKC7B.cjs +113 -0
- package/dist/chunk-U6IZKC7B.cjs.map +1 -0
- package/dist/{chunk-SQC26VQV.cjs → chunk-UN33YOXW.cjs} +191 -191
- package/dist/{chunk-SQC26VQV.cjs.map → chunk-UN33YOXW.cjs.map} +1 -1
- package/dist/{chunk-PQFAHT5O.js → chunk-VKPEPWKZ.js} +27 -94
- package/dist/chunk-VKPEPWKZ.js.map +1 -0
- package/dist/{chunk-H4PICYNL.cjs → chunk-WXEHCVJQ.cjs} +113 -180
- package/dist/chunk-WXEHCVJQ.cjs.map +1 -0
- package/dist/{chunk-LYGEEDNR.cjs → chunk-XP5IUZUO.cjs} +242 -242
- package/dist/chunk-XP5IUZUO.cjs.map +1 -0
- package/dist/{chunk-C3NWJE3K.js → chunk-XUUD43OV.js} +11 -672
- package/dist/chunk-XUUD43OV.js.map +1 -0
- package/dist/{chunk-BBRK6MOI.cjs → chunk-YU4WQE5M.cjs} +100 -100
- package/dist/{chunk-BBRK6MOI.cjs.map → chunk-YU4WQE5M.cjs.map} +1 -1
- package/dist/commands/index.d.cts +1 -1
- package/dist/commands/index.d.ts +1 -1
- package/dist/controller-ChjCCMLl.d.cts +822 -0
- package/dist/controller-DtbEo3om.d.ts +822 -0
- package/dist/extensions/index.cjs +32 -4
- package/dist/extensions/index.cjs.map +1 -1
- package/dist/extensions/index.d.cts +4 -2
- package/dist/extensions/index.d.ts +4 -2
- package/dist/extensions/index.js +31 -3
- package/dist/{index-QrqMmZ75.d.cts → index-DoHqT1mq.d.cts} +203 -7
- package/dist/{index-CSUCQYAH.d.ts → index-YLZ0fKqE.d.ts} +203 -7
- package/dist/index.cjs +37 -12
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +9 -7
- package/dist/index.d.ts +9 -7
- package/dist/index.js +31 -6
- package/dist/index.js.map +1 -1
- package/dist/spreadsheet/index.cjs +4 -4
- package/dist/spreadsheet/index.js +3 -3
- package/package.json +1 -1
- package/dist/chunk-C3NWJE3K.js.map +0 -1
- package/dist/chunk-H4PICYNL.cjs.map +0 -1
- package/dist/chunk-J3R2OWOE.cjs.map +0 -1
- package/dist/chunk-LYGEEDNR.cjs.map +0 -1
- package/dist/chunk-NEOO6QJD.cjs +0 -1182
- package/dist/chunk-NEOO6QJD.cjs.map +0 -1
- package/dist/chunk-PQFAHT5O.js.map +0 -1
- package/dist/chunk-TK2XZK6Z.js.map +0 -1
- package/dist/types-BVqWm3d1.d.cts +0 -320
- package/dist/types-BVqWm3d1.d.ts +0 -320
- /package/dist/{chunk-5VXI5GED.js.map → chunk-2CJ3LPYQ.js.map} +0 -0
- /package/dist/{chunk-REAGGLXS.js.map → chunk-JQ3BB3E6.js.map} +0 -0
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
|
|
27
27
|
|
|
28
28
|
|
|
29
|
-
var
|
|
29
|
+
var _chunkXP5IUZUOcjs = require('./chunk-XP5IUZUO.cjs');
|
|
30
30
|
|
|
31
31
|
// src/spreadsheet/formula/lexer.ts
|
|
32
32
|
var MAX_QUOTED_SHEET_LENGTH = 2 * 31 + 2;
|
|
@@ -558,56 +558,56 @@ var escapeRegExp = (text) => text.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
|
558
558
|
var hasWildcards = (pattern) => /(^|[^~])[*?]/.test(pattern);
|
|
559
559
|
function parseCriteria(criterion) {
|
|
560
560
|
if (typeof criterion === "number") {
|
|
561
|
-
return (value) =>
|
|
561
|
+
return (value) => _chunkXP5IUZUOcjs.numericValue.call(void 0, value) === criterion;
|
|
562
562
|
}
|
|
563
563
|
if (typeof criterion === "boolean") {
|
|
564
564
|
return (value) => value === criterion;
|
|
565
565
|
}
|
|
566
|
-
if (
|
|
566
|
+
if (_chunkXP5IUZUOcjs.isBlank.call(void 0, criterion)) return (value) => _chunkXP5IUZUOcjs.isBlank.call(void 0, value);
|
|
567
567
|
const text = String(criterion);
|
|
568
568
|
const match = /^(<>|<=|>=|=|<|>)?([\s\S]*)$/.exec(text);
|
|
569
569
|
const op = _nullishCoalesce(match[1], () => ( "="));
|
|
570
570
|
const operand = match[2];
|
|
571
571
|
if (operand === "") {
|
|
572
|
-
if (op === "=") return (value) =>
|
|
573
|
-
if (op === "<>") return (value) => !
|
|
572
|
+
if (op === "=") return (value) => _chunkXP5IUZUOcjs.isBlank.call(void 0, value);
|
|
573
|
+
if (op === "<>") return (value) => !_chunkXP5IUZUOcjs.isBlank.call(void 0, value);
|
|
574
574
|
return () => false;
|
|
575
575
|
}
|
|
576
|
-
const parsed =
|
|
577
|
-
const operandNumber = _nullishCoalesce(
|
|
576
|
+
const parsed = _chunkXP5IUZUOcjs.parseCellInput.call(void 0, operand.trim());
|
|
577
|
+
const operandNumber = _nullishCoalesce(_chunkXP5IUZUOcjs.numericValue.call(void 0, operand), () => ( (parsed.type === "number" ? parsed.value : null)));
|
|
578
578
|
const operandDate = parsed.type === "date" ? parsed.value : null;
|
|
579
|
-
const isDateValue = (value) => typeof value === "number" ||
|
|
579
|
+
const isDateValue = (value) => typeof value === "number" || _chunkXP5IUZUOcjs.parseIsoDate.call(void 0, value) !== null;
|
|
580
580
|
const operandUpper = operand.trim().toUpperCase();
|
|
581
581
|
const operandBoolean = operandUpper === "TRUE" ? true : operandUpper === "FALSE" ? false : null;
|
|
582
582
|
if (op === "=" || op === "<>") {
|
|
583
583
|
let equals;
|
|
584
584
|
if (operandDate !== null) {
|
|
585
|
-
equals = (value) => isDateValue(value) &&
|
|
585
|
+
equals = (value) => isDateValue(value) && _chunkXP5IUZUOcjs.compareValues.call(void 0, value, operandDate) === 0;
|
|
586
586
|
} else if (operandNumber !== null) {
|
|
587
|
-
equals = (value) =>
|
|
587
|
+
equals = (value) => _chunkXP5IUZUOcjs.numericValue.call(void 0, value) === operandNumber;
|
|
588
588
|
} else if (operandBoolean !== null) {
|
|
589
589
|
equals = (value) => value === operandBoolean || typeof value === "string" && value.trim().toUpperCase() === operandUpper;
|
|
590
|
-
} else if (
|
|
591
|
-
return op === "=" ? (value) => value === operand : (value) => value !== operand && !
|
|
590
|
+
} else if (_chunkXP5IUZUOcjs.isFormulaError.call(void 0, operand)) {
|
|
591
|
+
return op === "=" ? (value) => value === operand : (value) => value !== operand && !_chunkXP5IUZUOcjs.isBlank.call(void 0, value);
|
|
592
592
|
} else {
|
|
593
593
|
const regex = wildcardToRegExp(operand);
|
|
594
|
-
equals = (value) => typeof value === "string" && !
|
|
594
|
+
equals = (value) => typeof value === "string" && !_chunkXP5IUZUOcjs.isFormulaError.call(void 0, value) && regex.test(value);
|
|
595
595
|
}
|
|
596
|
-
return op === "=" ? (value) => !
|
|
596
|
+
return op === "=" ? (value) => !_chunkXP5IUZUOcjs.isFormulaError.call(void 0, value) && equals(value) : (value) => !_chunkXP5IUZUOcjs.isFormulaError.call(void 0, value) && !equals(value);
|
|
597
597
|
}
|
|
598
598
|
const test = (cmp) => op === "<" ? cmp < 0 : op === "<=" ? cmp <= 0 : op === ">" ? cmp > 0 : cmp >= 0;
|
|
599
599
|
if (operandDate !== null) {
|
|
600
|
-
return (value) => isDateValue(value) && test(
|
|
600
|
+
return (value) => isDateValue(value) && test(_chunkXP5IUZUOcjs.compareValues.call(void 0, value, operandDate));
|
|
601
601
|
}
|
|
602
602
|
if (operandNumber !== null) {
|
|
603
603
|
return (value) => {
|
|
604
|
-
const num =
|
|
604
|
+
const num = _chunkXP5IUZUOcjs.numericValue.call(void 0, value);
|
|
605
605
|
return num !== null && test(num - operandNumber);
|
|
606
606
|
};
|
|
607
607
|
}
|
|
608
608
|
const lower = operand.toLowerCase();
|
|
609
609
|
return (value) => {
|
|
610
|
-
if (typeof value !== "string" || value === "" ||
|
|
610
|
+
if (typeof value !== "string" || value === "" || _chunkXP5IUZUOcjs.FORMULA_ERRORS.has(value) || _chunkXP5IUZUOcjs.numericValue.call(void 0, value) !== null) {
|
|
611
611
|
return false;
|
|
612
612
|
}
|
|
613
613
|
const v = value.toLowerCase();
|
|
@@ -620,7 +620,7 @@ var arg = (name, description, type = "any", extra = {}) => ({ name, description,
|
|
|
620
620
|
var optional = (name, description, type = "any") => arg(name, description, type, { optional: true });
|
|
621
621
|
var repeating = (name, description, type = "any") => arg(name, description, type, { repeating: true });
|
|
622
622
|
function failed(value) {
|
|
623
|
-
return
|
|
623
|
+
return _chunkXP5IUZUOcjs.isFormulaError.call(void 0, value);
|
|
624
624
|
}
|
|
625
625
|
function unaryMath(ctx, fn) {
|
|
626
626
|
const value = ctx.number(0);
|
|
@@ -639,7 +639,7 @@ function roundWith(value, digits, mode) {
|
|
|
639
639
|
const factor = Math.pow(10, Math.trunc(digits));
|
|
640
640
|
const scaled = Number((Math.abs(value) * factor).toPrecision(15));
|
|
641
641
|
const rounded = mode === "up" ? Math.ceil(scaled) : Math.floor(scaled);
|
|
642
|
-
return
|
|
642
|
+
return _chunkXP5IUZUOcjs.cleanFloat.call(void 0, Math.sign(value) * rounded / factor);
|
|
643
643
|
}
|
|
644
644
|
var MATH_FUNCTIONS = [
|
|
645
645
|
{
|
|
@@ -666,7 +666,7 @@ var MATH_FUNCTIONS = [
|
|
|
666
666
|
if (nums.length === 0) return 0;
|
|
667
667
|
let product = 1;
|
|
668
668
|
for (const num of nums) product *= num;
|
|
669
|
-
return
|
|
669
|
+
return _chunkXP5IUZUOcjs.cleanFloat.call(void 0, product);
|
|
670
670
|
}
|
|
671
671
|
},
|
|
672
672
|
{
|
|
@@ -679,7 +679,7 @@ var MATH_FUNCTIONS = [
|
|
|
679
679
|
if (failed(num)) return num;
|
|
680
680
|
const decimals = ctx.number(1, 0);
|
|
681
681
|
if (failed(decimals)) return decimals;
|
|
682
|
-
return
|
|
682
|
+
return _chunkXP5IUZUOcjs.roundHalfAwayFromZero.call(void 0, num, Math.trunc(decimals));
|
|
683
683
|
}
|
|
684
684
|
},
|
|
685
685
|
{
|
|
@@ -765,7 +765,7 @@ var MATH_FUNCTIONS = [
|
|
|
765
765
|
const divisor = ctx.number(1);
|
|
766
766
|
if (failed(divisor)) return divisor;
|
|
767
767
|
if (divisor === 0) return ctx.argError(1, "#DIV/0!", "can't be zero.");
|
|
768
|
-
return
|
|
768
|
+
return _chunkXP5IUZUOcjs.cleanFloat.call(void 0, num - divisor * Math.floor(num / divisor));
|
|
769
769
|
}
|
|
770
770
|
},
|
|
771
771
|
{
|
|
@@ -825,7 +825,7 @@ function roundToMultiple(name, number, significance, round, ctx) {
|
|
|
825
825
|
if (number > 0 && significance < 0) {
|
|
826
826
|
return ctx.error("#NUM!", `${name} can't round a positive number to a negative significance.`);
|
|
827
827
|
}
|
|
828
|
-
return
|
|
828
|
+
return _chunkXP5IUZUOcjs.cleanFloat.call(void 0, round(_chunkXP5IUZUOcjs.cleanFloat.call(void 0, number / significance)) * significance);
|
|
829
829
|
}
|
|
830
830
|
|
|
831
831
|
// src/spreadsheet/formula/functions/statistical.ts
|
|
@@ -860,13 +860,13 @@ var STATISTICAL_FUNCTIONS = [
|
|
|
860
860
|
args: [VALUES],
|
|
861
861
|
evaluate: (ctx) => {
|
|
862
862
|
const items = ctx.flatValues();
|
|
863
|
-
const error = items.find(
|
|
863
|
+
const error = items.find(_chunkXP5IUZUOcjs.isFormulaError);
|
|
864
864
|
if (error) return error;
|
|
865
865
|
let total = 0;
|
|
866
866
|
let count = 0;
|
|
867
867
|
for (const item of items) {
|
|
868
868
|
const num = Number(item);
|
|
869
|
-
if (!isNaN(num) && !
|
|
869
|
+
if (!isNaN(num) && !_chunkXP5IUZUOcjs.isBlank.call(void 0, item)) {
|
|
870
870
|
total += num;
|
|
871
871
|
count++;
|
|
872
872
|
}
|
|
@@ -882,7 +882,7 @@ var STATISTICAL_FUNCTIONS = [
|
|
|
882
882
|
evaluate: (ctx) => {
|
|
883
883
|
let count = 0;
|
|
884
884
|
for (const item of ctx.flatValues()) {
|
|
885
|
-
if (!isNaN(Number(item)) && !
|
|
885
|
+
if (!isNaN(Number(item)) && !_chunkXP5IUZUOcjs.isBlank.call(void 0, item)) count++;
|
|
886
886
|
}
|
|
887
887
|
return count;
|
|
888
888
|
}
|
|
@@ -892,7 +892,7 @@ var STATISTICAL_FUNCTIONS = [
|
|
|
892
892
|
category: "statistical",
|
|
893
893
|
description: "Counts the values that are not blank.",
|
|
894
894
|
args: [repeating("value", "A value, cell or range to count.")],
|
|
895
|
-
evaluate: (ctx) => ctx.flatValues().filter((item) => !
|
|
895
|
+
evaluate: (ctx) => ctx.flatValues().filter((item) => !_chunkXP5IUZUOcjs.isBlank.call(void 0, item)).length
|
|
896
896
|
},
|
|
897
897
|
{
|
|
898
898
|
name: "COUNTBLANK",
|
|
@@ -902,7 +902,7 @@ var STATISTICAL_FUNCTIONS = [
|
|
|
902
902
|
evaluate: (ctx) => {
|
|
903
903
|
const range = ctx.range(0);
|
|
904
904
|
if (failed(range)) return range;
|
|
905
|
-
return range.values.filter(
|
|
905
|
+
return range.values.filter(_chunkXP5IUZUOcjs.isBlank).length;
|
|
906
906
|
}
|
|
907
907
|
},
|
|
908
908
|
{
|
|
@@ -981,7 +981,7 @@ var STATISTICAL_FUNCTIONS = [
|
|
|
981
981
|
args: [VALUES],
|
|
982
982
|
evaluate: (ctx) => {
|
|
983
983
|
const v = variance(ctx);
|
|
984
|
-
return failed(v) ? v :
|
|
984
|
+
return failed(v) ? v : _chunkXP5IUZUOcjs.cleanFloat.call(void 0, Math.sqrt(v));
|
|
985
985
|
}
|
|
986
986
|
},
|
|
987
987
|
{
|
|
@@ -991,7 +991,7 @@ var STATISTICAL_FUNCTIONS = [
|
|
|
991
991
|
args: [VALUES],
|
|
992
992
|
evaluate: (ctx) => {
|
|
993
993
|
const v = variance(ctx);
|
|
994
|
-
return failed(v) ? v :
|
|
994
|
+
return failed(v) ? v : _chunkXP5IUZUOcjs.cleanFloat.call(void 0, v);
|
|
995
995
|
}
|
|
996
996
|
},
|
|
997
997
|
{
|
|
@@ -1045,7 +1045,7 @@ function matchMask(ctx, base, baseIndex, firstPair) {
|
|
|
1045
1045
|
return ctx.argError(i, "#VALUE!", `must be the same size as argument ${baseIndex + 1} (${base.rows}\xD7${base.cols}).`);
|
|
1046
1046
|
}
|
|
1047
1047
|
const criterion = ctx.scalar(i + 1);
|
|
1048
|
-
if (
|
|
1048
|
+
if (_chunkXP5IUZUOcjs.isFormulaError.call(void 0, criterion)) return criterion;
|
|
1049
1049
|
const matches = parseCriteria(criterion);
|
|
1050
1050
|
for (let k = 0; k < mask.length; k++) {
|
|
1051
1051
|
if (mask[k] && !matches(range.values[k])) mask[k] = false;
|
|
@@ -1058,9 +1058,9 @@ function matchedNumbers(target, base, mask) {
|
|
|
1058
1058
|
for (let c = 0; c < base.cols; c++) {
|
|
1059
1059
|
for (let r = 0; r < base.rows; r++) {
|
|
1060
1060
|
if (!mask[c * base.rows + r]) continue;
|
|
1061
|
-
const value =
|
|
1062
|
-
if (
|
|
1063
|
-
const num =
|
|
1061
|
+
const value = _chunkXP5IUZUOcjs.rangeGet.call(void 0, target, r, c);
|
|
1062
|
+
if (_chunkXP5IUZUOcjs.isFormulaError.call(void 0, value)) return value;
|
|
1063
|
+
const num = _chunkXP5IUZUOcjs.numericValue.call(void 0, value);
|
|
1064
1064
|
if (num !== null) nums.push(num);
|
|
1065
1065
|
}
|
|
1066
1066
|
}
|
|
@@ -1188,13 +1188,13 @@ function logicalValues(ctx) {
|
|
|
1188
1188
|
const value = ctx.value(i);
|
|
1189
1189
|
if (Array.isArray(value)) {
|
|
1190
1190
|
for (const item of value) {
|
|
1191
|
-
if (
|
|
1192
|
-
if (
|
|
1191
|
+
if (_chunkXP5IUZUOcjs.isFormulaError.call(void 0, item)) return item;
|
|
1192
|
+
if (_chunkXP5IUZUOcjs.isBlank.call(void 0, item)) continue;
|
|
1193
1193
|
if (typeof item === "boolean") values.push(item);
|
|
1194
1194
|
else if (typeof item === "number") values.push(item !== 0);
|
|
1195
1195
|
else {
|
|
1196
|
-
const num =
|
|
1197
|
-
const bool2 = num !== null ? num !== 0 :
|
|
1196
|
+
const num = _chunkXP5IUZUOcjs.numericValue.call(void 0, item);
|
|
1197
|
+
const bool2 = num !== null ? num !== 0 : _chunkXP5IUZUOcjs.toBoolean.call(void 0, item);
|
|
1198
1198
|
if (typeof bool2 === "boolean") values.push(bool2);
|
|
1199
1199
|
}
|
|
1200
1200
|
}
|
|
@@ -1232,7 +1232,7 @@ var LOGICAL_FUNCTIONS = [
|
|
|
1232
1232
|
args: [arg("value", "The value to check."), arg("value_if_error", "The result when value is an error.")],
|
|
1233
1233
|
evaluate: (ctx) => {
|
|
1234
1234
|
const value = ctx.value(0);
|
|
1235
|
-
return
|
|
1235
|
+
return _chunkXP5IUZUOcjs.isFormulaError.call(void 0, value) ? ctx.value(1) : value;
|
|
1236
1236
|
}
|
|
1237
1237
|
},
|
|
1238
1238
|
{
|
|
@@ -1274,13 +1274,13 @@ var LOGICAL_FUNCTIONS = [
|
|
|
1274
1274
|
allowTrailingArgument: true,
|
|
1275
1275
|
evaluate: (ctx) => {
|
|
1276
1276
|
const expression = ctx.scalar(0);
|
|
1277
|
-
if (
|
|
1278
|
-
const target =
|
|
1277
|
+
if (_chunkXP5IUZUOcjs.isFormulaError.call(void 0, expression)) return expression;
|
|
1278
|
+
const target = _chunkXP5IUZUOcjs.normalizeValue.call(void 0, expression);
|
|
1279
1279
|
let i = 1;
|
|
1280
1280
|
for (; i + 1 < ctx.args.length; i += 2) {
|
|
1281
1281
|
const candidate = ctx.scalar(i);
|
|
1282
|
-
if (
|
|
1283
|
-
if (
|
|
1282
|
+
if (_chunkXP5IUZUOcjs.isFormulaError.call(void 0, candidate)) return candidate;
|
|
1283
|
+
if (_chunkXP5IUZUOcjs.compareValues.call(void 0, target, _chunkXP5IUZUOcjs.normalizeValue.call(void 0, candidate)) === 0) return ctx.value(i + 1);
|
|
1284
1284
|
}
|
|
1285
1285
|
if (i < ctx.args.length) return ctx.value(i);
|
|
1286
1286
|
return ctx.error("#N/A", "SWITCH found no matching value and has no default.");
|
|
@@ -1354,8 +1354,8 @@ function parseNumericText(text) {
|
|
|
1354
1354
|
return negative ? -num : num;
|
|
1355
1355
|
}
|
|
1356
1356
|
if (scale === 1 && !negative) {
|
|
1357
|
-
const date = /^\d{4}-\d{1,2}-\d{1,2}/.test(trimmed) ?
|
|
1358
|
-
if (date) return
|
|
1357
|
+
const date = /^\d{4}-\d{1,2}-\d{1,2}/.test(trimmed) ? _chunkXP5IUZUOcjs.toDate.call(void 0, trimmed) : null;
|
|
1358
|
+
if (date) return _chunkXP5IUZUOcjs.dateToSerial.call(void 0, date);
|
|
1359
1359
|
}
|
|
1360
1360
|
return null;
|
|
1361
1361
|
}
|
|
@@ -1389,9 +1389,9 @@ var TEXT_FUNCTIONS = [
|
|
|
1389
1389
|
args: [repeating("text", "A value, cell or range to join.", "text")],
|
|
1390
1390
|
evaluate: (ctx) => {
|
|
1391
1391
|
const items = ctx.flatValues();
|
|
1392
|
-
const error = items.find(
|
|
1392
|
+
const error = items.find(_chunkXP5IUZUOcjs.isFormulaError);
|
|
1393
1393
|
if (error) return error;
|
|
1394
|
-
return items.map(
|
|
1394
|
+
return items.map(_chunkXP5IUZUOcjs.toText).join("");
|
|
1395
1395
|
}
|
|
1396
1396
|
},
|
|
1397
1397
|
{
|
|
@@ -1409,9 +1409,9 @@ var TEXT_FUNCTIONS = [
|
|
|
1409
1409
|
const ignoreEmpty = ctx.boolean(1);
|
|
1410
1410
|
if (failed(ignoreEmpty)) return ignoreEmpty;
|
|
1411
1411
|
const items = ctx.flatValues(2);
|
|
1412
|
-
const error = items.find(
|
|
1412
|
+
const error = items.find(_chunkXP5IUZUOcjs.isFormulaError);
|
|
1413
1413
|
if (error) return error;
|
|
1414
|
-
return items.map(
|
|
1414
|
+
return items.map(_chunkXP5IUZUOcjs.toText).filter((text) => !ignoreEmpty || text !== "").join(delimiter);
|
|
1415
1415
|
}
|
|
1416
1416
|
},
|
|
1417
1417
|
{
|
|
@@ -1614,11 +1614,11 @@ var TEXT_FUNCTIONS = [
|
|
|
1614
1614
|
args: [TEXT],
|
|
1615
1615
|
evaluate: (ctx) => {
|
|
1616
1616
|
const value = ctx.scalar(0);
|
|
1617
|
-
if (
|
|
1617
|
+
if (_chunkXP5IUZUOcjs.isFormulaError.call(void 0, value)) return value;
|
|
1618
1618
|
if (typeof value === "number") return value;
|
|
1619
|
-
if (
|
|
1620
|
-
const num = _nullishCoalesce(parseNumericText(
|
|
1621
|
-
if (num === null) return ctx.argError(0, "#VALUE!", `("${
|
|
1619
|
+
if (_chunkXP5IUZUOcjs.isBlank.call(void 0, value)) return 0;
|
|
1620
|
+
const num = _nullishCoalesce(parseNumericText(_chunkXP5IUZUOcjs.toText.call(void 0, value)), () => ( _chunkXP5IUZUOcjs.parseNumberText.call(void 0, _chunkXP5IUZUOcjs.toText.call(void 0, value))));
|
|
1621
|
+
if (num === null) return ctx.argError(0, "#VALUE!", `("${_chunkXP5IUZUOcjs.toText.call(void 0, value)}") can't be converted to a number.`);
|
|
1622
1622
|
return num;
|
|
1623
1623
|
}
|
|
1624
1624
|
},
|
|
@@ -1629,10 +1629,10 @@ var TEXT_FUNCTIONS = [
|
|
|
1629
1629
|
args: [arg("value", "The number or date to format."), arg("format_text", "The format code.", "text")],
|
|
1630
1630
|
evaluate: (ctx) => {
|
|
1631
1631
|
const value = ctx.scalar(0);
|
|
1632
|
-
if (
|
|
1632
|
+
if (_chunkXP5IUZUOcjs.isFormulaError.call(void 0, value)) return value;
|
|
1633
1633
|
const format = ctx.text(1);
|
|
1634
1634
|
if (failed(format)) return format;
|
|
1635
|
-
const result =
|
|
1635
|
+
const result = _chunkXP5IUZUOcjs.formatTextFunction.call(void 0, value, format);
|
|
1636
1636
|
if ("text" in result) return result.text;
|
|
1637
1637
|
if (result.error === "#VALUE!") {
|
|
1638
1638
|
return Array.from(format).length > 255 ? ctx.argError(1, "#VALUE!", "is longer than 255 characters.") : ctx.argError(0, "#VALUE!", `is outside the date range, so it can't use the format "${format}".`);
|
|
@@ -1645,15 +1645,15 @@ var TEXT_FUNCTIONS = [
|
|
|
1645
1645
|
// src/spreadsheet/formula/functions/lookup.ts
|
|
1646
1646
|
var sameType = (a, b) => typeof a === "number" === (typeof b === "number") && typeof a === "boolean" === (typeof b === "boolean");
|
|
1647
1647
|
function lookupIndex(values, target, mode, reverse = false) {
|
|
1648
|
-
const wanted =
|
|
1648
|
+
const wanted = _chunkXP5IUZUOcjs.normalizeValue.call(void 0, target);
|
|
1649
1649
|
const order = values.map((_, i) => i);
|
|
1650
1650
|
if (reverse) order.reverse();
|
|
1651
1651
|
if (mode === "exact" || mode === "wildcard") {
|
|
1652
1652
|
const regex = mode === "wildcard" && typeof wanted === "string" && hasWildcards(wanted) ? wildcardToRegExp(wanted) : null;
|
|
1653
1653
|
for (const i of order) {
|
|
1654
|
-
const value =
|
|
1655
|
-
if (
|
|
1656
|
-
if (regex ? typeof value === "string" && regex.test(value) : sameType(value, wanted) &&
|
|
1654
|
+
const value = _chunkXP5IUZUOcjs.normalizeValue.call(void 0, values[i]);
|
|
1655
|
+
if (_chunkXP5IUZUOcjs.isFormulaError.call(void 0, value) || _chunkXP5IUZUOcjs.isBlank.call(void 0, value)) continue;
|
|
1656
|
+
if (regex ? typeof value === "string" && regex.test(value) : sameType(value, wanted) && _chunkXP5IUZUOcjs.compareValues.call(void 0, value, wanted) === 0) {
|
|
1657
1657
|
return i;
|
|
1658
1658
|
}
|
|
1659
1659
|
}
|
|
@@ -1662,9 +1662,9 @@ function lookupIndex(values, target, mode, reverse = false) {
|
|
|
1662
1662
|
if (mode === "sorted-asc" || mode === "sorted-desc") {
|
|
1663
1663
|
let found = -1;
|
|
1664
1664
|
for (let i = 0; i < values.length; i++) {
|
|
1665
|
-
const value =
|
|
1666
|
-
if (
|
|
1667
|
-
const cmp =
|
|
1665
|
+
const value = _chunkXP5IUZUOcjs.normalizeValue.call(void 0, values[i]);
|
|
1666
|
+
if (_chunkXP5IUZUOcjs.isFormulaError.call(void 0, value) || _chunkXP5IUZUOcjs.isBlank.call(void 0, value) || !sameType(value, wanted)) continue;
|
|
1667
|
+
const cmp = _chunkXP5IUZUOcjs.compareValues.call(void 0, value, wanted);
|
|
1668
1668
|
if (mode === "sorted-asc" ? cmp <= 0 : cmp >= 0) found = i;
|
|
1669
1669
|
else break;
|
|
1670
1670
|
}
|
|
@@ -1673,12 +1673,12 @@ function lookupIndex(values, target, mode, reverse = false) {
|
|
|
1673
1673
|
let best = -1;
|
|
1674
1674
|
let bestValue;
|
|
1675
1675
|
for (const i of order) {
|
|
1676
|
-
const value =
|
|
1677
|
-
if (
|
|
1678
|
-
const cmp =
|
|
1676
|
+
const value = _chunkXP5IUZUOcjs.normalizeValue.call(void 0, values[i]);
|
|
1677
|
+
if (_chunkXP5IUZUOcjs.isFormulaError.call(void 0, value) || _chunkXP5IUZUOcjs.isBlank.call(void 0, value) || !sameType(value, wanted)) continue;
|
|
1678
|
+
const cmp = _chunkXP5IUZUOcjs.compareValues.call(void 0, value, wanted);
|
|
1679
1679
|
if (cmp === 0) return i;
|
|
1680
1680
|
const candidate = mode === "next-smaller" ? cmp < 0 : cmp > 0;
|
|
1681
|
-
const closer = best === -1 || (mode === "next-smaller" ?
|
|
1681
|
+
const closer = best === -1 || (mode === "next-smaller" ? _chunkXP5IUZUOcjs.compareValues.call(void 0, value, bestValue) > 0 : _chunkXP5IUZUOcjs.compareValues.call(void 0, value, bestValue) < 0);
|
|
1682
1682
|
if (candidate && closer) {
|
|
1683
1683
|
best = i;
|
|
1684
1684
|
bestValue = value;
|
|
@@ -1697,7 +1697,7 @@ function vector(ctx, index) {
|
|
|
1697
1697
|
var notFound = (ctx, value) => ctx.error("#N/A", `${ctx.name} couldn't find ${typeof value === "string" ? `"${value}"` : String(value)}.`);
|
|
1698
1698
|
function tableLookup(ctx, vertical) {
|
|
1699
1699
|
const target = ctx.scalar(0);
|
|
1700
|
-
if (
|
|
1700
|
+
if (_chunkXP5IUZUOcjs.isFormulaError.call(void 0, target)) return target;
|
|
1701
1701
|
const table = ctx.range(1);
|
|
1702
1702
|
if (failed(table)) return table;
|
|
1703
1703
|
const index = ctx.integer(2);
|
|
@@ -1709,10 +1709,10 @@ function tableLookup(ctx, vertical) {
|
|
|
1709
1709
|
if (index > span) {
|
|
1710
1710
|
return ctx.argError(2, "#REF!", `is larger than the number of ${vertical ? "columns" : "rows"} in the table (${span}).`);
|
|
1711
1711
|
}
|
|
1712
|
-
const keys = vertical ?
|
|
1712
|
+
const keys = vertical ? _chunkXP5IUZUOcjs.sliceRange.call(void 0, table, 0, table.rows, 0, 1) : _chunkXP5IUZUOcjs.sliceRange.call(void 0, table, 0, 1, 0, table.cols);
|
|
1713
1713
|
const position = lookupIndex(keys, target, approximate ? "sorted-asc" : "wildcard");
|
|
1714
1714
|
if (position === -1) return notFound(ctx, target);
|
|
1715
|
-
return vertical ?
|
|
1715
|
+
return vertical ? _chunkXP5IUZUOcjs.rangeGet.call(void 0, table, position, index - 1) : _chunkXP5IUZUOcjs.rangeGet.call(void 0, table, index - 1, position);
|
|
1716
1716
|
}
|
|
1717
1717
|
var LOOKUP_FUNCTIONS = [
|
|
1718
1718
|
{
|
|
@@ -1750,7 +1750,7 @@ var LOOKUP_FUNCTIONS = [
|
|
|
1750
1750
|
],
|
|
1751
1751
|
evaluate: (ctx) => {
|
|
1752
1752
|
const target = ctx.scalar(0);
|
|
1753
|
-
if (
|
|
1753
|
+
if (_chunkXP5IUZUOcjs.isFormulaError.call(void 0, target)) return target;
|
|
1754
1754
|
const list = vector(ctx, 1);
|
|
1755
1755
|
if (failed(list)) return list;
|
|
1756
1756
|
const type = ctx.number(2, 1);
|
|
@@ -1787,9 +1787,9 @@ var LOOKUP_FUNCTIONS = [
|
|
|
1787
1787
|
return ctx.argError(2, "#REF!", `is outside the range (1 to ${range.cols}).`);
|
|
1788
1788
|
}
|
|
1789
1789
|
if (row === 0 && col === 0) return range.values;
|
|
1790
|
-
if (row === 0) return
|
|
1791
|
-
if (col === 0) return
|
|
1792
|
-
return
|
|
1790
|
+
if (row === 0) return _chunkXP5IUZUOcjs.sliceRange.call(void 0, range, 0, range.rows, col - 1, 1);
|
|
1791
|
+
if (col === 0) return _chunkXP5IUZUOcjs.sliceRange.call(void 0, range, row - 1, 1, 0, range.cols);
|
|
1792
|
+
return _chunkXP5IUZUOcjs.rangeGet.call(void 0, range, row - 1, col - 1);
|
|
1793
1793
|
}
|
|
1794
1794
|
},
|
|
1795
1795
|
{
|
|
@@ -1806,7 +1806,7 @@ var LOOKUP_FUNCTIONS = [
|
|
|
1806
1806
|
],
|
|
1807
1807
|
evaluate: (ctx) => {
|
|
1808
1808
|
const target = ctx.scalar(0);
|
|
1809
|
-
if (
|
|
1809
|
+
if (_chunkXP5IUZUOcjs.isFormulaError.call(void 0, target)) return target;
|
|
1810
1810
|
const list = vector(ctx, 1);
|
|
1811
1811
|
if (failed(list)) return list;
|
|
1812
1812
|
const result = ctx.range(2);
|
|
@@ -1827,9 +1827,9 @@ var LOOKUP_FUNCTIONS = [
|
|
|
1827
1827
|
const position = lookupIndex(list.values, target, mode, searchMode < 0);
|
|
1828
1828
|
if (position === -1) return ctx.has(3) ? ctx.value(3) : notFound(ctx, target);
|
|
1829
1829
|
if (vertical) {
|
|
1830
|
-
return result.cols === 1 ?
|
|
1830
|
+
return result.cols === 1 ? _chunkXP5IUZUOcjs.rangeGet.call(void 0, result, position, 0) : _chunkXP5IUZUOcjs.sliceRange.call(void 0, result, position, 1, 0, result.cols);
|
|
1831
1831
|
}
|
|
1832
|
-
return result.rows === 1 ?
|
|
1832
|
+
return result.rows === 1 ? _chunkXP5IUZUOcjs.rangeGet.call(void 0, result, 0, position) : _chunkXP5IUZUOcjs.sliceRange.call(void 0, result, 0, result.rows, position, 1);
|
|
1833
1833
|
}
|
|
1834
1834
|
}
|
|
1835
1835
|
];
|
|
@@ -1856,7 +1856,7 @@ var DATE_FUNCTIONS = [
|
|
|
1856
1856
|
args: [],
|
|
1857
1857
|
volatile: true,
|
|
1858
1858
|
// Local calendar date (toISOString would give the UTC date).
|
|
1859
|
-
evaluate: () =>
|
|
1859
|
+
evaluate: () => _chunkXP5IUZUOcjs.formatIsoDate.call(void 0, /* @__PURE__ */ new Date())
|
|
1860
1860
|
},
|
|
1861
1861
|
{
|
|
1862
1862
|
name: "NOW",
|
|
@@ -1864,7 +1864,7 @@ var DATE_FUNCTIONS = [
|
|
|
1864
1864
|
description: "Returns the current date and time (YYYY-MM-DD HH:MM:SS). Changes on every recalculation.",
|
|
1865
1865
|
args: [],
|
|
1866
1866
|
volatile: true,
|
|
1867
|
-
evaluate: () =>
|
|
1867
|
+
evaluate: () => _chunkXP5IUZUOcjs.formatIsoDateTime.call(void 0, /* @__PURE__ */ new Date())
|
|
1868
1868
|
},
|
|
1869
1869
|
{
|
|
1870
1870
|
name: "DATE",
|
|
@@ -1889,7 +1889,7 @@ var DATE_FUNCTIONS = [
|
|
|
1889
1889
|
if (date.getFullYear() < 1900 || date.getFullYear() > 9999) {
|
|
1890
1890
|
return ctx.error("#NUM!", "DATE produced a date outside the years 1900-9999.");
|
|
1891
1891
|
}
|
|
1892
|
-
return
|
|
1892
|
+
return _chunkXP5IUZUOcjs.formatIsoDate.call(void 0, date);
|
|
1893
1893
|
}
|
|
1894
1894
|
},
|
|
1895
1895
|
{
|
|
@@ -1940,7 +1940,7 @@ var DATE_FUNCTIONS = [
|
|
|
1940
1940
|
if (failed(end)) return end;
|
|
1941
1941
|
const start = ctx.date(1);
|
|
1942
1942
|
if (failed(start)) return start;
|
|
1943
|
-
return
|
|
1943
|
+
return _chunkXP5IUZUOcjs.daysBetween.call(void 0, start, end);
|
|
1944
1944
|
}
|
|
1945
1945
|
},
|
|
1946
1946
|
{
|
|
@@ -1953,7 +1953,7 @@ var DATE_FUNCTIONS = [
|
|
|
1953
1953
|
if (failed(start)) return start;
|
|
1954
1954
|
const months = ctx.integer(1);
|
|
1955
1955
|
if (failed(months)) return months;
|
|
1956
|
-
return
|
|
1956
|
+
return _chunkXP5IUZUOcjs.formatIsoDate.call(void 0, addMonths(start, months));
|
|
1957
1957
|
}
|
|
1958
1958
|
},
|
|
1959
1959
|
{
|
|
@@ -1966,7 +1966,7 @@ var DATE_FUNCTIONS = [
|
|
|
1966
1966
|
if (failed(start)) return start;
|
|
1967
1967
|
const months = ctx.integer(1);
|
|
1968
1968
|
if (failed(months)) return months;
|
|
1969
|
-
return
|
|
1969
|
+
return _chunkXP5IUZUOcjs.formatIsoDate.call(void 0, new Date(start.getFullYear(), start.getMonth() + months + 1, 0));
|
|
1970
1970
|
}
|
|
1971
1971
|
},
|
|
1972
1972
|
{
|
|
@@ -1983,20 +1983,20 @@ var DATE_FUNCTIONS = [
|
|
|
1983
1983
|
if (ctx.has(2)) {
|
|
1984
1984
|
const raw = ctx.value(2);
|
|
1985
1985
|
for (const value of Array.isArray(raw) ? raw : [raw]) {
|
|
1986
|
-
if (
|
|
1987
|
-
if (
|
|
1988
|
-
const date =
|
|
1986
|
+
if (_chunkXP5IUZUOcjs.isFormulaError.call(void 0, value)) return value;
|
|
1987
|
+
if (_chunkXP5IUZUOcjs.isBlank.call(void 0, value)) continue;
|
|
1988
|
+
const date = _chunkXP5IUZUOcjs.toDate.call(void 0, value);
|
|
1989
1989
|
if (!date) return ctx.argError(2, "#VALUE!", "must contain only dates.");
|
|
1990
|
-
holidays.add(
|
|
1990
|
+
holidays.add(_chunkXP5IUZUOcjs.formatIsoDate.call(void 0, date));
|
|
1991
1991
|
}
|
|
1992
1992
|
}
|
|
1993
|
-
const sign =
|
|
1993
|
+
const sign = _chunkXP5IUZUOcjs.daysBetween.call(void 0, start, end) < 0 ? -1 : 1;
|
|
1994
1994
|
const [from, to] = sign < 0 ? [end, start] : [start, end];
|
|
1995
1995
|
let count = 0;
|
|
1996
|
-
const total =
|
|
1996
|
+
const total = _chunkXP5IUZUOcjs.daysBetween.call(void 0, from, to);
|
|
1997
1997
|
for (let i = 0; i <= total; i++) {
|
|
1998
1998
|
const day = new Date(from.getFullYear(), from.getMonth(), from.getDate() + i);
|
|
1999
|
-
if (isWorkday(day) && !holidays.has(
|
|
1999
|
+
if (isWorkday(day) && !holidays.has(_chunkXP5IUZUOcjs.formatIsoDate.call(void 0, day))) count++;
|
|
2000
2000
|
}
|
|
2001
2001
|
return sign * count;
|
|
2002
2002
|
}
|
|
@@ -2017,7 +2017,7 @@ var DATE_FUNCTIONS = [
|
|
|
2017
2017
|
if (failed(end)) return end;
|
|
2018
2018
|
const unit = ctx.text(2);
|
|
2019
2019
|
if (failed(unit)) return unit;
|
|
2020
|
-
if (
|
|
2020
|
+
if (_chunkXP5IUZUOcjs.daysBetween.call(void 0, start, end) < 0) return ctx.error("#NUM!", "DATEDIF needs the start date to be on or before the end date.");
|
|
2021
2021
|
let months = (end.getFullYear() - start.getFullYear()) * 12 + end.getMonth() - start.getMonth();
|
|
2022
2022
|
if (end.getDate() < start.getDate()) months--;
|
|
2023
2023
|
switch (unit.trim().toUpperCase()) {
|
|
@@ -2026,16 +2026,16 @@ var DATE_FUNCTIONS = [
|
|
|
2026
2026
|
case "M":
|
|
2027
2027
|
return months;
|
|
2028
2028
|
case "D":
|
|
2029
|
-
return
|
|
2029
|
+
return _chunkXP5IUZUOcjs.daysBetween.call(void 0, start, end);
|
|
2030
2030
|
case "YM":
|
|
2031
2031
|
return months % 12;
|
|
2032
2032
|
case "MD": {
|
|
2033
2033
|
const anchor = addMonths(start, months);
|
|
2034
|
-
return
|
|
2034
|
+
return _chunkXP5IUZUOcjs.daysBetween.call(void 0, anchor, end);
|
|
2035
2035
|
}
|
|
2036
2036
|
case "YD": {
|
|
2037
2037
|
const anchor = addMonths(start, Math.floor(months / 12) * 12);
|
|
2038
|
-
return
|
|
2038
|
+
return _chunkXP5IUZUOcjs.daysBetween.call(void 0, anchor, end);
|
|
2039
2039
|
}
|
|
2040
2040
|
default:
|
|
2041
2041
|
return ctx.argError(2, "#NUM!", 'must be "Y", "M", "D", "MD", "YM" or "YD".');
|
|
@@ -2053,14 +2053,14 @@ var INFORMATION_FUNCTIONS = [
|
|
|
2053
2053
|
category: "information",
|
|
2054
2054
|
description: "Returns TRUE if the value is empty.",
|
|
2055
2055
|
args: [VALUE],
|
|
2056
|
-
evaluate: check(
|
|
2056
|
+
evaluate: check(_chunkXP5IUZUOcjs.isBlank)
|
|
2057
2057
|
},
|
|
2058
2058
|
{
|
|
2059
2059
|
name: "ISNUMBER",
|
|
2060
2060
|
category: "information",
|
|
2061
2061
|
description: "Returns TRUE if the value is a number (typed cell values that look like numbers count).",
|
|
2062
2062
|
args: [VALUE],
|
|
2063
|
-
evaluate: check((value) =>
|
|
2063
|
+
evaluate: check((value) => _chunkXP5IUZUOcjs.numericValue.call(void 0, value) !== null)
|
|
2064
2064
|
},
|
|
2065
2065
|
{
|
|
2066
2066
|
name: "ISTEXT",
|
|
@@ -2068,7 +2068,7 @@ var INFORMATION_FUNCTIONS = [
|
|
|
2068
2068
|
description: "Returns TRUE if the value is text that is not a number.",
|
|
2069
2069
|
args: [VALUE],
|
|
2070
2070
|
evaluate: check(
|
|
2071
|
-
(value) => typeof value === "string" && !
|
|
2071
|
+
(value) => typeof value === "string" && !_chunkXP5IUZUOcjs.isBlank.call(void 0, value) && !_chunkXP5IUZUOcjs.isFormulaError.call(void 0, value) && _chunkXP5IUZUOcjs.numericValue.call(void 0, value) === null
|
|
2072
2072
|
)
|
|
2073
2073
|
},
|
|
2074
2074
|
{
|
|
@@ -2076,7 +2076,7 @@ var INFORMATION_FUNCTIONS = [
|
|
|
2076
2076
|
category: "information",
|
|
2077
2077
|
description: "Returns TRUE if the value is any error.",
|
|
2078
2078
|
args: [VALUE],
|
|
2079
|
-
evaluate: check(
|
|
2079
|
+
evaluate: check(_chunkXP5IUZUOcjs.isFormulaError)
|
|
2080
2080
|
},
|
|
2081
2081
|
{
|
|
2082
2082
|
name: "ISNA",
|
|
@@ -2091,8 +2091,8 @@ var INFORMATION_FUNCTIONS = [
|
|
|
2091
2091
|
var MAX_ARRAY_CELLS = 1e6;
|
|
2092
2092
|
function rangeArg(ctx, index) {
|
|
2093
2093
|
const value = ctx.value(index);
|
|
2094
|
-
if (Array.isArray(value)) return
|
|
2095
|
-
if (
|
|
2094
|
+
if (Array.isArray(value)) return _chunkXP5IUZUOcjs.toFormulaRange.call(void 0, value);
|
|
2095
|
+
if (_chunkXP5IUZUOcjs.isFormulaError.call(void 0, value)) return value;
|
|
2096
2096
|
return { rows: 1, cols: 1, values: [value] };
|
|
2097
2097
|
}
|
|
2098
2098
|
function fromRows(rows, cols) {
|
|
@@ -2100,16 +2100,16 @@ function fromRows(rows, cols) {
|
|
|
2100
2100
|
for (let c = 0; c < cols; c++) {
|
|
2101
2101
|
for (const row of rows) out.push(row[c]);
|
|
2102
2102
|
}
|
|
2103
|
-
return
|
|
2103
|
+
return _chunkXP5IUZUOcjs.withRangeShape.call(void 0, out, rows.length, cols);
|
|
2104
2104
|
}
|
|
2105
2105
|
var rowOf = (range, r) => {
|
|
2106
2106
|
const row = [];
|
|
2107
|
-
for (let c = 0; c < range.cols; c++) row.push(
|
|
2107
|
+
for (let c = 0; c < range.cols; c++) row.push(_chunkXP5IUZUOcjs.rangeGet.call(void 0, range, r, c));
|
|
2108
2108
|
return row;
|
|
2109
2109
|
};
|
|
2110
2110
|
var colOf = (range, c) => {
|
|
2111
2111
|
const col = [];
|
|
2112
|
-
for (let r = 0; r < range.rows; r++) col.push(
|
|
2112
|
+
for (let r = 0; r < range.rows; r++) col.push(_chunkXP5IUZUOcjs.rangeGet.call(void 0, range, r, c));
|
|
2113
2113
|
return col;
|
|
2114
2114
|
};
|
|
2115
2115
|
var linesOf = (range, byCol) => byCol ? Array.from({ length: range.cols }, (_, c) => colOf(range, c)) : Array.from({ length: range.rows }, (_, r) => rowOf(range, r));
|
|
@@ -2117,13 +2117,13 @@ function fromLines(lines, byCol, width) {
|
|
|
2117
2117
|
if (!byCol) return fromRows(lines, width);
|
|
2118
2118
|
const out = [];
|
|
2119
2119
|
for (const line of lines) for (const v of line) out.push(v);
|
|
2120
|
-
return
|
|
2120
|
+
return _chunkXP5IUZUOcjs.withRangeShape.call(void 0, out, width, lines.length);
|
|
2121
2121
|
}
|
|
2122
2122
|
function compareForSort(a, b, order) {
|
|
2123
|
-
const blankA =
|
|
2124
|
-
const blankB =
|
|
2123
|
+
const blankA = _chunkXP5IUZUOcjs.isBlank.call(void 0, a);
|
|
2124
|
+
const blankB = _chunkXP5IUZUOcjs.isBlank.call(void 0, b);
|
|
2125
2125
|
if (blankA || blankB) return blankA === blankB ? 0 : blankA ? 1 : -1;
|
|
2126
|
-
return
|
|
2126
|
+
return _chunkXP5IUZUOcjs.compareValues.call(void 0, _chunkXP5IUZUOcjs.normalizeValue.call(void 0, a), _chunkXP5IUZUOcjs.normalizeValue.call(void 0, b)) * order;
|
|
2127
2127
|
}
|
|
2128
2128
|
var sortOrder = (ctx, index) => {
|
|
2129
2129
|
const order = ctx.integer(index, 1);
|
|
@@ -2131,9 +2131,9 @@ var sortOrder = (ctx, index) => {
|
|
|
2131
2131
|
return order === 1 || order === -1 ? order : ctx.argError(index, "#VALUE!", "must be 1 (ascending) or -1 (descending).");
|
|
2132
2132
|
};
|
|
2133
2133
|
function includeFlag(value) {
|
|
2134
|
-
if (
|
|
2135
|
-
const flag =
|
|
2136
|
-
return
|
|
2134
|
+
if (_chunkXP5IUZUOcjs.isFormulaError.call(void 0, value)) return value;
|
|
2135
|
+
const flag = _chunkXP5IUZUOcjs.toBoolean.call(void 0, value);
|
|
2136
|
+
return _chunkXP5IUZUOcjs.isFormulaError.call(void 0, flag) ? "#VALUE!" : flag;
|
|
2137
2137
|
}
|
|
2138
2138
|
var ARRAY_FUNCTIONS = [
|
|
2139
2139
|
{
|
|
@@ -2261,8 +2261,8 @@ var ARRAY_FUNCTIONS = [
|
|
|
2261
2261
|
if (failed(exactlyOnce)) return exactlyOnce;
|
|
2262
2262
|
const keyOf = (line) => JSON.stringify(
|
|
2263
2263
|
line.map((v) => {
|
|
2264
|
-
const n =
|
|
2265
|
-
return typeof n === "string" ? `s:${n.toLowerCase()}` :
|
|
2264
|
+
const n = _chunkXP5IUZUOcjs.normalizeValue.call(void 0, v);
|
|
2265
|
+
return typeof n === "string" ? `s:${n.toLowerCase()}` : _chunkXP5IUZUOcjs.isBlank.call(void 0, n) ? "blank" : `${typeof n}:${String(n)}`;
|
|
2266
2266
|
})
|
|
2267
2267
|
);
|
|
2268
2268
|
const counts = /* @__PURE__ */ new Map();
|
|
@@ -2302,7 +2302,7 @@ var ARRAY_FUNCTIONS = [
|
|
|
2302
2302
|
for (let c = 0; c < cols; c++) {
|
|
2303
2303
|
for (let r = 0; r < rows; r++) out.push(start + step * (r * cols + c));
|
|
2304
2304
|
}
|
|
2305
|
-
return rows * cols === 1 ? out[0] :
|
|
2305
|
+
return rows * cols === 1 ? out[0] : _chunkXP5IUZUOcjs.withRangeShape.call(void 0, out, rows, cols);
|
|
2306
2306
|
}
|
|
2307
2307
|
},
|
|
2308
2308
|
{
|
|
@@ -2316,9 +2316,9 @@ var ARRAY_FUNCTIONS = [
|
|
|
2316
2316
|
if (range.rows * range.cols === 1) return range.values[0];
|
|
2317
2317
|
const out = [];
|
|
2318
2318
|
for (let r = 0; r < range.rows; r++) {
|
|
2319
|
-
for (let c = 0; c < range.cols; c++) out.push(
|
|
2319
|
+
for (let c = 0; c < range.cols; c++) out.push(_chunkXP5IUZUOcjs.rangeGet.call(void 0, range, r, c));
|
|
2320
2320
|
}
|
|
2321
|
-
return
|
|
2321
|
+
return _chunkXP5IUZUOcjs.withRangeShape.call(void 0, out, range.cols, range.rows);
|
|
2322
2322
|
}
|
|
2323
2323
|
},
|
|
2324
2324
|
{
|
|
@@ -2353,7 +2353,7 @@ var ARRAY_FUNCTIONS = [
|
|
|
2353
2353
|
const next = () => integer ? min2 + Math.floor(Math.random() * (max2 - min2 + 1)) : min2 + Math.random() * (max2 - min2);
|
|
2354
2354
|
const out = [];
|
|
2355
2355
|
for (let i = 0; i < rows * cols; i++) out.push(next());
|
|
2356
|
-
return rows * cols === 1 ? out[0] :
|
|
2356
|
+
return rows * cols === 1 ? out[0] : _chunkXP5IUZUOcjs.withRangeShape.call(void 0, out, rows, cols);
|
|
2357
2357
|
}
|
|
2358
2358
|
},
|
|
2359
2359
|
{
|
|
@@ -2647,12 +2647,12 @@ var quote = (value) => typeof value === "string" ? `"${value}"` : String(value);
|
|
|
2647
2647
|
var MAX_FORMULA_ARRAY_SIZE = 1e6;
|
|
2648
2648
|
function shapeOf(value) {
|
|
2649
2649
|
if (!Array.isArray(value)) return { rows: 1, cols: 1 };
|
|
2650
|
-
const range =
|
|
2650
|
+
const range = _chunkXP5IUZUOcjs.toFormulaRange.call(void 0, value);
|
|
2651
2651
|
return { rows: range.rows, cols: range.cols };
|
|
2652
2652
|
}
|
|
2653
2653
|
function broadcastGet(value, row, col) {
|
|
2654
2654
|
if (!Array.isArray(value)) return value;
|
|
2655
|
-
const range =
|
|
2655
|
+
const range = _chunkXP5IUZUOcjs.toFormulaRange.call(void 0, value);
|
|
2656
2656
|
const r = range.rows === 1 ? 0 : row;
|
|
2657
2657
|
const c = range.cols === 1 ? 0 : col;
|
|
2658
2658
|
if (r >= range.rows || c >= range.cols) return "#N/A";
|
|
@@ -2663,7 +2663,7 @@ function buildArray(rows, cols, fn) {
|
|
|
2663
2663
|
for (let c = 0; c < cols; c++) {
|
|
2664
2664
|
for (let r = 0; r < rows; r++) out.push(fn(r, c));
|
|
2665
2665
|
}
|
|
2666
|
-
return
|
|
2666
|
+
return _chunkXP5IUZUOcjs.withRangeShape.call(void 0, out, rows, cols);
|
|
2667
2667
|
}
|
|
2668
2668
|
var isMultiArray = (value) => Array.isArray(value) && value.length > 1;
|
|
2669
2669
|
var firstValue = (value) => Array.isArray(value) ? value.length ? value[0] : "" : value;
|
|
@@ -2675,7 +2675,7 @@ function elementValue(value) {
|
|
|
2675
2675
|
return value;
|
|
2676
2676
|
}
|
|
2677
2677
|
function asRange(value) {
|
|
2678
|
-
if (Array.isArray(value)) return
|
|
2678
|
+
if (Array.isArray(value)) return _chunkXP5IUZUOcjs.toFormulaRange.call(void 0, value);
|
|
2679
2679
|
return { rows: 1, cols: 1, values: [value] };
|
|
2680
2680
|
}
|
|
2681
2681
|
var LITERAL_BLANK = { type: "Literal", value: "" };
|
|
@@ -2730,10 +2730,10 @@ var FormulaEvaluator = (_class2 = class {
|
|
|
2730
2730
|
let value = this.evaluate(astOrFormula);
|
|
2731
2731
|
let array;
|
|
2732
2732
|
if (Array.isArray(value)) {
|
|
2733
|
-
if (value.length > 1) array =
|
|
2733
|
+
if (value.length > 1) array = _chunkXP5IUZUOcjs.toFormulaRange.call(void 0, value);
|
|
2734
2734
|
value = firstValue(value);
|
|
2735
2735
|
}
|
|
2736
|
-
if (
|
|
2736
|
+
if (_chunkXP5IUZUOcjs.isFormulaError.call(void 0, value)) {
|
|
2737
2737
|
const code = value;
|
|
2738
2738
|
const diagnostic = this.diagnostics.find((d) => d.code === code);
|
|
2739
2739
|
const result = {
|
|
@@ -2775,7 +2775,7 @@ var FormulaEvaluator = (_class2 = class {
|
|
|
2775
2775
|
}
|
|
2776
2776
|
if (node.sheetEnd !== void 0) return this.evaluate3d(node);
|
|
2777
2777
|
const value = this.context.resolveCell(node.col, node.row, _nullishCoalesce(node.sheet, () => ( this.defaultSheet)));
|
|
2778
|
-
if (
|
|
2778
|
+
if (_chunkXP5IUZUOcjs.isFormulaError.call(void 0, value)) {
|
|
2779
2779
|
const label = `${sheetLabel(node)}${node.ref}`;
|
|
2780
2780
|
if (value === "#REF!" && node.sheet !== void 0) {
|
|
2781
2781
|
return this.fail("#REF!", `${label} refers to a sheet that doesn't exist.`);
|
|
@@ -2798,7 +2798,7 @@ var FormulaEvaluator = (_class2 = class {
|
|
|
2798
2798
|
case "Invoke": {
|
|
2799
2799
|
const callee = this.evaluateNode(node.callee);
|
|
2800
2800
|
if (isFormulaLambda(callee)) return this.invokeLambda(callee, node.args);
|
|
2801
|
-
if (
|
|
2801
|
+
if (_chunkXP5IUZUOcjs.isFormulaError.call(void 0, callee)) return callee;
|
|
2802
2802
|
return this.fail("#VALUE!", "Only a LAMBDA function can be called with arguments in parentheses.");
|
|
2803
2803
|
}
|
|
2804
2804
|
case "PropertyRef": {
|
|
@@ -2818,9 +2818,9 @@ var FormulaEvaluator = (_class2 = class {
|
|
|
2818
2818
|
}
|
|
2819
2819
|
case "BinaryOp": {
|
|
2820
2820
|
const left = this.evaluateNode(node.left);
|
|
2821
|
-
if (
|
|
2821
|
+
if (_chunkXP5IUZUOcjs.isFormulaError.call(void 0, left)) return left;
|
|
2822
2822
|
const right = this.evaluateNode(node.right);
|
|
2823
|
-
if (
|
|
2823
|
+
if (_chunkXP5IUZUOcjs.isFormulaError.call(void 0, right)) return right;
|
|
2824
2824
|
if (isFormulaLambda(left) || isFormulaLambda(right)) {
|
|
2825
2825
|
return this.fail("#VALUE!", `The ${node.op} operator can't use a LAMBDA function; call it with arguments first.`);
|
|
2826
2826
|
}
|
|
@@ -2832,16 +2832,16 @@ var FormulaEvaluator = (_class2 = class {
|
|
|
2832
2832
|
if (rows * cols > MAX_FORMULA_ARRAY_SIZE) return this.fail("#NUM!", "The array result is too large.");
|
|
2833
2833
|
return buildArray(rows, cols, (r2, c) => {
|
|
2834
2834
|
const l2 = broadcastGet(left, r2, c);
|
|
2835
|
-
if (
|
|
2835
|
+
if (_chunkXP5IUZUOcjs.isFormulaError.call(void 0, l2)) return l2;
|
|
2836
2836
|
const rv = broadcastGet(right, r2, c);
|
|
2837
|
-
if (
|
|
2837
|
+
if (_chunkXP5IUZUOcjs.isFormulaError.call(void 0, rv)) return rv;
|
|
2838
2838
|
return this.binary(node.op, l2, rv);
|
|
2839
2839
|
});
|
|
2840
2840
|
}
|
|
2841
2841
|
const l = firstValue(left);
|
|
2842
|
-
if (
|
|
2842
|
+
if (_chunkXP5IUZUOcjs.isFormulaError.call(void 0, l)) return l;
|
|
2843
2843
|
const r = firstValue(right);
|
|
2844
|
-
if (
|
|
2844
|
+
if (_chunkXP5IUZUOcjs.isFormulaError.call(void 0, r)) return r;
|
|
2845
2845
|
return this.binary(node.op, l, r);
|
|
2846
2846
|
}
|
|
2847
2847
|
case "FunctionCall":
|
|
@@ -2852,9 +2852,9 @@ var FormulaEvaluator = (_class2 = class {
|
|
|
2852
2852
|
}
|
|
2853
2853
|
unary(op, raw) {
|
|
2854
2854
|
if (isFormulaLambda(raw)) return this.fail("#VALUE!", `The ${op} operator can't use a LAMBDA function.`);
|
|
2855
|
-
const val =
|
|
2856
|
-
if (
|
|
2857
|
-
return
|
|
2855
|
+
const val = _chunkXP5IUZUOcjs.toNumber.call(void 0, raw);
|
|
2856
|
+
if (_chunkXP5IUZUOcjs.isFormulaError.call(void 0, val)) {
|
|
2857
|
+
return _chunkXP5IUZUOcjs.isFormulaError.call(void 0, raw) ? raw : this.fail("#VALUE!", `The ${op} operator can't use text (${quote(raw)}).`);
|
|
2858
2858
|
}
|
|
2859
2859
|
if (op === "-") return -val;
|
|
2860
2860
|
if (op === "+") return val;
|
|
@@ -2864,14 +2864,14 @@ var FormulaEvaluator = (_class2 = class {
|
|
|
2864
2864
|
binary(op, left, right) {
|
|
2865
2865
|
if (["+", "-", "*", "/", "^"].includes(op)) {
|
|
2866
2866
|
if (op === "+" || op === "-") {
|
|
2867
|
-
const leftDate =
|
|
2868
|
-
const rightDate =
|
|
2867
|
+
const leftDate = _chunkXP5IUZUOcjs.parseIsoDate.call(void 0, left);
|
|
2868
|
+
const rightDate = _chunkXP5IUZUOcjs.parseIsoDate.call(void 0, right);
|
|
2869
2869
|
if (leftDate || rightDate) return this.dateArithmetic(op, left, right, leftDate, rightDate);
|
|
2870
2870
|
}
|
|
2871
|
-
const a =
|
|
2872
|
-
if (
|
|
2873
|
-
const b =
|
|
2874
|
-
if (
|
|
2871
|
+
const a = _chunkXP5IUZUOcjs.toNumber.call(void 0, left);
|
|
2872
|
+
if (_chunkXP5IUZUOcjs.isFormulaError.call(void 0, a)) return this.fail("#VALUE!", `The ${op} operator can't use text (${quote(left)}).`);
|
|
2873
|
+
const b = _chunkXP5IUZUOcjs.toNumber.call(void 0, right);
|
|
2874
|
+
if (_chunkXP5IUZUOcjs.isFormulaError.call(void 0, b)) return this.fail("#VALUE!", `The ${op} operator can't use text (${quote(right)}).`);
|
|
2875
2875
|
const x = a;
|
|
2876
2876
|
const y = b;
|
|
2877
2877
|
let result;
|
|
@@ -2896,19 +2896,19 @@ var FormulaEvaluator = (_class2 = class {
|
|
|
2896
2896
|
}
|
|
2897
2897
|
switch (op) {
|
|
2898
2898
|
case "&":
|
|
2899
|
-
return
|
|
2899
|
+
return _chunkXP5IUZUOcjs.toText.call(void 0, left) + _chunkXP5IUZUOcjs.toText.call(void 0, right);
|
|
2900
2900
|
case "=":
|
|
2901
|
-
return
|
|
2901
|
+
return _chunkXP5IUZUOcjs.compareValues.call(void 0, left, right) === 0;
|
|
2902
2902
|
case "<>":
|
|
2903
|
-
return
|
|
2903
|
+
return _chunkXP5IUZUOcjs.compareValues.call(void 0, left, right) !== 0;
|
|
2904
2904
|
case "<":
|
|
2905
|
-
return
|
|
2905
|
+
return _chunkXP5IUZUOcjs.compareValues.call(void 0, left, right) < 0;
|
|
2906
2906
|
case "<=":
|
|
2907
|
-
return
|
|
2907
|
+
return _chunkXP5IUZUOcjs.compareValues.call(void 0, left, right) <= 0;
|
|
2908
2908
|
case ">":
|
|
2909
|
-
return
|
|
2909
|
+
return _chunkXP5IUZUOcjs.compareValues.call(void 0, left, right) > 0;
|
|
2910
2910
|
case ">=":
|
|
2911
|
-
return
|
|
2911
|
+
return _chunkXP5IUZUOcjs.compareValues.call(void 0, left, right) >= 0;
|
|
2912
2912
|
default:
|
|
2913
2913
|
throw new Error(`Unsupported binary operator: ${op}`);
|
|
2914
2914
|
}
|
|
@@ -2920,7 +2920,7 @@ var FormulaEvaluator = (_class2 = class {
|
|
|
2920
2920
|
dateArithmetic(op, left, right, leftDate, rightDate) {
|
|
2921
2921
|
if (leftDate && rightDate) {
|
|
2922
2922
|
if (op === "+") return this.fail("#VALUE!", "Two dates can't be added; subtract them to count the days between.");
|
|
2923
|
-
return
|
|
2923
|
+
return _chunkXP5IUZUOcjs.cleanFloat.call(void 0, _chunkXP5IUZUOcjs.dateToSerial.call(void 0, leftDate) - _chunkXP5IUZUOcjs.dateToSerial.call(void 0, rightDate));
|
|
2924
2924
|
}
|
|
2925
2925
|
if (!leftDate && op === "-") {
|
|
2926
2926
|
return this.fail("#VALUE!", `A date (${quote(right)}) can't be subtracted from a number.`);
|
|
@@ -2928,14 +2928,14 @@ var FormulaEvaluator = (_class2 = class {
|
|
|
2928
2928
|
const date = _nullishCoalesce(leftDate, () => ( rightDate));
|
|
2929
2929
|
const dateText = String(leftDate ? left : right);
|
|
2930
2930
|
const other = leftDate ? right : left;
|
|
2931
|
-
const days =
|
|
2932
|
-
if (
|
|
2931
|
+
const days = _chunkXP5IUZUOcjs.toNumber.call(void 0, other);
|
|
2932
|
+
if (_chunkXP5IUZUOcjs.isFormulaError.call(void 0, days)) return this.fail("#VALUE!", `The ${op} operator can't use text (${quote(other)}).`);
|
|
2933
2933
|
const n = days;
|
|
2934
|
-
const result =
|
|
2934
|
+
const result = _chunkXP5IUZUOcjs.serialToDate.call(void 0, _chunkXP5IUZUOcjs.dateToSerial.call(void 0, date) + (op === "+" ? n : -n));
|
|
2935
2935
|
if (!result || result.getFullYear() < 1 || result.getFullYear() > 9999) {
|
|
2936
2936
|
return this.fail("#NUM!", "The resulting date is out of range.");
|
|
2937
2937
|
}
|
|
2938
|
-
return
|
|
2938
|
+
return _chunkXP5IUZUOcjs.isoDateHasTime.call(void 0, dateText) || !Number.isInteger(n) ? _chunkXP5IUZUOcjs.formatIsoDateTime.call(void 0, result) : _chunkXP5IUZUOcjs.formatIsoDate.call(void 0, result);
|
|
2939
2939
|
}
|
|
2940
2940
|
/**
|
|
2941
2941
|
* `@` (implicit intersection): a range reference reads the cell in the
|
|
@@ -2948,14 +2948,14 @@ var FormulaEvaluator = (_class2 = class {
|
|
|
2948
2948
|
if (value.length <= 1) return firstValue(value);
|
|
2949
2949
|
const cell = _optionalChain([this, 'access', _5 => _5.context, 'access', _6 => _6.getFormulaCell, 'optionalCall', _7 => _7()]);
|
|
2950
2950
|
if (argument.type === "Range" && cell) {
|
|
2951
|
-
const range =
|
|
2951
|
+
const range = _chunkXP5IUZUOcjs.toFormulaRange.call(void 0, value);
|
|
2952
2952
|
const top = Math.min(argument.startRow, argument.endRow);
|
|
2953
|
-
const left = Math.min(
|
|
2953
|
+
const left = Math.min(_chunkXP5IUZUOcjs.colNameToIndex.call(void 0, argument.startCol), _chunkXP5IUZUOcjs.colNameToIndex.call(void 0, argument.endCol));
|
|
2954
2954
|
if (range.cols === 1) {
|
|
2955
2955
|
const r = cell.row - top;
|
|
2956
2956
|
if (r >= 0 && r < range.rows) return range.values[r];
|
|
2957
2957
|
} else if (range.rows === 1) {
|
|
2958
|
-
const c =
|
|
2958
|
+
const c = _chunkXP5IUZUOcjs.colNameToIndex.call(void 0, cell.col) - left;
|
|
2959
2959
|
if (c >= 0 && c < range.cols) return range.values[c];
|
|
2960
2960
|
}
|
|
2961
2961
|
return this.fail("#VALUE!", `The @ operator found no cell of ${argument.raw} in the formula's row or column.`);
|
|
@@ -2971,14 +2971,14 @@ var FormulaEvaluator = (_class2 = class {
|
|
|
2971
2971
|
}
|
|
2972
2972
|
const spill = this.context.resolveSpill(node.col, node.row, _nullishCoalesce(node.sheet, () => ( this.defaultSheet)));
|
|
2973
2973
|
if (typeof spill === "string" || !spill) {
|
|
2974
|
-
const code =
|
|
2974
|
+
const code = _chunkXP5IUZUOcjs.isFormulaError.call(void 0, spill) ? spill : "#REF!";
|
|
2975
2975
|
return this.fail(
|
|
2976
2976
|
code,
|
|
2977
2977
|
code === "#REF!" ? `${node.ref}# refers to ${node.ref}, which doesn't hold a spilled array.` : `The spill range ${node.ref}# isn't available (${code}).`
|
|
2978
2978
|
);
|
|
2979
2979
|
}
|
|
2980
|
-
const values =
|
|
2981
|
-
const error = values.find(
|
|
2980
|
+
const values = _chunkXP5IUZUOcjs.withRangeShape.call(void 0, spill.values.slice(), spill.rows, spill.cols);
|
|
2981
|
+
const error = values.find(_chunkXP5IUZUOcjs.isFormulaError);
|
|
2982
2982
|
if (error) this.fail(error, `The spill range ${node.ref}# contains an error (${error}).`);
|
|
2983
2983
|
return values;
|
|
2984
2984
|
}
|
|
@@ -2995,9 +2995,9 @@ var FormulaEvaluator = (_class2 = class {
|
|
|
2995
2995
|
}
|
|
2996
2996
|
return values;
|
|
2997
2997
|
}
|
|
2998
|
-
const cols = Math.abs(
|
|
2999
|
-
if (values.length % cols === 0)
|
|
3000
|
-
const error = values.find(
|
|
2998
|
+
const cols = Math.abs(_chunkXP5IUZUOcjs.colNameToIndex.call(void 0, node.endCol) - _chunkXP5IUZUOcjs.colNameToIndex.call(void 0, node.startCol)) + 1;
|
|
2999
|
+
if (values.length % cols === 0) _chunkXP5IUZUOcjs.withRangeShape.call(void 0, values, values.length / cols, cols);
|
|
3000
|
+
const error = values.find(_chunkXP5IUZUOcjs.isFormulaError);
|
|
3001
3001
|
if (error) this.fail(error, `The range ${node.raw} contains an error (${error}).`);
|
|
3002
3002
|
return values;
|
|
3003
3003
|
}
|
|
@@ -3013,7 +3013,7 @@ var FormulaEvaluator = (_class2 = class {
|
|
|
3013
3013
|
if (named) {
|
|
3014
3014
|
const value = this.evaluateDefinedName(named, node.name);
|
|
3015
3015
|
if (isFormulaLambda(value)) return this.invokeLambda(value, node.args);
|
|
3016
|
-
if (
|
|
3016
|
+
if (_chunkXP5IUZUOcjs.isFormulaError.call(void 0, value)) return value;
|
|
3017
3017
|
return this.fail("#VALUE!", `The name ${node.name} doesn't refer to a LAMBDA function, so it can't be called.`);
|
|
3018
3018
|
}
|
|
3019
3019
|
if (variables) {
|
|
@@ -3155,9 +3155,9 @@ var FormulaEvaluator = (_class2 = class {
|
|
|
3155
3155
|
if (!Array.isArray(part)) return this.fail("#REF!", `${label} refers to a sheet that doesn't exist.`);
|
|
3156
3156
|
for (const value of part) values.push(_nullishCoalesce(value, () => ( "")));
|
|
3157
3157
|
}
|
|
3158
|
-
const error = values.find(
|
|
3158
|
+
const error = values.find(_chunkXP5IUZUOcjs.isFormulaError);
|
|
3159
3159
|
if (error) this.fail(error, `The 3-D reference ${label} contains an error (${error}).`);
|
|
3160
|
-
return
|
|
3160
|
+
return _chunkXP5IUZUOcjs.withRangeShape.call(void 0, values, values.length, 1);
|
|
3161
3161
|
}
|
|
3162
3162
|
/** Calls a lambda with argument expressions, evaluated in the caller's scope. */
|
|
3163
3163
|
invokeLambda(lambda, argNodes) {
|
|
@@ -3284,7 +3284,7 @@ var FormulaEvaluator = (_class2 = class {
|
|
|
3284
3284
|
}
|
|
3285
3285
|
const value = this.evaluateNode(node);
|
|
3286
3286
|
if (isFormulaLambda(value)) return value;
|
|
3287
|
-
if (
|
|
3287
|
+
if (_chunkXP5IUZUOcjs.isFormulaError.call(void 0, value)) return value;
|
|
3288
3288
|
return this.fail("#VALUE!", `Argument ${index + 1} of ${fn} must be a LAMBDA function.`);
|
|
3289
3289
|
}
|
|
3290
3290
|
/** Calls a built-in function with already evaluated arguments. */
|
|
@@ -3313,7 +3313,7 @@ var FormulaEvaluator = (_class2 = class {
|
|
|
3313
3313
|
const arrays = [];
|
|
3314
3314
|
for (let i = 0; i < node.args.length - 1; i++) {
|
|
3315
3315
|
const value = this.evaluateNode(node.args[i]);
|
|
3316
|
-
if (
|
|
3316
|
+
if (_chunkXP5IUZUOcjs.isFormulaError.call(void 0, value)) return value;
|
|
3317
3317
|
arrays.push(value);
|
|
3318
3318
|
}
|
|
3319
3319
|
const arity = this.checkArity("MAP", lambda, arrays.length);
|
|
@@ -3341,7 +3341,7 @@ var FormulaEvaluator = (_class2 = class {
|
|
|
3341
3341
|
const fn = scan ? "SCAN" : "REDUCE";
|
|
3342
3342
|
let acc = this.evaluateNode(node.args[0]);
|
|
3343
3343
|
const arrayValue = this.evaluateNode(node.args[1]);
|
|
3344
|
-
if (
|
|
3344
|
+
if (_chunkXP5IUZUOcjs.isFormulaError.call(void 0, arrayValue)) return arrayValue;
|
|
3345
3345
|
const lambda = this.lambdaArgument(fn, node.args[2], 2);
|
|
3346
3346
|
if (typeof lambda === "string") return lambda;
|
|
3347
3347
|
const arity = this.checkArity(fn, lambda, 2);
|
|
@@ -3350,18 +3350,18 @@ var FormulaEvaluator = (_class2 = class {
|
|
|
3350
3350
|
const results = scan ? new Array(range.rows * range.cols) : [];
|
|
3351
3351
|
for (let r = 0; r < range.rows; r++) {
|
|
3352
3352
|
for (let c = 0; c < range.cols; c++) {
|
|
3353
|
-
acc = this.invokeWithValues(lambda, [acc,
|
|
3353
|
+
acc = this.invokeWithValues(lambda, [acc, _chunkXP5IUZUOcjs.rangeGet.call(void 0, range, r, c)]);
|
|
3354
3354
|
if (scan) results[c * range.rows + r] = elementValue(acc);
|
|
3355
3355
|
}
|
|
3356
3356
|
}
|
|
3357
|
-
if (scan) return
|
|
3357
|
+
if (scan) return _chunkXP5IUZUOcjs.withRangeShape.call(void 0, results, range.rows, range.cols);
|
|
3358
3358
|
return acc;
|
|
3359
3359
|
}
|
|
3360
3360
|
/** BYROW(array, lambda) / BYCOL(array, lambda): one result per row (a column) or per column (a row). */
|
|
3361
3361
|
evaluateByLine(node, byRow) {
|
|
3362
3362
|
const fn = byRow ? "BYROW" : "BYCOL";
|
|
3363
3363
|
const arrayValue = this.evaluateNode(node.args[0]);
|
|
3364
|
-
if (
|
|
3364
|
+
if (_chunkXP5IUZUOcjs.isFormulaError.call(void 0, arrayValue)) return arrayValue;
|
|
3365
3365
|
const lambda = this.lambdaArgument(fn, node.args[1], 1);
|
|
3366
3366
|
if (typeof lambda === "string") return lambda;
|
|
3367
3367
|
const arity = this.checkArity(fn, lambda, 1);
|
|
@@ -3372,19 +3372,19 @@ var FormulaEvaluator = (_class2 = class {
|
|
|
3372
3372
|
for (let i = 0; i < count; i++) {
|
|
3373
3373
|
const line = [];
|
|
3374
3374
|
const length = byRow ? range.cols : range.rows;
|
|
3375
|
-
for (let j = 0; j < length; j++) line.push(byRow ?
|
|
3376
|
-
const slice = byRow ?
|
|
3375
|
+
for (let j = 0; j < length; j++) line.push(byRow ? _chunkXP5IUZUOcjs.rangeGet.call(void 0, range, i, j) : _chunkXP5IUZUOcjs.rangeGet.call(void 0, range, j, i));
|
|
3376
|
+
const slice = byRow ? _chunkXP5IUZUOcjs.withRangeShape.call(void 0, line, 1, length) : _chunkXP5IUZUOcjs.withRangeShape.call(void 0, line, length, 1);
|
|
3377
3377
|
out.push(elementValue(this.invokeWithValues(lambda, [slice])));
|
|
3378
3378
|
}
|
|
3379
|
-
return byRow ?
|
|
3379
|
+
return byRow ? _chunkXP5IUZUOcjs.withRangeShape.call(void 0, out, count, 1) : _chunkXP5IUZUOcjs.withRangeShape.call(void 0, out, 1, count);
|
|
3380
3380
|
}
|
|
3381
3381
|
/** MAKEARRAY(rows, columns, lambda): lambda(row, column) for every 1-based position. */
|
|
3382
3382
|
evaluateMakeArray(node) {
|
|
3383
3383
|
const size = (index) => {
|
|
3384
3384
|
const value = firstValue(this.evaluateNode(node.args[index]));
|
|
3385
|
-
if (
|
|
3386
|
-
const num =
|
|
3387
|
-
if (
|
|
3385
|
+
if (_chunkXP5IUZUOcjs.isFormulaError.call(void 0, value)) return value;
|
|
3386
|
+
const num = _chunkXP5IUZUOcjs.toNumber.call(void 0, value);
|
|
3387
|
+
if (_chunkXP5IUZUOcjs.isFormulaError.call(void 0, num)) return this.fail("#VALUE!", `Argument ${index + 1} of MAKEARRAY must be a number.`);
|
|
3388
3388
|
return Math.trunc(num);
|
|
3389
3389
|
};
|
|
3390
3390
|
const rows = size(0);
|
|
@@ -3412,9 +3412,9 @@ var FormulaEvaluator = (_class2 = class {
|
|
|
3412
3412
|
const number = (index, fallback) => {
|
|
3413
3413
|
if (!has(index) && fallback !== void 0) return fallback;
|
|
3414
3414
|
const v = scalar(index);
|
|
3415
|
-
if (
|
|
3416
|
-
const num =
|
|
3417
|
-
return
|
|
3415
|
+
if (_chunkXP5IUZUOcjs.isFormulaError.call(void 0, v)) return v;
|
|
3416
|
+
const num = _chunkXP5IUZUOcjs.toNumber.call(void 0, v);
|
|
3417
|
+
return _chunkXP5IUZUOcjs.isFormulaError.call(void 0, num) ? argError(index, "#VALUE!", `can't be text (${quote(v)}).`) : num;
|
|
3418
3418
|
};
|
|
3419
3419
|
const flatValues = (from = 0, to = args.length) => {
|
|
3420
3420
|
const items = [];
|
|
@@ -3439,39 +3439,39 @@ var FormulaEvaluator = (_class2 = class {
|
|
|
3439
3439
|
number,
|
|
3440
3440
|
integer: (index, fallback) => {
|
|
3441
3441
|
const num = number(index, fallback);
|
|
3442
|
-
return
|
|
3442
|
+
return _chunkXP5IUZUOcjs.isFormulaError.call(void 0, num) ? num : Math.trunc(num);
|
|
3443
3443
|
},
|
|
3444
3444
|
text: (index, fallback) => {
|
|
3445
3445
|
if (!has(index) && fallback !== void 0) return fallback;
|
|
3446
3446
|
const v = scalar(index);
|
|
3447
|
-
return
|
|
3447
|
+
return _chunkXP5IUZUOcjs.isFormulaError.call(void 0, v) ? v : _chunkXP5IUZUOcjs.toText.call(void 0, v);
|
|
3448
3448
|
},
|
|
3449
3449
|
boolean: (index, fallback) => {
|
|
3450
3450
|
if (!has(index) && fallback !== void 0) return fallback;
|
|
3451
3451
|
const v = scalar(index);
|
|
3452
|
-
if (
|
|
3453
|
-
const bool =
|
|
3454
|
-
return
|
|
3452
|
+
if (_chunkXP5IUZUOcjs.isFormulaError.call(void 0, v)) return v;
|
|
3453
|
+
const bool = _chunkXP5IUZUOcjs.toBoolean.call(void 0, v);
|
|
3454
|
+
return _chunkXP5IUZUOcjs.isFormulaError.call(void 0, bool) ? argError(index, "#VALUE!", `must be TRUE or FALSE, not text (${quote(v)}).`) : bool;
|
|
3455
3455
|
},
|
|
3456
3456
|
date: (index) => {
|
|
3457
3457
|
const v = scalar(index);
|
|
3458
|
-
if (
|
|
3459
|
-
if (
|
|
3460
|
-
return _nullishCoalesce(
|
|
3458
|
+
if (_chunkXP5IUZUOcjs.isFormulaError.call(void 0, v)) return v;
|
|
3459
|
+
if (_chunkXP5IUZUOcjs.isBlank.call(void 0, v)) return argError(index, "#VALUE!", "is empty, but a date is needed.");
|
|
3460
|
+
return _nullishCoalesce(_chunkXP5IUZUOcjs.toDate.call(void 0, v), () => ( argError(index, "#VALUE!", `(${quote(v)}) isn't a valid date.`)));
|
|
3461
3461
|
},
|
|
3462
3462
|
range: (index) => {
|
|
3463
3463
|
const v = value(index);
|
|
3464
|
-
if (Array.isArray(v)) return
|
|
3465
|
-
if (
|
|
3464
|
+
if (Array.isArray(v)) return _chunkXP5IUZUOcjs.toFormulaRange.call(void 0, v);
|
|
3465
|
+
if (_chunkXP5IUZUOcjs.isFormulaError.call(void 0, v)) return v;
|
|
3466
3466
|
return argError(index, "#VALUE!", "must be a range.");
|
|
3467
3467
|
},
|
|
3468
3468
|
flatValues,
|
|
3469
3469
|
numbers: (from, to) => {
|
|
3470
3470
|
const nums = [];
|
|
3471
3471
|
for (const item of flatValues(from, to)) {
|
|
3472
|
-
if (
|
|
3473
|
-
if (
|
|
3474
|
-
const num = typeof item === "number" ? item :
|
|
3472
|
+
if (_chunkXP5IUZUOcjs.isFormulaError.call(void 0, item)) return item;
|
|
3473
|
+
if (_chunkXP5IUZUOcjs.isBlank.call(void 0, item) || typeof item === "boolean") continue;
|
|
3474
|
+
const num = typeof item === "number" ? item : _chunkXP5IUZUOcjs.numericValue.call(void 0, item);
|
|
3475
3475
|
if (num !== null) nums.push(num);
|
|
3476
3476
|
}
|
|
3477
3477
|
return nums;
|
|
@@ -3505,4 +3505,4 @@ var FormulaEvaluator = (_class2 = class {
|
|
|
3505
3505
|
|
|
3506
3506
|
|
|
3507
3507
|
exports.tokenizeFormula = tokenizeFormula; exports.WHOLE_COLUMN_END_ROW = WHOLE_COLUMN_END_ROW; exports.parseCellReference = parseCellReference; exports.parseRange = parseRange; exports.FormulaParser = FormulaParser; exports.parseFormula = parseFormula; exports.FormulaLambda = FormulaLambda; exports.isFormulaLambda = isFormulaLambda; exports.MAX_LAMBDA_DEPTH = MAX_LAMBDA_DEPTH; exports.wildcardToRegExp = wildcardToRegExp; exports.parseCriteria = parseCriteria; exports.registerFormulaFunction = registerFormulaFunction; exports.unregisterFormulaFunction = unregisterFormulaFunction; exports.getFormulaFunction = getFormulaFunction; exports.listFormulaFunctions = listFormulaFunctions; exports.searchFormulaFunctions = searchFormulaFunctions; exports.getFormulaArgumentSpecIndex = getFormulaArgumentSpecIndex; exports.checkFormulaArgumentCount = checkFormulaArgumentCount; exports.getFormulaSignatureParts = getFormulaSignatureParts; exports.getFormulaSignature = getFormulaSignature; exports.describeFormulaError = describeFormulaError; exports.MAX_FORMULA_ARRAY_SIZE = MAX_FORMULA_ARRAY_SIZE; exports.FormulaEvaluator = FormulaEvaluator;
|
|
3508
|
-
//# sourceMappingURL=chunk-
|
|
3508
|
+
//# sourceMappingURL=chunk-UN33YOXW.cjs.map
|