@gui-chat-plugin/spreadsheet 4.2.1 → 4.2.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.
- package/dist/{core-CTRlKL9k.js → core-BruPaeJh.js} +1 -1
- package/dist/{core-Cf9Pxo_q.cjs → core-N6tGCciU.cjs} +1 -1
- package/dist/core.cjs +1 -1
- package/dist/core.js +2 -2
- package/dist/engine/concatPrecedence.d.ts +5 -0
- package/dist/engine/textArithmetic.d.ts +12 -0
- package/dist/index.cjs +1 -1
- package/dist/index.js +2 -2
- package/dist/samples-DNz8DMsV.cjs +2 -0
- package/dist/{samples-C5JjpxYJ.js → samples-DsRbpKBY.js} +1202 -1154
- package/dist/vue.cjs +1 -1
- package/dist/vue.js +1 -1
- package/package.json +1 -1
- package/dist/samples-UnTPgkyq.cjs +0 -2
|
@@ -102,8 +102,8 @@ function u(e, t) {
|
|
|
102
102
|
}
|
|
103
103
|
//#endregion
|
|
104
104
|
//#region src/core/paths.ts
|
|
105
|
-
var d = "spreadsheets", f = ".json", p = 16, ee = 2, m = (e) => `${e.getUTCFullYear()}/${String(e.getUTCMonth() + 1).padStart(ee, "0")}`,
|
|
106
|
-
function
|
|
105
|
+
var d = "spreadsheets", f = ".json", p = 16, ee = 2, m = (e) => `${e.getUTCFullYear()}/${String(e.getUTCMonth() + 1).padStart(ee, "0")}`, te = () => globalThis.crypto.randomUUID().split("-").join("").slice(0, p);
|
|
106
|
+
function h(t = /* @__PURE__ */ new Date(), n = te()) {
|
|
107
107
|
let r = `${d}/${m(t)}/${n}${f}`;
|
|
108
108
|
return {
|
|
109
109
|
relPath: r,
|
|
@@ -263,10 +263,10 @@ function Le(e) {
|
|
|
263
263
|
}
|
|
264
264
|
//#endregion
|
|
265
265
|
//#region src/engine/date-utils.ts
|
|
266
|
-
var Re = 864e5, ze = new Date(Date.UTC(1899, 11, 30)),
|
|
266
|
+
var Re = 864e5, ze = new Date(Date.UTC(1899, 11, 30)), T = (e) => (e.getTime() - ze.getTime()) / Re, E = (e) => {
|
|
267
267
|
let t = Math.floor(e), n = e - t, r = new Date(ze.getTime() + t * Re), i = Math.round(n * 24 * 60 * 60);
|
|
268
268
|
return r.setSeconds(r.getSeconds() + i), r;
|
|
269
|
-
},
|
|
269
|
+
}, Be = [
|
|
270
270
|
"Jan",
|
|
271
271
|
"Feb",
|
|
272
272
|
"Mar",
|
|
@@ -279,7 +279,7 @@ var Re = 864e5, ze = new Date(Date.UTC(1899, 11, 30)), Be = (e) => (e.getTime()
|
|
|
279
279
|
"Oct",
|
|
280
280
|
"Nov",
|
|
281
281
|
"Dec"
|
|
282
|
-
],
|
|
282
|
+
], Ve = [
|
|
283
283
|
"January",
|
|
284
284
|
"February",
|
|
285
285
|
"March",
|
|
@@ -292,7 +292,7 @@ var Re = 864e5, ze = new Date(Date.UTC(1899, 11, 30)), Be = (e) => (e.getTime()
|
|
|
292
292
|
"October",
|
|
293
293
|
"November",
|
|
294
294
|
"December"
|
|
295
|
-
],
|
|
295
|
+
], He = [
|
|
296
296
|
"Sun",
|
|
297
297
|
"Mon",
|
|
298
298
|
"Tue",
|
|
@@ -300,7 +300,7 @@ var Re = 864e5, ze = new Date(Date.UTC(1899, 11, 30)), Be = (e) => (e.getTime()
|
|
|
300
300
|
"Thu",
|
|
301
301
|
"Fri",
|
|
302
302
|
"Sat"
|
|
303
|
-
],
|
|
303
|
+
], Ue = [
|
|
304
304
|
"Sunday",
|
|
305
305
|
"Monday",
|
|
306
306
|
"Tuesday",
|
|
@@ -311,7 +311,7 @@ var Re = 864e5, ze = new Date(Date.UTC(1899, 11, 30)), Be = (e) => (e.getTime()
|
|
|
311
311
|
];
|
|
312
312
|
//#endregion
|
|
313
313
|
//#region src/engine/date-parser.ts
|
|
314
|
-
function
|
|
314
|
+
function We(e) {
|
|
315
315
|
if (typeof e != "string" || e.length < 6 || e.length > 30) return !1;
|
|
316
316
|
let t = /\d/.test(e), n = /[/\-\s,]/.test(e);
|
|
317
317
|
return !t || !n ? !1 : [
|
|
@@ -323,10 +323,10 @@ function Ge(e) {
|
|
|
323
323
|
/^\d{1,2}\s+[A-Za-z]{3,9}\s+\d{4}$/
|
|
324
324
|
].some((t) => t.test(e.trim()));
|
|
325
325
|
}
|
|
326
|
-
function
|
|
327
|
-
return
|
|
326
|
+
function Ge(e, t, n) {
|
|
327
|
+
return tt(e, t, n) ? T(new Date(Date.UTC(e, t - 1, n))) : null;
|
|
328
328
|
}
|
|
329
|
-
function
|
|
329
|
+
function D(e, t) {
|
|
330
330
|
let [, n, r, i] = e.match(t) ?? [];
|
|
331
331
|
return n === void 0 || r === void 0 || i === void 0 ? null : [
|
|
332
332
|
n,
|
|
@@ -334,76 +334,76 @@ function E(e, t) {
|
|
|
334
334
|
i
|
|
335
335
|
];
|
|
336
336
|
}
|
|
337
|
-
var
|
|
338
|
-
function
|
|
339
|
-
let t = e.toLowerCase(), n =
|
|
337
|
+
var Ke = /^(\d{1,2})\/(\d{1,2})\/(\d{2,4})$/, qe = 12, Je = (e, t, n) => e > qe || t <= qe && e <= qe && n;
|
|
338
|
+
function Ye(e) {
|
|
339
|
+
let t = e.toLowerCase(), n = Be.findIndex((e) => e.toLowerCase() === t);
|
|
340
340
|
if (n !== -1) return n + 1;
|
|
341
|
-
let r =
|
|
341
|
+
let r = Ve.findIndex((e) => e.toLowerCase() === t);
|
|
342
342
|
return r === -1 ? null : r + 1;
|
|
343
343
|
}
|
|
344
|
-
function
|
|
345
|
-
if (!
|
|
346
|
-
let n = e.trim(), r =
|
|
344
|
+
function Xe(e, t = !1) {
|
|
345
|
+
if (!We(e)) return null;
|
|
346
|
+
let n = e.trim(), r = D(n, /^(\d{4})[-/](\d{1,2})[-/](\d{1,2})$/);
|
|
347
347
|
if (r) {
|
|
348
348
|
let [e, t, n] = r;
|
|
349
|
-
return
|
|
349
|
+
return Ge(parseInt(e), parseInt(t), parseInt(n));
|
|
350
350
|
}
|
|
351
|
-
let i =
|
|
351
|
+
let i = D(n, /^(\d{1,2})-([A-Za-z]{3})-(\d{2,4})$/);
|
|
352
352
|
if (i) {
|
|
353
353
|
let [e, t, n] = i;
|
|
354
|
-
return
|
|
354
|
+
return et($e(parseInt(n)), t, parseInt(e));
|
|
355
355
|
}
|
|
356
|
-
let a =
|
|
356
|
+
let a = D(n, /^([A-Za-z]{3,9})\s+(\d{1,2}),?\s+(\d{4})$/);
|
|
357
357
|
if (a) {
|
|
358
358
|
let [e, t, n] = a;
|
|
359
|
-
return
|
|
359
|
+
return et(parseInt(n), e, parseInt(t));
|
|
360
360
|
}
|
|
361
|
-
let o =
|
|
361
|
+
let o = D(n, /^(\d{1,2})\s+([A-Za-z]{3,9})\s+(\d{4})$/);
|
|
362
362
|
if (o) {
|
|
363
363
|
let [e, t, n] = o;
|
|
364
|
-
return
|
|
364
|
+
return et(parseInt(n), t, parseInt(e));
|
|
365
365
|
}
|
|
366
|
-
let s =
|
|
366
|
+
let s = D(n, Ke);
|
|
367
367
|
if (s) {
|
|
368
|
-
let [e, n, r] = s, i =
|
|
369
|
-
return
|
|
368
|
+
let [e, n, r] = s, i = Je(parseInt(e), parseInt(n), t), a = parseInt(i ? n : e), o = parseInt(i ? e : n);
|
|
369
|
+
return Ge($e(parseInt(r)), a, o);
|
|
370
370
|
}
|
|
371
371
|
return null;
|
|
372
372
|
}
|
|
373
|
-
var
|
|
374
|
-
function
|
|
375
|
-
return e >=
|
|
373
|
+
var Ze = 100, Qe = 30;
|
|
374
|
+
function $e(e) {
|
|
375
|
+
return e >= Ze ? e : e < Qe ? 2e3 + e : 1900 + e;
|
|
376
376
|
}
|
|
377
|
-
function
|
|
378
|
-
let r =
|
|
379
|
-
return r === null ? null :
|
|
377
|
+
function et(e, t, n) {
|
|
378
|
+
let r = Ye(t);
|
|
379
|
+
return r === null ? null : Ge(e, r, n);
|
|
380
380
|
}
|
|
381
|
-
function
|
|
381
|
+
function tt(e, t, n) {
|
|
382
382
|
if (e < 1900 || e > 2100 || t < 1 || t > 12 || n < 1 || n > 31) return !1;
|
|
383
383
|
let r = new Date(Date.UTC(e, t - 1, n));
|
|
384
384
|
return r.getUTCFullYear() === e && r.getUTCMonth() === t - 1 && r.getUTCDate() === n;
|
|
385
385
|
}
|
|
386
|
-
function
|
|
386
|
+
function nt(e, t = !1) {
|
|
387
387
|
let n = e.trim();
|
|
388
388
|
if (/^\d{4}-\d{1,2}-\d{1,2}$/.test(n)) return "YYYY-MM-DD";
|
|
389
389
|
if (/^\d{4}\/\d{1,2}\/\d{1,2}$/.test(n)) return "YYYY/MM/DD";
|
|
390
390
|
if (/^\d{1,2}-[A-Za-z]{3}-\d{2,4}$/.test(n)) return "DD-MMM-YYYY";
|
|
391
391
|
if (/^[A-Za-z]{3}\s+\d{1,2},?\s+\d{4}$/.test(n)) return "MMM D, YYYY";
|
|
392
392
|
if (/^[A-Za-z]{4,9}\s+\d{1,2},?\s+\d{4}$/.test(n)) return "MMMM D, YYYY";
|
|
393
|
-
let r =
|
|
393
|
+
let r = D(n, Ke);
|
|
394
394
|
if (r) {
|
|
395
395
|
let [e, n] = r;
|
|
396
|
-
return
|
|
396
|
+
return Je(parseInt(e), parseInt(n), t) ? "DD/MM/YYYY" : "MM/DD/YYYY";
|
|
397
397
|
}
|
|
398
398
|
return t ? "DD/MM/YYYY" : "MM/DD/YYYY";
|
|
399
399
|
}
|
|
400
400
|
//#endregion
|
|
401
401
|
//#region src/engine/registry.ts
|
|
402
|
-
var
|
|
402
|
+
var rt = (e, t) => /* @__PURE__ */ Error(`${e} requires at least ${t} argument${t === 1 ? "" : "s"}`), O = (e, t, n) => {
|
|
403
403
|
let r = t[n];
|
|
404
|
-
if (r === void 0) throw
|
|
404
|
+
if (r === void 0) throw rt(e.functionName, n + 1);
|
|
405
405
|
return r;
|
|
406
|
-
},
|
|
406
|
+
}, it = (e) => e.getRangeValuesRaw ?? e.getRangeValues, k = (e) => e.getRangeValuesKeepingBlanks ?? it(e), A = new class {
|
|
407
407
|
functions = /* @__PURE__ */ new Map();
|
|
408
408
|
overlay = null;
|
|
409
409
|
register(e) {
|
|
@@ -440,25 +440,25 @@ var it = (e, t) => /* @__PURE__ */ Error(`${e} requires at least ${t} argument${
|
|
|
440
440
|
}
|
|
441
441
|
return e;
|
|
442
442
|
}
|
|
443
|
-
}(),
|
|
444
|
-
function
|
|
443
|
+
}(), at = "[A-Z][A-Z0-9]*(?:\\.[A-Z0-9]+)*", ot = (e) => /^[A-Z]+(?:\.[A-Z]+)*$/i.test(e) || A.hasFunction(e);
|
|
444
|
+
function j(e) {
|
|
445
445
|
return typeof e == "number" ? e : Ie(String(e)) ?? 0;
|
|
446
446
|
}
|
|
447
|
-
function
|
|
447
|
+
function st(e) {
|
|
448
448
|
return typeof e == "boolean" ? e ? "TRUE" : "FALSE" : String(e);
|
|
449
449
|
}
|
|
450
|
-
var
|
|
451
|
-
function
|
|
452
|
-
let t = RegExp(`^${
|
|
450
|
+
var ct = /[.*+?^${}()|[\]\\]/, lt = (e) => ct.test(e) ? `\\${e}` : e, ut = /~([\s\S])|[\s\S]/g, dt = (e) => e.replace(ut, (e, t) => t === void 0 ? e === "*" ? ".*" : e === "?" ? "." : lt(e) : lt(t));
|
|
451
|
+
function ft(e) {
|
|
452
|
+
let t = RegExp(`^${dt(e)}$`, "iu");
|
|
453
453
|
return (e) => t.test(e);
|
|
454
454
|
}
|
|
455
|
-
function
|
|
455
|
+
function pt(e, t = !1) {
|
|
456
456
|
let n = e.trim().replace(/^["']|["']$/g, "");
|
|
457
457
|
if (n === "=") return (e) => String(e).trim() === "";
|
|
458
458
|
if (n === "<>") return (e) => String(e).trim() !== "";
|
|
459
459
|
let [, r, i] = n.match(/^([><=!]+)(.+)$/) ?? [];
|
|
460
460
|
if (r !== void 0 && i !== void 0) {
|
|
461
|
-
let e =
|
|
461
|
+
let e = mt(i, t), n = ht(i, t), a = (e) => (t) => C(t) && e(j(t));
|
|
462
462
|
switch (r) {
|
|
463
463
|
case ">": return a((t) => t > e);
|
|
464
464
|
case ">=": return a((t) => t >= e);
|
|
@@ -471,60 +471,60 @@ function mt(e, t = !1) {
|
|
|
471
471
|
default: return () => !1;
|
|
472
472
|
}
|
|
473
473
|
}
|
|
474
|
-
return
|
|
474
|
+
return ht(n, t);
|
|
475
475
|
}
|
|
476
|
-
function
|
|
477
|
-
return
|
|
476
|
+
function mt(e, t) {
|
|
477
|
+
return Xe(e, t) ?? Ie(e) ?? NaN;
|
|
478
478
|
}
|
|
479
|
-
function
|
|
480
|
-
let n =
|
|
481
|
-
return (e) => typeof e != "number" && n(String(e)) || i && C(e) &&
|
|
479
|
+
function ht(e, t) {
|
|
480
|
+
let n = ft(e), r = mt(e, t), i = !isNaN(r);
|
|
481
|
+
return (e) => typeof e != "number" && n(String(e)) || i && C(e) && j(e) === r;
|
|
482
482
|
}
|
|
483
|
-
function
|
|
484
|
-
let r = e.evaluateFormula(
|
|
485
|
-
return S(r) ? r : typeof r == "boolean" ? (e) => e === r :
|
|
483
|
+
function gt(e, t, n) {
|
|
484
|
+
let r = e.evaluateFormula(O(e, t, n));
|
|
485
|
+
return S(r) ? r : typeof r == "boolean" ? (e) => e === r : pt(String(r), e.preferDDMMYYYY);
|
|
486
486
|
}
|
|
487
487
|
//#endregion
|
|
488
488
|
//#region src/engine/functions/statistical-math.ts
|
|
489
|
-
var
|
|
489
|
+
var _t = (e) => e.reduce((e, t) => e + t, 0) / e.length;
|
|
490
|
+
function vt(e) {
|
|
491
|
+
return e.length === 0 ? v : _t(e);
|
|
492
|
+
}
|
|
490
493
|
function yt(e) {
|
|
491
|
-
return e.length === 0 ?
|
|
494
|
+
return e.length === 0 ? b : _t(bt([...e].sort((e, t) => e - t)));
|
|
492
495
|
}
|
|
493
496
|
function bt(e) {
|
|
494
|
-
return e.length === 0 ? b : vt(xt([...e].sort((e, t) => e - t)));
|
|
495
|
-
}
|
|
496
|
-
function xt(e) {
|
|
497
497
|
let t = Math.floor(e.length / 2);
|
|
498
498
|
return e.slice(e.length % 2 == 0 ? t - 1 : t, t + 1);
|
|
499
499
|
}
|
|
500
|
-
function
|
|
500
|
+
function xt(e) {
|
|
501
501
|
let t = /* @__PURE__ */ new Map();
|
|
502
502
|
for (let n of e) t.set(n, (t.get(n) ?? 0) + 1);
|
|
503
503
|
let n = 0, r = x;
|
|
504
504
|
for (let [e, i] of t.entries()) i > n && (n = i, r = e);
|
|
505
505
|
return n >= 2 ? r : x;
|
|
506
506
|
}
|
|
507
|
-
var
|
|
508
|
-
function
|
|
509
|
-
if (e.length <
|
|
510
|
-
let t =
|
|
507
|
+
var St = 2;
|
|
508
|
+
function Ct(e) {
|
|
509
|
+
if (e.length < St) return v;
|
|
510
|
+
let t = _t(e);
|
|
511
511
|
return e.reduce((e, n) => e + (n - t) ** 2, 0) / (e.length - 1);
|
|
512
512
|
}
|
|
513
|
-
function
|
|
514
|
-
let t =
|
|
513
|
+
function wt(e) {
|
|
514
|
+
let t = Ct(e);
|
|
515
515
|
return typeof t == "number" ? Math.sqrt(t) : t;
|
|
516
516
|
}
|
|
517
517
|
//#endregion
|
|
518
518
|
//#region src/engine/functions/statistical.ts
|
|
519
|
-
var
|
|
519
|
+
var M = 255, Tt = /^\$?[A-Z]+\$?\d+$/i, Et = (e) => Tt.test(e), Dt = (e) => e.slice(e.lastIndexOf("!") + 1), Ot = (e) => {
|
|
520
520
|
if (!e) return !1;
|
|
521
|
-
let [t, n] =
|
|
522
|
-
return !t || !n ? !1 :
|
|
523
|
-
},
|
|
521
|
+
let [t, n] = Dt(e).split(":");
|
|
522
|
+
return !t || !n ? !1 : Et(t) && Et(n);
|
|
523
|
+
}, kt = (e) => Ot(e) || Et(Dt(e)), At = (e, t, n) => {
|
|
524
524
|
let r = [];
|
|
525
525
|
for (let i of e) {
|
|
526
526
|
let e = i?.trim();
|
|
527
|
-
e && (
|
|
527
|
+
e && (kt(e) ? n(e).forEach((e) => r.push({
|
|
528
528
|
value: e,
|
|
529
529
|
isScalar: !1
|
|
530
530
|
})) : r.push({
|
|
@@ -533,16 +533,16 @@ var j = 255, Et = /^\$?[A-Z]+\$?\d+$/i, Dt = (e) => Et.test(e), Ot = (e) => e.sl
|
|
|
533
533
|
}));
|
|
534
534
|
}
|
|
535
535
|
return r;
|
|
536
|
-
},
|
|
537
|
-
if (!t.getRangeValuesKeepingBlanks) return
|
|
538
|
-
let n =
|
|
536
|
+
}, jt = (e, t) => {
|
|
537
|
+
if (!t.getRangeValuesKeepingBlanks) return Nt(e, t);
|
|
538
|
+
let n = At(e, t, t.getRangeValuesKeepingBlanks).flatMap(Mt);
|
|
539
539
|
return n.find(S) ?? n.filter((e) => typeof e == "number");
|
|
540
|
-
},
|
|
541
|
-
function
|
|
540
|
+
}, Mt = ({ value: e, isScalar: t }) => S(e) ? [e] : t ? [w(e)] : Le(e) ? [j(e)] : [];
|
|
541
|
+
function Nt(e, t) {
|
|
542
542
|
let n = e.map((e) => e?.trim() ?? "").filter((e) => e !== "").map((e) => {
|
|
543
|
-
if (
|
|
543
|
+
if (kt(e)) return {
|
|
544
544
|
error: t.getRangeValuesRaw?.(e).find(S),
|
|
545
|
-
numbers: t.getRangeValues(e).map(
|
|
545
|
+
numbers: t.getRangeValues(e).map(j)
|
|
546
546
|
};
|
|
547
547
|
let n = w(t.evaluateFormula(e));
|
|
548
548
|
return typeof n == "number" ? { numbers: [n] } : {
|
|
@@ -552,23 +552,23 @@ function Pt(e, t) {
|
|
|
552
552
|
});
|
|
553
553
|
return n.find(({ error: e }) => e)?.error ?? n.flatMap(({ numbers: e }) => e);
|
|
554
554
|
}
|
|
555
|
-
var
|
|
556
|
-
let r =
|
|
555
|
+
var Pt = (e) => e.filter(Le).map(j), N = (e) => (t, n) => {
|
|
556
|
+
let r = jt(t, n);
|
|
557
557
|
return Array.isArray(r) ? e(r) : r;
|
|
558
|
-
},
|
|
558
|
+
}, Ft = (e, t) => At(e, t, k(t)).map(({ value: e }) => e), It = N((e) => e.reduce((e, t) => e + t, 0)), Lt = N(vt), Rt = N((e) => e.length > 0 ? Math.max(...e) : 0), zt = N((e) => e.length > 0 ? Math.min(...e) : 0), Bt = ({ value: e, isScalar: t }) => !t || typeof w(e) == "number", Vt = (e, t) => At(e, t, t.getRangeValues).filter(Bt).length, Ht = N(yt), Ut = N(xt), Wt = N(wt), Gt = N(Ct), Kt = (e) => e != null && e !== "", qt = (e, t) => kt(e) && t.countFilledCells ? t.countFilledCells(e) : Ft([e], t).filter(Kt).length, Jt = (e, t) => e.reduce((e, n) => {
|
|
559
559
|
let r = n?.trim();
|
|
560
|
-
return r ? e +
|
|
561
|
-
}, 0),
|
|
562
|
-
let n =
|
|
560
|
+
return r ? e + qt(r, t) : e;
|
|
561
|
+
}, 0), Yt = (e, t) => {
|
|
562
|
+
let n = k(t)(O(t, e, 0)), r = gt(t, e, 1);
|
|
563
563
|
return typeof r == "function" ? n.filter(r).length : r;
|
|
564
|
-
},
|
|
565
|
-
let n =
|
|
564
|
+
}, Xt = (e, t) => {
|
|
565
|
+
let n = O(t, e, 0), r = k(t), i = e.length === 3 ? O(t, e, 2) : n;
|
|
566
566
|
return {
|
|
567
567
|
criteriaRange: r(n),
|
|
568
568
|
valueRange: r(i),
|
|
569
|
-
matches:
|
|
569
|
+
matches: gt(t, e, 1)
|
|
570
570
|
};
|
|
571
|
-
},
|
|
571
|
+
}, Zt = (e, t, n) => e.reduce((e, r, i) => {
|
|
572
572
|
if (!n(r)) return e;
|
|
573
573
|
let a = t[i] ?? "";
|
|
574
574
|
return S(a) ? {
|
|
@@ -576,105 +576,105 @@ var Ft = (e) => e.filter(Le).map(A), M = (e) => (t, n) => {
|
|
|
576
576
|
error: e.error ?? a
|
|
577
577
|
} : {
|
|
578
578
|
...e,
|
|
579
|
-
sum: e.sum +
|
|
579
|
+
sum: e.sum + j(a),
|
|
580
580
|
count: e.count + +!!C(a)
|
|
581
581
|
};
|
|
582
582
|
}, {
|
|
583
583
|
sum: 0,
|
|
584
584
|
count: 0
|
|
585
585
|
});
|
|
586
|
-
|
|
586
|
+
A.register({
|
|
587
587
|
name: "SUM",
|
|
588
|
-
handler:
|
|
588
|
+
handler: It,
|
|
589
589
|
minArgs: 1,
|
|
590
|
-
maxArgs:
|
|
590
|
+
maxArgs: M,
|
|
591
591
|
description: "Returns the sum of all numbers in a range",
|
|
592
592
|
examples: ["SUM(A1:A10)", "SUM(B2:B20)"],
|
|
593
593
|
category: "Statistical"
|
|
594
|
-
}),
|
|
594
|
+
}), A.register({
|
|
595
595
|
name: "AVERAGE",
|
|
596
|
-
handler:
|
|
596
|
+
handler: Lt,
|
|
597
597
|
minArgs: 1,
|
|
598
|
-
maxArgs:
|
|
598
|
+
maxArgs: M,
|
|
599
599
|
description: "Returns the average (arithmetic mean) of numbers in a range",
|
|
600
600
|
examples: ["AVERAGE(A1:A10)", "AVERAGE(B2:B20)"],
|
|
601
601
|
category: "Statistical"
|
|
602
|
-
}),
|
|
602
|
+
}), A.register({
|
|
603
603
|
name: "MAX",
|
|
604
|
-
handler:
|
|
604
|
+
handler: Rt,
|
|
605
605
|
minArgs: 1,
|
|
606
606
|
description: "Returns the largest value in a range",
|
|
607
607
|
examples: ["MAX(A1:A10)", "MAX(B2:B20)"],
|
|
608
608
|
category: "Statistical"
|
|
609
|
-
}),
|
|
609
|
+
}), A.register({
|
|
610
610
|
name: "MIN",
|
|
611
|
-
handler:
|
|
611
|
+
handler: zt,
|
|
612
612
|
minArgs: 1,
|
|
613
613
|
description: "Returns the smallest value in a range",
|
|
614
614
|
examples: ["MIN(A1:A10)", "MIN(B2:B20)"],
|
|
615
615
|
category: "Statistical"
|
|
616
|
-
}),
|
|
616
|
+
}), A.register({
|
|
617
617
|
name: "COUNT",
|
|
618
|
-
handler:
|
|
618
|
+
handler: Vt,
|
|
619
619
|
minArgs: 1,
|
|
620
|
-
maxArgs:
|
|
620
|
+
maxArgs: M,
|
|
621
621
|
description: "Counts the number of cells in a range",
|
|
622
622
|
examples: ["COUNT(A1:A10)", "COUNT(B2:B20)"],
|
|
623
623
|
category: "Statistical"
|
|
624
|
-
}),
|
|
624
|
+
}), A.register({
|
|
625
625
|
name: "MEDIAN",
|
|
626
|
-
handler:
|
|
626
|
+
handler: Ht,
|
|
627
627
|
minArgs: 1,
|
|
628
|
-
maxArgs:
|
|
628
|
+
maxArgs: M,
|
|
629
629
|
description: "Returns the median (middle) value in a range",
|
|
630
630
|
examples: ["MEDIAN(A1:A10)", "MEDIAN(B2:B20)"],
|
|
631
631
|
category: "Statistical"
|
|
632
|
-
}),
|
|
632
|
+
}), A.register({
|
|
633
633
|
name: "MODE",
|
|
634
|
-
handler:
|
|
634
|
+
handler: Ut,
|
|
635
635
|
minArgs: 1,
|
|
636
|
-
maxArgs:
|
|
636
|
+
maxArgs: M,
|
|
637
637
|
description: "Returns the most frequently occurring value in a range",
|
|
638
638
|
examples: ["MODE(A1:A10)", "MODE(B2:B20)"],
|
|
639
639
|
category: "Statistical"
|
|
640
|
-
}),
|
|
640
|
+
}), A.register({
|
|
641
641
|
name: "STDEV",
|
|
642
|
-
handler:
|
|
642
|
+
handler: Wt,
|
|
643
643
|
minArgs: 1,
|
|
644
|
-
maxArgs:
|
|
644
|
+
maxArgs: M,
|
|
645
645
|
description: "Returns the standard deviation of numbers in a range",
|
|
646
646
|
examples: ["STDEV(A1:A10)", "STDEV(B2:B20)"],
|
|
647
647
|
category: "Statistical"
|
|
648
|
-
}),
|
|
648
|
+
}), A.register({
|
|
649
649
|
name: "VAR",
|
|
650
|
-
handler:
|
|
650
|
+
handler: Gt,
|
|
651
651
|
minArgs: 1,
|
|
652
|
-
maxArgs:
|
|
652
|
+
maxArgs: M,
|
|
653
653
|
description: "Returns the variance of numbers in a range",
|
|
654
654
|
examples: ["VAR(A1:A10)", "VAR(B2:B20)"],
|
|
655
655
|
category: "Statistical"
|
|
656
|
-
}),
|
|
656
|
+
}), A.register({
|
|
657
657
|
name: "COUNTA",
|
|
658
|
-
handler:
|
|
658
|
+
handler: Jt,
|
|
659
659
|
minArgs: 1,
|
|
660
|
-
maxArgs:
|
|
660
|
+
maxArgs: M,
|
|
661
661
|
description: "Counts the number of non-empty cells in a range",
|
|
662
662
|
examples: ["COUNTA(A1:A10)", "COUNTA(B2:B20)"],
|
|
663
663
|
category: "Statistical"
|
|
664
|
-
}),
|
|
664
|
+
}), A.register({
|
|
665
665
|
name: "COUNTIF",
|
|
666
|
-
handler:
|
|
666
|
+
handler: Yt,
|
|
667
667
|
minArgs: 2,
|
|
668
668
|
maxArgs: 2,
|
|
669
669
|
description: "Counts cells in a range that match a criteria",
|
|
670
670
|
examples: ["COUNTIF(A1:A10, \">5\")", "COUNTIF(B1:B10, \"Yes\")"],
|
|
671
671
|
category: "Statistical"
|
|
672
|
-
}),
|
|
672
|
+
}), A.register({
|
|
673
673
|
name: "SUMIF",
|
|
674
674
|
handler: (e, t) => {
|
|
675
|
-
let { criteriaRange: n, valueRange: r, matches: i } =
|
|
675
|
+
let { criteriaRange: n, valueRange: r, matches: i } = Xt(e, t);
|
|
676
676
|
if (typeof i != "function") return i;
|
|
677
|
-
let { sum: a, error: o } =
|
|
677
|
+
let { sum: a, error: o } = Zt(n, r, i);
|
|
678
678
|
return o ?? a;
|
|
679
679
|
},
|
|
680
680
|
minArgs: 2,
|
|
@@ -682,12 +682,12 @@ k.register({
|
|
|
682
682
|
description: "Sums cells in a range that match a criteria",
|
|
683
683
|
examples: ["SUMIF(A1:A10, \">5\")", "SUMIF(A1:A10, \">5\", B1:B10)"],
|
|
684
684
|
category: "Statistical"
|
|
685
|
-
}),
|
|
685
|
+
}), A.register({
|
|
686
686
|
name: "AVERAGEIF",
|
|
687
687
|
handler: (e, t) => {
|
|
688
|
-
let { criteriaRange: n, valueRange: r, matches: i } =
|
|
688
|
+
let { criteriaRange: n, valueRange: r, matches: i } = Xt(e, t);
|
|
689
689
|
if (typeof i != "function") return i;
|
|
690
|
-
let { sum: a, count: o, error: s } =
|
|
690
|
+
let { sum: a, count: o, error: s } = Zt(n, r, i);
|
|
691
691
|
return s || (o > 0 ? a / o : v);
|
|
692
692
|
},
|
|
693
693
|
minArgs: 2,
|
|
@@ -698,17 +698,17 @@ k.register({
|
|
|
698
698
|
});
|
|
699
699
|
//#endregion
|
|
700
700
|
//#region src/engine/functions/analysis-math.ts
|
|
701
|
-
var
|
|
702
|
-
let t =
|
|
701
|
+
var Qt = 2, $t = 1, en = 4, P = (e) => e.reduce((e, t) => e + t, 0) / e.length, F = (e) => {
|
|
702
|
+
let t = P(e);
|
|
703
703
|
return e.reduce((e, n) => e + (n - t) ** 2, 0);
|
|
704
704
|
};
|
|
705
|
-
function
|
|
705
|
+
function tn(e, t) {
|
|
706
706
|
if (e.length !== t.length) return x;
|
|
707
707
|
let n = e.flatMap((e, n) => {
|
|
708
708
|
let r = t[n];
|
|
709
709
|
return C(e) && r !== void 0 && C(r) ? [{
|
|
710
|
-
y:
|
|
711
|
-
x:
|
|
710
|
+
y: j(e),
|
|
711
|
+
x: j(r)
|
|
712
712
|
}] : [];
|
|
713
713
|
});
|
|
714
714
|
return {
|
|
@@ -716,112 +716,112 @@ function nn(e, t) {
|
|
|
716
716
|
xs: n.map((e) => e.x)
|
|
717
717
|
};
|
|
718
718
|
}
|
|
719
|
-
var
|
|
720
|
-
let n =
|
|
719
|
+
var I = ({ ys: e, xs: t }) => {
|
|
720
|
+
let n = P(e), r = P(t);
|
|
721
721
|
return e.reduce((e, i, a) => e + (i - n) * ((t[a] ?? r) - r), 0);
|
|
722
722
|
};
|
|
723
|
+
function nn(e) {
|
|
724
|
+
if (e.ys.length < Qt) return v;
|
|
725
|
+
let t = Math.sqrt(F(e.ys) * F(e.xs));
|
|
726
|
+
return t === 0 ? v : I(e) / t;
|
|
727
|
+
}
|
|
723
728
|
function rn(e) {
|
|
724
|
-
if (e.ys.length <
|
|
725
|
-
let t =
|
|
726
|
-
return t === 0 ? v :
|
|
729
|
+
if (e.ys.length < Qt) return v;
|
|
730
|
+
let t = F(e.xs);
|
|
731
|
+
return t === 0 ? v : I(e) / t;
|
|
727
732
|
}
|
|
728
733
|
function an(e) {
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
return t === 0 ? v : F(e) / t;
|
|
734
|
+
let t = rn(e);
|
|
735
|
+
return typeof t == "number" ? P(e.ys) - t * P(e.xs) : t;
|
|
732
736
|
}
|
|
733
737
|
function on(e) {
|
|
734
|
-
let t =
|
|
735
|
-
return typeof t == "number" ? N(e.ys) - t * N(e.xs) : t;
|
|
736
|
-
}
|
|
737
|
-
function sn(e) {
|
|
738
|
-
let t = rn(e);
|
|
738
|
+
let t = nn(e);
|
|
739
739
|
return typeof t == "number" ? t * t : t;
|
|
740
740
|
}
|
|
741
|
-
function
|
|
742
|
-
if (e.length === 0 || t < 0 || t >
|
|
741
|
+
function sn(e, t) {
|
|
742
|
+
if (e.length === 0 || t < 0 || t > $t) return b;
|
|
743
743
|
let n = [...e].sort((e, t) => e - t), r = t * (n.length - 1), i = n[Math.floor(r)] ?? 0, a = n[Math.ceil(r)] ?? i;
|
|
744
744
|
return i + (r - Math.floor(r)) * (a - i);
|
|
745
745
|
}
|
|
746
|
-
function
|
|
746
|
+
function cn(e, t) {
|
|
747
747
|
let n = Math.trunc(t);
|
|
748
|
-
return n < 0 || n >
|
|
748
|
+
return n < 0 || n > en ? b : sn(e, n / en);
|
|
749
749
|
}
|
|
750
|
-
function
|
|
750
|
+
function ln(e, t) {
|
|
751
751
|
let n = Math.ceil(t);
|
|
752
752
|
return n < 1 || n > e.length ? b : [...e].sort((e, t) => t - e)[n - 1] ?? b;
|
|
753
753
|
}
|
|
754
|
-
function
|
|
754
|
+
function un(e, t) {
|
|
755
755
|
let n = Math.ceil(t);
|
|
756
756
|
return n < 1 || n > e.length ? b : [...e].sort((e, t) => e - t)[n - 1] ?? b;
|
|
757
757
|
}
|
|
758
|
-
function
|
|
758
|
+
function dn(e, t, n) {
|
|
759
759
|
return t.includes(e) ? t.filter((t) => n ? t < e : t > e).length + 1 : x;
|
|
760
760
|
}
|
|
761
|
-
function
|
|
762
|
-
return e.length === 0 ? v :
|
|
761
|
+
function fn(e) {
|
|
762
|
+
return e.length === 0 ? v : F(e) / e.length;
|
|
763
763
|
}
|
|
764
|
-
function
|
|
765
|
-
let t =
|
|
764
|
+
function pn(e) {
|
|
765
|
+
let t = fn(e);
|
|
766
766
|
return typeof t == "number" ? Math.sqrt(t) : t;
|
|
767
767
|
}
|
|
768
|
-
function
|
|
768
|
+
function mn(e, t) {
|
|
769
769
|
return t.some(({ range: t }) => t.length !== e) ? y : Array.from({ length: e }, (e, n) => t.every(({ range: e, matches: t }) => t(e[n] ?? "")));
|
|
770
770
|
}
|
|
771
771
|
//#endregion
|
|
772
772
|
//#region src/engine/functions/statistical-analysis.ts
|
|
773
|
-
var
|
|
774
|
-
let r =
|
|
775
|
-
return [...i, ...a].find(S) ??
|
|
776
|
-
},
|
|
777
|
-
let r =
|
|
773
|
+
var L = 255, hn = (e, t, n) => w(t.evaluateFormula(O(t, e, n))), gn = (e, t, n = 0) => {
|
|
774
|
+
let r = k(t), [i, a] = [r(O(t, e, n)), r(O(t, e, n + 1))];
|
|
775
|
+
return [...i, ...a].find(S) ?? tn(i, a);
|
|
776
|
+
}, R = (e) => (t, n) => {
|
|
777
|
+
let r = gn(t, n);
|
|
778
778
|
return "ys" in r ? e(r) : r;
|
|
779
|
-
},
|
|
780
|
-
let r =
|
|
779
|
+
}, _n = (e) => (t, n) => {
|
|
780
|
+
let r = jt([O(n, t, 0)], n);
|
|
781
781
|
if (!Array.isArray(r)) return r;
|
|
782
|
-
let i =
|
|
782
|
+
let i = hn(t, n, 1);
|
|
783
783
|
return typeof i == "number" ? e(r, i) : i;
|
|
784
|
-
},
|
|
785
|
-
let n =
|
|
784
|
+
}, vn = (e, t) => {
|
|
785
|
+
let n = hn(e, t, 0);
|
|
786
786
|
if (typeof n != "number") return n;
|
|
787
|
-
let r =
|
|
787
|
+
let r = jt([O(t, e, 1)], t);
|
|
788
788
|
if (!Array.isArray(r)) return r;
|
|
789
|
-
let i = e.length > 2 ?
|
|
790
|
-
return typeof i == "number" ?
|
|
791
|
-
},
|
|
792
|
-
let r =
|
|
793
|
-
range: r(
|
|
794
|
-
matches:
|
|
789
|
+
let i = e.length > 2 ? hn(e, t, 2) : 0;
|
|
790
|
+
return typeof i == "number" ? dn(n, r, i !== 0) : i;
|
|
791
|
+
}, yn = (e, t, n) => {
|
|
792
|
+
let r = k(t), i = Array.from({ length: Math.ceil((e.length - n) / 2) }, (e, t) => n + t * 2).map((n) => ({
|
|
793
|
+
range: r(O(t, e, n)),
|
|
794
|
+
matches: gt(t, e, n + 1)
|
|
795
795
|
}));
|
|
796
796
|
return i.map(({ matches: e }) => e).find(S) || i.flatMap(({ range: e, matches: t }) => typeof t == "function" ? [{
|
|
797
797
|
range: e,
|
|
798
798
|
matches: t
|
|
799
799
|
}] : []);
|
|
800
|
-
},
|
|
801
|
-
let n =
|
|
800
|
+
}, bn = (e, t) => {
|
|
801
|
+
let n = k(t)(O(t, e, 0)), r = yn(e, t, 1);
|
|
802
802
|
if (!Array.isArray(r)) return r;
|
|
803
|
-
let i =
|
|
803
|
+
let i = mn(n.length, r);
|
|
804
804
|
if (!Array.isArray(i)) return i;
|
|
805
805
|
let a = n.filter((e, t) => i[t]);
|
|
806
806
|
return a.find(S) ?? a;
|
|
807
|
+
}, xn = (e, t) => {
|
|
808
|
+
let n = bn(e, t);
|
|
809
|
+
return Array.isArray(n) ? n.reduce((e, t) => e + j(t), 0) : n;
|
|
807
810
|
}, Sn = (e, t) => {
|
|
808
|
-
let n =
|
|
809
|
-
return Array.isArray(n) ? n.reduce((e, t) => e + A(t), 0) : n;
|
|
810
|
-
}, Cn = (e, t) => {
|
|
811
|
-
let n = xn(e, t);
|
|
811
|
+
let n = bn(e, t);
|
|
812
812
|
if (!Array.isArray(n)) return n;
|
|
813
|
-
let r = n.filter(C).map(
|
|
813
|
+
let r = n.filter(C).map(j);
|
|
814
814
|
return r.length > 0 ? r.reduce((e, t) => e + t, 0) / r.length : v;
|
|
815
|
-
},
|
|
816
|
-
let r =
|
|
815
|
+
}, Cn = (e) => (t, n) => {
|
|
816
|
+
let r = bn(t, n);
|
|
817
817
|
if (!Array.isArray(r)) return r;
|
|
818
|
-
let i = r.filter(C).map(
|
|
818
|
+
let i = r.filter(C).map(j);
|
|
819
819
|
return i.length > 0 ? i.reduce((t, n) => e(t, n)) : 0;
|
|
820
820
|
};
|
|
821
821
|
[
|
|
822
822
|
{
|
|
823
823
|
name: "CORREL",
|
|
824
|
-
handler:
|
|
824
|
+
handler: R(nn),
|
|
825
825
|
minArgs: 2,
|
|
826
826
|
maxArgs: 2,
|
|
827
827
|
description: "Returns the correlation coefficient of two ranges",
|
|
@@ -829,7 +829,7 @@ var I = 255, gn = (e, t, n) => w(t.evaluateFormula(D(t, e, n))), _n = (e, t, n =
|
|
|
829
829
|
},
|
|
830
830
|
{
|
|
831
831
|
name: "SLOPE",
|
|
832
|
-
handler:
|
|
832
|
+
handler: R(rn),
|
|
833
833
|
minArgs: 2,
|
|
834
834
|
maxArgs: 2,
|
|
835
835
|
description: "Returns the slope of the least-squares line through known_y and known_x",
|
|
@@ -837,7 +837,7 @@ var I = 255, gn = (e, t, n) => w(t.evaluateFormula(D(t, e, n))), _n = (e, t, n =
|
|
|
837
837
|
},
|
|
838
838
|
{
|
|
839
839
|
name: "INTERCEPT",
|
|
840
|
-
handler:
|
|
840
|
+
handler: R(an),
|
|
841
841
|
minArgs: 2,
|
|
842
842
|
maxArgs: 2,
|
|
843
843
|
description: "Returns where the least-squares line crosses the y axis",
|
|
@@ -845,7 +845,7 @@ var I = 255, gn = (e, t, n) => w(t.evaluateFormula(D(t, e, n))), _n = (e, t, n =
|
|
|
845
845
|
},
|
|
846
846
|
{
|
|
847
847
|
name: "RSQ",
|
|
848
|
-
handler:
|
|
848
|
+
handler: R(on),
|
|
849
849
|
minArgs: 2,
|
|
850
850
|
maxArgs: 2,
|
|
851
851
|
description: "Returns the square of the correlation coefficient",
|
|
@@ -853,7 +853,7 @@ var I = 255, gn = (e, t, n) => w(t.evaluateFormula(D(t, e, n))), _n = (e, t, n =
|
|
|
853
853
|
},
|
|
854
854
|
{
|
|
855
855
|
name: "PERCENTILE",
|
|
856
|
-
handler:
|
|
856
|
+
handler: _n(sn),
|
|
857
857
|
minArgs: 2,
|
|
858
858
|
maxArgs: 2,
|
|
859
859
|
description: "Returns the k-th percentile (k from 0 to 1), interpolated like PERCENTILE.INC",
|
|
@@ -861,7 +861,7 @@ var I = 255, gn = (e, t, n) => w(t.evaluateFormula(D(t, e, n))), _n = (e, t, n =
|
|
|
861
861
|
},
|
|
862
862
|
{
|
|
863
863
|
name: "QUARTILE",
|
|
864
|
-
handler:
|
|
864
|
+
handler: _n(cn),
|
|
865
865
|
minArgs: 2,
|
|
866
866
|
maxArgs: 2,
|
|
867
867
|
description: "Returns a quartile (0 to 4), interpolated like QUARTILE.INC",
|
|
@@ -869,7 +869,7 @@ var I = 255, gn = (e, t, n) => w(t.evaluateFormula(D(t, e, n))), _n = (e, t, n =
|
|
|
869
869
|
},
|
|
870
870
|
{
|
|
871
871
|
name: "LARGE",
|
|
872
|
-
handler:
|
|
872
|
+
handler: _n(ln),
|
|
873
873
|
minArgs: 2,
|
|
874
874
|
maxArgs: 2,
|
|
875
875
|
description: "Returns the k-th largest value",
|
|
@@ -877,7 +877,7 @@ var I = 255, gn = (e, t, n) => w(t.evaluateFormula(D(t, e, n))), _n = (e, t, n =
|
|
|
877
877
|
},
|
|
878
878
|
{
|
|
879
879
|
name: "SMALL",
|
|
880
|
-
handler:
|
|
880
|
+
handler: _n(un),
|
|
881
881
|
minArgs: 2,
|
|
882
882
|
maxArgs: 2,
|
|
883
883
|
description: "Returns the k-th smallest value",
|
|
@@ -885,7 +885,7 @@ var I = 255, gn = (e, t, n) => w(t.evaluateFormula(D(t, e, n))), _n = (e, t, n =
|
|
|
885
885
|
},
|
|
886
886
|
{
|
|
887
887
|
name: "RANK",
|
|
888
|
-
handler:
|
|
888
|
+
handler: vn,
|
|
889
889
|
minArgs: 2,
|
|
890
890
|
maxArgs: 3,
|
|
891
891
|
description: "Returns the rank of a number in a range (largest first unless order is non-zero)",
|
|
@@ -893,114 +893,114 @@ var I = 255, gn = (e, t, n) => w(t.evaluateFormula(D(t, e, n))), _n = (e, t, n =
|
|
|
893
893
|
},
|
|
894
894
|
{
|
|
895
895
|
name: "STDEVP",
|
|
896
|
-
handler:
|
|
896
|
+
handler: N(pn),
|
|
897
897
|
minArgs: 1,
|
|
898
|
-
maxArgs:
|
|
898
|
+
maxArgs: L,
|
|
899
899
|
description: "Returns the population standard deviation",
|
|
900
900
|
examples: ["STDEVP(A2:A100)"]
|
|
901
901
|
},
|
|
902
902
|
{
|
|
903
903
|
name: "VARP",
|
|
904
|
-
handler:
|
|
904
|
+
handler: N(fn),
|
|
905
905
|
minArgs: 1,
|
|
906
|
-
maxArgs:
|
|
906
|
+
maxArgs: L,
|
|
907
907
|
description: "Returns the population variance",
|
|
908
908
|
examples: ["VARP(A2:A100)"]
|
|
909
909
|
},
|
|
910
910
|
{
|
|
911
911
|
name: "SUMIFS",
|
|
912
|
-
handler:
|
|
912
|
+
handler: xn,
|
|
913
913
|
minArgs: 3,
|
|
914
|
-
maxArgs:
|
|
914
|
+
maxArgs: L,
|
|
915
915
|
description: "Sums the cells whose rows meet every condition",
|
|
916
916
|
examples: ["SUMIFS(C2:C100, A2:A100, \"East\", B2:B100, \">10\")"]
|
|
917
917
|
},
|
|
918
918
|
{
|
|
919
919
|
name: "COUNTIFS",
|
|
920
920
|
handler: (e, t) => {
|
|
921
|
-
let n =
|
|
921
|
+
let n = yn(e, t, 0);
|
|
922
922
|
if (!Array.isArray(n)) return n;
|
|
923
|
-
let r =
|
|
923
|
+
let r = mn(n[0]?.range.length ?? 0, n);
|
|
924
924
|
return Array.isArray(r) ? r.filter(Boolean).length : r;
|
|
925
925
|
},
|
|
926
926
|
minArgs: 2,
|
|
927
|
-
maxArgs:
|
|
927
|
+
maxArgs: L,
|
|
928
928
|
description: "Counts the rows that meet every condition",
|
|
929
929
|
examples: ["COUNTIFS(A2:A100, \"East\", B2:B100, \">10\")"]
|
|
930
930
|
},
|
|
931
931
|
{
|
|
932
932
|
name: "MAXIFS",
|
|
933
|
-
handler:
|
|
933
|
+
handler: Cn(Math.max),
|
|
934
934
|
minArgs: 3,
|
|
935
|
-
maxArgs:
|
|
935
|
+
maxArgs: L,
|
|
936
936
|
description: "Returns the largest value whose row meets every condition (0 when none does)",
|
|
937
937
|
examples: ["MAXIFS(C2:C100, A2:A100, \"East\")"]
|
|
938
938
|
},
|
|
939
939
|
{
|
|
940
940
|
name: "MINIFS",
|
|
941
|
-
handler:
|
|
941
|
+
handler: Cn(Math.min),
|
|
942
942
|
minArgs: 3,
|
|
943
|
-
maxArgs:
|
|
943
|
+
maxArgs: L,
|
|
944
944
|
description: "Returns the smallest value whose row meets every condition (0 when none does)",
|
|
945
945
|
examples: ["MINIFS(C2:C100, A2:A100, \"East\")"]
|
|
946
946
|
},
|
|
947
947
|
{
|
|
948
948
|
name: "AVERAGEIFS",
|
|
949
|
-
handler:
|
|
949
|
+
handler: Sn,
|
|
950
950
|
minArgs: 3,
|
|
951
|
-
maxArgs:
|
|
951
|
+
maxArgs: L,
|
|
952
952
|
description: "Averages the cells whose rows meet every condition",
|
|
953
953
|
examples: ["AVERAGEIFS(C2:C100, A2:A100, \"East\")"]
|
|
954
954
|
}
|
|
955
|
-
].forEach((e) =>
|
|
955
|
+
].forEach((e) => A.register({
|
|
956
956
|
...e,
|
|
957
957
|
category: "Statistical"
|
|
958
958
|
}));
|
|
959
959
|
//#endregion
|
|
960
960
|
//#region src/engine/functions/regression-math.ts
|
|
961
|
-
var
|
|
962
|
-
function
|
|
961
|
+
var wn = 3, Tn = 2;
|
|
962
|
+
function En(e, t) {
|
|
963
963
|
if (e.ys.length === 0) return x;
|
|
964
|
-
let n =
|
|
965
|
-
return typeof n == "number" ?
|
|
964
|
+
let n = rn(e);
|
|
965
|
+
return typeof n == "number" ? P(e.ys) + n * (t - P(e.xs)) : n;
|
|
966
966
|
}
|
|
967
|
-
function
|
|
967
|
+
function Dn(e) {
|
|
968
968
|
let t = e.ys.length;
|
|
969
969
|
if (t === 0) return x;
|
|
970
|
-
let n =
|
|
971
|
-
if (t <
|
|
972
|
-
let r =
|
|
970
|
+
let n = F(e.xs);
|
|
971
|
+
if (t < wn || n === 0) return v;
|
|
972
|
+
let r = I(e) / n, [i, a] = [P(e.ys), P(e.xs)], o = e.ys.reduce((t, n, o) => t + (n - i - r * ((e.xs[o] ?? a) - a)) ** 2, 0);
|
|
973
973
|
return Math.sqrt(o / (t - 2));
|
|
974
974
|
}
|
|
975
|
-
function
|
|
976
|
-
return e.ys.length === 0 ? v :
|
|
975
|
+
function On(e) {
|
|
976
|
+
return e.ys.length === 0 ? v : I(e) / e.ys.length;
|
|
977
977
|
}
|
|
978
|
-
function
|
|
979
|
-
return e.ys.length <
|
|
978
|
+
function kn(e) {
|
|
979
|
+
return e.ys.length < Tn ? v : I(e) / (e.ys.length - 1);
|
|
980
980
|
}
|
|
981
|
-
var
|
|
982
|
-
function
|
|
981
|
+
var An = (e) => Array.from({ length: e }, (e, t) => t + 1);
|
|
982
|
+
function jn(e, t, n, r) {
|
|
983
983
|
if (e.length !== t.length) return De;
|
|
984
984
|
let i = [...e, ...t], a = i.find(S);
|
|
985
985
|
if (a) return a;
|
|
986
986
|
if (e.length === 0 || !i.every(C)) return y;
|
|
987
987
|
let o = {
|
|
988
|
-
ys: e.map(
|
|
989
|
-
xs: t.map(
|
|
988
|
+
ys: e.map(j),
|
|
989
|
+
xs: t.map(j)
|
|
990
990
|
};
|
|
991
|
-
return r ?
|
|
991
|
+
return r ? Mn(o, n) : Nn(o, n);
|
|
992
992
|
}
|
|
993
|
-
function
|
|
994
|
-
let n =
|
|
995
|
-
return n === 0 ? r : r +
|
|
993
|
+
function Mn(e, t) {
|
|
994
|
+
let n = F(e.xs), r = P(e.ys);
|
|
995
|
+
return n === 0 ? r : r + I(e) / n * (t - P(e.xs));
|
|
996
996
|
}
|
|
997
|
-
function
|
|
997
|
+
function Nn({ ys: e, xs: t }, n) {
|
|
998
998
|
let r = t.reduce((e, t) => e + t * t, 0), i = e.reduce((e, n, r) => e + n * (t[r] ?? 0), 0);
|
|
999
999
|
return r === 0 ? 0 : i / r * n;
|
|
1000
1000
|
}
|
|
1001
1001
|
//#endregion
|
|
1002
1002
|
//#region src/engine/coerce-boolean.ts
|
|
1003
|
-
function
|
|
1003
|
+
function z(e) {
|
|
1004
1004
|
if (typeof e == "boolean") return e;
|
|
1005
1005
|
if (e == null) return !1;
|
|
1006
1006
|
if (typeof e == "number") return e !== 0;
|
|
@@ -1015,26 +1015,26 @@ function R(e) {
|
|
|
1015
1015
|
}
|
|
1016
1016
|
//#endregion
|
|
1017
1017
|
//#region src/engine/functions/regression.ts
|
|
1018
|
-
var
|
|
1019
|
-
let n =
|
|
1018
|
+
var Pn = (e, t) => {
|
|
1019
|
+
let n = hn(e, t, 0);
|
|
1020
1020
|
if (typeof n != "number") return n;
|
|
1021
|
-
let r =
|
|
1022
|
-
return "ys" in r ?
|
|
1021
|
+
let r = gn(e, t, 1);
|
|
1022
|
+
return "ys" in r ? En(r, n) : r;
|
|
1023
1023
|
};
|
|
1024
|
-
function
|
|
1025
|
-
let [n, ...r] =
|
|
1026
|
-
return n === void 0 || r.length > 0 ? y : n.isScalar ? w(n.value) : S(n.value) ? n.value : C(n.value) ?
|
|
1024
|
+
function Fn(e, t) {
|
|
1025
|
+
let [n, ...r] = At([e], t, k(t));
|
|
1026
|
+
return n === void 0 || r.length > 0 ? y : n.isScalar ? w(n.value) : S(n.value) ? n.value : C(n.value) ? j(n.value) : y;
|
|
1027
1027
|
}
|
|
1028
|
-
function
|
|
1028
|
+
function In(e, t) {
|
|
1029
1029
|
let n = e[3]?.trim();
|
|
1030
1030
|
if (!n) return !0;
|
|
1031
1031
|
let r = t.evaluateFormula(n);
|
|
1032
|
-
return S(r) ? r :
|
|
1032
|
+
return S(r) ? r : z(r);
|
|
1033
1033
|
}
|
|
1034
1034
|
[
|
|
1035
1035
|
{
|
|
1036
1036
|
name: "FORECAST.LINEAR",
|
|
1037
|
-
handler:
|
|
1037
|
+
handler: Pn,
|
|
1038
1038
|
minArgs: 3,
|
|
1039
1039
|
maxArgs: 3,
|
|
1040
1040
|
description: "Returns the value of the least-squares line through known_y and known_x at x",
|
|
@@ -1043,10 +1043,10 @@ function Ln(e, t) {
|
|
|
1043
1043
|
{
|
|
1044
1044
|
name: "TREND",
|
|
1045
1045
|
handler: (e, t) => {
|
|
1046
|
-
let n =
|
|
1046
|
+
let n = k(t), r = n(O(t, e, 0)), i = e[1]?.trim(), a = i ? n(i) : An(r.length), o = Fn(O(t, e, 2), t);
|
|
1047
1047
|
if (typeof o != "number") return o;
|
|
1048
|
-
let s =
|
|
1049
|
-
return typeof s == "boolean" ?
|
|
1048
|
+
let s = In(e, t);
|
|
1049
|
+
return typeof s == "boolean" ? jn(r, a, o, s) : s;
|
|
1050
1050
|
},
|
|
1051
1051
|
minArgs: 3,
|
|
1052
1052
|
maxArgs: 4,
|
|
@@ -1055,7 +1055,7 @@ function Ln(e, t) {
|
|
|
1055
1055
|
},
|
|
1056
1056
|
{
|
|
1057
1057
|
name: "STEYX",
|
|
1058
|
-
handler:
|
|
1058
|
+
handler: R(Dn),
|
|
1059
1059
|
minArgs: 2,
|
|
1060
1060
|
maxArgs: 2,
|
|
1061
1061
|
description: "Returns the standard error of the y predicted by the least-squares line",
|
|
@@ -1063,7 +1063,7 @@ function Ln(e, t) {
|
|
|
1063
1063
|
},
|
|
1064
1064
|
{
|
|
1065
1065
|
name: "COVARIANCE.P",
|
|
1066
|
-
handler:
|
|
1066
|
+
handler: R(On),
|
|
1067
1067
|
minArgs: 2,
|
|
1068
1068
|
maxArgs: 2,
|
|
1069
1069
|
description: "Returns the population covariance of two ranges",
|
|
@@ -1071,19 +1071,19 @@ function Ln(e, t) {
|
|
|
1071
1071
|
},
|
|
1072
1072
|
{
|
|
1073
1073
|
name: "COVARIANCE.S",
|
|
1074
|
-
handler:
|
|
1074
|
+
handler: R(kn),
|
|
1075
1075
|
minArgs: 2,
|
|
1076
1076
|
maxArgs: 2,
|
|
1077
1077
|
description: "Returns the sample covariance of two ranges",
|
|
1078
1078
|
examples: ["COVARIANCE.S(A2:A20, B2:B20)"]
|
|
1079
1079
|
}
|
|
1080
|
-
].forEach((e) =>
|
|
1080
|
+
].forEach((e) => A.register({
|
|
1081
1081
|
...e,
|
|
1082
1082
|
category: "Statistical"
|
|
1083
1083
|
}));
|
|
1084
1084
|
//#endregion
|
|
1085
1085
|
//#region src/engine/functions/special-functions.ts
|
|
1086
|
-
var
|
|
1086
|
+
var Ln = .5 * Math.log(2 * Math.PI), Rn = 1e-16, zn = 1e-300, Bn = 2e3, B = (e) => Math.abs(e) < zn ? zn : e, Vn = 10, Hn = 7, Un = [
|
|
1087
1087
|
.9999999999998099,
|
|
1088
1088
|
676.5203681218851,
|
|
1089
1089
|
-1259.1392167224028,
|
|
@@ -1093,7 +1093,7 @@ var Rn = .5 * Math.log(2 * Math.PI), zn = 1e-16, Bn = 1e-300, Vn = 2e3, z = (e)
|
|
|
1093
1093
|
-.13857109526572012,
|
|
1094
1094
|
9984369578019572e-21,
|
|
1095
1095
|
1.5056327351493116e-7
|
|
1096
|
-
],
|
|
1096
|
+
], Wn = [
|
|
1097
1097
|
1 / 12,
|
|
1098
1098
|
-1 / 360,
|
|
1099
1099
|
1 / 1260,
|
|
@@ -1103,141 +1103,141 @@ var Rn = .5 * Math.log(2 * Math.PI), zn = 1e-16, Bn = 1e-300, Vn = 2e3, z = (e)
|
|
|
1103
1103
|
1 / 156,
|
|
1104
1104
|
-3617 / 122400
|
|
1105
1105
|
];
|
|
1106
|
-
function
|
|
1106
|
+
function Gn(e) {
|
|
1107
1107
|
let t = 1 / (e * e);
|
|
1108
|
-
return
|
|
1108
|
+
return Wn.reduceRight((e, n) => e * t + n, 0) / e;
|
|
1109
1109
|
}
|
|
1110
|
-
function
|
|
1111
|
-
let t = e - 1, n =
|
|
1112
|
-
return
|
|
1110
|
+
function Kn(e) {
|
|
1111
|
+
let t = e - 1, n = Un.slice(1).reduce((e, n, r) => e + n / (t + r + 1), Un[0] ?? 1), r = t + Hn + .5;
|
|
1112
|
+
return Ln + (t + .5) * Math.log(r) - r + Math.log(n);
|
|
1113
1113
|
}
|
|
1114
|
-
function
|
|
1115
|
-
return e >=
|
|
1114
|
+
function V(e) {
|
|
1115
|
+
return e >= Vn ? Ln + (e - .5) * Math.log(e) - e + Gn(e) : Kn(e);
|
|
1116
1116
|
}
|
|
1117
|
-
function
|
|
1117
|
+
function qn(e, t) {
|
|
1118
1118
|
let n = Math.min(e, t), r = Math.max(e, t);
|
|
1119
|
-
if (r >=
|
|
1120
|
-
let e =
|
|
1121
|
-
return
|
|
1119
|
+
if (r >= Vn) {
|
|
1120
|
+
let e = Gn(r) - Gn(n + r);
|
|
1121
|
+
return V(n) + e + n - n * Math.log(n + r) + (r - .5) * Math.log1p(-n / (n + r));
|
|
1122
1122
|
}
|
|
1123
|
-
return
|
|
1123
|
+
return V(n) + V(r) - V(n + r);
|
|
1124
1124
|
}
|
|
1125
|
-
function
|
|
1125
|
+
function Jn(e, t, n) {
|
|
1126
1126
|
let r = {
|
|
1127
1127
|
c: 1,
|
|
1128
|
-
d: 1 /
|
|
1128
|
+
d: 1 / B(1 - (t + n) * e / (t + 1)),
|
|
1129
1129
|
result: 0
|
|
1130
1130
|
};
|
|
1131
1131
|
r.result = r.d;
|
|
1132
|
-
for (let i = 1; i <=
|
|
1132
|
+
for (let i = 1; i <= Bn; i += 1) {
|
|
1133
1133
|
let a = i * (n - i) * e / ((t + 2 * i - 1) * (t + 2 * i));
|
|
1134
|
-
r.d = 1 /
|
|
1134
|
+
r.d = 1 / B(1 + a * r.d), r.c = B(1 + a / r.c), r.result *= r.d * r.c;
|
|
1135
1135
|
let o = -(t + i) * (t + n + i) * e / ((t + 2 * i) * (t + 2 * i + 1));
|
|
1136
|
-
r.d = 1 /
|
|
1136
|
+
r.d = 1 / B(1 + o * r.d), r.c = B(1 + o / r.c);
|
|
1137
1137
|
let s = r.d * r.c;
|
|
1138
|
-
if (r.result *= s, Math.abs(s - 1) <
|
|
1138
|
+
if (r.result *= s, Math.abs(s - 1) < Rn) return r.result;
|
|
1139
1139
|
}
|
|
1140
1140
|
return r.result;
|
|
1141
1141
|
}
|
|
1142
|
-
var
|
|
1143
|
-
function
|
|
1142
|
+
var Yn = 1e4, Xn = 8;
|
|
1143
|
+
function Zn(e, t, n, r, i) {
|
|
1144
1144
|
let a = {
|
|
1145
1145
|
term: 1,
|
|
1146
1146
|
sum: 1
|
|
1147
1147
|
};
|
|
1148
|
-
for (let t = 0; t <
|
|
1149
|
-
return Math.exp(r * t + i * n -
|
|
1148
|
+
for (let t = 0; t < Bn && a.term > a.sum * Rn; t += 1) a.term *= (r + i + t) / (r + 1 + t) * e, a.sum += a.term;
|
|
1149
|
+
return Math.exp(r * t + i * n - qn(r, i)) / r * a.sum;
|
|
1150
1150
|
}
|
|
1151
|
-
function
|
|
1151
|
+
function Qn(e, t, n, r) {
|
|
1152
1152
|
if (e === -Infinity) return 0;
|
|
1153
1153
|
if (t === -Infinity) return 1;
|
|
1154
1154
|
let i = Math.exp(e), a = Math.exp(t);
|
|
1155
|
-
if (Math.max(n, r) >=
|
|
1156
|
-
let o = Math.exp(n * e + r * t -
|
|
1157
|
-
return i < (n + 1) / (n + r + 2) ? o *
|
|
1155
|
+
if (Math.max(n, r) >= Yn && a * (n + r) <= Xn) return 1 - Zn(a, t, e, r, n);
|
|
1156
|
+
let o = Math.exp(n * e + r * t - qn(n, r));
|
|
1157
|
+
return i < (n + 1) / (n + r + 2) ? o * Jn(i, n, r) / n : 1 - o * Jn(a, r, n) / r;
|
|
1158
1158
|
}
|
|
1159
|
-
function
|
|
1159
|
+
function $n(e, t) {
|
|
1160
1160
|
let n = {
|
|
1161
1161
|
term: 1 / e,
|
|
1162
1162
|
sum: 1 / e
|
|
1163
1163
|
};
|
|
1164
|
-
for (let r = 1; r <=
|
|
1165
|
-
return n.sum * Math.exp(-t + e * Math.log(t) -
|
|
1164
|
+
for (let r = 1; r <= Bn && Math.abs(n.term) >= Math.abs(n.sum) * Rn; r += 1) n.term *= t / (e + r), n.sum += n.term;
|
|
1165
|
+
return n.sum * Math.exp(-t + e * Math.log(t) - V(e));
|
|
1166
1166
|
}
|
|
1167
|
-
function
|
|
1167
|
+
function er(e, t) {
|
|
1168
1168
|
let n = {
|
|
1169
1169
|
b: t + 1 - e,
|
|
1170
|
-
c: 1 /
|
|
1170
|
+
c: 1 / zn,
|
|
1171
1171
|
d: 0,
|
|
1172
1172
|
result: 0
|
|
1173
1173
|
};
|
|
1174
|
-
n.d = 1 /
|
|
1175
|
-
for (let t = 1; t <=
|
|
1174
|
+
n.d = 1 / B(n.b), n.result = n.d;
|
|
1175
|
+
for (let t = 1; t <= Bn; t += 1) {
|
|
1176
1176
|
let r = -t * (t - e);
|
|
1177
|
-
n.b += 2, n.d = 1 /
|
|
1177
|
+
n.b += 2, n.d = 1 / B(r * n.d + n.b), n.c = B(n.b + r / n.c);
|
|
1178
1178
|
let i = n.d * n.c;
|
|
1179
|
-
if (n.result *= i, Math.abs(i - 1) <
|
|
1179
|
+
if (n.result *= i, Math.abs(i - 1) < Rn) break;
|
|
1180
1180
|
}
|
|
1181
|
-
return Math.exp(-t + e * Math.log(t) -
|
|
1181
|
+
return Math.exp(-t + e * Math.log(t) - V(e)) * n.result;
|
|
1182
1182
|
}
|
|
1183
|
-
function
|
|
1184
|
-
return t <= 0 ? 1 : t < e + 1 ? 1 -
|
|
1183
|
+
function tr(e, t) {
|
|
1184
|
+
return t <= 0 ? 1 : t < e + 1 ? 1 - $n(e, t) : er(e, t);
|
|
1185
1185
|
}
|
|
1186
1186
|
//#endregion
|
|
1187
1187
|
//#region src/engine/functions/distribution-math.ts
|
|
1188
|
-
var
|
|
1189
|
-
function
|
|
1190
|
-
let t = .5 *
|
|
1188
|
+
var nr = Math.sqrt(2 * Math.PI), rr = (e) => e === 0 ? 0 : -e, ir = 1e-15, ar = 200, or = (e) => Math.exp(-.5 * e * e) / nr;
|
|
1189
|
+
function sr(e) {
|
|
1190
|
+
let t = .5 * tr(.5, .5 * e * e);
|
|
1191
1191
|
return e >= 0 ? t : 1 - t;
|
|
1192
1192
|
}
|
|
1193
|
-
var
|
|
1193
|
+
var cr = (e) => sr(-e), lr = [
|
|
1194
1194
|
-39.69683028665376,
|
|
1195
1195
|
220.9460984245205,
|
|
1196
1196
|
-275.9285104469687,
|
|
1197
1197
|
138.357751867269,
|
|
1198
1198
|
-30.66479806614716,
|
|
1199
1199
|
2.506628277459239
|
|
1200
|
-
],
|
|
1200
|
+
], ur = [
|
|
1201
1201
|
-54.47609879822406,
|
|
1202
1202
|
161.5858368580409,
|
|
1203
1203
|
-155.6989798598866,
|
|
1204
1204
|
66.80131188771972,
|
|
1205
1205
|
-13.28068155288572
|
|
1206
|
-
],
|
|
1206
|
+
], dr = [
|
|
1207
1207
|
-.007784894002430293,
|
|
1208
1208
|
-.3223964580411365,
|
|
1209
1209
|
-2.400758277161838,
|
|
1210
1210
|
-2.549732539343734,
|
|
1211
1211
|
4.374664141464968,
|
|
1212
1212
|
2.938163982698783
|
|
1213
|
-
],
|
|
1213
|
+
], fr = [
|
|
1214
1214
|
.007784695709041462,
|
|
1215
1215
|
.3224671290700398,
|
|
1216
1216
|
2.445134137142996,
|
|
1217
1217
|
3.754408661907416
|
|
1218
|
-
],
|
|
1219
|
-
function
|
|
1220
|
-
if (e <
|
|
1218
|
+
], pr = .02425, mr = (e, t) => e.reduce((e, n) => e * t + n, 0);
|
|
1219
|
+
function hr(e) {
|
|
1220
|
+
if (e < pr) {
|
|
1221
1221
|
let t = Math.sqrt(-2 * Math.log(e));
|
|
1222
|
-
return
|
|
1222
|
+
return mr(dr, t) / (mr(fr, t) * t + 1);
|
|
1223
1223
|
}
|
|
1224
1224
|
let t = e - .5, n = t * t;
|
|
1225
|
-
return
|
|
1225
|
+
return mr(lr, n) * t / (mr(ur, n) * n + 1);
|
|
1226
1226
|
}
|
|
1227
|
-
function
|
|
1228
|
-
if (e > .5) return
|
|
1229
|
-
let t = { z:
|
|
1227
|
+
function gr(e) {
|
|
1228
|
+
if (e > .5) return rr(gr(1 - e));
|
|
1229
|
+
let t = { z: hr(e) };
|
|
1230
1230
|
for (let n = 0; n < 3; n += 1) {
|
|
1231
|
-
let n = (
|
|
1231
|
+
let n = (cr(t.z) - e) / or(t.z);
|
|
1232
1232
|
t.z -= n / (1 + t.z * n / 2);
|
|
1233
1233
|
}
|
|
1234
1234
|
return t.z;
|
|
1235
1235
|
}
|
|
1236
|
-
var
|
|
1237
|
-
function
|
|
1238
|
-
return Math.exp(-
|
|
1236
|
+
var _r = (e) => rr(gr(e));
|
|
1237
|
+
function vr(e, t) {
|
|
1238
|
+
return Math.exp(-qn(t / 2, .5) - .5 * Math.log(t) - (t + 1) / 2 * Math.log1p(e * e / t));
|
|
1239
1239
|
}
|
|
1240
|
-
function
|
|
1240
|
+
function yr(e) {
|
|
1241
1241
|
if (e > 0) {
|
|
1242
1242
|
let t = Math.log1p(Math.exp(-e));
|
|
1243
1243
|
return {
|
|
@@ -1251,40 +1251,40 @@ function br(e) {
|
|
|
1251
1251
|
logComplement: -t
|
|
1252
1252
|
};
|
|
1253
1253
|
}
|
|
1254
|
-
function
|
|
1254
|
+
function H(e, t) {
|
|
1255
1255
|
if (e === 0) return .5;
|
|
1256
|
-
let { logX: n, logComplement: r } =
|
|
1256
|
+
let { logX: n, logComplement: r } = yr(Math.log(t) - 2 * Math.log(Math.abs(e))), i = .5 * Qn(n, r, t / 2, .5);
|
|
1257
1257
|
return e >= 0 ? i : 1 - i;
|
|
1258
1258
|
}
|
|
1259
|
-
var
|
|
1260
|
-
function
|
|
1259
|
+
var br = (e, t) => H(-e, t);
|
|
1260
|
+
function xr(e, t) {
|
|
1261
1261
|
let n = { high: 1 };
|
|
1262
|
-
for (;
|
|
1262
|
+
for (; H(n.high, t) > e && n.high < Number.MAX_VALUE / 2;) n.high *= 2;
|
|
1263
1263
|
return n.high;
|
|
1264
1264
|
}
|
|
1265
|
-
function
|
|
1266
|
-
let i =
|
|
1265
|
+
function Sr(e, t, n, r) {
|
|
1266
|
+
let i = H(e, n);
|
|
1267
1267
|
i > t ? r.low = e : r.high = e;
|
|
1268
|
-
let a = e + (Math.log(i) - Math.log(t)) * i /
|
|
1268
|
+
let a = e + (Math.log(i) - Math.log(t)) * i / vr(e, n);
|
|
1269
1269
|
return a > r.low && a < r.high && Number.isFinite(a) ? a : (r.low + r.high) / 2;
|
|
1270
1270
|
}
|
|
1271
|
-
function
|
|
1271
|
+
function Cr(e, t) {
|
|
1272
1272
|
if (e === .5) return 0;
|
|
1273
1273
|
let n = {
|
|
1274
1274
|
low: 0,
|
|
1275
|
-
high:
|
|
1276
|
-
}, r = { t: Math.min(Math.max(
|
|
1277
|
-
for (let i = 0; i <
|
|
1278
|
-
let i =
|
|
1275
|
+
high: xr(e, t)
|
|
1276
|
+
}, r = { t: Math.min(Math.max(_r(e), 0), n.high) };
|
|
1277
|
+
for (let i = 0; i < ar; i += 1) {
|
|
1278
|
+
let i = Sr(r.t, e, t, n), a = Math.abs(i - r.t) <= ir * Math.abs(i);
|
|
1279
1279
|
if (r.t = i, a) break;
|
|
1280
1280
|
}
|
|
1281
1281
|
return r.t;
|
|
1282
1282
|
}
|
|
1283
|
-
function
|
|
1284
|
-
return e > .5 ?
|
|
1283
|
+
function wr(e, t) {
|
|
1284
|
+
return e > .5 ? rr(Cr(1 - e, t)) : Cr(e, t);
|
|
1285
1285
|
}
|
|
1286
|
-
var
|
|
1287
|
-
function
|
|
1286
|
+
var Tr = (e, t) => rr(wr(e, t));
|
|
1287
|
+
function Er(e) {
|
|
1288
1288
|
let t = e.length, n = e.reduce((e, t) => e + t, 0) / t;
|
|
1289
1289
|
return {
|
|
1290
1290
|
count: t,
|
|
@@ -1292,96 +1292,96 @@ function Dr(e) {
|
|
|
1292
1292
|
variance: e.reduce((e, t) => e + (t - n) ** 2, 0) / (t - 1)
|
|
1293
1293
|
};
|
|
1294
1294
|
}
|
|
1295
|
-
function
|
|
1296
|
-
let { count: t, mean: n, variance: r } =
|
|
1295
|
+
function Dr(e) {
|
|
1296
|
+
let { count: t, mean: n, variance: r } = Er(e);
|
|
1297
1297
|
return {
|
|
1298
1298
|
t: n / Math.sqrt(r / t),
|
|
1299
1299
|
df: t - 1
|
|
1300
1300
|
};
|
|
1301
1301
|
}
|
|
1302
|
-
function
|
|
1302
|
+
function Or(e, t) {
|
|
1303
1303
|
let n = e.count + t.count - 2, r = ((e.count - 1) * e.variance + (t.count - 1) * t.variance) / n;
|
|
1304
1304
|
return {
|
|
1305
1305
|
t: (e.mean - t.mean) / Math.sqrt(r * (1 / e.count + 1 / t.count)),
|
|
1306
1306
|
df: n
|
|
1307
1307
|
};
|
|
1308
1308
|
}
|
|
1309
|
-
function
|
|
1309
|
+
function kr(e, t) {
|
|
1310
1310
|
let n = e.variance / e.count, r = t.variance / t.count, i = (n + r) ** 2 / (n ** 2 / (e.count - 1) + r ** 2 / (t.count - 1));
|
|
1311
1311
|
return {
|
|
1312
1312
|
t: (e.mean - t.mean) / Math.sqrt(n + r),
|
|
1313
1313
|
df: i
|
|
1314
1314
|
};
|
|
1315
1315
|
}
|
|
1316
|
-
var
|
|
1317
|
-
function
|
|
1318
|
-
let r = t.evaluateFormula(
|
|
1319
|
-
return S(r) ? r :
|
|
1316
|
+
var Ar = ({ t: e, df: t }, n) => n * H(Math.abs(e), t), jr = (e, t, n) => w(t.evaluateFormula(O(t, e, n)));
|
|
1317
|
+
function Mr(e, t, n) {
|
|
1318
|
+
let r = t.evaluateFormula(O(t, e, n));
|
|
1319
|
+
return S(r) ? r : z(r);
|
|
1320
1320
|
}
|
|
1321
|
-
function
|
|
1322
|
-
let r = Array.from({ length: n }, (n, r) =>
|
|
1321
|
+
function Nr(e, t, n) {
|
|
1322
|
+
let r = Array.from({ length: n }, (n, r) => jr(e, t, r));
|
|
1323
1323
|
return r.find((e) => typeof e != "number") ?? r.filter((e) => typeof e == "number");
|
|
1324
1324
|
}
|
|
1325
|
-
var
|
|
1326
|
-
let i =
|
|
1325
|
+
var U = (e, t) => (n, r) => {
|
|
1326
|
+
let i = Nr(n, r, e);
|
|
1327
1327
|
return Array.isArray(i) ? t(i) : i;
|
|
1328
|
-
},
|
|
1328
|
+
}, Pr = (e) => {
|
|
1329
1329
|
let t = Math.trunc(e);
|
|
1330
1330
|
return t >= 1 ? t : null;
|
|
1331
|
-
},
|
|
1332
|
-
let n =
|
|
1331
|
+
}, Fr = (e) => e > 0 && e < 1, Ir = (e, t) => {
|
|
1332
|
+
let n = Nr(e, t, 2);
|
|
1333
1333
|
if (!Array.isArray(n)) return n;
|
|
1334
|
-
let [r = 0, i = 0] = n, a =
|
|
1334
|
+
let [r = 0, i = 0] = n, a = Mr(e, t, 2);
|
|
1335
1335
|
if (typeof a != "boolean") return a;
|
|
1336
|
-
let o =
|
|
1337
|
-
return o === null ? b : a ?
|
|
1336
|
+
let o = Pr(i);
|
|
1337
|
+
return o === null ? b : a ? br(r, o) : vr(r, o);
|
|
1338
|
+
}, Lr = ([e = 0, t = 0]) => {
|
|
1339
|
+
let n = Pr(t);
|
|
1340
|
+
return n === null || e < 0 ? b : 2 * H(e, n);
|
|
1338
1341
|
}, Rr = ([e = 0, t = 0]) => {
|
|
1339
|
-
let n =
|
|
1340
|
-
return n === null
|
|
1342
|
+
let n = Pr(t);
|
|
1343
|
+
return n === null ? b : H(e, n);
|
|
1341
1344
|
}, zr = ([e = 0, t = 0]) => {
|
|
1342
|
-
let n =
|
|
1343
|
-
return n === null ? b :
|
|
1345
|
+
let n = Pr(t);
|
|
1346
|
+
return n === null || !Fr(e) ? b : Tr(e, n);
|
|
1344
1347
|
}, Br = ([e = 0, t = 0]) => {
|
|
1345
|
-
let n =
|
|
1346
|
-
return n === null ||
|
|
1347
|
-
}, Vr =
|
|
1348
|
-
|
|
1349
|
-
|
|
1350
|
-
|
|
1351
|
-
|
|
1352
|
-
|
|
1353
|
-
|
|
1354
|
-
|
|
1355
|
-
|
|
1356
|
-
|
|
1357
|
-
|
|
1358
|
-
}
|
|
1359
|
-
var qr = (e) => "t" in e && !(Number.isFinite(e.t) && Number.isFinite(e.df)) ? v : e, Jr = (e, t) => {
|
|
1360
|
-
let n = O(t), r = [n(D(t, e, 0)), n(D(t, e, 1))], i = r.flat().find(S);
|
|
1348
|
+
let n = Pr(t);
|
|
1349
|
+
return n === null || e <= 0 || e > 1 ? b : wr(e / 2, n);
|
|
1350
|
+
}, Vr = 1, Hr = 2, Ur = 3;
|
|
1351
|
+
function Wr([e, t]) {
|
|
1352
|
+
let n = tn(e, t);
|
|
1353
|
+
return "ys" in n ? Dr(n.ys.map((e, t) => e - (n.xs[t] ?? 0))) : n;
|
|
1354
|
+
}
|
|
1355
|
+
function Gr([e, t], n) {
|
|
1356
|
+
let [r, i] = [Er(Pt(e)), Er(Pt(t))];
|
|
1357
|
+
return n === Hr ? Or(r, i) : kr(r, i);
|
|
1358
|
+
}
|
|
1359
|
+
var Kr = (e) => "t" in e && !(Number.isFinite(e.t) && Number.isFinite(e.df)) ? v : e, qr = (e, t) => {
|
|
1360
|
+
let n = k(t), r = [n(O(t, e, 0)), n(O(t, e, 1))], i = r.flat().find(S);
|
|
1361
1361
|
if (i) return i;
|
|
1362
|
-
let a = [
|
|
1362
|
+
let a = [jr(e, t, 2), jr(e, t, 3)], o = a.find((e) => typeof e != "number");
|
|
1363
1363
|
if (o) return o;
|
|
1364
1364
|
let [s, c] = a.map((e) => Math.trunc(Number(e)));
|
|
1365
|
-
if (s !== 1 && s !== 2 || c === void 0 || c <
|
|
1366
|
-
let l =
|
|
1367
|
-
return "t" in l ?
|
|
1368
|
-
},
|
|
1369
|
-
let n =
|
|
1365
|
+
if (s !== 1 && s !== 2 || c === void 0 || c < Vr || c > Ur) return b;
|
|
1366
|
+
let l = Kr(c === Vr ? Wr(r) : Gr(r, c));
|
|
1367
|
+
return "t" in l ? Ar(l, s === 1 ? 1 : 2) : l;
|
|
1368
|
+
}, Jr = (e, t) => {
|
|
1369
|
+
let n = Nr(e, t, 3);
|
|
1370
1370
|
if (!Array.isArray(n)) return n;
|
|
1371
|
-
let [r = 0, i = 0, a = 0] = n, o =
|
|
1371
|
+
let [r = 0, i = 0, a = 0] = n, o = Mr(e, t, 3);
|
|
1372
1372
|
if (typeof o != "boolean") return o;
|
|
1373
1373
|
if (a <= 0) return b;
|
|
1374
1374
|
let s = (r - i) / a;
|
|
1375
|
-
return o ?
|
|
1376
|
-
},
|
|
1377
|
-
let n =
|
|
1375
|
+
return o ? cr(s) : or(s) / a;
|
|
1376
|
+
}, Yr = (e, t) => {
|
|
1377
|
+
let n = jr(e, t, 0);
|
|
1378
1378
|
if (typeof n != "number") return n;
|
|
1379
|
-
let r =
|
|
1380
|
-
return typeof r == "boolean" ? r ?
|
|
1381
|
-
},
|
|
1382
|
-
function
|
|
1379
|
+
let r = Mr(e, t, 1);
|
|
1380
|
+
return typeof r == "boolean" ? r ? cr(n) : or(n) : r;
|
|
1381
|
+
}, Xr = ([e = 0, t = 0, n = 0]) => !Fr(e) || n <= 0 ? b : t + n * gr(e), Zr = ([e = 0]) => Fr(e) ? gr(e) : b;
|
|
1382
|
+
function Qr([e = 0, t = 0, n = 0]) {
|
|
1383
1383
|
let r = Math.trunc(n);
|
|
1384
|
-
return !
|
|
1384
|
+
return !Fr(e) || t <= 0 || r < 1 ? b : {
|
|
1385
1385
|
alpha: e,
|
|
1386
1386
|
sd: t,
|
|
1387
1387
|
size: r
|
|
@@ -1390,7 +1390,7 @@ function $r([e = 0, t = 0, n = 0]) {
|
|
|
1390
1390
|
[
|
|
1391
1391
|
{
|
|
1392
1392
|
name: "T.TEST",
|
|
1393
|
-
handler:
|
|
1393
|
+
handler: qr,
|
|
1394
1394
|
minArgs: 4,
|
|
1395
1395
|
maxArgs: 4,
|
|
1396
1396
|
description: "Returns the p-value of a t-test: tails 1 or 2; type 1 paired, 2 equal variance, 3 unequal variance (Welch)",
|
|
@@ -1398,7 +1398,7 @@ function $r([e = 0, t = 0, n = 0]) {
|
|
|
1398
1398
|
},
|
|
1399
1399
|
{
|
|
1400
1400
|
name: "T.DIST",
|
|
1401
|
-
handler:
|
|
1401
|
+
handler: Ir,
|
|
1402
1402
|
minArgs: 3,
|
|
1403
1403
|
maxArgs: 3,
|
|
1404
1404
|
description: "Returns the left-tailed Student's t distribution (cumulative TRUE) or its density",
|
|
@@ -1406,7 +1406,7 @@ function $r([e = 0, t = 0, n = 0]) {
|
|
|
1406
1406
|
},
|
|
1407
1407
|
{
|
|
1408
1408
|
name: "T.DIST.2T",
|
|
1409
|
-
handler:
|
|
1409
|
+
handler: U(2, Lr),
|
|
1410
1410
|
minArgs: 2,
|
|
1411
1411
|
maxArgs: 2,
|
|
1412
1412
|
description: "Returns the two-tailed Student's t distribution for x >= 0",
|
|
@@ -1414,7 +1414,7 @@ function $r([e = 0, t = 0, n = 0]) {
|
|
|
1414
1414
|
},
|
|
1415
1415
|
{
|
|
1416
1416
|
name: "T.DIST.RT",
|
|
1417
|
-
handler:
|
|
1417
|
+
handler: U(2, Rr),
|
|
1418
1418
|
minArgs: 2,
|
|
1419
1419
|
maxArgs: 2,
|
|
1420
1420
|
description: "Returns the right-tailed Student's t distribution",
|
|
@@ -1422,7 +1422,7 @@ function $r([e = 0, t = 0, n = 0]) {
|
|
|
1422
1422
|
},
|
|
1423
1423
|
{
|
|
1424
1424
|
name: "T.INV",
|
|
1425
|
-
handler:
|
|
1425
|
+
handler: U(2, zr),
|
|
1426
1426
|
minArgs: 2,
|
|
1427
1427
|
maxArgs: 2,
|
|
1428
1428
|
description: "Returns the t value with the given left-tailed probability",
|
|
@@ -1430,7 +1430,7 @@ function $r([e = 0, t = 0, n = 0]) {
|
|
|
1430
1430
|
},
|
|
1431
1431
|
{
|
|
1432
1432
|
name: "T.INV.2T",
|
|
1433
|
-
handler:
|
|
1433
|
+
handler: U(2, Br),
|
|
1434
1434
|
minArgs: 2,
|
|
1435
1435
|
maxArgs: 2,
|
|
1436
1436
|
description: "Returns the t value whose two tails hold the given probability",
|
|
@@ -1438,7 +1438,7 @@ function $r([e = 0, t = 0, n = 0]) {
|
|
|
1438
1438
|
},
|
|
1439
1439
|
{
|
|
1440
1440
|
name: "NORM.DIST",
|
|
1441
|
-
handler:
|
|
1441
|
+
handler: Jr,
|
|
1442
1442
|
minArgs: 4,
|
|
1443
1443
|
maxArgs: 4,
|
|
1444
1444
|
description: "Returns the normal distribution (cumulative TRUE) or its density",
|
|
@@ -1446,7 +1446,7 @@ function $r([e = 0, t = 0, n = 0]) {
|
|
|
1446
1446
|
},
|
|
1447
1447
|
{
|
|
1448
1448
|
name: "NORM.S.DIST",
|
|
1449
|
-
handler:
|
|
1449
|
+
handler: Yr,
|
|
1450
1450
|
minArgs: 2,
|
|
1451
1451
|
maxArgs: 2,
|
|
1452
1452
|
description: "Returns the standard normal distribution (cumulative TRUE) or its density",
|
|
@@ -1454,7 +1454,7 @@ function $r([e = 0, t = 0, n = 0]) {
|
|
|
1454
1454
|
},
|
|
1455
1455
|
{
|
|
1456
1456
|
name: "NORM.INV",
|
|
1457
|
-
handler:
|
|
1457
|
+
handler: U(3, Xr),
|
|
1458
1458
|
minArgs: 3,
|
|
1459
1459
|
maxArgs: 3,
|
|
1460
1460
|
description: "Returns the value with the given cumulative normal probability",
|
|
@@ -1462,7 +1462,7 @@ function $r([e = 0, t = 0, n = 0]) {
|
|
|
1462
1462
|
},
|
|
1463
1463
|
{
|
|
1464
1464
|
name: "NORM.S.INV",
|
|
1465
|
-
handler:
|
|
1465
|
+
handler: U(1, Zr),
|
|
1466
1466
|
minArgs: 1,
|
|
1467
1467
|
maxArgs: 1,
|
|
1468
1468
|
description: "Returns the z with the given cumulative standard normal probability",
|
|
@@ -1470,9 +1470,9 @@ function $r([e = 0, t = 0, n = 0]) {
|
|
|
1470
1470
|
},
|
|
1471
1471
|
{
|
|
1472
1472
|
name: "CONFIDENCE.NORM",
|
|
1473
|
-
handler:
|
|
1474
|
-
let t =
|
|
1475
|
-
return "size" in t ?
|
|
1473
|
+
handler: U(3, (e) => {
|
|
1474
|
+
let t = Qr(e);
|
|
1475
|
+
return "size" in t ? _r(t.alpha / 2) * t.sd / Math.sqrt(t.size) : t;
|
|
1476
1476
|
}),
|
|
1477
1477
|
minArgs: 3,
|
|
1478
1478
|
maxArgs: 3,
|
|
@@ -1481,76 +1481,76 @@ function $r([e = 0, t = 0, n = 0]) {
|
|
|
1481
1481
|
},
|
|
1482
1482
|
{
|
|
1483
1483
|
name: "CONFIDENCE.T",
|
|
1484
|
-
handler:
|
|
1485
|
-
let t =
|
|
1486
|
-
return "size" in t ? t.size === 1 ? v :
|
|
1484
|
+
handler: U(3, (e) => {
|
|
1485
|
+
let t = Qr(e);
|
|
1486
|
+
return "size" in t ? t.size === 1 ? v : wr(t.alpha / 2, t.size - 1) * t.sd / Math.sqrt(t.size) : t;
|
|
1487
1487
|
}),
|
|
1488
1488
|
minArgs: 3,
|
|
1489
1489
|
maxArgs: 3,
|
|
1490
1490
|
description: "Returns the half-width of a confidence interval for a mean, using Student's t distribution",
|
|
1491
1491
|
examples: ["CONFIDENCE.T(0.05, 1, 50)"]
|
|
1492
1492
|
}
|
|
1493
|
-
].forEach((e) =>
|
|
1493
|
+
].forEach((e) => A.register({
|
|
1494
1494
|
...e,
|
|
1495
1495
|
category: "Statistical"
|
|
1496
1496
|
}));
|
|
1497
1497
|
//#endregion
|
|
1498
1498
|
//#region src/engine/functions/shape-math.ts
|
|
1499
|
-
var
|
|
1500
|
-
function
|
|
1501
|
-
let n =
|
|
1499
|
+
var $r = 3, ei = 4, ti = (e) => e.reduce((e, t) => e + t, 0) / e.length;
|
|
1500
|
+
function ni(e, t) {
|
|
1501
|
+
let n = ti(e), r = e.map((e) => e - n), i = Math.sqrt(r.reduce((e, t) => e + t * t, 0) / (e.length - 1));
|
|
1502
1502
|
return i === 0 ? null : r.reduce((e, n) => e + (n / i) ** t, 0);
|
|
1503
1503
|
}
|
|
1504
|
-
function
|
|
1505
|
-
let t = e.length, n = t <
|
|
1504
|
+
function ri(e) {
|
|
1505
|
+
let t = e.length, n = t < $r ? null : ni(e, 3);
|
|
1506
1506
|
return n === null ? v : t / ((t - 1) * (t - 2)) * n;
|
|
1507
1507
|
}
|
|
1508
|
-
function
|
|
1509
|
-
let t = e.length, n = t <
|
|
1508
|
+
function ii(e) {
|
|
1509
|
+
let t = e.length, n = t < ei ? null : ni(e, 4);
|
|
1510
1510
|
return n === null ? v : t * (t + 1) / ((t - 1) * (t - 2) * (t - 3)) * n - 3 * (t - 1) ** 2 / ((t - 2) * (t - 3));
|
|
1511
1511
|
}
|
|
1512
|
-
var
|
|
1513
|
-
function
|
|
1514
|
-
return e.length === 0 || e.some((e) => e <= 0) ? b : Math.exp(
|
|
1512
|
+
var ai = (e, t, n) => n > 0 ? (e - t) / n : b;
|
|
1513
|
+
function oi(e) {
|
|
1514
|
+
return e.length === 0 || e.some((e) => e <= 0) ? b : Math.exp(ti(e.map(Math.log)));
|
|
1515
1515
|
}
|
|
1516
|
-
function
|
|
1516
|
+
function si(e) {
|
|
1517
1517
|
return e.length === 0 || e.some((e) => e <= 0) ? b : e.length / e.reduce((e, t) => e + 1 / t, 0);
|
|
1518
1518
|
}
|
|
1519
|
-
function
|
|
1519
|
+
function ci(e, t) {
|
|
1520
1520
|
let n = e.length - 1, r = e.filter((e) => e < t).length;
|
|
1521
1521
|
if (e[r] === t) return r / n;
|
|
1522
1522
|
let i = e[r - 1] ?? t, a = e[r] ?? t;
|
|
1523
1523
|
return (r - 1 + (t - i) / (a - i)) / n;
|
|
1524
1524
|
}
|
|
1525
|
-
function
|
|
1525
|
+
function li(e, t, n) {
|
|
1526
1526
|
let r = Math.trunc(n);
|
|
1527
1527
|
if (r < 1 || e.length === 0) return b;
|
|
1528
1528
|
let i = Array.from(Float64Array.from(e).sort()), [a, o] = [i[0], i.at(-1)];
|
|
1529
1529
|
if (a === void 0 || o === void 0 || t < a || t > o) return x;
|
|
1530
1530
|
if (i.length === 1) return 1;
|
|
1531
1531
|
let s = 10 ** r;
|
|
1532
|
-
return Math.floor(
|
|
1532
|
+
return Math.floor(ci(i, t) * s * (1 + 2 ** -52 * 4)) / s;
|
|
1533
1533
|
}
|
|
1534
1534
|
//#endregion
|
|
1535
1535
|
//#region src/engine/functions/shape.ts
|
|
1536
|
-
var
|
|
1537
|
-
let r =
|
|
1536
|
+
var ui = 255, di = 3, fi = (e, t, n) => w(t.evaluateFormula(O(t, e, n))), pi = (e) => (t, n) => {
|
|
1537
|
+
let r = jt(t, n);
|
|
1538
1538
|
return Array.isArray(r) ? e(r) : r;
|
|
1539
1539
|
};
|
|
1540
1540
|
[
|
|
1541
1541
|
{
|
|
1542
1542
|
name: "SKEW",
|
|
1543
|
-
handler:
|
|
1543
|
+
handler: pi(ri),
|
|
1544
1544
|
minArgs: 1,
|
|
1545
|
-
maxArgs:
|
|
1545
|
+
maxArgs: ui,
|
|
1546
1546
|
description: "Returns the skewness of a sample",
|
|
1547
1547
|
examples: ["SKEW(A2:A100)"]
|
|
1548
1548
|
},
|
|
1549
1549
|
{
|
|
1550
1550
|
name: "KURT",
|
|
1551
|
-
handler:
|
|
1551
|
+
handler: pi(ii),
|
|
1552
1552
|
minArgs: 1,
|
|
1553
|
-
maxArgs:
|
|
1553
|
+
maxArgs: ui,
|
|
1554
1554
|
description: "Returns the excess kurtosis of a sample",
|
|
1555
1555
|
examples: ["KURT(A2:A100)"]
|
|
1556
1556
|
},
|
|
@@ -1561,10 +1561,10 @@ var di = 255, fi = 3, pi = (e, t, n) => w(t.evaluateFormula(D(t, e, n))), mi = (
|
|
|
1561
1561
|
0,
|
|
1562
1562
|
1,
|
|
1563
1563
|
2
|
|
1564
|
-
].map((n) =>
|
|
1564
|
+
].map((n) => fi(e, t, n)), r = n.find((e) => typeof e != "number");
|
|
1565
1565
|
if (r) return r;
|
|
1566
1566
|
let [i = 0, a = 0, o = 0] = n.map(Number);
|
|
1567
|
-
return
|
|
1567
|
+
return ai(i, a, o);
|
|
1568
1568
|
},
|
|
1569
1569
|
minArgs: 3,
|
|
1570
1570
|
maxArgs: 3,
|
|
@@ -1574,12 +1574,12 @@ var di = 255, fi = 3, pi = (e, t, n) => w(t.evaluateFormula(D(t, e, n))), mi = (
|
|
|
1574
1574
|
{
|
|
1575
1575
|
name: "PERCENTRANK.INC",
|
|
1576
1576
|
handler: (e, t) => {
|
|
1577
|
-
let n =
|
|
1577
|
+
let n = fi(e, t, 1);
|
|
1578
1578
|
if (typeof n != "number") return n;
|
|
1579
|
-
let r = e.length > 2 ?
|
|
1579
|
+
let r = e.length > 2 ? fi(e, t, 2) : di;
|
|
1580
1580
|
if (typeof r != "number") return r;
|
|
1581
|
-
let i =
|
|
1582
|
-
return Array.isArray(i) ?
|
|
1581
|
+
let i = jt([O(t, e, 0)], t);
|
|
1582
|
+
return Array.isArray(i) ? li(i, n, r) : i;
|
|
1583
1583
|
},
|
|
1584
1584
|
minArgs: 2,
|
|
1585
1585
|
maxArgs: 3,
|
|
@@ -1588,117 +1588,117 @@ var di = 255, fi = 3, pi = (e, t, n) => w(t.evaluateFormula(D(t, e, n))), mi = (
|
|
|
1588
1588
|
},
|
|
1589
1589
|
{
|
|
1590
1590
|
name: "GEOMEAN",
|
|
1591
|
-
handler:
|
|
1591
|
+
handler: pi(oi),
|
|
1592
1592
|
minArgs: 1,
|
|
1593
|
-
maxArgs:
|
|
1593
|
+
maxArgs: ui,
|
|
1594
1594
|
description: "Returns the geometric mean of positive numbers",
|
|
1595
1595
|
examples: ["GEOMEAN(A2:A20)"]
|
|
1596
1596
|
},
|
|
1597
1597
|
{
|
|
1598
1598
|
name: "HARMEAN",
|
|
1599
|
-
handler:
|
|
1599
|
+
handler: pi(si),
|
|
1600
1600
|
minArgs: 1,
|
|
1601
|
-
maxArgs:
|
|
1601
|
+
maxArgs: ui,
|
|
1602
1602
|
description: "Returns the harmonic mean of positive numbers",
|
|
1603
1603
|
examples: ["HARMEAN(A2:A20)"]
|
|
1604
1604
|
}
|
|
1605
|
-
].forEach((e) =>
|
|
1605
|
+
].forEach((e) => A.register({
|
|
1606
1606
|
...e,
|
|
1607
1607
|
category: "Statistical"
|
|
1608
1608
|
}));
|
|
1609
1609
|
//#endregion
|
|
1610
1610
|
//#region src/engine/math-ops.ts
|
|
1611
|
-
var
|
|
1612
|
-
if (
|
|
1613
|
-
let r = Math.abs(e) *
|
|
1614
|
-
return !Number.isFinite(r) || Number.isInteger(r) && r !== 0 ? e : Math.sign(e) * n(
|
|
1615
|
-
},
|
|
1611
|
+
var mi = 10, hi = (e) => mi ** +e, gi = 15, _i = (e) => Number(e.toPrecision(gi)), vi = (e, t, n) => {
|
|
1612
|
+
if (hi(t) === 0) return 0;
|
|
1613
|
+
let r = Math.abs(e) * hi(t);
|
|
1614
|
+
return !Number.isFinite(r) || Number.isInteger(r) && r !== 0 ? e : Math.sign(e) * n(_i(r)) / hi(t);
|
|
1615
|
+
}, yi = (e, t, n) => {
|
|
1616
1616
|
let r = e / t;
|
|
1617
|
-
return !Number.isFinite(r) || Number.isInteger(r) ? e :
|
|
1617
|
+
return !Number.isFinite(r) || Number.isInteger(r) ? e : _i(n(_i(r)) * t);
|
|
1618
1618
|
};
|
|
1619
|
+
function bi(e, t) {
|
|
1620
|
+
return vi(e, t, Math.round);
|
|
1621
|
+
}
|
|
1619
1622
|
function xi(e, t) {
|
|
1620
|
-
return
|
|
1623
|
+
return hi(t) === 0 && e !== 0 ? b : vi(e, t, Math.ceil);
|
|
1621
1624
|
}
|
|
1622
1625
|
function Si(e, t) {
|
|
1623
|
-
return
|
|
1626
|
+
return vi(e, t, Math.floor);
|
|
1624
1627
|
}
|
|
1625
|
-
|
|
1626
|
-
|
|
1628
|
+
var Ci = (e, t) => e === 0 || Math.sign(e) === Math.sign(t);
|
|
1629
|
+
function wi(e, t) {
|
|
1630
|
+
return t === 0 ? v : Ci(e, t) ? yi(e, t, Math.floor) : b;
|
|
1627
1631
|
}
|
|
1628
|
-
var wi = (e, t) => e === 0 || Math.sign(e) === Math.sign(t);
|
|
1629
1632
|
function Ti(e, t) {
|
|
1630
|
-
return t === 0 ?
|
|
1633
|
+
return t === 0 ? 0 : Ci(e, t) ? yi(e, t, Math.ceil) : b;
|
|
1631
1634
|
}
|
|
1632
1635
|
function Ei(e, t) {
|
|
1633
|
-
return t === 0 ? 0 : wi(e, t) ? bi(e, t, Math.ceil) : b;
|
|
1634
|
-
}
|
|
1635
|
-
function Di(e, t) {
|
|
1636
1636
|
return t === 0 ? v : e - t * Math.floor(e / t);
|
|
1637
1637
|
}
|
|
1638
|
-
function
|
|
1638
|
+
function Di(e, t) {
|
|
1639
1639
|
if (e < 0 && !Number.isInteger(t)) return b;
|
|
1640
1640
|
if (e === 0 && t < 0) return v;
|
|
1641
1641
|
if (e === 0 && t === 0) return b;
|
|
1642
1642
|
let n = e ** +t;
|
|
1643
1643
|
return Number.isFinite(n) ? n : b;
|
|
1644
1644
|
}
|
|
1645
|
-
function
|
|
1645
|
+
function Oi(e) {
|
|
1646
1646
|
return e <= 0 ? b : Math.log(e);
|
|
1647
1647
|
}
|
|
1648
|
-
function
|
|
1649
|
-
let n =
|
|
1648
|
+
function ki(e, t) {
|
|
1649
|
+
let n = Oi(e);
|
|
1650
1650
|
return S(n) ? n : t <= 0 || t === 1 ? b : n / Math.log(t);
|
|
1651
1651
|
}
|
|
1652
|
-
function
|
|
1652
|
+
function Ai(e) {
|
|
1653
1653
|
return e <= 0 ? b : Math.log10(e);
|
|
1654
1654
|
}
|
|
1655
|
-
function
|
|
1655
|
+
function ji(e) {
|
|
1656
1656
|
return e < 0 ? b : Math.sqrt(e);
|
|
1657
1657
|
}
|
|
1658
|
-
|
|
1658
|
+
A.register({
|
|
1659
1659
|
name: "ROUND",
|
|
1660
|
-
handler: (e, t) =>
|
|
1660
|
+
handler: (e, t) => bi(j(t.evaluateFormula(O(t, e, 0))), j(t.evaluateFormula(O(t, e, 1)))),
|
|
1661
1661
|
minArgs: 2,
|
|
1662
1662
|
maxArgs: 2,
|
|
1663
1663
|
description: "Rounds a number to a specified number of digits",
|
|
1664
1664
|
examples: ["ROUND(3.14159, 2)", "ROUND(A1, 0)"],
|
|
1665
1665
|
category: "Mathematical"
|
|
1666
|
-
}),
|
|
1666
|
+
}), A.register({
|
|
1667
1667
|
name: "ROUNDUP",
|
|
1668
|
-
handler: (e, t) =>
|
|
1668
|
+
handler: (e, t) => xi(j(t.evaluateFormula(O(t, e, 0))), j(t.evaluateFormula(O(t, e, 1)))),
|
|
1669
1669
|
minArgs: 2,
|
|
1670
1670
|
maxArgs: 2,
|
|
1671
1671
|
description: "Rounds a number up, away from zero",
|
|
1672
1672
|
examples: ["ROUNDUP(3.14159, 2)", "ROUNDUP(A1, 0)"],
|
|
1673
1673
|
category: "Mathematical"
|
|
1674
|
-
}),
|
|
1674
|
+
}), A.register({
|
|
1675
1675
|
name: "ROUNDDOWN",
|
|
1676
|
-
handler: (e, t) =>
|
|
1676
|
+
handler: (e, t) => Si(j(t.evaluateFormula(O(t, e, 0))), j(t.evaluateFormula(O(t, e, 1)))),
|
|
1677
1677
|
minArgs: 2,
|
|
1678
1678
|
maxArgs: 2,
|
|
1679
1679
|
description: "Rounds a number down, toward zero",
|
|
1680
1680
|
examples: ["ROUNDDOWN(3.14159, 2)", "ROUNDDOWN(A1, 0)"],
|
|
1681
1681
|
category: "Mathematical"
|
|
1682
|
-
}),
|
|
1682
|
+
}), A.register({
|
|
1683
1683
|
name: "FLOOR",
|
|
1684
|
-
handler: (e, t) =>
|
|
1684
|
+
handler: (e, t) => wi(j(t.evaluateFormula(O(t, e, 0))), j(t.evaluateFormula(O(t, e, 1)))),
|
|
1685
1685
|
minArgs: 2,
|
|
1686
1686
|
maxArgs: 2,
|
|
1687
1687
|
description: "Rounds a number down to the nearest multiple of significance",
|
|
1688
1688
|
examples: ["FLOOR(3.7, 1)", "FLOOR(24, 5)"],
|
|
1689
1689
|
category: "Mathematical"
|
|
1690
|
-
}),
|
|
1690
|
+
}), A.register({
|
|
1691
1691
|
name: "CEILING",
|
|
1692
|
-
handler: (e, t) =>
|
|
1692
|
+
handler: (e, t) => Ti(j(t.evaluateFormula(O(t, e, 0))), j(t.evaluateFormula(O(t, e, 1)))),
|
|
1693
1693
|
minArgs: 2,
|
|
1694
1694
|
maxArgs: 2,
|
|
1695
1695
|
description: "Rounds a number up to the nearest multiple of significance",
|
|
1696
1696
|
examples: ["CEILING(3.2, 1)", "CEILING(24, 5)"],
|
|
1697
1697
|
category: "Mathematical"
|
|
1698
|
-
}),
|
|
1698
|
+
}), A.register({
|
|
1699
1699
|
name: "ABS",
|
|
1700
1700
|
handler: (e, t) => {
|
|
1701
|
-
let n = w(t.evaluateFormula(
|
|
1701
|
+
let n = w(t.evaluateFormula(O(t, e, 0)));
|
|
1702
1702
|
return S(n) ? n : Math.abs(n);
|
|
1703
1703
|
},
|
|
1704
1704
|
minArgs: 1,
|
|
@@ -1706,34 +1706,34 @@ k.register({
|
|
|
1706
1706
|
description: "Returns the absolute value of a number",
|
|
1707
1707
|
examples: ["ABS(-5)", "ABS(A1)"],
|
|
1708
1708
|
category: "Mathematical"
|
|
1709
|
-
}),
|
|
1709
|
+
}), A.register({
|
|
1710
1710
|
name: "POWER",
|
|
1711
|
-
handler: (e, t) =>
|
|
1711
|
+
handler: (e, t) => Di(j(t.evaluateFormula(O(t, e, 0))), j(t.evaluateFormula(O(t, e, 1)))),
|
|
1712
1712
|
minArgs: 2,
|
|
1713
1713
|
maxArgs: 2,
|
|
1714
1714
|
description: "Returns the result of a number raised to a power",
|
|
1715
1715
|
examples: ["POWER(2, 3)", "POWER(A1, 2)"],
|
|
1716
1716
|
category: "Mathematical"
|
|
1717
|
-
}),
|
|
1717
|
+
}), A.register({
|
|
1718
1718
|
name: "SQRT",
|
|
1719
|
-
handler: (e, t) =>
|
|
1719
|
+
handler: (e, t) => ji(j(t.evaluateFormula(O(t, e, 0)))),
|
|
1720
1720
|
minArgs: 1,
|
|
1721
1721
|
maxArgs: 1,
|
|
1722
1722
|
description: "Returns the square root of a number",
|
|
1723
1723
|
examples: ["SQRT(16)", "SQRT(A1)"],
|
|
1724
1724
|
category: "Mathematical"
|
|
1725
|
-
}),
|
|
1725
|
+
}), A.register({
|
|
1726
1726
|
name: "MOD",
|
|
1727
|
-
handler: (e, t) =>
|
|
1727
|
+
handler: (e, t) => Ei(j(t.evaluateFormula(O(t, e, 0))), j(t.evaluateFormula(O(t, e, 1)))),
|
|
1728
1728
|
minArgs: 2,
|
|
1729
1729
|
maxArgs: 2,
|
|
1730
1730
|
description: "Returns the remainder after division",
|
|
1731
1731
|
examples: ["MOD(10, 3)", "MOD(A1, 2)"],
|
|
1732
1732
|
category: "Mathematical"
|
|
1733
|
-
}),
|
|
1733
|
+
}), A.register({
|
|
1734
1734
|
name: "INT",
|
|
1735
1735
|
handler: (e, t) => {
|
|
1736
|
-
let n =
|
|
1736
|
+
let n = j(t.evaluateFormula(O(t, e, 0)));
|
|
1737
1737
|
return Math.floor(n);
|
|
1738
1738
|
},
|
|
1739
1739
|
minArgs: 1,
|
|
@@ -1741,18 +1741,18 @@ k.register({
|
|
|
1741
1741
|
description: "Rounds a number down to the nearest integer",
|
|
1742
1742
|
examples: ["INT(3.7)", "INT(A1)"],
|
|
1743
1743
|
category: "Mathematical"
|
|
1744
|
-
}),
|
|
1744
|
+
}), A.register({
|
|
1745
1745
|
name: "TRUNC",
|
|
1746
|
-
handler: (e, t) =>
|
|
1746
|
+
handler: (e, t) => Si(j(t.evaluateFormula(O(t, e, 0))), e.length === 2 ? j(t.evaluateFormula(O(t, e, 1))) : 0),
|
|
1747
1747
|
minArgs: 1,
|
|
1748
1748
|
maxArgs: 2,
|
|
1749
1749
|
description: "Truncates a number to a specified number of decimal places",
|
|
1750
1750
|
examples: ["TRUNC(3.14159, 2)", "TRUNC(A1)"],
|
|
1751
1751
|
category: "Mathematical"
|
|
1752
|
-
}),
|
|
1752
|
+
}), A.register({
|
|
1753
1753
|
name: "SIGN",
|
|
1754
1754
|
handler: (e, t) => {
|
|
1755
|
-
let n = w(t.evaluateFormula(
|
|
1755
|
+
let n = w(t.evaluateFormula(O(t, e, 0)));
|
|
1756
1756
|
return S(n) ? n : Math.sign(n);
|
|
1757
1757
|
},
|
|
1758
1758
|
minArgs: 1,
|
|
@@ -1760,7 +1760,7 @@ k.register({
|
|
|
1760
1760
|
description: "Returns the sign of a number (1, 0, or -1)",
|
|
1761
1761
|
examples: ["SIGN(-5)", "SIGN(A1)"],
|
|
1762
1762
|
category: "Mathematical"
|
|
1763
|
-
}),
|
|
1763
|
+
}), A.register({
|
|
1764
1764
|
name: "PI",
|
|
1765
1765
|
handler: () => Math.PI,
|
|
1766
1766
|
minArgs: 0,
|
|
@@ -1768,10 +1768,10 @@ k.register({
|
|
|
1768
1768
|
description: "Returns the value of pi (3.14159...)",
|
|
1769
1769
|
examples: ["PI()", "PI()*2"],
|
|
1770
1770
|
category: "Mathematical"
|
|
1771
|
-
}),
|
|
1771
|
+
}), A.register({
|
|
1772
1772
|
name: "EXP",
|
|
1773
1773
|
handler: (e, t) => {
|
|
1774
|
-
let n =
|
|
1774
|
+
let n = j(t.evaluateFormula(O(t, e, 0)));
|
|
1775
1775
|
return Math.exp(n);
|
|
1776
1776
|
},
|
|
1777
1777
|
minArgs: 1,
|
|
@@ -1779,25 +1779,25 @@ k.register({
|
|
|
1779
1779
|
description: "Returns e raised to the power of a number",
|
|
1780
1780
|
examples: ["EXP(1)", "EXP(A1)"],
|
|
1781
1781
|
category: "Mathematical"
|
|
1782
|
-
}),
|
|
1782
|
+
}), A.register({
|
|
1783
1783
|
name: "LN",
|
|
1784
|
-
handler: (e, t) =>
|
|
1784
|
+
handler: (e, t) => Oi(j(t.evaluateFormula(O(t, e, 0)))),
|
|
1785
1785
|
minArgs: 1,
|
|
1786
1786
|
maxArgs: 1,
|
|
1787
1787
|
description: "Returns the natural logarithm of a number",
|
|
1788
1788
|
examples: ["LN(10)", "LN(A1)"],
|
|
1789
1789
|
category: "Mathematical"
|
|
1790
|
-
}),
|
|
1790
|
+
}), A.register({
|
|
1791
1791
|
name: "LOG",
|
|
1792
|
-
handler: (e, t) =>
|
|
1792
|
+
handler: (e, t) => ki(j(t.evaluateFormula(O(t, e, 0))), e.length === 2 ? j(t.evaluateFormula(O(t, e, 1))) : 10),
|
|
1793
1793
|
minArgs: 1,
|
|
1794
1794
|
maxArgs: 2,
|
|
1795
1795
|
description: "Returns the logarithm of a number to a specified base",
|
|
1796
1796
|
examples: ["LOG(100)", "LOG(8, 2)"],
|
|
1797
1797
|
category: "Mathematical"
|
|
1798
|
-
}),
|
|
1798
|
+
}), A.register({
|
|
1799
1799
|
name: "LOG10",
|
|
1800
|
-
handler: (e, t) =>
|
|
1800
|
+
handler: (e, t) => Ai(j(t.evaluateFormula(O(t, e, 0)))),
|
|
1801
1801
|
minArgs: 1,
|
|
1802
1802
|
maxArgs: 1,
|
|
1803
1803
|
description: "Returns the base-10 logarithm of a number",
|
|
@@ -1806,97 +1806,97 @@ k.register({
|
|
|
1806
1806
|
});
|
|
1807
1807
|
//#endregion
|
|
1808
1808
|
//#region src/engine/escapes.ts
|
|
1809
|
-
function
|
|
1809
|
+
function W(e, t) {
|
|
1810
1810
|
let n = { position: t };
|
|
1811
1811
|
for (; n.position > 0 && e[n.position - 1] === "\\";) --n.position;
|
|
1812
1812
|
return (t - n.position) % 2 == 1;
|
|
1813
1813
|
}
|
|
1814
1814
|
//#endregion
|
|
1815
1815
|
//#region src/engine/translateFormula.ts
|
|
1816
|
-
function
|
|
1817
|
-
return
|
|
1816
|
+
function Mi(e) {
|
|
1817
|
+
return na(Ki(e));
|
|
1818
1818
|
}
|
|
1819
|
-
function
|
|
1819
|
+
function Ni(e, t) {
|
|
1820
1820
|
return e === "" ? t : t === e ? "" : e;
|
|
1821
1821
|
}
|
|
1822
|
-
function
|
|
1822
|
+
function Pi(e) {
|
|
1823
1823
|
let t = e.split(""), n = [], r = "";
|
|
1824
1824
|
return t.forEach((t, i) => {
|
|
1825
|
-
(t === "\"" || t === "'") && !
|
|
1825
|
+
(t === "\"" || t === "'") && !W(e, i) && (r = Ni(r, t)), n.push(t === "&" && r === "" ? "+" : t);
|
|
1826
1826
|
}), n.join("");
|
|
1827
1827
|
}
|
|
1828
|
-
function
|
|
1828
|
+
function Fi(e) {
|
|
1829
1829
|
let t = [], n = { openQuote: "" };
|
|
1830
1830
|
return e.split("").forEach((r, i) => {
|
|
1831
|
-
(r === "\"" || r === "'") && !
|
|
1831
|
+
(r === "\"" || r === "'") && !W(e, i) && (n.openQuote = Ni(n.openQuote, r));
|
|
1832
1832
|
let a = t.at(-1);
|
|
1833
1833
|
n.openQuote === "" && (r === "-" || r === "+") && a === r && t.push(" "), t.push(r);
|
|
1834
1834
|
}), t.join("");
|
|
1835
1835
|
}
|
|
1836
|
-
function
|
|
1836
|
+
function Ii(e) {
|
|
1837
1837
|
return e.replace(/([^<>!])=([^=])/g, "$1==$2");
|
|
1838
1838
|
}
|
|
1839
|
-
function
|
|
1839
|
+
function Li(e) {
|
|
1840
1840
|
return /^[\d+\-*/(). ]+$/.test(e);
|
|
1841
1841
|
}
|
|
1842
|
-
function
|
|
1842
|
+
function Ri(e) {
|
|
1843
1843
|
return /^[\d+\-*/(). <>!=]+$/.test(e);
|
|
1844
1844
|
}
|
|
1845
|
-
var
|
|
1846
|
-
function
|
|
1847
|
-
let n = e[t], r = Array.from(e.slice(t + 1)).findIndex((r, i) => r === n && !
|
|
1845
|
+
var zi = /^(?:\d+\.?\d*|\.\d+)(?:[eE][+-]?\d+)?/, Bi = /^[A-Za-z_$][\w$]*/, Vi = /^\s+/;
|
|
1846
|
+
function Hi(e, t) {
|
|
1847
|
+
let n = e[t], r = Array.from(e.slice(t + 1)).findIndex((r, i) => r === n && !W(e, t + 1 + i));
|
|
1848
1848
|
return r === -1 ? e.length : t + r + 2;
|
|
1849
1849
|
}
|
|
1850
|
-
var
|
|
1850
|
+
var Ui = {
|
|
1851
1851
|
"(": "open",
|
|
1852
1852
|
")": "close",
|
|
1853
1853
|
"^": "caret"
|
|
1854
|
-
},
|
|
1854
|
+
}, Wi = [
|
|
1855
1855
|
{
|
|
1856
1856
|
kind: "number",
|
|
1857
|
-
pattern:
|
|
1857
|
+
pattern: zi
|
|
1858
1858
|
},
|
|
1859
1859
|
{
|
|
1860
1860
|
kind: "word",
|
|
1861
|
-
pattern:
|
|
1861
|
+
pattern: Bi
|
|
1862
1862
|
},
|
|
1863
1863
|
{
|
|
1864
1864
|
kind: "space",
|
|
1865
|
-
pattern:
|
|
1865
|
+
pattern: Vi
|
|
1866
1866
|
}
|
|
1867
1867
|
];
|
|
1868
|
-
function
|
|
1868
|
+
function Gi(e, t) {
|
|
1869
1869
|
let n = e[t];
|
|
1870
1870
|
if (n === "\"" || n === "'") return {
|
|
1871
1871
|
kind: "literal",
|
|
1872
|
-
text: e.slice(t,
|
|
1872
|
+
text: e.slice(t, Hi(e, t))
|
|
1873
1873
|
};
|
|
1874
|
-
let r = e.slice(t), i =
|
|
1874
|
+
let r = e.slice(t), i = Wi.map(({ kind: e, pattern: t }) => ({
|
|
1875
1875
|
kind: e,
|
|
1876
1876
|
text: t.exec(r)?.[0]
|
|
1877
1877
|
})).find((e) => e.text !== void 0);
|
|
1878
1878
|
return i?.text === void 0 ? {
|
|
1879
|
-
kind:
|
|
1879
|
+
kind: Ui[n] ?? "symbol",
|
|
1880
1880
|
text: n
|
|
1881
1881
|
} : {
|
|
1882
1882
|
kind: i.kind,
|
|
1883
1883
|
text: i.text
|
|
1884
1884
|
};
|
|
1885
1885
|
}
|
|
1886
|
-
function
|
|
1886
|
+
function Ki(e) {
|
|
1887
1887
|
let t = [], n = { position: 0 };
|
|
1888
1888
|
for (; n.position < e.length;) {
|
|
1889
|
-
let r =
|
|
1889
|
+
let r = Gi(e, n.position);
|
|
1890
1890
|
t.push(r), n.position += r.text.length;
|
|
1891
1891
|
}
|
|
1892
1892
|
return t;
|
|
1893
1893
|
}
|
|
1894
|
-
var
|
|
1895
|
-
function
|
|
1894
|
+
var qi = (e) => e?.kind === "symbol" && (e.text === "-" || e.text === "+");
|
|
1895
|
+
function Ji(e, t) {
|
|
1896
1896
|
let n = { depth: 0 };
|
|
1897
1897
|
return e.findIndex((e, r) => r < t ? !1 : (e.kind === "open" && (n.depth += 1), e.kind === "close" && --n.depth, n.depth === 0));
|
|
1898
1898
|
}
|
|
1899
|
-
function
|
|
1899
|
+
function Yi(e, t) {
|
|
1900
1900
|
let n = e[t];
|
|
1901
1901
|
if (n === void 0) return null;
|
|
1902
1902
|
if (n.kind === "number" || n.kind === "literal" || n.kind === "word") return {
|
|
@@ -1904,16 +1904,16 @@ function Xi(e, t) {
|
|
|
1904
1904
|
end: t + 1
|
|
1905
1905
|
};
|
|
1906
1906
|
if (n.kind !== "open") return null;
|
|
1907
|
-
let r =
|
|
1907
|
+
let r = Ji(e, t);
|
|
1908
1908
|
return r === -1 ? null : {
|
|
1909
|
-
text: `(${
|
|
1909
|
+
text: `(${na(e.slice(t + 1, r))})`,
|
|
1910
1910
|
end: r + 1
|
|
1911
1911
|
};
|
|
1912
1912
|
}
|
|
1913
|
-
function
|
|
1913
|
+
function Xi(e, t) {
|
|
1914
1914
|
let n = { index: t };
|
|
1915
|
-
for (;
|
|
1916
|
-
let r =
|
|
1915
|
+
for (; qi(e[n.index]) || e[n.index]?.kind === "space";) n.index += 1;
|
|
1916
|
+
let r = Yi(e, n.index);
|
|
1917
1917
|
if (r === null) return null;
|
|
1918
1918
|
let i = e.slice(t, n.index), a = i.filter((e) => e.kind === "symbol").map((e) => e.text), o = i.map((e) => e.text).join("");
|
|
1919
1919
|
return {
|
|
@@ -1923,24 +1923,24 @@ function Zi(e, t) {
|
|
|
1923
1923
|
end: r.end
|
|
1924
1924
|
};
|
|
1925
1925
|
}
|
|
1926
|
-
function
|
|
1926
|
+
function Zi(e, t) {
|
|
1927
1927
|
let n = { index: t };
|
|
1928
1928
|
for (; e[n.index]?.kind === "space";) n.index += 1;
|
|
1929
1929
|
return e[n.index]?.kind === "caret" ? n.index : -1;
|
|
1930
1930
|
}
|
|
1931
|
-
var
|
|
1932
|
-
function
|
|
1931
|
+
var Qi = (e) => e.signed ? `(${e.text})` : e.text;
|
|
1932
|
+
function $i(e, t) {
|
|
1933
1933
|
let n = {
|
|
1934
|
-
text:
|
|
1934
|
+
text: Qi(t),
|
|
1935
1935
|
end: t.end,
|
|
1936
1936
|
links: 0
|
|
1937
1937
|
};
|
|
1938
|
-
for (let t =
|
|
1939
|
-
let r =
|
|
1938
|
+
for (let t = Zi(e, n.end); t !== -1; t = Zi(e, n.end)) {
|
|
1939
|
+
let r = Xi(e, t + 1);
|
|
1940
1940
|
if (r === null) break;
|
|
1941
1941
|
let i = n.links === 0 ? n.text : `(${n.text})`;
|
|
1942
1942
|
Object.assign(n, {
|
|
1943
|
-
text: `${i}**${
|
|
1943
|
+
text: `${i}**${Qi(r)}`,
|
|
1944
1944
|
end: r.end,
|
|
1945
1945
|
links: n.links + 1
|
|
1946
1946
|
});
|
|
@@ -1950,14 +1950,14 @@ function ea(e, t) {
|
|
|
1950
1950
|
end: t.end
|
|
1951
1951
|
} : n;
|
|
1952
1952
|
}
|
|
1953
|
-
var
|
|
1954
|
-
function
|
|
1953
|
+
var ea = (e) => e === void 0 || e.kind === "open" || e.kind === "symbol" || e.kind === "caret", ta = (e, t) => e.kind !== "space" && (!qi(e) || ea(t));
|
|
1954
|
+
function na(e) {
|
|
1955
1955
|
let t = [], n = {
|
|
1956
1956
|
index: 0,
|
|
1957
1957
|
previous: void 0
|
|
1958
1958
|
};
|
|
1959
1959
|
for (; n.index < e.length;) {
|
|
1960
|
-
let r = e[n.index], i =
|
|
1960
|
+
let r = e[n.index], i = ta(r, n.previous) ? Xi(e, n.index) : null, a = i === null ? null : $i(e, i);
|
|
1961
1961
|
t.push(a === null ? r.kind === "caret" ? "**" : r.text : a.text);
|
|
1962
1962
|
let o = a === null ? n.index + 1 : a.end;
|
|
1963
1963
|
r.kind !== "space" && (n.previous = e[o - 1]), n.index = o;
|
|
@@ -1966,14 +1966,14 @@ function ra(e) {
|
|
|
1966
1966
|
}
|
|
1967
1967
|
//#endregion
|
|
1968
1968
|
//#region src/engine/concatPrecedence.ts
|
|
1969
|
-
var
|
|
1970
|
-
function
|
|
1969
|
+
var ra = (e) => e === "\"" || e === "'";
|
|
1970
|
+
function ia(e) {
|
|
1971
1971
|
let t = {
|
|
1972
1972
|
quote: "",
|
|
1973
1973
|
depth: 0
|
|
1974
1974
|
};
|
|
1975
1975
|
return e.split("").map((n, r) => {
|
|
1976
|
-
let i =
|
|
1976
|
+
let i = ra(n) && !W(e, r) && (t.quote === "" || t.quote === n), a = t.quote !== "" || i;
|
|
1977
1977
|
i && (t.quote = t.quote === "" ? n : ""), !a && n === ")" && --t.depth;
|
|
1978
1978
|
let o = {
|
|
1979
1979
|
char: n,
|
|
@@ -1983,24 +1983,24 @@ function aa(e) {
|
|
|
1983
1983
|
return !a && n === "(" && (t.depth += 1), o;
|
|
1984
1984
|
});
|
|
1985
1985
|
}
|
|
1986
|
-
var
|
|
1987
|
-
function
|
|
1988
|
-
let t =
|
|
1986
|
+
var aa = (e, t) => !e.inLiteral && t.includes(e.char);
|
|
1987
|
+
function oa(e) {
|
|
1988
|
+
let t = ia(e).flatMap((e, t) => e.depth === 0 && aa(e, "&") ? [t] : []);
|
|
1989
1989
|
return [-1, ...t].map((n, r) => e.slice(n + 1, t[r] ?? e.length));
|
|
1990
1990
|
}
|
|
1991
|
-
function
|
|
1992
|
-
let t =
|
|
1991
|
+
function sa(e) {
|
|
1992
|
+
let t = ia(e), n = t.flatMap((e, t) => e.depth === 0 && aa(e, "(") ? [t] : []), r = (e) => t.findIndex((t, n) => n > e && t.depth === 0 && aa(t, ")"));
|
|
1993
1993
|
return n.map((e) => ({
|
|
1994
1994
|
open: e,
|
|
1995
1995
|
close: r(e)
|
|
1996
1996
|
})).filter(({ close: e }) => e > 0);
|
|
1997
1997
|
}
|
|
1998
|
-
function
|
|
1999
|
-
let { pieces: t, cursor: n } =
|
|
1998
|
+
function ca(e) {
|
|
1999
|
+
let { pieces: t, cursor: n } = sa(e).reduce((t, { open: n, close: r }) => ({
|
|
2000
2000
|
pieces: [
|
|
2001
2001
|
...t.pieces,
|
|
2002
2002
|
e.slice(t.cursor, n + 1),
|
|
2003
|
-
|
|
2003
|
+
fa(e.slice(n + 1, r))
|
|
2004
2004
|
],
|
|
2005
2005
|
cursor: r
|
|
2006
2006
|
}), {
|
|
@@ -2009,54 +2009,54 @@ function la(e) {
|
|
|
2009
2009
|
});
|
|
2010
2010
|
return [...t, e.slice(n)].join("");
|
|
2011
2011
|
}
|
|
2012
|
-
var
|
|
2012
|
+
var la = {
|
|
2013
2013
|
true: "\"TRUE\"",
|
|
2014
2014
|
false: "\"FALSE\""
|
|
2015
2015
|
};
|
|
2016
|
-
function
|
|
2017
|
-
let t = e.trim(), n =
|
|
2018
|
-
return t.startsWith("(") && n.findIndex((e, t) => t > 0 && e.depth === 0 &&
|
|
2016
|
+
function ua(e) {
|
|
2017
|
+
let t = e.trim(), n = ia(t);
|
|
2018
|
+
return t.startsWith("(") && n.findIndex((e, t) => t > 0 && e.depth === 0 && aa(e, ")")) === t.length - 1 ? ua(t.slice(1, -1)) : t;
|
|
2019
|
+
}
|
|
2020
|
+
var da = (e) => la[ua(e)] ?? e;
|
|
2021
|
+
function fa(e) {
|
|
2022
|
+
let t = oa(e).map(ca);
|
|
2023
|
+
return t.length === 1 ? t[0] ?? "" : `(""+${t.map((e) => `(${da(e)})`).join("+")})`;
|
|
2019
2024
|
}
|
|
2020
|
-
var fa = (e) => ua[da(e)] ?? e;
|
|
2021
2025
|
function pa(e) {
|
|
2022
|
-
|
|
2023
|
-
|
|
2026
|
+
if (ia(e).some((e) => aa(e, "=<>"))) return Pi(e);
|
|
2027
|
+
let t = oa(e);
|
|
2028
|
+
return t.length > 1 && t.some((e) => e.trim() === "") ? Pi(e) : fa(e);
|
|
2024
2029
|
}
|
|
2025
2030
|
function ma(e) {
|
|
2026
|
-
|
|
2027
|
-
let t = sa(e);
|
|
2028
|
-
return t.length > 1 && t.some((e) => e.trim() === "") ? Fi(e) : pa(e);
|
|
2029
|
-
}
|
|
2030
|
-
function ha(e) {
|
|
2031
|
-
let t = sa(e), n = t.flatMap((e) => ca(e).flatMap(({ open: t, close: n }) => ha(e.slice(t + 1, n))));
|
|
2031
|
+
let t = oa(e), n = t.flatMap((e) => sa(e).flatMap(({ open: t, close: n }) => ma(e.slice(t + 1, n))));
|
|
2032
2032
|
return t.length > 1 ? [...t, ...n] : n;
|
|
2033
2033
|
}
|
|
2034
2034
|
//#endregion
|
|
2035
2035
|
//#region src/engine/textCollation.ts
|
|
2036
|
-
var
|
|
2037
|
-
function
|
|
2036
|
+
var ha = " \n\v\f\r _-,;:!?.'\"()[]{}@*/\\&#%`^+<=>|~$0123456789abcdefghijklmnopqrstuvwxyz", ga = 74, _a = 8, va = 14, ya = 31, ba = 127;
|
|
2037
|
+
function xa(e) {
|
|
2038
2038
|
let t = e.codePointAt(0) ?? 0;
|
|
2039
|
-
return t <=
|
|
2039
|
+
return t <= _a || t >= va && t <= ya || t === ba;
|
|
2040
2040
|
}
|
|
2041
|
-
var
|
|
2042
|
-
function
|
|
2043
|
-
let t =
|
|
2044
|
-
return t >= 0 ? t :
|
|
2041
|
+
var Sa = /^[\u0300-\u036f]$/u, Ca = /* @__PURE__ */ "34f.332.313 343.314.301 341.300 340.306.302.30c.30a.342.308.344.30b.303.307.338.327.328.304.30d 30e 312 315 31a 33d 33e 33f 346 34a 34b 34c 350 351 352 357 35b 35d 35e.316 317 318 319 31c 31d 31e 31f 320 329 32a 32b 32c 32f 333 33a 33b 33c 347 348 349 34d 34e 353 354 355 356 359 35a 35c 35f 362.336 337.335.305.309.30f.310.311.31b.321.322.323.324.325.326.32d.32e.330.331.334.339.345.358.360.361".split("."), wa = 0, Ta = "aeioucdhmrtvx", Ea = 867, Da = (e) => Ta.charAt((e.codePointAt(0) ?? 0) - Ea) || e, Oa = new Map(Ca.flatMap((e, t) => e.split(" ").map((e) => [String.fromCodePoint(Number.parseInt(e, 16)), t])));
|
|
2042
|
+
function ka(e) {
|
|
2043
|
+
let t = ha.indexOf(e);
|
|
2044
|
+
return t >= 0 ? t : ga + (e.codePointAt(0) ?? 0);
|
|
2045
2045
|
}
|
|
2046
|
-
function
|
|
2046
|
+
function Aa(e) {
|
|
2047
2047
|
let t = {
|
|
2048
2048
|
primary: [],
|
|
2049
2049
|
accents: []
|
|
2050
2050
|
};
|
|
2051
|
-
return Array.from(e.normalize("NFD")).filter((e) => !
|
|
2051
|
+
return Array.from(e.normalize("NFD")).filter((e) => !xa(e)).map(Da).forEach((e) => {
|
|
2052
2052
|
let n = t.accents.at(-1);
|
|
2053
|
-
if (
|
|
2054
|
-
let t =
|
|
2055
|
-
t !==
|
|
2056
|
-
} else t.primary.push(
|
|
2053
|
+
if (Sa.test(e) && n !== void 0) {
|
|
2054
|
+
let t = Oa.get(e) ?? wa;
|
|
2055
|
+
t !== wa && n.push(t);
|
|
2056
|
+
} else t.primary.push(ka(e.toLowerCase())), t.accents.push([]);
|
|
2057
2057
|
}), t;
|
|
2058
2058
|
}
|
|
2059
|
-
function
|
|
2059
|
+
function ja(e, t) {
|
|
2060
2060
|
let n = Math.min(e.length, t.length);
|
|
2061
2061
|
for (let r = 0; r < n; r += 1) {
|
|
2062
2062
|
let [n, i] = [e[r], t[r]];
|
|
@@ -2064,27 +2064,27 @@ function Ma(e, t) {
|
|
|
2064
2064
|
}
|
|
2065
2065
|
return e.length - t.length;
|
|
2066
2066
|
}
|
|
2067
|
-
function
|
|
2068
|
-
return e.reduce((e, n, r) => e ||
|
|
2067
|
+
function Ma(e, t) {
|
|
2068
|
+
return e.reduce((e, n, r) => e || ja(n, t[r] ?? []), 0);
|
|
2069
2069
|
}
|
|
2070
|
-
function
|
|
2071
|
-
let [n, r] = [
|
|
2072
|
-
return
|
|
2070
|
+
function Na(e, t) {
|
|
2071
|
+
let [n, r] = [Aa(e), Aa(t)];
|
|
2072
|
+
return ja(n.primary, r.primary) || Ma(n.accents, r.accents);
|
|
2073
2073
|
}
|
|
2074
2074
|
//#endregion
|
|
2075
2075
|
//#region src/engine/textComparison.ts
|
|
2076
|
-
var
|
|
2076
|
+
var Pa = [
|
|
2077
2077
|
"<>",
|
|
2078
2078
|
"<=",
|
|
2079
2079
|
">=",
|
|
2080
2080
|
"=",
|
|
2081
2081
|
"<",
|
|
2082
2082
|
">"
|
|
2083
|
-
],
|
|
2084
|
-
function
|
|
2083
|
+
], Fa = "=<>!";
|
|
2084
|
+
function Ia(e) {
|
|
2085
2085
|
let t = [];
|
|
2086
|
-
return
|
|
2087
|
-
if (e.inLiteral || e.depth !== 0 || !
|
|
2086
|
+
return ia(e).forEach((e, n) => {
|
|
2087
|
+
if (e.inLiteral || e.depth !== 0 || !Fa.includes(e.char)) return;
|
|
2088
2088
|
let r = t.at(-1);
|
|
2089
2089
|
r !== void 0 && r.start + r.text.length === n ? r.text += e.char : t.push({
|
|
2090
2090
|
start: n,
|
|
@@ -2092,12 +2092,12 @@ function La(e) {
|
|
|
2092
2092
|
});
|
|
2093
2093
|
}), t;
|
|
2094
2094
|
}
|
|
2095
|
-
var
|
|
2096
|
-
function
|
|
2097
|
-
let t =
|
|
2095
|
+
var La = (e) => Pa.some((t) => t === e);
|
|
2096
|
+
function Ra(e) {
|
|
2097
|
+
let t = Ia(e);
|
|
2098
2098
|
if (t.length === 0) return null;
|
|
2099
2099
|
let n = t.map((e) => e.text);
|
|
2100
|
-
if (!n.every(
|
|
2100
|
+
if (!n.every(La)) return null;
|
|
2101
2101
|
let r = [{
|
|
2102
2102
|
start: 0,
|
|
2103
2103
|
text: ""
|
|
@@ -2107,15 +2107,15 @@ function za(e) {
|
|
|
2107
2107
|
})).map(({ from: t, to: n }) => e.slice(t, n).trim());
|
|
2108
2108
|
return r.some((e) => e === "") ? null : {
|
|
2109
2109
|
operands: r,
|
|
2110
|
-
operators: n.filter(
|
|
2110
|
+
operators: n.filter(La)
|
|
2111
2111
|
};
|
|
2112
2112
|
}
|
|
2113
|
-
var
|
|
2114
|
-
function
|
|
2115
|
-
let n =
|
|
2116
|
-
return n === 0 ? typeof e == "number" && typeof t == "number" ? e - t : typeof e == "boolean" && typeof t == "boolean" ? Number(e) - Number(t) :
|
|
2113
|
+
var za = 0, Ba = 1, Va = 2, Ha = (e) => typeof e == "number" ? za : typeof e == "boolean" ? Va : Ba;
|
|
2114
|
+
function Ua(e, t) {
|
|
2115
|
+
let n = Ha(e) - Ha(t);
|
|
2116
|
+
return n === 0 ? typeof e == "number" && typeof t == "number" ? e - t : typeof e == "boolean" && typeof t == "boolean" ? Number(e) - Number(t) : Na(String(e), String(t)) : n;
|
|
2117
2117
|
}
|
|
2118
|
-
var
|
|
2118
|
+
var Wa = {
|
|
2119
2119
|
"=": (e) => e === 0,
|
|
2120
2120
|
"<>": (e) => e !== 0,
|
|
2121
2121
|
"<": (e) => e < 0,
|
|
@@ -2123,21 +2123,21 @@ var Ga = {
|
|
|
2123
2123
|
"<=": (e) => e <= 0,
|
|
2124
2124
|
">=": (e) => e >= 0
|
|
2125
2125
|
};
|
|
2126
|
-
function
|
|
2127
|
-
return
|
|
2126
|
+
function Ga(e, t, n) {
|
|
2127
|
+
return Wa[e](Ua(t, n));
|
|
2128
2128
|
}
|
|
2129
|
-
function
|
|
2130
|
-
return t.reduce((t, n, r) =>
|
|
2129
|
+
function Ka(e, t) {
|
|
2130
|
+
return t.reduce((t, n, r) => Ga(n, t, e[r + 1] ?? ""), e[0] ?? "");
|
|
2131
2131
|
}
|
|
2132
2132
|
//#endregion
|
|
2133
2133
|
//#region src/engine/blankOperands.ts
|
|
2134
|
-
var
|
|
2135
|
-
function
|
|
2136
|
-
return e.map((n, r) => t[r] ? r === 0 ?
|
|
2134
|
+
var qa = (e) => typeof e == "number" ? 0 : typeof e != "boolean" && "";
|
|
2135
|
+
function Ja(e, t) {
|
|
2136
|
+
return e.map((n, r) => t[r] ? r === 0 ? qa(e[1] ?? 0) : r === 1 && qa(e[0] ?? 0) : n);
|
|
2137
2137
|
}
|
|
2138
2138
|
//#endregion
|
|
2139
2139
|
//#region src/engine/condition.ts
|
|
2140
|
-
var
|
|
2140
|
+
var Ya = [
|
|
2141
2141
|
">=",
|
|
2142
2142
|
"<=",
|
|
2143
2143
|
"<>",
|
|
@@ -2147,18 +2147,18 @@ var Xa = [
|
|
|
2147
2147
|
">",
|
|
2148
2148
|
"<"
|
|
2149
2149
|
];
|
|
2150
|
-
function*
|
|
2150
|
+
function* Xa(e) {
|
|
2151
2151
|
let t = null;
|
|
2152
2152
|
for (let n = 0; n < e.length; n++) {
|
|
2153
2153
|
let r = e[n];
|
|
2154
2154
|
t === null ? r === "\"" || r === "'" ? t = r : yield n : r === "\\" ? n++ : r === t && (t = null);
|
|
2155
2155
|
}
|
|
2156
2156
|
}
|
|
2157
|
-
function
|
|
2157
|
+
function Za(e) {
|
|
2158
2158
|
let t = e.trim();
|
|
2159
2159
|
for (; t.startsWith("(") && t.endsWith(")");) {
|
|
2160
2160
|
let e = 0, n = !0;
|
|
2161
|
-
for (let r of
|
|
2161
|
+
for (let r of Xa(t)) {
|
|
2162
2162
|
let i = t[r];
|
|
2163
2163
|
if (i === "(") e++;
|
|
2164
2164
|
else if (i === ")") {
|
|
@@ -2174,16 +2174,16 @@ function Qa(e) {
|
|
|
2174
2174
|
}
|
|
2175
2175
|
return t;
|
|
2176
2176
|
}
|
|
2177
|
-
function
|
|
2178
|
-
let t =
|
|
2179
|
-
for (let e of
|
|
2177
|
+
function Qa(e) {
|
|
2178
|
+
let t = Za(e);
|
|
2179
|
+
for (let e of Xa(t)) for (let n of Ya) if (t.startsWith(n, e)) return {
|
|
2180
2180
|
left: t.slice(0, e).trim(),
|
|
2181
2181
|
operator: n,
|
|
2182
2182
|
right: t.slice(e + n.length).trim()
|
|
2183
2183
|
};
|
|
2184
2184
|
return null;
|
|
2185
2185
|
}
|
|
2186
|
-
function
|
|
2186
|
+
function $a(e) {
|
|
2187
2187
|
return e.length >= 2 && (e.startsWith("\"") && e.endsWith("\"") || e.startsWith("'") && e.endsWith("'")) ? {
|
|
2188
2188
|
value: e.slice(1, -1).replace(/\\(["'\\])/g, "$1"),
|
|
2189
2189
|
quoted: !0
|
|
@@ -2192,8 +2192,8 @@ function eo(e) {
|
|
|
2192
2192
|
quoted: !1
|
|
2193
2193
|
};
|
|
2194
2194
|
}
|
|
2195
|
-
function
|
|
2196
|
-
let { value: t, quoted: n } =
|
|
2195
|
+
function eo(e) {
|
|
2196
|
+
let { value: t, quoted: n } = $a(e.trim());
|
|
2197
2197
|
if (n) return t;
|
|
2198
2198
|
if (t === "") return "";
|
|
2199
2199
|
let r = t.toUpperCase();
|
|
@@ -2202,7 +2202,7 @@ function to(e) {
|
|
|
2202
2202
|
let i = Number(t);
|
|
2203
2203
|
return Number.isNaN(i) ? t : i;
|
|
2204
2204
|
}
|
|
2205
|
-
var
|
|
2205
|
+
var to = {
|
|
2206
2206
|
">=": ">=",
|
|
2207
2207
|
"<=": "<=",
|
|
2208
2208
|
"<>": "<>",
|
|
@@ -2212,98 +2212,132 @@ var no = {
|
|
|
2212
2212
|
">": ">",
|
|
2213
2213
|
"<": "<"
|
|
2214
2214
|
};
|
|
2215
|
-
function
|
|
2216
|
-
let [n, r] = [t(e.left), t(e.right)], i = e.left === "" ?
|
|
2217
|
-
return
|
|
2215
|
+
function no(e, t) {
|
|
2216
|
+
let [n, r] = [t(e.left), t(e.right)], i = e.left === "" ? qa(r) : n, a = e.right === "" ? qa(n) : r;
|
|
2217
|
+
return Ga(to[e.operator], i, a);
|
|
2218
2218
|
}
|
|
2219
|
-
function
|
|
2219
|
+
function ro(e) {
|
|
2220
2220
|
return typeof e == "boolean" ? e : typeof e == "number" ? e !== 0 : e !== "";
|
|
2221
2221
|
}
|
|
2222
|
-
function
|
|
2223
|
-
let n =
|
|
2224
|
-
return n ?
|
|
2222
|
+
function io(e, t) {
|
|
2223
|
+
let n = Qa(e);
|
|
2224
|
+
return n ? no(n, t) : ro(t(Za(e)));
|
|
2225
2225
|
}
|
|
2226
|
-
function
|
|
2226
|
+
function ao(e) {
|
|
2227
2227
|
if (e == null) return "\"\"";
|
|
2228
2228
|
let t = S(e) ? e.code : e;
|
|
2229
2229
|
return typeof t == "string" ? `"${t.replace(/\\/g, "\\\\").replace(/"/g, "\\\"")}"` : t.toString();
|
|
2230
2230
|
}
|
|
2231
2231
|
//#endregion
|
|
2232
2232
|
//#region src/engine/sheetReference.ts
|
|
2233
|
-
var
|
|
2234
|
-
function
|
|
2235
|
-
let [, t, n, r] = e.match(
|
|
2233
|
+
var oo = /^(?:'((?:[^']|'')+)'|([^!]+))!(.+)$/;
|
|
2234
|
+
function so(e) {
|
|
2235
|
+
let [, t, n, r] = e.match(oo) ?? [], i = t === void 0 ? n : t.replace(/''/g, "'");
|
|
2236
2236
|
return i === void 0 || r === void 0 ? null : {
|
|
2237
2237
|
sheetName: i,
|
|
2238
2238
|
ref: r
|
|
2239
2239
|
};
|
|
2240
2240
|
}
|
|
2241
|
-
function
|
|
2241
|
+
function co(e, t) {
|
|
2242
2242
|
let n = e.indexOf("'", t + 1);
|
|
2243
|
-
return n === -1 ? -1 : e[n + 1] === "'" ?
|
|
2243
|
+
return n === -1 ? -1 : e[n + 1] === "'" ? co(e, n + 1) : n + 1;
|
|
2244
2244
|
}
|
|
2245
2245
|
//#endregion
|
|
2246
2246
|
//#region src/engine/concatOperand.ts
|
|
2247
|
-
var
|
|
2248
|
-
function
|
|
2247
|
+
var lo = (e) => e.trim() === "";
|
|
2248
|
+
function uo(e, t) {
|
|
2249
2249
|
let n = { at: t - 1 };
|
|
2250
|
-
for (; n.at >= 0 && (
|
|
2250
|
+
for (; n.at >= 0 && (lo(e[n.at] ?? "") || e[n.at] === "(");) --n.at;
|
|
2251
2251
|
return n.at < 0 ? "" : e[n.at] ?? "";
|
|
2252
2252
|
}
|
|
2253
|
-
function
|
|
2253
|
+
function fo(e, t) {
|
|
2254
2254
|
let n = { at: t };
|
|
2255
|
-
for (; n.at < e.length && (
|
|
2255
|
+
for (; n.at < e.length && (lo(e[n.at] ?? "") || e[n.at] === ")");) n.at += 1;
|
|
2256
2256
|
return n.at >= e.length ? "" : e[n.at] ?? "";
|
|
2257
2257
|
}
|
|
2258
|
-
var
|
|
2259
|
-
function
|
|
2260
|
-
let r =
|
|
2261
|
-
return
|
|
2258
|
+
var po = (e) => e === "" || e === "&";
|
|
2259
|
+
function mo(e, t, n) {
|
|
2260
|
+
let r = uo(e, t), i = fo(e, n);
|
|
2261
|
+
return po(r) && po(i) && (r === "&" || i === "&");
|
|
2262
2262
|
}
|
|
2263
2263
|
//#endregion
|
|
2264
2264
|
//#region src/engine/formulaError.ts
|
|
2265
|
-
var
|
|
2265
|
+
var G = {
|
|
2266
2266
|
div_zero: "#DIV/0!",
|
|
2267
2267
|
invalid_ref: "#REF!",
|
|
2268
2268
|
syntax: "#NAME?",
|
|
2269
2269
|
unknown: "#ERROR!"
|
|
2270
|
-
},
|
|
2271
|
-
[
|
|
2272
|
-
[
|
|
2273
|
-
[
|
|
2274
|
-
},
|
|
2270
|
+
}, ho = {
|
|
2271
|
+
[G.div_zero]: "div_zero",
|
|
2272
|
+
[G.invalid_ref]: "invalid_ref",
|
|
2273
|
+
[G.syntax]: "syntax"
|
|
2274
|
+
}, K = class extends Error {
|
|
2275
2275
|
errorType;
|
|
2276
2276
|
display;
|
|
2277
2277
|
constructor(e, t, n) {
|
|
2278
2278
|
super(n ?? t), this.errorType = e, this.display = t, this.name = "FormulaError";
|
|
2279
2279
|
}
|
|
2280
|
-
},
|
|
2280
|
+
}, go = (e) => e instanceof K, _o = () => new K("div_zero", G.div_zero, "Division by zero"), vo = (e) => new K("invalid_ref", G.invalid_ref, `Invalid reference: ${e}`), yo = (e) => new K("syntax", G.syntax, `Unknown function: ${e}`), bo = (e) => new K("unknown", G.unknown, e), xo = (e) => new K(ho[e] ?? "unknown", e, `Propagated error: ${e}`), So = (e) => go(e) ? {
|
|
2281
2281
|
type: e.errorType,
|
|
2282
2282
|
display: e.display
|
|
2283
2283
|
} : {
|
|
2284
2284
|
type: "unknown",
|
|
2285
|
-
display:
|
|
2286
|
-
},
|
|
2287
|
-
function
|
|
2288
|
-
return e.split(
|
|
2289
|
-
}
|
|
2290
|
-
var
|
|
2291
|
-
function
|
|
2292
|
-
let [, t] = e.trim().match(
|
|
2285
|
+
display: G.unknown
|
|
2286
|
+
}, Co = /("(?:[^"\\]|\\.|"")*"?|'(?:[^']|'')*'?)/, wo = /(?<![\w$.!])(TRUE|FALSE)(?![\w$.]|\s*[(!])/gi;
|
|
2287
|
+
function To(e) {
|
|
2288
|
+
return e.split(Co).map((e, t) => t % 2 == 1 ? e : e.replace(wo, (e) => e.toLowerCase())).join("");
|
|
2289
|
+
}
|
|
2290
|
+
var Eo = /^\(*\s*(true|false)\s*\)*$/;
|
|
2291
|
+
function Do(e) {
|
|
2292
|
+
let [, t] = e.trim().match(Eo) ?? [];
|
|
2293
2293
|
return t === void 0 ? null : t === "true";
|
|
2294
2294
|
}
|
|
2295
|
-
function
|
|
2295
|
+
function Oo(e) {
|
|
2296
2296
|
return /["']/.test(e) ? e : e.replace(/\btrue\b/g, "1").replace(/\bfalse\b/g, "0");
|
|
2297
2297
|
}
|
|
2298
2298
|
//#endregion
|
|
2299
|
-
//#region src/engine/
|
|
2300
|
-
var
|
|
2299
|
+
//#region src/engine/textArithmetic.ts
|
|
2300
|
+
var ko = "+-*/^";
|
|
2301
|
+
function Ao(e, t) {
|
|
2302
|
+
let n = e.slice(t + 1).split("").findIndex((e, t, n) => e === "\"" && !jo(n, t));
|
|
2303
|
+
return n === -1 ? e.length : t + 1 + n + 1;
|
|
2304
|
+
}
|
|
2305
|
+
function jo(e, t) {
|
|
2306
|
+
let n = e.slice(0, t).reverse().findIndex((e) => e !== "\\");
|
|
2307
|
+
return (n === -1 ? t : n) % 2 == 1;
|
|
2308
|
+
}
|
|
2301
2309
|
function Mo(e) {
|
|
2310
|
+
let t = [], n = { index: 0 };
|
|
2311
|
+
for (; n.index < e.length;) if (e[n.index] === "\"") {
|
|
2312
|
+
let r = Ao(e, n.index);
|
|
2313
|
+
t.push({
|
|
2314
|
+
start: n.index,
|
|
2315
|
+
end: r
|
|
2316
|
+
}), n.index = r;
|
|
2317
|
+
} else n.index += 1;
|
|
2318
|
+
return t;
|
|
2319
|
+
}
|
|
2320
|
+
var No = (e) => e !== void 0 && ko.includes(e);
|
|
2321
|
+
function Po(e) {
|
|
2322
|
+
let t = Mo(e), n = [], r = { at: 0 };
|
|
2323
|
+
for (let { start: i, end: a } of t) {
|
|
2324
|
+
let t = e.slice(0, i).trimEnd().at(-1), o = e.slice(a).trimStart()[0];
|
|
2325
|
+
if (!No(t) && !No(o)) continue;
|
|
2326
|
+
let s = Ie(e.slice(i + 1, a - 1).replace(/\\(.)/g, "$1"));
|
|
2327
|
+
if (s === null) return y;
|
|
2328
|
+
n.push(e.slice(r.at, i), `(${s})`), r.at = a;
|
|
2329
|
+
}
|
|
2330
|
+
return n.push(e.slice(r.at)), n.join("");
|
|
2331
|
+
}
|
|
2332
|
+
//#endregion
|
|
2333
|
+
//#region src/engine/evaluator.ts
|
|
2334
|
+
var Fo = RegExp(`^(${at})\\((.*)\\)$`, "i"), Io = RegExp(`^(${at})\\(`, "i");
|
|
2335
|
+
function Lo(e) {
|
|
2302
2336
|
if (e == null) return "0";
|
|
2303
2337
|
let t = S(e) ? e.code : e;
|
|
2304
2338
|
return typeof t == "string" ? `"${t.replace(/\\/g, "\\\\").replace(/"/g, "\\\"")}"` : t.toString();
|
|
2305
2339
|
}
|
|
2306
|
-
function
|
|
2340
|
+
function Ro(e) {
|
|
2307
2341
|
let t = "", n = null;
|
|
2308
2342
|
for (let r = 0; r < e.length; r++) {
|
|
2309
2343
|
let i = e[r];
|
|
@@ -2317,11 +2351,11 @@ function No(e) {
|
|
|
2317
2351
|
}
|
|
2318
2352
|
return t;
|
|
2319
2353
|
}
|
|
2320
|
-
function
|
|
2321
|
-
let t =
|
|
2354
|
+
function zo(e) {
|
|
2355
|
+
let t = Ro(e).replace(/\b(?:true|false)\b/g, "");
|
|
2322
2356
|
return /^[\d+\-*/(). "']*$/.test(t);
|
|
2323
2357
|
}
|
|
2324
|
-
function
|
|
2358
|
+
function Bo(e, t) {
|
|
2325
2359
|
let n = e[t], r = t + 1;
|
|
2326
2360
|
for (; r < e.length;) if (e[r] === "\\") r += 2;
|
|
2327
2361
|
else {
|
|
@@ -2330,13 +2364,13 @@ function Fo(e, t) {
|
|
|
2330
2364
|
}
|
|
2331
2365
|
return e.length;
|
|
2332
2366
|
}
|
|
2333
|
-
function
|
|
2334
|
-
let n =
|
|
2367
|
+
function Vo(e, t) {
|
|
2368
|
+
let n = co(e, t);
|
|
2335
2369
|
if (n === -1 || e[n] !== "!") return null;
|
|
2336
2370
|
let r = e.substring(n + 1).match(/^(\$?[A-Z]+\$?\d+)/);
|
|
2337
2371
|
return r ? e.substring(t, n + 1 + r[0].length) : null;
|
|
2338
2372
|
}
|
|
2339
|
-
function
|
|
2373
|
+
function Ho(e, t) {
|
|
2340
2374
|
let n = e.substring(t), r = n.match(/^([A-Z][A-Z0-9]*)!/i);
|
|
2341
2375
|
if (r) {
|
|
2342
2376
|
let e = n.substring(r[0].length).match(/^(\$?[A-Z]+\$?\d+)/);
|
|
@@ -2345,23 +2379,23 @@ function Lo(e, t) {
|
|
|
2345
2379
|
let i = n.match(/^(\$?[A-Z]+\$?\d+)/);
|
|
2346
2380
|
return i ? i[0] : null;
|
|
2347
2381
|
}
|
|
2348
|
-
function
|
|
2382
|
+
function Uo(e) {
|
|
2349
2383
|
let t = [], n = 0;
|
|
2350
2384
|
for (; n < e.length;) {
|
|
2351
2385
|
let r = e[n];
|
|
2352
2386
|
if (r === "\"") {
|
|
2353
|
-
n =
|
|
2387
|
+
n = Bo(e, n);
|
|
2354
2388
|
continue;
|
|
2355
2389
|
}
|
|
2356
2390
|
if (r === "'") {
|
|
2357
|
-
let r =
|
|
2391
|
+
let r = Vo(e, n);
|
|
2358
2392
|
r ? (t.push({
|
|
2359
2393
|
ref: r,
|
|
2360
2394
|
start: n
|
|
2361
|
-
}), n += r.length) : n =
|
|
2395
|
+
}), n += r.length) : n = Bo(e, n);
|
|
2362
2396
|
continue;
|
|
2363
2397
|
}
|
|
2364
|
-
let i =
|
|
2398
|
+
let i = Ho(e, n);
|
|
2365
2399
|
i ? (t.push({
|
|
2366
2400
|
ref: i,
|
|
2367
2401
|
start: n
|
|
@@ -2369,73 +2403,83 @@ function Ro(e) {
|
|
|
2369
2403
|
}
|
|
2370
2404
|
return t;
|
|
2371
2405
|
}
|
|
2372
|
-
function
|
|
2406
|
+
function Wo(e, t, n) {
|
|
2373
2407
|
return [...t].reverse().reduce((e, { ref: t, start: r }) => e.slice(0, r) + n(t, r) + e.slice(r + t.length), e);
|
|
2374
2408
|
}
|
|
2375
|
-
function
|
|
2409
|
+
function Go(e) {
|
|
2376
2410
|
let t = [], n = "", r = 0, i = !1, a = "";
|
|
2377
2411
|
for (let o = 0; o < e.length; o++) {
|
|
2378
2412
|
let s = e[o];
|
|
2379
|
-
(s === "\"" || s === "'") && !
|
|
2413
|
+
(s === "\"" || s === "'") && !W(e, o) ? (i ? s === a && (i = !1, a = "") : (i = !0, a = s), n += s) : !i && (s === "(" && r++, s === ")" && r--, s === "," && r === 0) ? (t.push(n.trim()), n = "") : n += s;
|
|
2380
2414
|
}
|
|
2381
2415
|
return n.trim() && t.push(n.trim()), t;
|
|
2382
2416
|
}
|
|
2383
|
-
function
|
|
2417
|
+
function Ko(e) {
|
|
2384
2418
|
let t;
|
|
2385
2419
|
try {
|
|
2386
|
-
t = Function(`return (${
|
|
2420
|
+
t = Function(`return (${Fi(e)})`)();
|
|
2387
2421
|
} catch {
|
|
2388
|
-
throw
|
|
2422
|
+
throw bo();
|
|
2389
2423
|
}
|
|
2390
2424
|
if (typeof t == "number") {
|
|
2391
|
-
if (!Number.isFinite(t)) throw
|
|
2425
|
+
if (!Number.isFinite(t)) throw _o();
|
|
2392
2426
|
return t;
|
|
2393
2427
|
}
|
|
2394
2428
|
if (typeof t == "string" || typeof t == "boolean") return t;
|
|
2395
|
-
throw
|
|
2429
|
+
throw bo();
|
|
2396
2430
|
}
|
|
2397
|
-
function
|
|
2431
|
+
function qo(e) {
|
|
2398
2432
|
if (!e.includes("&")) return null;
|
|
2399
|
-
let t =
|
|
2400
|
-
return
|
|
2433
|
+
let t = pa(e);
|
|
2434
|
+
return zo(t) ? (ma(e).filter(Li).forEach(Ko), Ko(t)) : null;
|
|
2401
2435
|
}
|
|
2402
|
-
var
|
|
2403
|
-
function
|
|
2404
|
-
let t =
|
|
2436
|
+
var Jo = /^\(*\s*(true|false)\s*\)*$/i, Yo = (e) => (e.startsWith("\"") || e.startsWith("'")) && e.endsWith(e[0] ?? "") && Bo(e, 0) === e.length;
|
|
2437
|
+
function Xo(e) {
|
|
2438
|
+
let t = Jo.exec(e)?.[1];
|
|
2405
2439
|
if (t !== void 0) return t.toLowerCase() === "true";
|
|
2406
|
-
let n =
|
|
2407
|
-
return n === null ?
|
|
2440
|
+
let n = qo(e);
|
|
2441
|
+
return n === null ? Li(e) || Yo(Za(e)) ? Ko(e) : null : n;
|
|
2408
2442
|
}
|
|
2409
|
-
var
|
|
2410
|
-
function
|
|
2411
|
-
let n =
|
|
2443
|
+
var Zo = (e) => e !== null;
|
|
2444
|
+
function Qo(e, t) {
|
|
2445
|
+
let n = Ra(e), r = t.isCellEmpty;
|
|
2412
2446
|
return !n || !r ? null : n.operands.map((e) => {
|
|
2413
|
-
let t =
|
|
2447
|
+
let t = $o(e);
|
|
2414
2448
|
return t !== null && r(t);
|
|
2415
2449
|
});
|
|
2416
2450
|
}
|
|
2417
|
-
function
|
|
2418
|
-
let t =
|
|
2451
|
+
function $o(e) {
|
|
2452
|
+
let t = Za(e).trim(), [n, ...r] = Uo(t);
|
|
2419
2453
|
return n && r.length === 0 && n.start === 0 && n.ref.length === t.length ? n.ref : null;
|
|
2420
2454
|
}
|
|
2421
|
-
function
|
|
2422
|
-
|
|
2423
|
-
|
|
2424
|
-
|
|
2455
|
+
function es(e, t) {
|
|
2456
|
+
return sa(e).filter(({ open: t, close: n }) => {
|
|
2457
|
+
let r = e.slice(t + 1, n).trim();
|
|
2458
|
+
return !/[\w.$]$/.test(e.slice(0, t)) && r !== "" && !r.includes(":") && $o(r) === null;
|
|
2459
|
+
}).reduceRight((n, { open: r, close: i }) => {
|
|
2460
|
+
let a = t.evaluateFormula(e.slice(r + 1, i));
|
|
2461
|
+
if (S(a)) throw xo(a.code);
|
|
2462
|
+
return n.slice(0, r) + Lo(a) + n.slice(i + 1);
|
|
2463
|
+
}, e);
|
|
2464
|
+
}
|
|
2465
|
+
function ts(e, t) {
|
|
2466
|
+
let n = To(e), r = n.trim();
|
|
2467
|
+
if (Yo(r)) {
|
|
2468
|
+
let e = r.slice(1, -1), n = Xe(e, t.preferDDMMYYYY);
|
|
2425
2469
|
return n === null ? e : n;
|
|
2426
2470
|
}
|
|
2427
|
-
let [, i, a] = n.match(
|
|
2428
|
-
if (i !== void 0 && a !== void 0 &&
|
|
2471
|
+
let [, i, a] = n.match(Fo) ?? [];
|
|
2472
|
+
if (i !== void 0 && a !== void 0 && ot(i)) {
|
|
2429
2473
|
let e = 0, n = !0;
|
|
2430
2474
|
for (let t of a) if (t === "(") e++;
|
|
2431
2475
|
else if (t === ")" && (e--, e < 0)) {
|
|
2432
2476
|
n = !1;
|
|
2433
2477
|
break;
|
|
2434
2478
|
}
|
|
2435
|
-
let r = i.toUpperCase(), o =
|
|
2479
|
+
let r = i.toUpperCase(), o = A.get(r);
|
|
2436
2480
|
if (o && n) {
|
|
2437
|
-
let e =
|
|
2438
|
-
if (o.minArgs !== void 0 && e.length < o.minArgs) throw
|
|
2481
|
+
let e = Go(a);
|
|
2482
|
+
if (o.minArgs !== void 0 && e.length < o.minArgs) throw rt(r, o.minArgs);
|
|
2439
2483
|
if (o.maxArgs !== void 0 && e.length > o.maxArgs) throw Error(`${r} accepts at most ${o.maxArgs} argument${o.maxArgs === 1 ? "" : "s"}`);
|
|
2440
2484
|
return o.handler(e, {
|
|
2441
2485
|
functionName: r,
|
|
@@ -2446,70 +2490,74 @@ function Yo(e, t) {
|
|
|
2446
2490
|
countFilledCells: t.countFilledCells,
|
|
2447
2491
|
evaluateFormula: t.evaluateFormula,
|
|
2448
2492
|
isBlankReference: (e) => {
|
|
2449
|
-
let n =
|
|
2493
|
+
let n = $o(e);
|
|
2450
2494
|
return n !== null && t.isCellEmpty?.(n) === !0;
|
|
2451
2495
|
},
|
|
2452
2496
|
preferDDMMYYYY: t.preferDDMMYYYY
|
|
2453
2497
|
});
|
|
2454
2498
|
}
|
|
2455
|
-
if (n && !o) throw
|
|
2499
|
+
if (n && !o) throw yo(r);
|
|
2456
2500
|
}
|
|
2457
2501
|
let o = n, s = 0, c = 0;
|
|
2458
2502
|
for (; s < o.length && c < 100;) {
|
|
2459
2503
|
if (c++, o[s] === "\"" || o[s] === "'") {
|
|
2460
|
-
s =
|
|
2504
|
+
s = Bo(o, s);
|
|
2461
2505
|
continue;
|
|
2462
2506
|
}
|
|
2463
|
-
let [, e] = o.substring(s).match(
|
|
2464
|
-
if (e === void 0 || !
|
|
2507
|
+
let [, e] = o.substring(s).match(Io) ?? [];
|
|
2508
|
+
if (e === void 0 || !ot(e)) {
|
|
2465
2509
|
if (s++, s >= o.length) break;
|
|
2466
2510
|
continue;
|
|
2467
2511
|
}
|
|
2468
2512
|
let n = s, r = s + e.length + 1, i = 1, a = r, l = !1, u = "";
|
|
2469
2513
|
for (; a < o.length && i > 0;) {
|
|
2470
2514
|
let e = o[a];
|
|
2471
|
-
(e === "\"" || e === "'") && !
|
|
2515
|
+
(e === "\"" || e === "'") && !W(o, a) && (l ? e === u && (l = !1, u = "") : (l = !0, u = e)), l || (e === "(" ? i++ : e === ")" && i--), a++;
|
|
2472
2516
|
}
|
|
2473
2517
|
if (i === 0) {
|
|
2474
2518
|
let e = o.substring(n, a), r = t.evaluateFormula(e);
|
|
2475
|
-
if (S(r)) throw
|
|
2476
|
-
let i = typeof r == "string" ?
|
|
2519
|
+
if (S(r)) throw xo(r.code);
|
|
2520
|
+
let i = typeof r == "string" ? Lo(r) : `(${r})`;
|
|
2477
2521
|
o = o.substring(0, n) + i + o.substring(a), s = n + i.length;
|
|
2478
2522
|
} else s++;
|
|
2479
2523
|
}
|
|
2480
|
-
|
|
2524
|
+
o = es(o, t);
|
|
2525
|
+
let l = Uo(o), u = l.length === 1 ? l[0] : void 0;
|
|
2481
2526
|
if (u) {
|
|
2482
2527
|
let e = o.slice(0, u.start), n = o.slice(u.start + u.ref.length);
|
|
2483
2528
|
if (e.trim() === "" && n.trim() === "") return t.getCellValue(u.ref);
|
|
2484
2529
|
}
|
|
2485
|
-
let d = o, f =
|
|
2486
|
-
o =
|
|
2487
|
-
if (
|
|
2530
|
+
let d = o, f = Qo(d, t);
|
|
2531
|
+
o = Wo(o, l, (e, n) => {
|
|
2532
|
+
if (mo(d, n, n + e.length) && t.isCellEmpty?.(e)) return "\"\"";
|
|
2488
2533
|
let r = t.getCellValue(e), i = Ne(r);
|
|
2489
|
-
if (i !== null) throw
|
|
2490
|
-
return
|
|
2534
|
+
if (i !== null) throw xo(i);
|
|
2535
|
+
return Lo(r);
|
|
2491
2536
|
}), o = o.replace(/"([^"]+)"/g, (e, n) => {
|
|
2492
|
-
let r =
|
|
2537
|
+
let r = Xe(n, t.preferDDMMYYYY);
|
|
2493
2538
|
return r === null ? e : r.toString();
|
|
2494
|
-
})
|
|
2495
|
-
let p =
|
|
2496
|
-
if (p)
|
|
2497
|
-
|
|
2498
|
-
|
|
2539
|
+
});
|
|
2540
|
+
let p = Po(o);
|
|
2541
|
+
if (S(p)) throw xo(p.code);
|
|
2542
|
+
o = p, o = Mi(o);
|
|
2543
|
+
let ee = Ra(o);
|
|
2544
|
+
if (ee) {
|
|
2545
|
+
let e = ee.operands.map(Xo), t = f?.length === e.length;
|
|
2546
|
+
if (e.every(Zo)) return Ka(t ? Ja(e, f) : e, ee.operators);
|
|
2499
2547
|
}
|
|
2500
|
-
let
|
|
2501
|
-
if (ee !== null) return ee;
|
|
2502
|
-
let m = Oo(o);
|
|
2548
|
+
let m = qo(o);
|
|
2503
2549
|
if (m !== null) return m;
|
|
2504
|
-
|
|
2505
|
-
if (
|
|
2550
|
+
let te = Do(o);
|
|
2551
|
+
if (te !== null) return te;
|
|
2552
|
+
if (o = Oo(o), Ri(o)) return Ko(Ii(o));
|
|
2553
|
+
if (Li(o)) return Ko(o);
|
|
2506
2554
|
let h = o.trim();
|
|
2507
2555
|
return h.startsWith("\"") && h.endsWith("\"") || h.startsWith("'") && h.endsWith("'") ? h.slice(1, -1) : o;
|
|
2508
2556
|
}
|
|
2509
|
-
|
|
2557
|
+
A.register({
|
|
2510
2558
|
name: "IF",
|
|
2511
2559
|
handler: (e, t) => {
|
|
2512
|
-
let n =
|
|
2560
|
+
let n = O(t, e, 0), r = O(t, e, 1), i = O(t, e, 2), a = z(t.evaluateFormula(n)) ? r : i;
|
|
2513
2561
|
return /^["'](.*)["']$/.test(a) ? a.slice(1, -1) : t.evaluateFormula(a);
|
|
2514
2562
|
},
|
|
2515
2563
|
minArgs: 3,
|
|
@@ -2517,42 +2565,42 @@ k.register({
|
|
|
2517
2565
|
description: "Returns one value if a condition is true and another if false",
|
|
2518
2566
|
examples: ["IF(A1>10, \"High\", \"Low\")", "IF(B2>=5, SUM(C1:C10), 0)"],
|
|
2519
2567
|
category: "Logical"
|
|
2520
|
-
}),
|
|
2568
|
+
}), A.register({
|
|
2521
2569
|
name: "AND",
|
|
2522
2570
|
handler: (e, t) => {
|
|
2523
|
-
for (let n of e) if (!
|
|
2571
|
+
for (let n of e) if (!z(t.evaluateFormula(n.trim()))) return !1;
|
|
2524
2572
|
return !0;
|
|
2525
2573
|
},
|
|
2526
2574
|
minArgs: 1,
|
|
2527
2575
|
description: "Returns TRUE if all arguments are true",
|
|
2528
2576
|
examples: ["AND(A1>5, B1<10)", "AND(A1>0, B1>0, C1>0)"],
|
|
2529
2577
|
category: "Logical"
|
|
2530
|
-
}),
|
|
2578
|
+
}), A.register({
|
|
2531
2579
|
name: "OR",
|
|
2532
2580
|
handler: (e, t) => {
|
|
2533
|
-
for (let n of e) if (
|
|
2581
|
+
for (let n of e) if (z(t.evaluateFormula(n.trim()))) return !0;
|
|
2534
2582
|
return !1;
|
|
2535
2583
|
},
|
|
2536
2584
|
minArgs: 1,
|
|
2537
2585
|
description: "Returns TRUE if any argument is true",
|
|
2538
2586
|
examples: ["OR(A1>5, B1<10)", "OR(A1>0, B1>0)"],
|
|
2539
2587
|
category: "Logical"
|
|
2540
|
-
}),
|
|
2588
|
+
}), A.register({
|
|
2541
2589
|
name: "NOT",
|
|
2542
|
-
handler: (e, t) => !
|
|
2590
|
+
handler: (e, t) => !z(t.evaluateFormula(O(t, e, 0))),
|
|
2543
2591
|
minArgs: 1,
|
|
2544
2592
|
maxArgs: 1,
|
|
2545
2593
|
description: "Reverses the logical value of its argument",
|
|
2546
2594
|
examples: ["NOT(A1>5)", "NOT(B1)"],
|
|
2547
2595
|
category: "Logical"
|
|
2548
|
-
}),
|
|
2596
|
+
}), A.register({
|
|
2549
2597
|
name: "IFERROR",
|
|
2550
2598
|
handler: (e, t) => {
|
|
2551
2599
|
try {
|
|
2552
|
-
let n = t.evaluateFormula(
|
|
2553
|
-
return Pe(n) ? t.evaluateFormula(
|
|
2600
|
+
let n = t.evaluateFormula(O(t, e, 0));
|
|
2601
|
+
return Pe(n) ? t.evaluateFormula(O(t, e, 1)) : n;
|
|
2554
2602
|
} catch {
|
|
2555
|
-
return t.evaluateFormula(
|
|
2603
|
+
return t.evaluateFormula(O(t, e, 1));
|
|
2556
2604
|
}
|
|
2557
2605
|
},
|
|
2558
2606
|
minArgs: 2,
|
|
@@ -2560,25 +2608,25 @@ k.register({
|
|
|
2560
2608
|
description: "Returns a value if expression is an error, otherwise returns the expression",
|
|
2561
2609
|
examples: ["IFERROR(A1/B1, 0)", "IFERROR(VLOOKUP(A1, B1:C10, 2), \"Not found\")"],
|
|
2562
2610
|
category: "Logical"
|
|
2563
|
-
}),
|
|
2611
|
+
}), A.register({
|
|
2564
2612
|
name: "IFNA",
|
|
2565
2613
|
handler: (e, t) => {
|
|
2566
|
-
let n = t.evaluateFormula(
|
|
2567
|
-
return n == null || r ? t.evaluateFormula(
|
|
2614
|
+
let n = t.evaluateFormula(O(t, e, 0)), r = S(n) && n.code === x.code;
|
|
2615
|
+
return n == null || r ? t.evaluateFormula(O(t, e, 1)) : n;
|
|
2568
2616
|
},
|
|
2569
2617
|
minArgs: 2,
|
|
2570
2618
|
maxArgs: 2,
|
|
2571
2619
|
description: "Returns a value if expression is #N/A, otherwise returns the expression",
|
|
2572
2620
|
examples: ["IFNA(A1, \"N/A\")", "IFNA(MATCH(A1, B1:B10), 0)"],
|
|
2573
2621
|
category: "Logical"
|
|
2574
|
-
}),
|
|
2622
|
+
}), A.register({
|
|
2575
2623
|
name: "IFS",
|
|
2576
2624
|
handler: (e, t) => {
|
|
2577
2625
|
if (e.length < 2 || e.length % 2 != 0) throw Error("IFS requires an even number of arguments (condition-value pairs)");
|
|
2578
2626
|
for (let n = 0; n < e.length; n += 2) {
|
|
2579
|
-
let r =
|
|
2580
|
-
if (
|
|
2581
|
-
let n =
|
|
2627
|
+
let r = O(t, e, n), i = O(t, e, n + 1);
|
|
2628
|
+
if (io(Wo(r, Uo(r), (e) => ao(t.getCellValue(e))), (e) => {
|
|
2629
|
+
let n = eo(e);
|
|
2582
2630
|
return typeof n == "string" && n === e.trim() ? t.evaluateFormula(e) : n;
|
|
2583
2631
|
})) return /^["'](.*)["']$/.test(i) ? i.slice(1, -1) : t.evaluateFormula(i);
|
|
2584
2632
|
}
|
|
@@ -2588,7 +2636,7 @@ k.register({
|
|
|
2588
2636
|
description: "Checks multiple conditions and returns the first true result",
|
|
2589
2637
|
examples: ["IFS(A1>90, \"A\", A1>80, \"B\", A1>70, \"C\")", "IFS(B1=\"Yes\", 1, B1=\"No\", 0)"],
|
|
2590
2638
|
category: "Logical"
|
|
2591
|
-
}),
|
|
2639
|
+
}), A.register({
|
|
2592
2640
|
name: "TRUE",
|
|
2593
2641
|
handler: () => !0,
|
|
2594
2642
|
minArgs: 0,
|
|
@@ -2596,7 +2644,7 @@ k.register({
|
|
|
2596
2644
|
description: "Returns the logical value TRUE",
|
|
2597
2645
|
examples: ["TRUE()", "IF(A1>0, TRUE(), FALSE())"],
|
|
2598
2646
|
category: "Logical"
|
|
2599
|
-
}),
|
|
2647
|
+
}), A.register({
|
|
2600
2648
|
name: "FALSE",
|
|
2601
2649
|
handler: () => !1,
|
|
2602
2650
|
minArgs: 0,
|
|
@@ -2607,20 +2655,20 @@ k.register({
|
|
|
2607
2655
|
});
|
|
2608
2656
|
//#endregion
|
|
2609
2657
|
//#region src/engine/formatter.ts
|
|
2610
|
-
function
|
|
2658
|
+
function ns(e) {
|
|
2611
2659
|
return /[YMD]|MMM|DD|YYYY|h:mm|AM\/PM/i.test(e);
|
|
2612
2660
|
}
|
|
2613
|
-
var
|
|
2614
|
-
function
|
|
2615
|
-
let n =
|
|
2661
|
+
var rs = /YYYY|YY|MMMM|MMM|MM|M|dddd|ddd|DD|D|AM\/PM|am\/pm|HH|H|hh|h|mm|ss/g;
|
|
2662
|
+
function is(e, t) {
|
|
2663
|
+
let n = E(e), r = n.getUTCFullYear(), i = n.getUTCMonth(), a = n.getUTCDate(), o = n.getUTCHours(), s = n.getUTCMinutes(), c = n.getUTCSeconds(), l = n.getUTCDay(), u = /AM\/PM|am\/pm/.test(t), d = o % 12 || 12, f = o >= 12, p = {
|
|
2616
2664
|
YYYY: r.toString(),
|
|
2617
2665
|
YY: (r % 100).toString().padStart(2, "0"),
|
|
2618
|
-
MMMM:
|
|
2619
|
-
MMM:
|
|
2666
|
+
MMMM: Ve[i] ?? Ve[0],
|
|
2667
|
+
MMM: Be[i] ?? Be[0],
|
|
2620
2668
|
MM: (i + 1).toString().padStart(2, "0"),
|
|
2621
2669
|
M: (i + 1).toString(),
|
|
2622
|
-
dddd:
|
|
2623
|
-
ddd:
|
|
2670
|
+
dddd: Ue[l] ?? Ue[0],
|
|
2671
|
+
ddd: He[l] ?? He[0],
|
|
2624
2672
|
DD: a.toString().padStart(2, "0"),
|
|
2625
2673
|
D: a.toString(),
|
|
2626
2674
|
"AM/PM": f ? "PM" : "AM",
|
|
@@ -2632,18 +2680,18 @@ function Qo(e, t) {
|
|
|
2632
2680
|
mm: s.toString().padStart(2, "0"),
|
|
2633
2681
|
ss: c.toString().padStart(2, "0")
|
|
2634
2682
|
};
|
|
2635
|
-
return t.replace(
|
|
2683
|
+
return t.replace(rs, (e) => p[e] ?? e);
|
|
2636
2684
|
}
|
|
2637
|
-
var
|
|
2685
|
+
var as = 3, os = (e) => Array.from(e).reduce((t, n, r) => r > 0 && (e.length - r) % as === 0 ? `${t},${n}` : `${t}${n}`, ""), ss = (e) => {
|
|
2638
2686
|
let [t, ...n] = e.split(".");
|
|
2639
|
-
return t === void 0 ? e : [
|
|
2687
|
+
return t === void 0 ? e : [os(t), ...n].join(".");
|
|
2640
2688
|
};
|
|
2641
|
-
function
|
|
2689
|
+
function cs(e, t) {
|
|
2642
2690
|
if (!t) return e.toString();
|
|
2643
2691
|
try {
|
|
2644
|
-
if (
|
|
2692
|
+
if (ns(t)) return is(e, t);
|
|
2645
2693
|
if (t.includes("$")) {
|
|
2646
|
-
let n = (t.match(/\.0+/) || [""])[0].length - 1, r = Math.abs(e).toFixed(n >= 0 ? n : 0), i = "$" + (t.includes(",") ?
|
|
2694
|
+
let n = (t.match(/\.0+/) || [""])[0].length - 1, r = Math.abs(e).toFixed(n >= 0 ? n : 0), i = "$" + (t.includes(",") ? ss(r) : r);
|
|
2647
2695
|
return e < 0 ? "-" + i : i;
|
|
2648
2696
|
}
|
|
2649
2697
|
if (t.includes("%")) {
|
|
@@ -2651,7 +2699,7 @@ function ns(e, t) {
|
|
|
2651
2699
|
return (e * 100).toFixed(n >= 0 ? n : 2) + "%";
|
|
2652
2700
|
}
|
|
2653
2701
|
if (t.includes(",")) {
|
|
2654
|
-
let n = (t.match(/\.0+/) || [""])[0].length - 1, r =
|
|
2702
|
+
let n = (t.match(/\.0+/) || [""])[0].length - 1, r = ss(Math.abs(e).toFixed(n >= 0 ? n : 0));
|
|
2655
2703
|
return e < 0 ? "-" + r : r;
|
|
2656
2704
|
}
|
|
2657
2705
|
let n = (t.match(/\.0+/) || [""])[0].length - 1;
|
|
@@ -2662,210 +2710,210 @@ function ns(e, t) {
|
|
|
2662
2710
|
}
|
|
2663
2711
|
//#endregion
|
|
2664
2712
|
//#region src/engine/textFormat.ts
|
|
2665
|
-
var
|
|
2666
|
-
let t =
|
|
2713
|
+
var ls = 100, us = "?\\*_[]\"@;/", ds = /[#0][#0,.]*/, fs = /[#0]/, ps = /0+$/, ms = (e, t) => Array.from(e).filter((e) => t.includes(e)).length, hs = (e) => Array.from(e).some((e) => us.includes(e)), gs = (e) => {
|
|
2714
|
+
let t = ds.exec(e);
|
|
2667
2715
|
if (!t || t[0].endsWith(",")) return null;
|
|
2668
2716
|
let n = e.slice(0, t.index), r = e.slice(t.index + t[0].length);
|
|
2669
|
-
if (
|
|
2717
|
+
if (fs.test(r) || hs(n) || hs(r)) return null;
|
|
2670
2718
|
let [i, a = "", ...o] = t[0].split(".");
|
|
2671
2719
|
return i === void 0 || o.length > 0 ? null : {
|
|
2672
2720
|
prefix: n,
|
|
2673
2721
|
suffix: r,
|
|
2674
2722
|
useGrouping: i.includes(","),
|
|
2675
|
-
integerMinDigits:
|
|
2676
|
-
minDecimals:
|
|
2677
|
-
maxDecimals:
|
|
2723
|
+
integerMinDigits: ms(i, "0"),
|
|
2724
|
+
minDecimals: ms(a, "0"),
|
|
2725
|
+
maxDecimals: ms(a, "#0"),
|
|
2678
2726
|
isPercent: n.includes("%") || r.includes("%")
|
|
2679
2727
|
};
|
|
2680
|
-
},
|
|
2681
|
-
let n = e.replace(
|
|
2728
|
+
}, _s = (e, t) => {
|
|
2729
|
+
let n = e.replace(ps, "");
|
|
2682
2730
|
return n.length >= t ? n : e.slice(0, t);
|
|
2683
|
-
},
|
|
2684
|
-
let n = e.toFixed(t.maxDecimals), r = n.indexOf("."), i = r === -1 ? n : n.slice(0, r), a = r === -1 ? "" : n.slice(r + 1), o = i.padStart(t.integerMinDigits, "0"), s = t.useGrouping ?
|
|
2731
|
+
}, vs = (e, t) => {
|
|
2732
|
+
let n = e.toFixed(t.maxDecimals), r = n.indexOf("."), i = r === -1 ? n : n.slice(0, r), a = r === -1 ? "" : n.slice(r + 1), o = i.padStart(t.integerMinDigits, "0"), s = t.useGrouping ? os(o) : o, c = _s(a, t.minDecimals);
|
|
2685
2733
|
return c ? `${s}.${c}` : s;
|
|
2686
|
-
},
|
|
2734
|
+
}, ys = (e) => Array.from(e).every((e) => e === "0" || e === "," || e === "."), bs = (e, t) => {
|
|
2687
2735
|
if (!Number.isFinite(e)) return null;
|
|
2688
|
-
let n =
|
|
2736
|
+
let n = gs(t);
|
|
2689
2737
|
if (!n) return null;
|
|
2690
|
-
let r = n.isPercent ? e *
|
|
2691
|
-
return `${r < 0 && !
|
|
2692
|
-
},
|
|
2738
|
+
let r = n.isPercent ? e * ls : e, i = vs(Math.abs(r), n);
|
|
2739
|
+
return `${r < 0 && !ys(i) ? "-" : ""}${n.prefix}${i}${n.suffix}`;
|
|
2740
|
+
}, xs = (e) => /[\p{L}\p{M}]/u.test(e), Ss = (e) => {
|
|
2693
2741
|
let t = Array.from(e);
|
|
2694
2742
|
return t.map((e, n) => {
|
|
2695
2743
|
let r = t[n - 1];
|
|
2696
|
-
return r === void 0 || !
|
|
2744
|
+
return r === void 0 || !xs(r) ? e.toUpperCase() : e.toLowerCase();
|
|
2697
2745
|
}).join("");
|
|
2698
|
-
},
|
|
2699
|
-
let n =
|
|
2746
|
+
}, Cs = (e) => !Number.isFinite(e) || e < 0 ? y : Math.trunc(e), ws = (e, t) => {
|
|
2747
|
+
let n = Cs(t);
|
|
2700
2748
|
return S(n) ? n : e.substring(0, n);
|
|
2701
|
-
},
|
|
2702
|
-
let n =
|
|
2749
|
+
}, Ts = (e, t) => {
|
|
2750
|
+
let n = Cs(t);
|
|
2703
2751
|
return S(n) ? n : e.substring(e.length - n);
|
|
2704
|
-
},
|
|
2752
|
+
}, Es = (e, t, n, r) => {
|
|
2705
2753
|
let i = e.split(t);
|
|
2706
2754
|
return r > i.length - 1 ? e : i.slice(0, r).join(t) + n + i.slice(r).join(t);
|
|
2707
|
-
},
|
|
2755
|
+
}, Ds = (e, t, n, r) => {
|
|
2708
2756
|
if (t === "") return e;
|
|
2709
2757
|
if (r === void 0) return e.split(t).join(n);
|
|
2710
2758
|
let i = Math.trunc(r);
|
|
2711
|
-
return !Number.isFinite(i) || i <= 0 ? y :
|
|
2712
|
-
},
|
|
2713
|
-
let r =
|
|
2759
|
+
return !Number.isFinite(i) || i <= 0 ? y : Es(e, t, n, i);
|
|
2760
|
+
}, Os = (e, t) => e.isBlankReference?.(t) ? "" : st(e.evaluateFormula(t)), q = (e, t, n) => Os(e, O(e, t, n)), ks = (e, t) => e.map((e) => Os(t, e.trim())).join(""), As = ks, js = (e, t) => ws(q(t, e, 0), e.length === 2 ? Number(t.evaluateFormula(O(t, e, 1))) : 1), Ms = (e, t) => Ts(q(t, e, 0), e.length === 2 ? Number(t.evaluateFormula(O(t, e, 1))) : 1), Ns = (e, t, n) => {
|
|
2761
|
+
let r = Cs(n);
|
|
2714
2762
|
if (S(r)) return r;
|
|
2715
2763
|
if (!Number.isFinite(t) || t < 1) return y;
|
|
2716
2764
|
let i = Math.trunc(t) - 1;
|
|
2717
2765
|
return e.substring(i, i + r);
|
|
2718
|
-
},
|
|
2719
|
-
let n =
|
|
2766
|
+
}, Ps = (e, t) => Ns(q(t, e, 0), Number(t.evaluateFormula(O(t, e, 1))), Number(t.evaluateFormula(O(t, e, 2)))), Fs = (e, t) => q(t, e, 0).length, Is = (e, t) => q(t, e, 0).toUpperCase(), Ls = (e, t) => q(t, e, 0).toLowerCase(), Rs = (e, t) => Ss(q(t, e, 0)), zs = (e, t) => q(t, e, 0).trim().replace(/\s+/g, " "), Bs = (e, t) => Ds(q(t, e, 0), q(t, e, 1), q(t, e, 2), e.length === 4 ? Number(t.evaluateFormula(O(t, e, 3))) : void 0), Vs = (e, t) => {
|
|
2767
|
+
let n = q(t, e, 0), r = Number(t.evaluateFormula(O(t, e, 1))) - 1, i = Number(t.evaluateFormula(O(t, e, 2))), a = q(t, e, 3);
|
|
2720
2768
|
return n.substring(0, r) + a + n.substring(r + i);
|
|
2721
|
-
},
|
|
2769
|
+
}, Hs = (e, t, n, r) => {
|
|
2722
2770
|
let i = r.caseInsensitive ? e.toLowerCase() : e, a = (r.caseInsensitive ? t.toLowerCase() : t).indexOf(i, n);
|
|
2723
2771
|
return a === -1 ? y : a + 1;
|
|
2724
|
-
},
|
|
2725
|
-
let n = t.evaluateFormula(
|
|
2726
|
-
return typeof n == "number" ?
|
|
2727
|
-
},
|
|
2728
|
-
if (!
|
|
2772
|
+
}, Us = (e) => (t, n) => Hs(q(n, t, 0), q(n, t, 1), t.length === 3 ? Number(n.evaluateFormula(O(n, t, 2))) - 1 : 0, { caseInsensitive: e }), Ws = Us(!1), Gs = Us(!0), Ks = (e) => e.replace(/^["']/, "").replace(/["']$/, ""), qs = (e, t) => {
|
|
2773
|
+
let n = t.evaluateFormula(O(t, e, 0)), r = Ks(q(t, e, 1));
|
|
2774
|
+
return typeof n == "number" ? bs(n, r) ?? st(n) : st(n);
|
|
2775
|
+
}, Js = /^[+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?$/, Ys = (e) => {
|
|
2776
|
+
if (!Js.test(e)) return null;
|
|
2729
2777
|
let t = Number(e);
|
|
2730
2778
|
return Number.isFinite(t) ? t : null;
|
|
2731
|
-
},
|
|
2779
|
+
}, Xs = (e) => {
|
|
2732
2780
|
let t = e.replace(/[$,]/g, "").trim();
|
|
2733
2781
|
if (t.endsWith("%")) {
|
|
2734
|
-
let e =
|
|
2782
|
+
let e = Ys(t.slice(0, -1).trim());
|
|
2735
2783
|
return e === null ? y : e / 100;
|
|
2736
2784
|
}
|
|
2737
|
-
let n =
|
|
2785
|
+
let n = Ys(t);
|
|
2738
2786
|
return n === null ? y : n;
|
|
2739
2787
|
};
|
|
2740
|
-
|
|
2788
|
+
A.register({
|
|
2741
2789
|
name: "CONCATENATE",
|
|
2742
|
-
handler:
|
|
2790
|
+
handler: ks,
|
|
2743
2791
|
minArgs: 1,
|
|
2744
2792
|
description: "Joins several text strings into one string",
|
|
2745
2793
|
examples: ["CONCATENATE(\"Hello\", \" \", \"World\")", "CONCATENATE(A1, B1)"],
|
|
2746
2794
|
category: "Text"
|
|
2747
|
-
}),
|
|
2795
|
+
}), A.register({
|
|
2748
2796
|
name: "CONCAT",
|
|
2749
|
-
handler:
|
|
2797
|
+
handler: As,
|
|
2750
2798
|
minArgs: 1,
|
|
2751
2799
|
description: "Joins several text strings into one string (same as CONCATENATE)",
|
|
2752
2800
|
examples: ["CONCAT(\"Hello\", \" \", \"World\")", "CONCAT(A1, B1)"],
|
|
2753
2801
|
category: "Text"
|
|
2754
|
-
}),
|
|
2802
|
+
}), A.register({
|
|
2755
2803
|
name: "LEFT",
|
|
2756
|
-
handler:
|
|
2804
|
+
handler: js,
|
|
2757
2805
|
minArgs: 1,
|
|
2758
2806
|
maxArgs: 2,
|
|
2759
2807
|
description: "Returns the leftmost characters from a text string",
|
|
2760
2808
|
examples: ["LEFT(\"Hello\", 2)", "LEFT(A1, 3)"],
|
|
2761
2809
|
category: "Text"
|
|
2762
|
-
}),
|
|
2810
|
+
}), A.register({
|
|
2763
2811
|
name: "RIGHT",
|
|
2764
|
-
handler:
|
|
2812
|
+
handler: Ms,
|
|
2765
2813
|
minArgs: 1,
|
|
2766
2814
|
maxArgs: 2,
|
|
2767
2815
|
description: "Returns the rightmost characters from a text string",
|
|
2768
2816
|
examples: ["RIGHT(\"Hello\", 2)", "RIGHT(A1, 3)"],
|
|
2769
2817
|
category: "Text"
|
|
2770
|
-
}),
|
|
2818
|
+
}), A.register({
|
|
2771
2819
|
name: "MID",
|
|
2772
|
-
handler:
|
|
2820
|
+
handler: Ps,
|
|
2773
2821
|
minArgs: 3,
|
|
2774
2822
|
maxArgs: 3,
|
|
2775
2823
|
description: "Returns characters from the middle of a text string",
|
|
2776
2824
|
examples: ["MID(\"Hello\", 2, 3)", "MID(A1, 1, 5)"],
|
|
2777
2825
|
category: "Text"
|
|
2778
|
-
}),
|
|
2826
|
+
}), A.register({
|
|
2779
2827
|
name: "LEN",
|
|
2780
|
-
handler:
|
|
2828
|
+
handler: Fs,
|
|
2781
2829
|
minArgs: 1,
|
|
2782
2830
|
maxArgs: 1,
|
|
2783
2831
|
description: "Returns the number of characters in a text string",
|
|
2784
2832
|
examples: ["LEN(\"Hello\")", "LEN(A1)"],
|
|
2785
2833
|
category: "Text"
|
|
2786
|
-
}),
|
|
2834
|
+
}), A.register({
|
|
2787
2835
|
name: "UPPER",
|
|
2788
|
-
handler:
|
|
2836
|
+
handler: Is,
|
|
2789
2837
|
minArgs: 1,
|
|
2790
2838
|
maxArgs: 1,
|
|
2791
2839
|
description: "Converts text to uppercase",
|
|
2792
2840
|
examples: ["UPPER(\"hello\")", "UPPER(A1)"],
|
|
2793
2841
|
category: "Text"
|
|
2794
|
-
}),
|
|
2842
|
+
}), A.register({
|
|
2795
2843
|
name: "LOWER",
|
|
2796
|
-
handler:
|
|
2844
|
+
handler: Ls,
|
|
2797
2845
|
minArgs: 1,
|
|
2798
2846
|
maxArgs: 1,
|
|
2799
2847
|
description: "Converts text to lowercase",
|
|
2800
2848
|
examples: ["LOWER(\"HELLO\")", "LOWER(A1)"],
|
|
2801
2849
|
category: "Text"
|
|
2802
|
-
}),
|
|
2850
|
+
}), A.register({
|
|
2803
2851
|
name: "PROPER",
|
|
2804
|
-
handler:
|
|
2852
|
+
handler: Rs,
|
|
2805
2853
|
minArgs: 1,
|
|
2806
2854
|
maxArgs: 1,
|
|
2807
2855
|
description: "Capitalizes the first letter of each word",
|
|
2808
2856
|
examples: ["PROPER(\"hello world\")", "PROPER(A1)"],
|
|
2809
2857
|
category: "Text"
|
|
2810
|
-
}),
|
|
2858
|
+
}), A.register({
|
|
2811
2859
|
name: "TRIM",
|
|
2812
|
-
handler:
|
|
2860
|
+
handler: zs,
|
|
2813
2861
|
minArgs: 1,
|
|
2814
2862
|
maxArgs: 1,
|
|
2815
2863
|
description: "Removes extra spaces from text",
|
|
2816
2864
|
examples: ["TRIM(\" hello world \")", "TRIM(A1)"],
|
|
2817
2865
|
category: "Text"
|
|
2818
|
-
}),
|
|
2866
|
+
}), A.register({
|
|
2819
2867
|
name: "SUBSTITUTE",
|
|
2820
|
-
handler:
|
|
2868
|
+
handler: Bs,
|
|
2821
2869
|
minArgs: 3,
|
|
2822
2870
|
maxArgs: 4,
|
|
2823
2871
|
description: "Replaces old text with new text in a string",
|
|
2824
2872
|
examples: ["SUBSTITUTE(\"Hello World\", \"World\", \"Earth\")", "SUBSTITUTE(A1, \"old\", \"new\", 1)"],
|
|
2825
2873
|
category: "Text"
|
|
2826
|
-
}),
|
|
2874
|
+
}), A.register({
|
|
2827
2875
|
name: "REPLACE",
|
|
2828
|
-
handler:
|
|
2876
|
+
handler: Vs,
|
|
2829
2877
|
minArgs: 4,
|
|
2830
2878
|
maxArgs: 4,
|
|
2831
2879
|
description: "Replaces part of a text string with a different text string",
|
|
2832
2880
|
examples: ["REPLACE(\"Hello World\", 7, 5, \"Earth\")", "REPLACE(A1, 1, 3, \"New\")"],
|
|
2833
2881
|
category: "Text"
|
|
2834
|
-
}),
|
|
2882
|
+
}), A.register({
|
|
2835
2883
|
name: "FIND",
|
|
2836
|
-
handler:
|
|
2884
|
+
handler: Ws,
|
|
2837
2885
|
minArgs: 2,
|
|
2838
2886
|
maxArgs: 3,
|
|
2839
2887
|
description: "Finds one text string within another (case-sensitive)",
|
|
2840
2888
|
examples: ["FIND(\"o\", \"Hello\")", "FIND(\"World\", A1)"],
|
|
2841
2889
|
category: "Text"
|
|
2842
|
-
}),
|
|
2890
|
+
}), A.register({
|
|
2843
2891
|
name: "SEARCH",
|
|
2844
|
-
handler:
|
|
2892
|
+
handler: Gs,
|
|
2845
2893
|
minArgs: 2,
|
|
2846
2894
|
maxArgs: 3,
|
|
2847
2895
|
description: "Finds one text string within another (case-insensitive)",
|
|
2848
2896
|
examples: ["SEARCH(\"O\", \"Hello\")", "SEARCH(\"world\", A1)"],
|
|
2849
2897
|
category: "Text"
|
|
2850
|
-
}),
|
|
2898
|
+
}), A.register({
|
|
2851
2899
|
name: "TEXT",
|
|
2852
|
-
handler:
|
|
2900
|
+
handler: qs,
|
|
2853
2901
|
minArgs: 2,
|
|
2854
2902
|
maxArgs: 2,
|
|
2855
2903
|
description: "Formats a number and converts it to text",
|
|
2856
2904
|
examples: ["TEXT(1234.5, \"$#,##0.00\")", "TEXT(0.5, \"0%\")"],
|
|
2857
2905
|
category: "Text"
|
|
2858
|
-
}),
|
|
2906
|
+
}), A.register({
|
|
2859
2907
|
name: "VALUE",
|
|
2860
|
-
handler: (e, t) =>
|
|
2908
|
+
handler: (e, t) => Xs(st(t.evaluateFormula(O(t, e, 0)))),
|
|
2861
2909
|
minArgs: 1,
|
|
2862
2910
|
maxArgs: 1,
|
|
2863
2911
|
description: "Converts a text string to a number",
|
|
2864
2912
|
examples: ["VALUE(\"123\")", "VALUE(\"$1,234.56\")"],
|
|
2865
2913
|
category: "Text"
|
|
2866
|
-
}),
|
|
2914
|
+
}), A.register({
|
|
2867
2915
|
name: "EXACT",
|
|
2868
|
-
handler: (e, t) =>
|
|
2916
|
+
handler: (e, t) => q(t, e, 0) === q(t, e, 1),
|
|
2869
2917
|
minArgs: 2,
|
|
2870
2918
|
maxArgs: 2,
|
|
2871
2919
|
description: "Checks if two text strings are exactly the same",
|
|
@@ -2874,50 +2922,50 @@ k.register({
|
|
|
2874
2922
|
});
|
|
2875
2923
|
//#endregion
|
|
2876
2924
|
//#region src/engine/financial-math.ts
|
|
2877
|
-
function
|
|
2925
|
+
function Zs(e, t, n, r, i) {
|
|
2878
2926
|
if (e === 0) return -(r + n * t);
|
|
2879
2927
|
let a = (1 + e) ** +t;
|
|
2880
2928
|
return -r * a - n * (a - 1) * (1 + e * i) / e;
|
|
2881
2929
|
}
|
|
2882
|
-
function
|
|
2930
|
+
function Qs(e, t, n, r, i) {
|
|
2883
2931
|
if (e === 0) return -(r + n) / t;
|
|
2884
2932
|
let a = (1 + e) ** +t;
|
|
2885
2933
|
return -e * (r + n * a) / ((a - 1) * (1 + e * i));
|
|
2886
2934
|
}
|
|
2887
|
-
function
|
|
2888
|
-
let o =
|
|
2935
|
+
function $s(e, t, n, r, i, a) {
|
|
2936
|
+
let o = Qs(e, n, r, i, a);
|
|
2889
2937
|
if (t === 1 && a === 1) return 0;
|
|
2890
|
-
let s =
|
|
2938
|
+
let s = Zs(e, a === 1 ? t - 2 : t - 1, o, r, a) * e;
|
|
2891
2939
|
return a === 1 ? s / (1 + e) : s;
|
|
2892
2940
|
}
|
|
2893
|
-
function
|
|
2894
|
-
return
|
|
2941
|
+
function ec(e, t, n, r, i, a) {
|
|
2942
|
+
return Qs(e, n, r, i, a) - $s(e, t, n, r, i, a);
|
|
2895
2943
|
}
|
|
2896
|
-
function
|
|
2944
|
+
function tc(e, t, n, r, i) {
|
|
2897
2945
|
if (e === 0) return -(r + n * t);
|
|
2898
2946
|
let a = (1 + e) ** +t;
|
|
2899
2947
|
return (-r - n * (a - 1) * (1 + e * i) / e) / a;
|
|
2900
2948
|
}
|
|
2901
|
-
function
|
|
2949
|
+
function nc(e, t, n, r, i) {
|
|
2902
2950
|
if (e === 0) return -(r + n) / t;
|
|
2903
2951
|
let a = t * (1 + e * i);
|
|
2904
2952
|
return Math.log((a - r * e) / (a + n * e)) / Math.log(1 + e);
|
|
2905
2953
|
}
|
|
2906
|
-
var
|
|
2907
|
-
function
|
|
2954
|
+
var rc = 100, ic = 1e-7;
|
|
2955
|
+
function ac(e, t, n, r, i, a) {
|
|
2908
2956
|
let o = a;
|
|
2909
|
-
for (let a = 0; a <
|
|
2910
|
-
Math.abs(o) <
|
|
2957
|
+
for (let a = 0; a < rc; a++) {
|
|
2958
|
+
Math.abs(o) < ic && (o = ic);
|
|
2911
2959
|
let a = (1 + o) ** +e, s = n * a + t * ((a - 1) / o) * (1 + o * i) + r, c = e * n * (1 + o) ** (e - 1) + t * (1 + o * i) * (e * (1 + o) ** (e - 1) * o - (a - 1)) / (o * o) + t * i * ((a - 1) / o), l = o - s / c;
|
|
2912
|
-
if (Math.abs(l - o) <
|
|
2960
|
+
if (Math.abs(l - o) < ic) return Number.isFinite(l) ? l : b;
|
|
2913
2961
|
o = l;
|
|
2914
2962
|
}
|
|
2915
2963
|
return b;
|
|
2916
2964
|
}
|
|
2917
|
-
function
|
|
2965
|
+
function oc(e, t) {
|
|
2918
2966
|
return t.reduce((t, n, r) => t + n / (1 + e) ** +(r + 1), 0);
|
|
2919
2967
|
}
|
|
2920
|
-
function
|
|
2968
|
+
function sc(e, t) {
|
|
2921
2969
|
return e.reduce((e, n, r) => {
|
|
2922
2970
|
let i = (1 + t) ** +r;
|
|
2923
2971
|
return {
|
|
@@ -2929,115 +2977,115 @@ function ec(e, t) {
|
|
|
2929
2977
|
dnpv: 0
|
|
2930
2978
|
});
|
|
2931
2979
|
}
|
|
2932
|
-
function
|
|
2980
|
+
function cc(e, t) {
|
|
2933
2981
|
let n = t;
|
|
2934
|
-
for (let t = 0; t <
|
|
2935
|
-
let { npv: t, dnpv: r } =
|
|
2936
|
-
if (Math.abs(t) <
|
|
2937
|
-
if (Math.abs(r) <
|
|
2982
|
+
for (let t = 0; t < rc; t++) {
|
|
2983
|
+
let { npv: t, dnpv: r } = sc(e, n);
|
|
2984
|
+
if (Math.abs(t) < ic) return n;
|
|
2985
|
+
if (Math.abs(r) < ic) return b;
|
|
2938
2986
|
let i = n - t / r;
|
|
2939
|
-
if (Math.abs(i - n) <
|
|
2987
|
+
if (Math.abs(i - n) < ic) return Number.isFinite(i) ? i : b;
|
|
2940
2988
|
n = i;
|
|
2941
2989
|
}
|
|
2942
2990
|
return b;
|
|
2943
2991
|
}
|
|
2944
2992
|
//#endregion
|
|
2945
2993
|
//#region src/engine/functions/financial.ts
|
|
2946
|
-
var
|
|
2947
|
-
let i = (n) =>
|
|
2994
|
+
var lc = (e, t, n, r) => {
|
|
2995
|
+
let i = (n) => j(t.evaluateFormula(O(t, e, n))), a = Array.from({ length: n }, (e, t) => i(t)), o = r.map((t, r) => e.length > n + r ? i(n + r) : t);
|
|
2948
2996
|
return [...a, ...o];
|
|
2949
|
-
},
|
|
2950
|
-
let [n, r, i, a, o] =
|
|
2951
|
-
return
|
|
2952
|
-
},
|
|
2953
|
-
let [n, r, i, a, o] =
|
|
2954
|
-
return
|
|
2955
|
-
},
|
|
2956
|
-
let [n, r, i, a, o] =
|
|
2957
|
-
return
|
|
2958
|
-
},
|
|
2959
|
-
let [n, r, i, a, o] =
|
|
2960
|
-
return
|
|
2961
|
-
},
|
|
2962
|
-
let [n, r, i, a, o, s] =
|
|
2997
|
+
}, uc = (e, t) => {
|
|
2998
|
+
let [n, r, i, a, o] = lc(e, t, 3, [0, 0]);
|
|
2999
|
+
return Zs(n, r, i, a, o);
|
|
3000
|
+
}, dc = (e, t) => {
|
|
3001
|
+
let [n, r, i, a, o] = lc(e, t, 3, [0, 0]);
|
|
3002
|
+
return tc(n, r, i, a, o);
|
|
3003
|
+
}, fc = (e, t) => {
|
|
3004
|
+
let [n, r, i, a, o] = lc(e, t, 3, [0, 0]);
|
|
3005
|
+
return Qs(n, r, i, a, o);
|
|
3006
|
+
}, pc = (e, t) => {
|
|
3007
|
+
let [n, r, i, a, o] = lc(e, t, 3, [0, 0]);
|
|
3008
|
+
return nc(n, r, i, a, o);
|
|
3009
|
+
}, mc = (e, t) => {
|
|
3010
|
+
let [n, r, i, a, o, s] = lc(e, t, 3, [
|
|
2963
3011
|
0,
|
|
2964
3012
|
0,
|
|
2965
3013
|
.1
|
|
2966
3014
|
]);
|
|
2967
|
-
return
|
|
2968
|
-
},
|
|
2969
|
-
let [r, i, a, o, s, c] =
|
|
3015
|
+
return ac(n, r, i, a, o, s);
|
|
3016
|
+
}, hc = (e) => (t, n) => {
|
|
3017
|
+
let [r, i, a, o, s, c] = lc(t, n, 4, [0, 0]);
|
|
2970
3018
|
return e(r, i, a, o, s, c);
|
|
2971
|
-
},
|
|
2972
|
-
|
|
3019
|
+
}, gc = hc($s), _c = hc(ec), vc = (e, t) => e.flatMap((e) => (e.includes(":") ? t.getRangeValues(e) : [t.evaluateFormula(e)]).map(j));
|
|
3020
|
+
A.register({
|
|
2973
3021
|
name: "FV",
|
|
2974
|
-
handler:
|
|
3022
|
+
handler: uc,
|
|
2975
3023
|
minArgs: 3,
|
|
2976
3024
|
maxArgs: 5,
|
|
2977
3025
|
description: "Calculates the future value of an investment based on periodic, constant payments and a constant interest rate",
|
|
2978
3026
|
examples: ["FV(0.06/12, 12, -100, -1000, 1)", "FV(A1, A2, A3)"],
|
|
2979
3027
|
category: "Financial"
|
|
2980
|
-
}),
|
|
3028
|
+
}), A.register({
|
|
2981
3029
|
name: "PV",
|
|
2982
|
-
handler:
|
|
3030
|
+
handler: dc,
|
|
2983
3031
|
minArgs: 3,
|
|
2984
3032
|
maxArgs: 5,
|
|
2985
3033
|
description: "Calculates the present value of an investment based on periodic, constant payments and a constant interest rate",
|
|
2986
3034
|
examples: ["PV(0.08/12, 12*20, 500, 0, 0)", "PV(A1, A2, A3)"],
|
|
2987
3035
|
category: "Financial"
|
|
2988
|
-
}),
|
|
3036
|
+
}), A.register({
|
|
2989
3037
|
name: "PMT",
|
|
2990
|
-
handler:
|
|
3038
|
+
handler: fc,
|
|
2991
3039
|
minArgs: 3,
|
|
2992
3040
|
maxArgs: 5,
|
|
2993
3041
|
description: "Calculates the payment for a loan based on constant payments and a constant interest rate",
|
|
2994
3042
|
examples: ["PMT(0.06/12, 30*12, 250000)", "PMT(A1, A2, A3)"],
|
|
2995
3043
|
category: "Financial"
|
|
2996
|
-
}),
|
|
3044
|
+
}), A.register({
|
|
2997
3045
|
name: "NPER",
|
|
2998
|
-
handler:
|
|
3046
|
+
handler: pc,
|
|
2999
3047
|
minArgs: 3,
|
|
3000
3048
|
maxArgs: 5,
|
|
3001
3049
|
description: "Calculates the number of periods for an investment based on periodic, constant payments and a constant interest rate",
|
|
3002
3050
|
examples: ["NPER(0.06/12, -1000, 50000, 0, 0)", "NPER(A1, A2, A3)"],
|
|
3003
3051
|
category: "Financial"
|
|
3004
|
-
}),
|
|
3052
|
+
}), A.register({
|
|
3005
3053
|
name: "RATE",
|
|
3006
|
-
handler:
|
|
3054
|
+
handler: mc,
|
|
3007
3055
|
minArgs: 3,
|
|
3008
3056
|
maxArgs: 6,
|
|
3009
3057
|
description: "Calculates the interest rate per period of an annuity using iteration",
|
|
3010
3058
|
examples: ["RATE(12, -100, 1000, 0, 0, 0.1)", "RATE(A1, A2, A3)"],
|
|
3011
3059
|
category: "Financial"
|
|
3012
|
-
}),
|
|
3060
|
+
}), A.register({
|
|
3013
3061
|
name: "IPMT",
|
|
3014
|
-
handler:
|
|
3062
|
+
handler: gc,
|
|
3015
3063
|
minArgs: 4,
|
|
3016
3064
|
maxArgs: 6,
|
|
3017
3065
|
description: "Calculates the interest payment for a given period for an investment",
|
|
3018
3066
|
examples: ["IPMT(0.06/12, 1, 30*12, 250000)", "IPMT(A1, A2, A3, A4)"],
|
|
3019
3067
|
category: "Financial"
|
|
3020
|
-
}),
|
|
3068
|
+
}), A.register({
|
|
3021
3069
|
name: "PPMT",
|
|
3022
|
-
handler:
|
|
3070
|
+
handler: _c,
|
|
3023
3071
|
minArgs: 4,
|
|
3024
3072
|
maxArgs: 6,
|
|
3025
3073
|
description: "Calculates the payment on the principal for a given period for an investment",
|
|
3026
3074
|
examples: ["PPMT(0.06/12, 1, 30*12, 250000)", "PPMT(A1, A2, A3, A4)"],
|
|
3027
3075
|
category: "Financial"
|
|
3028
|
-
}),
|
|
3076
|
+
}), A.register({
|
|
3029
3077
|
name: "NPV",
|
|
3030
|
-
handler: (e, t) =>
|
|
3078
|
+
handler: (e, t) => oc(j(t.evaluateFormula(O(t, e, 0))), vc(e.slice(1), t)),
|
|
3031
3079
|
minArgs: 2,
|
|
3032
3080
|
description: "Calculates the net present value of an investment based on a discount rate and a series of future cash flows",
|
|
3033
3081
|
examples: ["NPV(0.1, -10000, 3000, 4200, 6800)", "NPV(A1, B1:B10)"],
|
|
3034
3082
|
category: "Financial"
|
|
3035
|
-
}),
|
|
3083
|
+
}), A.register({
|
|
3036
3084
|
name: "IRR",
|
|
3037
3085
|
handler: (e, t) => {
|
|
3038
|
-
let n = t.getRangeValues(
|
|
3086
|
+
let n = t.getRangeValues(O(t, e, 0)).map(j), r = e.length === 2 ? j(t.evaluateFormula(O(t, e, 1))) : .1;
|
|
3039
3087
|
if (n.length === 0) throw Error("IRR requires at least one value");
|
|
3040
|
-
return
|
|
3088
|
+
return cc(n, r);
|
|
3041
3089
|
},
|
|
3042
3090
|
minArgs: 1,
|
|
3043
3091
|
maxArgs: 2,
|
|
@@ -3047,7 +3095,7 @@ k.register({
|
|
|
3047
3095
|
});
|
|
3048
3096
|
//#endregion
|
|
3049
3097
|
//#region src/engine/parser.ts
|
|
3050
|
-
function
|
|
3098
|
+
function yc(e) {
|
|
3051
3099
|
let t = 0;
|
|
3052
3100
|
for (let n = 0; n < e.length; n++) t = t * 26 + (e.charCodeAt(n) - 64);
|
|
3053
3101
|
return t - 1;
|
|
@@ -3062,29 +3110,29 @@ function J(e) {
|
|
|
3062
3110
|
}
|
|
3063
3111
|
//#endregion
|
|
3064
3112
|
//#region src/engine/formulaRefs.ts
|
|
3065
|
-
var
|
|
3066
|
-
function
|
|
3113
|
+
var bc = /\$?[A-Z]+\$?\d+:\$?[A-Z]+\$?\d+/g, xc = /\$?[A-Z]+\$?\d+/g;
|
|
3114
|
+
function Sc(e) {
|
|
3067
3115
|
return e.startsWith("=") ? e.slice(1) : e;
|
|
3068
3116
|
}
|
|
3069
|
-
var
|
|
3070
|
-
function
|
|
3071
|
-
let [, t, n] = e.match(
|
|
3117
|
+
var Cc = /^([A-Z]+)(\d+)$/;
|
|
3118
|
+
function wc(e) {
|
|
3119
|
+
let [, t, n] = e.match(Cc) ?? [];
|
|
3072
3120
|
return t === void 0 || n === void 0 ? null : {
|
|
3073
|
-
col:
|
|
3121
|
+
col: yc(t),
|
|
3074
3122
|
rowNumber: parseInt(n, 10)
|
|
3075
3123
|
};
|
|
3076
3124
|
}
|
|
3077
|
-
function
|
|
3125
|
+
function Tc(e) {
|
|
3078
3126
|
let [t, n, ...r] = e.split(":");
|
|
3079
3127
|
if (t === void 0 || n === void 0 || r.length > 0) return null;
|
|
3080
|
-
let i =
|
|
3128
|
+
let i = wc(t), a = wc(n);
|
|
3081
3129
|
return i && a ? {
|
|
3082
3130
|
start: i,
|
|
3083
3131
|
end: a
|
|
3084
3132
|
} : null;
|
|
3085
3133
|
}
|
|
3086
|
-
function
|
|
3087
|
-
let t =
|
|
3134
|
+
function Ec(e) {
|
|
3135
|
+
let t = Tc(e.replace(/\$/g, ""));
|
|
3088
3136
|
if (!t) return [];
|
|
3089
3137
|
let { start: n, end: r } = t, i = [];
|
|
3090
3138
|
for (let e = n.rowNumber - 1; e <= r.rowNumber - 1; e++) for (let t = n.col; t <= r.col; t++) i.push({
|
|
@@ -3093,25 +3141,25 @@ function yc(e) {
|
|
|
3093
3141
|
});
|
|
3094
3142
|
return i;
|
|
3095
3143
|
}
|
|
3096
|
-
function
|
|
3144
|
+
function Dc(e) {
|
|
3097
3145
|
let t = e.trim().toUpperCase();
|
|
3098
3146
|
if (t.includes(":")) {
|
|
3099
|
-
let e =
|
|
3147
|
+
let e = Ec(t);
|
|
3100
3148
|
return e.length > 0 ? e : null;
|
|
3101
3149
|
}
|
|
3102
|
-
let n =
|
|
3150
|
+
let n = Oc(t);
|
|
3103
3151
|
return n ? [n] : null;
|
|
3104
3152
|
}
|
|
3105
|
-
function
|
|
3106
|
-
let t =
|
|
3153
|
+
function Oc(e) {
|
|
3154
|
+
let t = wc(e.replace(/\$/g, ""));
|
|
3107
3155
|
return t ? {
|
|
3108
3156
|
col: t.col,
|
|
3109
3157
|
row: t.rowNumber - 1
|
|
3110
3158
|
} : null;
|
|
3111
3159
|
}
|
|
3112
|
-
var
|
|
3113
|
-
function
|
|
3114
|
-
let t = e.lastIndexOf("!"), n = t >= 0 ? e.slice(0, t + 1) : "", r = t >= 0 ? e.slice(t + 1) : e, i = r.split(":").every((e) =>
|
|
3160
|
+
var kc = /^\$?[A-Za-z]+\$?\d+$/;
|
|
3161
|
+
function Ac(e) {
|
|
3162
|
+
let t = e.lastIndexOf("!"), n = t >= 0 ? e.slice(0, t + 1) : "", r = t >= 0 ? e.slice(t + 1) : e, i = r.split(":").every((e) => kc.test(e)) ? Tc(r.replace(/\$/g, "").toUpperCase()) : null;
|
|
3115
3163
|
if (!i) return null;
|
|
3116
3164
|
let { start: a, end: o } = i;
|
|
3117
3165
|
return {
|
|
@@ -3122,38 +3170,38 @@ function Cc(e) {
|
|
|
3122
3170
|
endRow: o.rowNumber
|
|
3123
3171
|
};
|
|
3124
3172
|
}
|
|
3125
|
-
var
|
|
3126
|
-
function
|
|
3173
|
+
var jc = 0, Mc = 1;
|
|
3174
|
+
function Nc(e, t) {
|
|
3127
3175
|
let n = Math.trunc(e);
|
|
3128
|
-
return Number.isFinite(n) ? n ===
|
|
3176
|
+
return Number.isFinite(n) ? n === jc ? t === 1 ? 0 : null : n < Mc || n > t ? null : n - Mc : null;
|
|
3129
3177
|
}
|
|
3130
|
-
function
|
|
3131
|
-
let r =
|
|
3178
|
+
function Pc(e, t, n) {
|
|
3179
|
+
let r = Nc(t, e.endRow - e.startRow + 1), i = Nc(n, e.endCol - e.startCol + 1);
|
|
3132
3180
|
return r === null || i === null ? null : {
|
|
3133
3181
|
colIndex: e.startCol + i,
|
|
3134
3182
|
row: e.startRow + r
|
|
3135
3183
|
};
|
|
3136
3184
|
}
|
|
3137
|
-
function
|
|
3185
|
+
function Fc(e, t) {
|
|
3138
3186
|
let n = Math.trunc(e);
|
|
3139
|
-
return !Number.isFinite(n) || n <
|
|
3187
|
+
return !Number.isFinite(n) || n < Mc || n > t ? null : n - Mc;
|
|
3140
3188
|
}
|
|
3141
|
-
function
|
|
3142
|
-
let t =
|
|
3189
|
+
function Ic(e) {
|
|
3190
|
+
let t = Sc(e), n = [], r = /* @__PURE__ */ new Set(), i = (e) => {
|
|
3143
3191
|
let t = `${e.row},${e.col}`;
|
|
3144
3192
|
r.has(t) || (r.add(t), n.push(e));
|
|
3145
3193
|
};
|
|
3146
|
-
for (let e of t.match(
|
|
3147
|
-
let a = t.replace(
|
|
3148
|
-
for (let e of a.match(
|
|
3149
|
-
let t =
|
|
3194
|
+
for (let e of t.match(bc) ?? []) for (let t of Ec(e)) i(t);
|
|
3195
|
+
let a = t.replace(bc, "");
|
|
3196
|
+
for (let e of a.match(xc) ?? []) {
|
|
3197
|
+
let t = Oc(e);
|
|
3150
3198
|
t && i(t);
|
|
3151
3199
|
}
|
|
3152
3200
|
return n;
|
|
3153
3201
|
}
|
|
3154
3202
|
//#endregion
|
|
3155
3203
|
//#region src/engine/functions/lookup-math.ts
|
|
3156
|
-
function
|
|
3204
|
+
function Lc(e) {
|
|
3157
3205
|
if (typeof e == "boolean") return e;
|
|
3158
3206
|
if (typeof e == "number") return e !== 0;
|
|
3159
3207
|
if (S(e)) return !1;
|
|
@@ -3162,24 +3210,24 @@ function Ac(e) {
|
|
|
3162
3210
|
}
|
|
3163
3211
|
//#endregion
|
|
3164
3212
|
//#region src/engine/functions/lookup.ts
|
|
3165
|
-
var
|
|
3213
|
+
var Rc = (e, t) => Array.from({ length: Math.max(0, t - e + 1) }, (t, n) => e + n), zc = (e, t, n, r, i) => Rc(r, i).map((r) => e.getCellValue(`${t}${n}${r}`)), Bc = (e, t, n, r, i) => Rc(r, i).map((r) => e.getCellValue(`${t}${J(r)}${n}`)), Vc = (e, t) => e.reduce((e, n, r) => t(n) ? r : e, -1), Hc = (e, t) => {
|
|
3166
3214
|
let n = e.findIndex((e) => !t(e));
|
|
3167
3215
|
return (n === -1 ? e.length : n) - 1;
|
|
3168
|
-
},
|
|
3216
|
+
}, Uc = (e, t) => typeof e == "number" && typeof t == "number" ? e - t : String(e).localeCompare(String(t)), Wc = (e, t, n = 1, r = 1) => {
|
|
3169
3217
|
if (n === 0) {
|
|
3170
|
-
let n = typeof e == "string" && (e.includes("*") || e.includes("?")) ?
|
|
3171
|
-
return r === 1 ? t.findIndex(n) :
|
|
3218
|
+
let n = typeof e == "string" && (e.includes("*") || e.includes("?")) ? pt(e) : (t) => t == e;
|
|
3219
|
+
return r === 1 ? t.findIndex(n) : Vc(t, n);
|
|
3172
3220
|
}
|
|
3173
|
-
return n === 1 ?
|
|
3221
|
+
return n === 1 ? Hc(t, (t) => Uc(t, e) <= 0) : n === -1 ? Hc(t, (t) => Uc(t, e) >= 0) : -1;
|
|
3174
3222
|
};
|
|
3175
|
-
|
|
3223
|
+
A.register({
|
|
3176
3224
|
name: "VLOOKUP",
|
|
3177
3225
|
handler: (e, t) => {
|
|
3178
|
-
let n = t.evaluateFormula(
|
|
3226
|
+
let n = t.evaluateFormula(O(t, e, 0)), r = Ac(O(t, e, 1));
|
|
3179
3227
|
if (!r) throw Error("Invalid table array range");
|
|
3180
|
-
let i =
|
|
3228
|
+
let i = j(t.evaluateFormula(O(t, e, 2))), a = +!!Lc(e.length !== 4 || t.evaluateFormula(O(t, e, 3))), o = Fc(i, r.endCol - r.startCol + 1);
|
|
3181
3229
|
if (o === null) return De;
|
|
3182
|
-
let s = J(r.startCol), c =
|
|
3230
|
+
let s = J(r.startCol), c = Wc(n, zc(t, r.sheetPrefix, s, r.startRow, r.endRow), a);
|
|
3183
3231
|
if (c === -1) return x;
|
|
3184
3232
|
let l = J(r.startCol + o), u = r.startRow + c;
|
|
3185
3233
|
return t.getCellValue(`${r.sheetPrefix}${l}${u}`);
|
|
@@ -3189,14 +3237,14 @@ k.register({
|
|
|
3189
3237
|
description: "Looks for a value in the leftmost column of a table, and then returns a value in the same row from a column you specify",
|
|
3190
3238
|
examples: ["VLOOKUP(105, A2:C10, 2)", "VLOOKUP(\"Smith\", A2:E10, 5, FALSE)"],
|
|
3191
3239
|
category: "Lookup & Reference"
|
|
3192
|
-
}),
|
|
3240
|
+
}), A.register({
|
|
3193
3241
|
name: "HLOOKUP",
|
|
3194
3242
|
handler: (e, t) => {
|
|
3195
|
-
let n = t.evaluateFormula(
|
|
3243
|
+
let n = t.evaluateFormula(O(t, e, 0)), r = Ac(O(t, e, 1));
|
|
3196
3244
|
if (!r) throw Error("Invalid range format");
|
|
3197
|
-
let i =
|
|
3245
|
+
let i = j(t.evaluateFormula(O(t, e, 2))), a = +!!Lc(e.length !== 4 || t.evaluateFormula(O(t, e, 3))), o = Fc(i, r.endRow - r.startRow + 1);
|
|
3198
3246
|
if (o === null) return De;
|
|
3199
|
-
let s =
|
|
3247
|
+
let s = Wc(n, Bc(t, r.sheetPrefix, r.startRow, r.startCol, r.endCol), a);
|
|
3200
3248
|
if (s === -1) return x;
|
|
3201
3249
|
let c = J(r.startCol + s), l = r.startRow + o;
|
|
3202
3250
|
return t.getCellValue(`${r.sheetPrefix}${c}${l}`);
|
|
@@ -3206,10 +3254,10 @@ k.register({
|
|
|
3206
3254
|
description: "Looks for a value in the top row of a table, and then returns a value in the same column from a row you specify",
|
|
3207
3255
|
examples: ["HLOOKUP(\"Axles\", A1:C10, 2, TRUE)"],
|
|
3208
3256
|
category: "Lookup & Reference"
|
|
3209
|
-
}),
|
|
3257
|
+
}), A.register({
|
|
3210
3258
|
name: "MATCH",
|
|
3211
3259
|
handler: (e, t) => {
|
|
3212
|
-
let n = t.evaluateFormula(
|
|
3260
|
+
let n = t.evaluateFormula(O(t, e, 0)), r = O(t, e, 1), i = e.length === 3 ? j(t.evaluateFormula(O(t, e, 2))) : 1, a = Wc(n, it(t)(r), i);
|
|
3213
3261
|
return a === -1 ? x : a + 1;
|
|
3214
3262
|
},
|
|
3215
3263
|
minArgs: 2,
|
|
@@ -3217,12 +3265,12 @@ k.register({
|
|
|
3217
3265
|
description: "Returns the relative position of an item in an array that matches a specified value",
|
|
3218
3266
|
examples: ["MATCH(25, A1:A10, 0)", "MATCH(\"b\", A1:A5, 0)"],
|
|
3219
3267
|
category: "Lookup & Reference"
|
|
3220
|
-
}),
|
|
3268
|
+
}), A.register({
|
|
3221
3269
|
name: "INDEX",
|
|
3222
3270
|
handler: (e, t) => {
|
|
3223
|
-
let n =
|
|
3271
|
+
let n = Ac(O(t, e, 0));
|
|
3224
3272
|
if (!n) throw Error("Invalid range format");
|
|
3225
|
-
let r =
|
|
3273
|
+
let r = Pc(n, j(t.evaluateFormula(O(t, e, 1))), e.length >= 3 ? j(t.evaluateFormula(O(t, e, 2))) : 1);
|
|
3226
3274
|
return r ? t.getCellValue(`${n.sheetPrefix}${J(r.colIndex)}${r.row}`) : De;
|
|
3227
3275
|
},
|
|
3228
3276
|
minArgs: 2,
|
|
@@ -3230,11 +3278,11 @@ k.register({
|
|
|
3230
3278
|
description: "Returns the value of an element in a table or an array, selected by the row and column number indexes",
|
|
3231
3279
|
examples: ["INDEX(A1:B5, 2, 2)", "INDEX(A1:A10, 5)"],
|
|
3232
3280
|
category: "Lookup & Reference"
|
|
3233
|
-
}),
|
|
3281
|
+
}), A.register({
|
|
3234
3282
|
name: "XLOOKUP",
|
|
3235
3283
|
handler: (e, t) => {
|
|
3236
|
-
let n = t.evaluateFormula(
|
|
3237
|
-
if (o === 0 || o === 2) d =
|
|
3284
|
+
let n = t.evaluateFormula(O(t, e, 0)), r = O(t, e, 1), i = O(t, e, 2), a = e.length >= 4 ? t.evaluateFormula(O(t, e, 3)) : x, o = e.length >= 5 ? j(t.evaluateFormula(O(t, e, 4))) : 0, s = e.length >= 6 ? j(t.evaluateFormula(O(t, e, 5))) : 1, c = it(t), l = c(r), u = c(i), d = -1;
|
|
3285
|
+
if (o === 0 || o === 2) d = Wc(n, l, 0, s);
|
|
3238
3286
|
else {
|
|
3239
3287
|
let e = Infinity;
|
|
3240
3288
|
for (let t = 0; t < l.length; t++) {
|
|
@@ -3261,14 +3309,14 @@ k.register({
|
|
|
3261
3309
|
});
|
|
3262
3310
|
//#endregion
|
|
3263
3311
|
//#region src/engine/datedif.ts
|
|
3264
|
-
var
|
|
3265
|
-
function
|
|
3312
|
+
var Gc = 864e5, Y = 12;
|
|
3313
|
+
function Kc(e, t) {
|
|
3266
3314
|
let n = e.getUTCMonth() + t, r = e.getUTCFullYear() + Math.floor(n / Y), i = (n % Y + Y) % Y, a = new Date(Date.UTC(r, i + 1, 0)).getUTCDate(), o = Math.min(e.getUTCDate(), a);
|
|
3267
3315
|
return new Date(Date.UTC(r, i, o));
|
|
3268
3316
|
}
|
|
3269
|
-
function
|
|
3317
|
+
function qc(e, t, n) {
|
|
3270
3318
|
if (e > t) return b;
|
|
3271
|
-
let r =
|
|
3319
|
+
let r = E(e), i = E(t), a = i.getUTCFullYear() - r.getUTCFullYear(), o = i.getUTCMonth() - r.getUTCMonth(), s = i.getUTCDate() - r.getUTCDate();
|
|
3272
3320
|
switch (n.toUpperCase()) {
|
|
3273
3321
|
case "Y": {
|
|
3274
3322
|
let e = a;
|
|
@@ -3280,8 +3328,8 @@ function Bc(e, t, n) {
|
|
|
3280
3328
|
}
|
|
3281
3329
|
case "D": return Math.floor(t - e);
|
|
3282
3330
|
case "MD": {
|
|
3283
|
-
let e =
|
|
3284
|
-
return Math.round((t - e.getTime()) /
|
|
3331
|
+
let e = Kc(r, a * Y + o - +(s < 0)), t = Date.UTC(i.getUTCFullYear(), i.getUTCMonth(), i.getUTCDate());
|
|
3332
|
+
return Math.round((t - e.getTime()) / Gc);
|
|
3285
3333
|
}
|
|
3286
3334
|
case "YM": {
|
|
3287
3335
|
let e = s < 0 ? o - 1 : o;
|
|
@@ -3289,48 +3337,48 @@ function Bc(e, t, n) {
|
|
|
3289
3337
|
}
|
|
3290
3338
|
case "YD": {
|
|
3291
3339
|
let e = new Date(r);
|
|
3292
|
-
return e.setUTCFullYear(i.getUTCFullYear()), e.getTime() - i.getTime() > 0 && e.setUTCFullYear(i.getUTCFullYear() - 1), Math.floor((i.getTime() - e.getTime()) /
|
|
3340
|
+
return e.setUTCFullYear(i.getUTCFullYear()), e.getTime() - i.getTime() > 0 && e.setUTCFullYear(i.getUTCFullYear() - 1), Math.floor((i.getTime() - e.getTime()) / Gc);
|
|
3293
3341
|
}
|
|
3294
3342
|
default: return b;
|
|
3295
3343
|
}
|
|
3296
3344
|
}
|
|
3297
|
-
|
|
3345
|
+
A.register({
|
|
3298
3346
|
name: "NOW",
|
|
3299
3347
|
handler: () => {
|
|
3300
3348
|
let e = /* @__PURE__ */ new Date();
|
|
3301
|
-
return
|
|
3349
|
+
return T(new Date(Date.UTC(e.getFullYear(), e.getMonth(), e.getDate(), e.getHours(), e.getMinutes(), e.getSeconds())));
|
|
3302
3350
|
},
|
|
3303
3351
|
minArgs: 0,
|
|
3304
3352
|
maxArgs: 0,
|
|
3305
3353
|
description: "Returns the serial number of the current date and time",
|
|
3306
3354
|
examples: ["NOW()"],
|
|
3307
3355
|
category: "Date & Time"
|
|
3308
|
-
}),
|
|
3356
|
+
}), A.register({
|
|
3309
3357
|
name: "TODAY",
|
|
3310
3358
|
handler: () => {
|
|
3311
3359
|
let e = /* @__PURE__ */ new Date();
|
|
3312
|
-
return
|
|
3360
|
+
return T(new Date(Date.UTC(e.getFullYear(), e.getMonth(), e.getDate())));
|
|
3313
3361
|
},
|
|
3314
3362
|
minArgs: 0,
|
|
3315
3363
|
maxArgs: 0,
|
|
3316
3364
|
description: "Returns the serial number of today's date",
|
|
3317
3365
|
examples: ["TODAY()"],
|
|
3318
3366
|
category: "Date & Time"
|
|
3319
|
-
}),
|
|
3367
|
+
}), A.register({
|
|
3320
3368
|
name: "DATE",
|
|
3321
3369
|
handler: (e, t) => {
|
|
3322
|
-
let n =
|
|
3323
|
-
return
|
|
3370
|
+
let n = j(t.evaluateFormula(O(t, e, 0))), r = j(t.evaluateFormula(O(t, e, 1))), i = j(t.evaluateFormula(O(t, e, 2)));
|
|
3371
|
+
return T(new Date(Date.UTC(n, r - 1, i)));
|
|
3324
3372
|
},
|
|
3325
3373
|
minArgs: 3,
|
|
3326
3374
|
maxArgs: 3,
|
|
3327
3375
|
description: "Returns the serial number that represents a particular date",
|
|
3328
3376
|
examples: ["DATE(2023, 11, 25)"],
|
|
3329
3377
|
category: "Date & Time"
|
|
3330
|
-
}),
|
|
3378
|
+
}), A.register({
|
|
3331
3379
|
name: "TIME",
|
|
3332
3380
|
handler: (e, t) => {
|
|
3333
|
-
let n =
|
|
3381
|
+
let n = j(t.evaluateFormula(O(t, e, 0))), r = j(t.evaluateFormula(O(t, e, 1))), i = j(t.evaluateFormula(O(t, e, 2))), a = n * 3600 + r * 60 + i, o = 86400;
|
|
3334
3382
|
return a % o / o;
|
|
3335
3383
|
},
|
|
3336
3384
|
minArgs: 3,
|
|
@@ -3338,34 +3386,34 @@ k.register({
|
|
|
3338
3386
|
description: "Returns the serial number of a particular time",
|
|
3339
3387
|
examples: ["TIME(14, 30, 0)"],
|
|
3340
3388
|
category: "Date & Time"
|
|
3341
|
-
}),
|
|
3389
|
+
}), A.register({
|
|
3342
3390
|
name: "YEAR",
|
|
3343
|
-
handler: (e, t) =>
|
|
3391
|
+
handler: (e, t) => E(j(t.evaluateFormula(O(t, e, 0)))).getUTCFullYear(),
|
|
3344
3392
|
minArgs: 1,
|
|
3345
3393
|
maxArgs: 1,
|
|
3346
3394
|
description: "Converts a serial number to a year",
|
|
3347
3395
|
examples: ["YEAR(TODAY())", "YEAR(A1)"],
|
|
3348
3396
|
category: "Date & Time"
|
|
3349
|
-
}),
|
|
3397
|
+
}), A.register({
|
|
3350
3398
|
name: "MONTH",
|
|
3351
|
-
handler: (e, t) =>
|
|
3399
|
+
handler: (e, t) => E(j(t.evaluateFormula(O(t, e, 0)))).getUTCMonth() + 1,
|
|
3352
3400
|
minArgs: 1,
|
|
3353
3401
|
maxArgs: 1,
|
|
3354
3402
|
description: "Converts a serial number to a month",
|
|
3355
3403
|
examples: ["MONTH(TODAY())", "MONTH(A1)"],
|
|
3356
3404
|
category: "Date & Time"
|
|
3357
|
-
}),
|
|
3405
|
+
}), A.register({
|
|
3358
3406
|
name: "DAY",
|
|
3359
|
-
handler: (e, t) =>
|
|
3407
|
+
handler: (e, t) => E(j(t.evaluateFormula(O(t, e, 0)))).getUTCDate(),
|
|
3360
3408
|
minArgs: 1,
|
|
3361
3409
|
maxArgs: 1,
|
|
3362
3410
|
description: "Converts a serial number to a day of the month",
|
|
3363
3411
|
examples: ["DAY(TODAY())", "DAY(A1)"],
|
|
3364
3412
|
category: "Date & Time"
|
|
3365
|
-
}),
|
|
3413
|
+
}), A.register({
|
|
3366
3414
|
name: "HOUR",
|
|
3367
3415
|
handler: (e, t) => {
|
|
3368
|
-
let n =
|
|
3416
|
+
let n = j(t.evaluateFormula(O(t, e, 0))), r = n - Math.floor(n), i = Math.round(r * 86400);
|
|
3369
3417
|
return Math.floor(i / 3600);
|
|
3370
3418
|
},
|
|
3371
3419
|
minArgs: 1,
|
|
@@ -3373,10 +3421,10 @@ k.register({
|
|
|
3373
3421
|
description: "Converts a serial number to an hour",
|
|
3374
3422
|
examples: ["HOUR(NOW())", "HOUR(A1)"],
|
|
3375
3423
|
category: "Date & Time"
|
|
3376
|
-
}),
|
|
3424
|
+
}), A.register({
|
|
3377
3425
|
name: "MINUTE",
|
|
3378
3426
|
handler: (e, t) => {
|
|
3379
|
-
let n =
|
|
3427
|
+
let n = j(t.evaluateFormula(O(t, e, 0))), r = n - Math.floor(n), i = Math.round(r * 86400);
|
|
3380
3428
|
return Math.floor(i % 3600 / 60);
|
|
3381
3429
|
},
|
|
3382
3430
|
minArgs: 1,
|
|
@@ -3384,10 +3432,10 @@ k.register({
|
|
|
3384
3432
|
description: "Converts a serial number to a minute",
|
|
3385
3433
|
examples: ["MINUTE(NOW())", "MINUTE(A1)"],
|
|
3386
3434
|
category: "Date & Time"
|
|
3387
|
-
}),
|
|
3435
|
+
}), A.register({
|
|
3388
3436
|
name: "SECOND",
|
|
3389
3437
|
handler: (e, t) => {
|
|
3390
|
-
let n =
|
|
3438
|
+
let n = j(t.evaluateFormula(O(t, e, 0))), r = n - Math.floor(n);
|
|
3391
3439
|
return Math.round(r * 86400) % 60;
|
|
3392
3440
|
},
|
|
3393
3441
|
minArgs: 1,
|
|
@@ -3395,9 +3443,9 @@ k.register({
|
|
|
3395
3443
|
description: "Converts a serial number to a second",
|
|
3396
3444
|
examples: ["SECOND(NOW())", "SECOND(A1)"],
|
|
3397
3445
|
category: "Date & Time"
|
|
3398
|
-
}),
|
|
3446
|
+
}), A.register({
|
|
3399
3447
|
name: "DATEDIF",
|
|
3400
|
-
handler: (e, t) =>
|
|
3448
|
+
handler: (e, t) => qc(j(t.evaluateFormula(O(t, e, 0))), j(t.evaluateFormula(O(t, e, 1))), st(t.evaluateFormula(O(t, e, 2)))),
|
|
3401
3449
|
minArgs: 3,
|
|
3402
3450
|
maxArgs: 3,
|
|
3403
3451
|
description: "Calculates the number of days, months, or years between two dates",
|
|
@@ -3406,7 +3454,7 @@ k.register({
|
|
|
3406
3454
|
});
|
|
3407
3455
|
//#endregion
|
|
3408
3456
|
//#region src/engine/date-calendar.ts
|
|
3409
|
-
var X = 7,
|
|
3457
|
+
var X = 7, Jc = 5, Yc = 0, Xc = 6, Zc = Xc, Z = (e) => Math.floor(e), Q = (e) => Number.isFinite(e) && e >= 0 && e <= 2958465, Qc = (e) => ((Z(e) + Zc) % X + X) % X, $c = {
|
|
3410
3458
|
1: 0,
|
|
3411
3459
|
2: 1,
|
|
3412
3460
|
11: 1,
|
|
@@ -3416,75 +3464,75 @@ var X = 7, Vc = 5, Hc = 0, Uc = 6, Wc = Uc, Z = (e) => Math.floor(e), Q = (e) =>
|
|
|
3416
3464
|
15: 5,
|
|
3417
3465
|
16: 6,
|
|
3418
3466
|
17: 0
|
|
3419
|
-
},
|
|
3420
|
-
function
|
|
3467
|
+
}, el = 3;
|
|
3468
|
+
function tl(e, t = 1) {
|
|
3421
3469
|
if (!Q(e)) return b;
|
|
3422
|
-
let n =
|
|
3423
|
-
if (t ===
|
|
3424
|
-
let r =
|
|
3470
|
+
let n = Qc(e);
|
|
3471
|
+
if (t === el) return (n + X - 1) % X;
|
|
3472
|
+
let r = $c[t];
|
|
3425
3473
|
return r === void 0 ? b : (n - r + X) % X + 1;
|
|
3426
3474
|
}
|
|
3427
|
-
function
|
|
3475
|
+
function nl(e, t) {
|
|
3428
3476
|
return !Q(e) || !Q(t) ? b : Z(e) - Z(t);
|
|
3429
3477
|
}
|
|
3430
|
-
var
|
|
3431
|
-
function
|
|
3478
|
+
var rl = (e, t) => new Date(Date.UTC(e, t + 1, 0)).getUTCDate(), il = (e) => Q(e) ? e : b;
|
|
3479
|
+
function al(e, t) {
|
|
3432
3480
|
if (!Q(e) || !Number.isFinite(t)) return b;
|
|
3433
|
-
let n =
|
|
3434
|
-
return
|
|
3481
|
+
let n = E(Z(e)), r = n.getUTCFullYear(), i = n.getUTCMonth() + Math.trunc(t), a = Math.min(n.getUTCDate(), rl(r, i));
|
|
3482
|
+
return il(T(new Date(Date.UTC(r, i, a))));
|
|
3435
3483
|
}
|
|
3436
|
-
function
|
|
3484
|
+
function ol(e, t) {
|
|
3437
3485
|
if (!Q(e) || !Number.isFinite(t)) return b;
|
|
3438
|
-
let n =
|
|
3439
|
-
return
|
|
3440
|
-
}
|
|
3441
|
-
var
|
|
3442
|
-
let t =
|
|
3443
|
-
return t !==
|
|
3444
|
-
},
|
|
3445
|
-
function
|
|
3486
|
+
let n = E(Z(e));
|
|
3487
|
+
return il(T(new Date(Date.UTC(n.getUTCFullYear(), n.getUTCMonth() + Math.trunc(t) + 1, 0))));
|
|
3488
|
+
}
|
|
3489
|
+
var sl = (e) => {
|
|
3490
|
+
let t = Qc(e);
|
|
3491
|
+
return t !== Yc && t !== Xc;
|
|
3492
|
+
}, cl = (e) => new Set(e.map(Z));
|
|
3493
|
+
function ll(e, t, n = []) {
|
|
3446
3494
|
if (!Q(e) || !Number.isFinite(t)) return b;
|
|
3447
|
-
let r =
|
|
3495
|
+
let r = cl(n), i = Math.sign(t), a = {
|
|
3448
3496
|
date: Z(e),
|
|
3449
3497
|
left: Math.abs(Math.trunc(t))
|
|
3450
3498
|
};
|
|
3451
3499
|
for (; a.left > 0;) {
|
|
3452
3500
|
if (a.date += i, !Q(a.date)) return b;
|
|
3453
|
-
|
|
3501
|
+
sl(a.date) && !r.has(a.date) && --a.left;
|
|
3454
3502
|
}
|
|
3455
3503
|
return a.date;
|
|
3456
3504
|
}
|
|
3457
|
-
function
|
|
3505
|
+
function ul(e, t) {
|
|
3458
3506
|
let n = t - e + 1, r = Math.floor(n / X), i = Array.from({ length: n % X }, (t, n) => e + r * X + n);
|
|
3459
|
-
return r *
|
|
3507
|
+
return r * Jc + i.filter(sl).length;
|
|
3460
3508
|
}
|
|
3461
|
-
function
|
|
3509
|
+
function dl(e, t, n = []) {
|
|
3462
3510
|
if (!Q(e) || !Q(t)) return b;
|
|
3463
|
-
let [r, i] = [Z(e), Z(t)], [a, o] = r <= i ? [r, i] : [i, r], s = [...
|
|
3511
|
+
let [r, i] = [Z(e), Z(t)], [a, o] = r <= i ? [r, i] : [i, r], s = [...cl(n)].filter((e) => e >= a && e <= o && sl(e)).length, c = ul(a, o) - s;
|
|
3464
3512
|
return r <= i ? c : -c;
|
|
3465
3513
|
}
|
|
3466
3514
|
//#endregion
|
|
3467
3515
|
//#region src/engine/functions/calendar.ts
|
|
3468
|
-
var $ = (e, t, n) => w(t.evaluateFormula(
|
|
3469
|
-
function
|
|
3516
|
+
var $ = (e, t, n) => w(t.evaluateFormula(O(t, e, n))), fl = (e) => e.find(S) ?? e.filter((e) => typeof e == "number");
|
|
3517
|
+
function pl(e, t, n) {
|
|
3470
3518
|
if (e.length <= n) return [];
|
|
3471
|
-
let r =
|
|
3472
|
-
return r.length === 0 ?
|
|
3519
|
+
let r = it(t)(O(t, e, n));
|
|
3520
|
+
return r.length === 0 ? fl([$(e, t, n)]) : r.find(S) ?? r.filter(C).map(j);
|
|
3473
3521
|
}
|
|
3474
|
-
var
|
|
3475
|
-
let n =
|
|
3522
|
+
var ml = (e, t) => {
|
|
3523
|
+
let n = fl([$(e, t, 0), e.length > 1 ? $(e, t, 1) : 1]);
|
|
3476
3524
|
if (S(n)) return n;
|
|
3477
3525
|
let [r = 0, i = 1] = n;
|
|
3478
|
-
return
|
|
3479
|
-
},
|
|
3480
|
-
let r =
|
|
3526
|
+
return tl(r, i);
|
|
3527
|
+
}, hl = (e) => (t, n) => {
|
|
3528
|
+
let r = fl([$(t, n, 0), $(t, n, 1)]);
|
|
3481
3529
|
if (S(r)) return r;
|
|
3482
3530
|
let [i = 0, a = 0] = r;
|
|
3483
3531
|
return e(i, a);
|
|
3484
|
-
},
|
|
3485
|
-
let r =
|
|
3532
|
+
}, gl = (e) => (t, n) => {
|
|
3533
|
+
let r = fl([$(t, n, 0), $(t, n, 1)]);
|
|
3486
3534
|
if (S(r)) return r;
|
|
3487
|
-
let i =
|
|
3535
|
+
let i = pl(t, n, 2);
|
|
3488
3536
|
if (S(i)) return i;
|
|
3489
3537
|
let [a = 0, o = 0] = r;
|
|
3490
3538
|
return e(a, o, i);
|
|
@@ -3494,7 +3542,7 @@ var sl = (e, t) => {
|
|
|
3494
3542
|
[
|
|
3495
3543
|
{
|
|
3496
3544
|
name: "WEEKDAY",
|
|
3497
|
-
handler:
|
|
3545
|
+
handler: ml,
|
|
3498
3546
|
minArgs: 1,
|
|
3499
3547
|
maxArgs: 2,
|
|
3500
3548
|
description: "Returns the day of the week (1 = Sunday by default)",
|
|
@@ -3502,7 +3550,7 @@ var sl = (e, t) => {
|
|
|
3502
3550
|
},
|
|
3503
3551
|
{
|
|
3504
3552
|
name: "DAYS",
|
|
3505
|
-
handler:
|
|
3553
|
+
handler: hl(nl),
|
|
3506
3554
|
minArgs: 2,
|
|
3507
3555
|
maxArgs: 2,
|
|
3508
3556
|
description: "Returns the number of days between two dates",
|
|
@@ -3510,7 +3558,7 @@ var sl = (e, t) => {
|
|
|
3510
3558
|
},
|
|
3511
3559
|
{
|
|
3512
3560
|
name: "EDATE",
|
|
3513
|
-
handler:
|
|
3561
|
+
handler: hl(al),
|
|
3514
3562
|
minArgs: 2,
|
|
3515
3563
|
maxArgs: 2,
|
|
3516
3564
|
description: "Returns the date a number of months before or after a date",
|
|
@@ -3518,7 +3566,7 @@ var sl = (e, t) => {
|
|
|
3518
3566
|
},
|
|
3519
3567
|
{
|
|
3520
3568
|
name: "EOMONTH",
|
|
3521
|
-
handler:
|
|
3569
|
+
handler: hl(ol),
|
|
3522
3570
|
minArgs: 2,
|
|
3523
3571
|
maxArgs: 2,
|
|
3524
3572
|
description: "Returns the last day of the month a number of months away",
|
|
@@ -3526,7 +3574,7 @@ var sl = (e, t) => {
|
|
|
3526
3574
|
},
|
|
3527
3575
|
{
|
|
3528
3576
|
name: "WORKDAY",
|
|
3529
|
-
handler: ll
|
|
3577
|
+
handler: gl(ll),
|
|
3530
3578
|
minArgs: 2,
|
|
3531
3579
|
maxArgs: 3,
|
|
3532
3580
|
description: "Returns the date a number of working days away, skipping weekends and holidays",
|
|
@@ -3534,13 +3582,13 @@ var sl = (e, t) => {
|
|
|
3534
3582
|
},
|
|
3535
3583
|
{
|
|
3536
3584
|
name: "NETWORKDAYS",
|
|
3537
|
-
handler:
|
|
3585
|
+
handler: gl(dl),
|
|
3538
3586
|
minArgs: 2,
|
|
3539
3587
|
maxArgs: 3,
|
|
3540
3588
|
description: "Returns the number of working days between two dates, both included",
|
|
3541
3589
|
examples: ["NETWORKDAYS(A2, B2)", "NETWORKDAYS(A2, B2, H2:H5)"]
|
|
3542
3590
|
}
|
|
3543
|
-
].forEach((e) =>
|
|
3591
|
+
].forEach((e) => A.register({
|
|
3544
3592
|
...e,
|
|
3545
3593
|
category: "Date & Time"
|
|
3546
3594
|
})), Object.entries({
|
|
@@ -3556,9 +3604,9 @@ var sl = (e, t) => {
|
|
|
3556
3604
|
FORECAST: "FORECAST.LINEAR",
|
|
3557
3605
|
PEARSON: "CORREL"
|
|
3558
3606
|
}).forEach(([e, t]) => {
|
|
3559
|
-
let n =
|
|
3607
|
+
let n = A.get(t);
|
|
3560
3608
|
if (!n) throw Error(`alias ${e} names ${t}, which is not registered`);
|
|
3561
|
-
|
|
3609
|
+
A.register({
|
|
3562
3610
|
...n,
|
|
3563
3611
|
name: e,
|
|
3564
3612
|
description: `Same as ${t}`,
|
|
@@ -3567,21 +3615,21 @@ var sl = (e, t) => {
|
|
|
3567
3615
|
});
|
|
3568
3616
|
//#endregion
|
|
3569
3617
|
//#region src/engine/customFunctionSpecs.ts
|
|
3570
|
-
var
|
|
3571
|
-
function
|
|
3572
|
-
return Array.isArray(e) ? e.filter(
|
|
3618
|
+
var _l = RegExp(`^${at}$`, "i"), vl = /^[A-Za-z_$][\w$]*$/, yl = 32, bl = (e) => typeof e == "object" && !!e && !Array.isArray(e), xl = (e) => Array.isArray(e) && e.every((e) => typeof e == "string"), Sl = (e) => bl(e) && typeof e.name == "string" && typeof e.body == "string" && xl(e.params) && (e.description === void 0 || typeof e.description == "string");
|
|
3619
|
+
function Cl(e) {
|
|
3620
|
+
return Array.isArray(e) ? e.filter(Sl) : [];
|
|
3573
3621
|
}
|
|
3574
|
-
function
|
|
3575
|
-
if (!
|
|
3622
|
+
function wl(e, t) {
|
|
3623
|
+
if (!_l.test(e.name)) return "a name is letters and digits, parts joined by dots (MOVING.AVG)";
|
|
3576
3624
|
if (t(e.name)) return `${e.name.toUpperCase()} is a built-in function`;
|
|
3577
|
-
if (e.params.length >
|
|
3578
|
-
let n = e.params.find((e) => !
|
|
3625
|
+
if (e.params.length > yl) return `at most ${yl} parameters`;
|
|
3626
|
+
let n = e.params.find((e) => !vl.test(e));
|
|
3579
3627
|
return n === void 0 ? new Set(e.params).size === e.params.length ? null : "a parameter is named twice" : `"${n}" is not a parameter name`;
|
|
3580
3628
|
}
|
|
3581
|
-
function
|
|
3629
|
+
function Tl(e, t) {
|
|
3582
3630
|
let n = /* @__PURE__ */ new Map(), r = [];
|
|
3583
3631
|
return e.forEach((e) => {
|
|
3584
|
-
let i = e.name.toUpperCase(), a = n.has(i) ? `${i} is defined twice` :
|
|
3632
|
+
let i = e.name.toUpperCase(), a = n.has(i) ? `${i} is defined twice` : wl(e, t);
|
|
3585
3633
|
a ? r.push({
|
|
3586
3634
|
name: e.name,
|
|
3587
3635
|
reason: a
|
|
@@ -3591,27 +3639,27 @@ function vl(e, t) {
|
|
|
3591
3639
|
problems: r
|
|
3592
3640
|
};
|
|
3593
3641
|
}
|
|
3594
|
-
var
|
|
3595
|
-
throw
|
|
3596
|
-
}), n(await
|
|
3642
|
+
var El = (e) => `Function(${[...e.params, `"use strict";\n${e.body}`].map((e) => JSON.stringify(e)).join(", ")})`, Dl = 50, Ol = 2e3, kl = 16777216, Al = 1048576, jl = 1e5, Ml = "(fn, args) => fn(...JSON.parse(args))", Nl = "(?:(?:'(?:[^']|'')+'|[^!'\"(),]+)!)?", Pl = RegExp(`^${Nl}\\$?[A-Z]+\\$?\\d+:\\$?[A-Z]+\\$?\\d+$`, "i"), Fl = RegExp(`^${Nl}\\$?[A-Z]+\\$?\\d+$`, "i"), Il = null, Ll = async () => (Il ??= import("@jitl/quickjs-singlefile-mjs-release-sync").then((e) => e.default, (e) => {
|
|
3643
|
+
throw Il = null, e;
|
|
3644
|
+
}), n(await Il)), Rl = () => void 0, zl = {
|
|
3597
3645
|
definitions: /* @__PURE__ */ new Map(),
|
|
3598
3646
|
problems: [],
|
|
3599
|
-
startCalculation:
|
|
3600
|
-
dispose:
|
|
3647
|
+
startCalculation: Rl,
|
|
3648
|
+
dispose: Rl
|
|
3601
3649
|
};
|
|
3602
|
-
function
|
|
3603
|
-
return e.startCalculation(),
|
|
3650
|
+
function Bl(e, t) {
|
|
3651
|
+
return e.startCalculation(), A.withOverlay(e.definitions, t);
|
|
3604
3652
|
}
|
|
3605
|
-
async function
|
|
3606
|
-
let { usable: t, problems: n } =
|
|
3653
|
+
async function Vl(e) {
|
|
3654
|
+
let { usable: t, problems: n } = Tl(e.flatMap((e) => Cl(e.functions)), (e) => A.isBuiltIn(e));
|
|
3607
3655
|
return t.size === 0 ? {
|
|
3608
|
-
...
|
|
3656
|
+
...zl,
|
|
3609
3657
|
problems: n
|
|
3610
|
-
} :
|
|
3658
|
+
} : Hl(await Ll(), t, n);
|
|
3611
3659
|
}
|
|
3612
|
-
function
|
|
3660
|
+
function Hl(e, t, n) {
|
|
3613
3661
|
let r = e.newRuntime();
|
|
3614
|
-
r.setMemoryLimit(
|
|
3662
|
+
r.setMemoryLimit(kl), r.setMaxStackSize(Al);
|
|
3615
3663
|
let i = { calculationStart: Date.now() }, a = [], o = /* @__PURE__ */ new Map();
|
|
3616
3664
|
return t.forEach((e, t) => {
|
|
3617
3665
|
let s = r.newContext(), c = [];
|
|
@@ -3619,9 +3667,9 @@ function Fl(e, t, n) {
|
|
|
3619
3667
|
vm: s,
|
|
3620
3668
|
handles: c
|
|
3621
3669
|
});
|
|
3622
|
-
let l =
|
|
3623
|
-
let t = s.evalCode(
|
|
3624
|
-
return t.error ? { error:
|
|
3670
|
+
let l = Kl(r, Date.now() + Dl, () => {
|
|
3671
|
+
let t = s.evalCode(El(e));
|
|
3672
|
+
return t.error ? { error: Ul(s, t.error) || "it stopped while loading" } : { fn: t.value };
|
|
3625
3673
|
});
|
|
3626
3674
|
if ("error" in l) {
|
|
3627
3675
|
n.push({
|
|
@@ -3630,7 +3678,7 @@ function Fl(e, t, n) {
|
|
|
3630
3678
|
});
|
|
3631
3679
|
return;
|
|
3632
3680
|
}
|
|
3633
|
-
let u = s.unwrapResult(s.evalCode(
|
|
3681
|
+
let u = s.unwrapResult(s.evalCode(Ml));
|
|
3634
3682
|
c.push(l.fn, u);
|
|
3635
3683
|
let d = {
|
|
3636
3684
|
vm: s,
|
|
@@ -3638,7 +3686,7 @@ function Fl(e, t, n) {
|
|
|
3638
3686
|
caller: u,
|
|
3639
3687
|
fn: l.fn
|
|
3640
3688
|
};
|
|
3641
|
-
o.set(t,
|
|
3689
|
+
o.set(t, Yl(e, (e) => Wl(d, e, i.calculationStart)));
|
|
3642
3690
|
}), {
|
|
3643
3691
|
definitions: o,
|
|
3644
3692
|
problems: n,
|
|
@@ -3652,7 +3700,7 @@ function Fl(e, t, n) {
|
|
|
3652
3700
|
}
|
|
3653
3701
|
};
|
|
3654
3702
|
}
|
|
3655
|
-
function
|
|
3703
|
+
function Ul(e, t) {
|
|
3656
3704
|
try {
|
|
3657
3705
|
let n = e.getProp(t, "message"), r = e.typeof(n) === "string" ? e.getString(n) : "";
|
|
3658
3706
|
return n.dispose(), r;
|
|
@@ -3662,17 +3710,17 @@ function Il(e, t) {
|
|
|
3662
3710
|
t.dispose();
|
|
3663
3711
|
}
|
|
3664
3712
|
}
|
|
3665
|
-
function
|
|
3666
|
-
let o = Math.min(Date.now() +
|
|
3667
|
-
return Date.now() >= o ? b :
|
|
3713
|
+
function Wl({ vm: e, runtime: t, caller: n, fn: r }, i, a) {
|
|
3714
|
+
let o = Math.min(Date.now() + Dl, a + Ol);
|
|
3715
|
+
return Date.now() >= o ? b : Kl(t, o, () => {
|
|
3668
3716
|
let t = e.newString(i), a = e.callFunction(n, e.undefined, r, t);
|
|
3669
|
-
if (t.dispose(), a.error) return
|
|
3670
|
-
let o =
|
|
3717
|
+
if (t.dispose(), a.error) return Ul(e, a.error) === Gl ? b : y;
|
|
3718
|
+
let o = ql(e, a.value);
|
|
3671
3719
|
return a.value.dispose(), o;
|
|
3672
3720
|
});
|
|
3673
3721
|
}
|
|
3674
|
-
var
|
|
3675
|
-
function
|
|
3722
|
+
var Gl = "interrupted";
|
|
3723
|
+
function Kl(e, t, n) {
|
|
3676
3724
|
e.setInterruptHandler(r(t));
|
|
3677
3725
|
try {
|
|
3678
3726
|
return n();
|
|
@@ -3680,14 +3728,14 @@ function zl(e, t, n) {
|
|
|
3680
3728
|
e.removeInterruptHandler();
|
|
3681
3729
|
}
|
|
3682
3730
|
}
|
|
3683
|
-
function
|
|
3731
|
+
function ql(e, t) {
|
|
3684
3732
|
let n = e.typeof(t);
|
|
3685
|
-
return n === "number" ?
|
|
3733
|
+
return n === "number" ? Jl(e.getNumber(t)) : n === "string" ? e.getString(t) : n === "boolean" ? Jl(e.dump(t)) : y;
|
|
3686
3734
|
}
|
|
3687
|
-
function
|
|
3735
|
+
function Jl(e) {
|
|
3688
3736
|
return typeof e == "number" ? Number.isFinite(e) ? e : b : typeof e == "string" || typeof e == "boolean" ? e : y;
|
|
3689
3737
|
}
|
|
3690
|
-
function
|
|
3738
|
+
function Yl(e, t) {
|
|
3691
3739
|
let n = e.description ?? `Defined in this workbook (${e.params.join(", ")})`;
|
|
3692
3740
|
return {
|
|
3693
3741
|
name: e.name.toUpperCase(),
|
|
@@ -3696,22 +3744,22 @@ function Hl(e, t) {
|
|
|
3696
3744
|
description: n,
|
|
3697
3745
|
category: "Workbook",
|
|
3698
3746
|
handler: (e, n) => {
|
|
3699
|
-
let r = e.map((e) =>
|
|
3747
|
+
let r = e.map((e) => Zl(e.trim(), n));
|
|
3700
3748
|
return r.find(S) ?? t(JSON.stringify(r));
|
|
3701
3749
|
}
|
|
3702
3750
|
};
|
|
3703
3751
|
}
|
|
3704
|
-
var
|
|
3705
|
-
function
|
|
3706
|
-
return
|
|
3752
|
+
var Xl = (e) => S(e) ? e : e === "" ? null : e;
|
|
3753
|
+
function Zl(e, t) {
|
|
3754
|
+
return Pl.test(e) ? $l(e, t) : Fl.test(e) ? Xl(Ql(t)(e)[0] ?? "") : Xl(t.evaluateFormula(e));
|
|
3707
3755
|
}
|
|
3708
|
-
var
|
|
3709
|
-
function
|
|
3710
|
-
let n = e.lastIndexOf("!"), r = n >= 0 ? e.slice(0, n + 1) : "", i =
|
|
3711
|
-
if (i.length >
|
|
3712
|
-
let a =
|
|
3756
|
+
var Ql = (e) => e.getRangeValuesKeepingBlanks ?? e.getRangeValuesRaw ?? e.getRangeValues;
|
|
3757
|
+
function $l(e, t) {
|
|
3758
|
+
let n = e.lastIndexOf("!"), r = n >= 0 ? e.slice(0, n + 1) : "", i = Dc(e.slice(n + 1)) ?? [];
|
|
3759
|
+
if (i.length > jl) return y;
|
|
3760
|
+
let a = Ql(t), o = /* @__PURE__ */ new Map();
|
|
3713
3761
|
for (let { row: e, col: t } of i) {
|
|
3714
|
-
let n =
|
|
3762
|
+
let n = Xl(a(`${r}${J(t)}${e + 1}`)[0] ?? "");
|
|
3715
3763
|
if (S(n)) return n;
|
|
3716
3764
|
o.set(e, [...o.get(e) ?? [], n]);
|
|
3717
3765
|
}
|
|
@@ -3719,7 +3767,7 @@ function Kl(e, t) {
|
|
|
3719
3767
|
}
|
|
3720
3768
|
//#endregion
|
|
3721
3769
|
//#region src/engine/cellEmpty.ts
|
|
3722
|
-
function
|
|
3770
|
+
function eu(e) {
|
|
3723
3771
|
if (e == null) return !0;
|
|
3724
3772
|
if (typeof e == "string") return e.trim() === "";
|
|
3725
3773
|
if (c(e)) {
|
|
@@ -3729,69 +3777,69 @@ function ql(e) {
|
|
|
3729
3777
|
}
|
|
3730
3778
|
return !1;
|
|
3731
3779
|
}
|
|
3732
|
-
function
|
|
3733
|
-
return !S(e) &&
|
|
3780
|
+
function tu(e) {
|
|
3781
|
+
return !S(e) && eu(e);
|
|
3734
3782
|
}
|
|
3735
3783
|
//#endregion
|
|
3736
3784
|
//#region src/engine/cellFormatting.ts
|
|
3737
|
-
var
|
|
3785
|
+
var nu = 36e3, ru = 63499, iu = (e) => s(e) && "v" in e, au = (e) => typeof e == "number" && Number.isInteger(e) && e >= nu && e <= ru, ou = (e, t, n, r) => {
|
|
3738
3786
|
if (S(t)) return t.code;
|
|
3739
|
-
if (!
|
|
3787
|
+
if (!iu(e) || typeof t != "number") return t;
|
|
3740
3788
|
let i = typeof e.f == "string" ? e.f : "";
|
|
3741
|
-
return i ?
|
|
3742
|
-
},
|
|
3789
|
+
return i ? cs(t, i) : typeof e.v == "string" && e.v.startsWith("=") && r && au(t) ? cs(t, n ? "DD/MM/YYYY" : "MM/DD/YYYY") : t;
|
|
3790
|
+
}, su = /* @__PURE__ */ new Set([
|
|
3743
3791
|
"DATE",
|
|
3744
3792
|
"TODAY",
|
|
3745
3793
|
"EDATE",
|
|
3746
3794
|
"EOMONTH",
|
|
3747
3795
|
"WORKDAY"
|
|
3748
|
-
]),
|
|
3749
|
-
function
|
|
3750
|
-
let t =
|
|
3796
|
+
]), cu = /^[\s(+-]*([A-Z][A-Z0-9]*(?:\.[A-Z0-9]+)*)\s*\(/i;
|
|
3797
|
+
function lu(e) {
|
|
3798
|
+
let t = cu.exec(e)?.[1];
|
|
3751
3799
|
return t === void 0 ? null : t.toUpperCase();
|
|
3752
3800
|
}
|
|
3753
|
-
function
|
|
3754
|
-
let i = e.replace(/^=/, ""), a =
|
|
3755
|
-
if (a !== null &&
|
|
3756
|
-
let o =
|
|
3801
|
+
function uu(e, t, n, r = /* @__PURE__ */ new Set()) {
|
|
3802
|
+
let i = e.replace(/^=/, ""), a = lu(i);
|
|
3803
|
+
if (a !== null && su.has(a)) return !0;
|
|
3804
|
+
let o = Uo(i)[0]?.ref, s = o === void 0 ? null : n(o, t);
|
|
3757
3805
|
if (s === null || o === void 0) return !1;
|
|
3758
|
-
if (
|
|
3806
|
+
if (ns(s.format)) return !0;
|
|
3759
3807
|
let c = `${s.sheet}!${o.replace(/^.*!/, "").replace(/\$/g, "").toUpperCase()}`;
|
|
3760
|
-
return s.formula === null || r.has(c) ? !1 :
|
|
3808
|
+
return s.formula === null || r.has(c) ? !1 : uu(s.formula, s.sheet, n, /* @__PURE__ */ new Set([...r, c]));
|
|
3761
3809
|
}
|
|
3762
3810
|
//#endregion
|
|
3763
3811
|
//#region src/engine/wholeReferences.ts
|
|
3764
|
-
var
|
|
3765
|
-
let r = [
|
|
3812
|
+
var du = String.raw`(?:'((?:[^']|'')+)'|([A-Za-z_][\w.]*))!`, fu = String.raw`[(,+\-*/^&=<>\s]`, pu = String.raw`[),+\-*/^&=<>\s]`, mu = new RegExp(String.raw`(?<=^|${fu})(?:${du})?(?:(\$?[A-Za-z]{1,3}):(\$?[A-Za-z]{1,3})|(\$?\d+):(\$?\d+))(?=$|${pu})`, "g"), hu = (e) => e.replace("$", "").toUpperCase(), gu = ([e, t], n) => {
|
|
3813
|
+
let r = [hu(e), hu(t)];
|
|
3766
3814
|
return n(r[0]) <= n(r[1]) ? r : [r[1], r[0]];
|
|
3767
3815
|
};
|
|
3768
|
-
function
|
|
3816
|
+
function _u({ whole: e, sheetName: t, columns: n, rows: r }, i) {
|
|
3769
3817
|
let a = i(t);
|
|
3770
3818
|
if (!a) return null;
|
|
3771
3819
|
let o = e.slice(0, e.lastIndexOf("!") + 1), s = Math.max(a.rows, 1);
|
|
3772
3820
|
if (n) {
|
|
3773
|
-
let [e, t] =
|
|
3821
|
+
let [e, t] = gu(n, yc);
|
|
3774
3822
|
return `${o}${e}1:${t}${s}`;
|
|
3775
3823
|
}
|
|
3776
|
-
let c = J(Math.max(a.columns, 1) - 1), [l, u] =
|
|
3824
|
+
let c = J(Math.max(a.columns, 1) - 1), [l, u] = gu(r ?? ["1", "1"], Number);
|
|
3777
3825
|
return `${o}A${l}:${c}${u}`;
|
|
3778
3826
|
}
|
|
3779
|
-
function
|
|
3780
|
-
return e.replace(
|
|
3827
|
+
function vu(e, t) {
|
|
3828
|
+
return e.replace(mu, (e, n, r, i, a, o, s) => _u({
|
|
3781
3829
|
whole: e,
|
|
3782
3830
|
sheetName: n?.replace(/''/g, "'") ?? r ?? null,
|
|
3783
3831
|
columns: i && a ? [i, a] : void 0,
|
|
3784
3832
|
rows: o && s ? [o, s] : void 0
|
|
3785
3833
|
}, t) ?? e);
|
|
3786
3834
|
}
|
|
3787
|
-
function
|
|
3788
|
-
return e.split(/("(?:[^"]|"")*(?:"|$))/).map((e, n) => n % 2 == 1 ? e :
|
|
3835
|
+
function yu(e, t) {
|
|
3836
|
+
return e.split(/("(?:[^"]|"")*(?:"|$))/).map((e, n) => n % 2 == 1 ? e : vu(e, t)).join("");
|
|
3789
3837
|
}
|
|
3790
3838
|
//#endregion
|
|
3791
3839
|
//#region src/engine/calculator.ts
|
|
3792
|
-
function
|
|
3840
|
+
function bu(e) {
|
|
3793
3841
|
return (t, n) => {
|
|
3794
|
-
let r =
|
|
3842
|
+
let r = so(t), i = r?.sheetName ?? n, a = Oc(r?.ref ?? t), o = a ? e.find((e) => e.name === i)?.data[a.row]?.[a.col] : void 0;
|
|
3795
3843
|
if (!c(o)) return null;
|
|
3796
3844
|
let s = typeof o.v == "string" && o.v.startsWith("=") ? o.v : null;
|
|
3797
3845
|
return {
|
|
@@ -3801,7 +3849,7 @@ function pu(e) {
|
|
|
3801
3849
|
};
|
|
3802
3850
|
};
|
|
3803
3851
|
}
|
|
3804
|
-
function
|
|
3852
|
+
function xu(e) {
|
|
3805
3853
|
if (!e || !Array.isArray(e) || e.length === 0) return [];
|
|
3806
3854
|
if (Array.isArray(e[0])) return e;
|
|
3807
3855
|
if (c(e[0])) {
|
|
@@ -3814,28 +3862,28 @@ function mu(e) {
|
|
|
3814
3862
|
}
|
|
3815
3863
|
return console.warn("Unknown data structure in spreadsheet, returning empty:", e), [];
|
|
3816
3864
|
}
|
|
3817
|
-
function
|
|
3865
|
+
function Su(e, t) {
|
|
3818
3866
|
return e.map((e) => e.map((e) => {
|
|
3819
3867
|
if (!c(e) || !("v" in e)) return e;
|
|
3820
3868
|
let n = e.v;
|
|
3821
3869
|
if (typeof n == "string" && !n.startsWith("=")) {
|
|
3822
|
-
let r =
|
|
3870
|
+
let r = Xe(n, t);
|
|
3823
3871
|
if (r !== null) return {
|
|
3824
3872
|
v: r,
|
|
3825
|
-
f: e.f ||
|
|
3873
|
+
f: e.f || nt(n, t)
|
|
3826
3874
|
};
|
|
3827
3875
|
}
|
|
3828
3876
|
return e;
|
|
3829
3877
|
}));
|
|
3830
3878
|
}
|
|
3831
|
-
function
|
|
3832
|
-
return
|
|
3879
|
+
function Cu(e, t, n = {}) {
|
|
3880
|
+
return wu(e, t, n, /* @__PURE__ */ new Map()).finish();
|
|
3833
3881
|
}
|
|
3834
|
-
function
|
|
3835
|
-
let i = n.preferDDMMYYYY ?? !1, a = n.skipFormatting ?? !1, o =
|
|
3882
|
+
function wu(e, t, n, r) {
|
|
3883
|
+
let i = n.preferDDMMYYYY ?? !1, a = n.skipFormatting ?? !1, o = Su(xu(e.data), i), l = t?.map((e) => ({
|
|
3836
3884
|
...e,
|
|
3837
|
-
data:
|
|
3838
|
-
})), d = o, f = e.name, p = [], ee = [], m = d.map((e) => [...e]),
|
|
3885
|
+
data: Su(xu(e.data), i)
|
|
3886
|
+
})), d = o, f = e.name, p = [], ee = [], m = d.map((e) => [...e]), te = /* @__PURE__ */ new Set(), h = /* @__PURE__ */ new Set(), ne = (e) => {
|
|
3839
3887
|
let t = e === null || e === f ? d : l?.find((t) => t.name === e)?.data;
|
|
3840
3888
|
return t ? {
|
|
3841
3889
|
rows: t.length,
|
|
@@ -3843,7 +3891,7 @@ function _u(e, t, n, r) {
|
|
|
3843
3891
|
} : null;
|
|
3844
3892
|
}, re = (e, { cells: t, row: n, col: r }) => {
|
|
3845
3893
|
let i = `${n},${r}`;
|
|
3846
|
-
if (
|
|
3894
|
+
if (te.has(i)) return p.push({
|
|
3847
3895
|
cell: {
|
|
3848
3896
|
row: n,
|
|
3849
3897
|
col: r
|
|
@@ -3852,13 +3900,13 @@ function _u(e, t, n, r) {
|
|
|
3852
3900
|
error: "Circular reference detected",
|
|
3853
3901
|
type: "circular"
|
|
3854
3902
|
}), 0;
|
|
3855
|
-
if (
|
|
3856
|
-
|
|
3903
|
+
if (h.has(i)) return t[r];
|
|
3904
|
+
te.add(i);
|
|
3857
3905
|
try {
|
|
3858
|
-
let n = me(
|
|
3906
|
+
let n = me(yu(e.substring(1), ne));
|
|
3859
3907
|
return t[r] = n, n;
|
|
3860
3908
|
} catch (i) {
|
|
3861
|
-
let { type: a, display: o } =
|
|
3909
|
+
let { type: a, display: o } = So(i);
|
|
3862
3910
|
p.push({
|
|
3863
3911
|
cell: {
|
|
3864
3912
|
row: n,
|
|
@@ -3871,7 +3919,7 @@ function _u(e, t, n, r) {
|
|
|
3871
3919
|
let s = Ae(o);
|
|
3872
3920
|
return t[r] = s, s;
|
|
3873
3921
|
} finally {
|
|
3874
|
-
|
|
3922
|
+
te.delete(i), h.add(i);
|
|
3875
3923
|
}
|
|
3876
3924
|
}, g = (e, t) => {
|
|
3877
3925
|
if (e == null) return 0;
|
|
@@ -3900,7 +3948,7 @@ function _u(e, t, n, r) {
|
|
|
3900
3948
|
let n = parseFloat(e);
|
|
3901
3949
|
return isNaN(n) ? e : n;
|
|
3902
3950
|
}, ie = (e) => {
|
|
3903
|
-
let t =
|
|
3951
|
+
let t = so(e);
|
|
3904
3952
|
if (!t) return {
|
|
3905
3953
|
sheetData: m,
|
|
3906
3954
|
ref: e,
|
|
@@ -3914,14 +3962,14 @@ function _u(e, t, n, r) {
|
|
|
3914
3962
|
} : null;
|
|
3915
3963
|
}, ae = (e) => {
|
|
3916
3964
|
let t = l?.find((t) => t.name === e);
|
|
3917
|
-
return !t || !t.data ? null : (
|
|
3965
|
+
return !t || !t.data ? null : (wu(t, l, {
|
|
3918
3966
|
preferDDMMYYYY: i,
|
|
3919
3967
|
skipFormatting: !0
|
|
3920
3968
|
}, r), r.get(e) ?? null);
|
|
3921
3969
|
}, oe = (e) => {
|
|
3922
3970
|
let t = ie(e);
|
|
3923
|
-
if (!t) throw
|
|
3924
|
-
let { sheetData: n, ref: r, read: i } = t, a =
|
|
3971
|
+
if (!t) throw vo(e);
|
|
3972
|
+
let { sheetData: n, ref: r, read: i } = t, a = Oc(r);
|
|
3925
3973
|
if (!a) return null;
|
|
3926
3974
|
let { row: o, col: s } = a, c = o >= 0 ? n[o] : void 0;
|
|
3927
3975
|
return !c || s < 0 || s >= c.length ? null : {
|
|
@@ -3940,11 +3988,11 @@ function _u(e, t, n, r) {
|
|
|
3940
3988
|
let t = oe(e);
|
|
3941
3989
|
if (t === null) return !0;
|
|
3942
3990
|
let { cell: n, position: r, read: i } = t, a = s(n) ? n.v : void 0;
|
|
3943
|
-
return
|
|
3991
|
+
return tu(typeof a == "string" && a.startsWith("=") ? i(n, r) : n);
|
|
3944
3992
|
}, le = (e, t) => {
|
|
3945
3993
|
let n = ie(e);
|
|
3946
3994
|
if (!n) return [];
|
|
3947
|
-
let { sheetData: r, ref: i, read: a } = n, o =
|
|
3995
|
+
let { sheetData: r, ref: i, read: a } = n, o = Dc(i);
|
|
3948
3996
|
if (!o) return [];
|
|
3949
3997
|
let s = [];
|
|
3950
3998
|
for (let { row: e, col: n } of o) {
|
|
@@ -3953,9 +4001,9 @@ function _u(e, t, n, r) {
|
|
|
3953
4001
|
row: e,
|
|
3954
4002
|
col: n
|
|
3955
4003
|
} : void 0);
|
|
3956
|
-
if (t.numericOnly) !
|
|
4004
|
+
if (t.numericOnly) !eu(o) && Le(c) && s.push(c);
|
|
3957
4005
|
else {
|
|
3958
|
-
let e =
|
|
4006
|
+
let e = eu(o) && !S(o);
|
|
3959
4007
|
s.push(t.keepBlanks && e ? "" : c);
|
|
3960
4008
|
}
|
|
3961
4009
|
}
|
|
@@ -3964,14 +4012,14 @@ function _u(e, t, n, r) {
|
|
|
3964
4012
|
numericOnly: !1,
|
|
3965
4013
|
keepBlanks: !0
|
|
3966
4014
|
}), pe = (e) => {
|
|
3967
|
-
let t = ie(e), n = t ?
|
|
4015
|
+
let t = ie(e), n = t ? Dc(t.ref) : null;
|
|
3968
4016
|
if (!t || !n) return 0;
|
|
3969
|
-
let r =
|
|
4017
|
+
let r = so(e)?.sheetName ?? f, i = r === f ? d : l?.find((e) => e.name === r)?.data;
|
|
3970
4018
|
return i ? n.filter(({ row: e, col: t }) => {
|
|
3971
4019
|
let n = i[e]?.[t];
|
|
3972
|
-
return n !== void 0 && !
|
|
4020
|
+
return n !== void 0 && !eu(n);
|
|
3973
4021
|
}).length : 0;
|
|
3974
|
-
}, me = (e) =>
|
|
4022
|
+
}, me = (e) => ts(e, {
|
|
3975
4023
|
getCellValue: se,
|
|
3976
4024
|
getRangeValues: ue,
|
|
3977
4025
|
getRangeValuesRaw: de,
|
|
@@ -4012,13 +4060,13 @@ function _u(e, t, n, r) {
|
|
|
4012
4060
|
read: g
|
|
4013
4061
|
}), { finish: () => {
|
|
4014
4062
|
if (ge(he), !a) {
|
|
4015
|
-
let e =
|
|
4063
|
+
let e = bu([{
|
|
4016
4064
|
name: f,
|
|
4017
4065
|
data: d
|
|
4018
4066
|
}, ...(l ?? []).filter((e) => e.name !== f)]);
|
|
4019
4067
|
ge((t, { cells: n, col: r }) => {
|
|
4020
|
-
let a = c(t) && typeof t.v == "string" ? t.v : "", o = a.startsWith("=") &&
|
|
4021
|
-
n[r] =
|
|
4068
|
+
let a = c(t) && typeof t.v == "string" ? t.v : "", o = a.startsWith("=") && uu(a, f, e);
|
|
4069
|
+
n[r] = ou(t, n[r], i, o);
|
|
4022
4070
|
});
|
|
4023
4071
|
}
|
|
4024
4072
|
return {
|
|
@@ -4029,30 +4077,30 @@ function _u(e, t, n, r) {
|
|
|
4029
4077
|
};
|
|
4030
4078
|
} };
|
|
4031
4079
|
}
|
|
4032
|
-
function
|
|
4033
|
-
return e.map((n) =>
|
|
4080
|
+
function Tu(e, t = {}) {
|
|
4081
|
+
return e.map((n) => Cu(n, e, t));
|
|
4034
4082
|
}
|
|
4035
4083
|
//#endregion
|
|
4036
4084
|
//#region src/engine/cellBuilder.ts
|
|
4037
|
-
var
|
|
4038
|
-
let t = e.match(
|
|
4039
|
-
return t !== void 0 &&
|
|
4040
|
-
},
|
|
4041
|
-
function
|
|
4042
|
-
return
|
|
4043
|
-
}
|
|
4044
|
-
function
|
|
4085
|
+
var Eu = RegExp(`^[-+]?\\s*(${at})\\s*\\(`, "i"), Du = (e) => {
|
|
4086
|
+
let t = e.match(Eu)?.[1];
|
|
4087
|
+
return t !== void 0 && ot(t);
|
|
4088
|
+
}, Ou = /[A-Z]+\d+\s*[+\-*/^]/, ku = /\d+\s*[+\-*/^]\s*\d+/, Au = /^[-+]?(?:\d+\.?\d*|\.\d+)(?:[eE][-+]?\d+)?$/;
|
|
4089
|
+
function ju(e) {
|
|
4090
|
+
return Du(e) || Ou.test(e) || ku.test(e);
|
|
4091
|
+
}
|
|
4092
|
+
function Mu(e) {
|
|
4045
4093
|
let t = e.trim();
|
|
4046
|
-
return t === "" ? "" :
|
|
4094
|
+
return t === "" ? "" : ju(t) ? `=${t}` : Au.test(t) ? Number(t) : t;
|
|
4047
4095
|
}
|
|
4048
|
-
function
|
|
4096
|
+
function Nu(e) {
|
|
4049
4097
|
if (e.type === "string") return { v: String(e.value) };
|
|
4050
|
-
let t = { v:
|
|
4098
|
+
let t = { v: Mu(e.formula ?? "") };
|
|
4051
4099
|
return e.format && e.format.length > 0 && (t.f = e.format), t;
|
|
4052
4100
|
}
|
|
4053
4101
|
//#endregion
|
|
4054
4102
|
//#region src/engine/engine.ts
|
|
4055
|
-
var
|
|
4103
|
+
var Pu = class {
|
|
4056
4104
|
options;
|
|
4057
4105
|
constructor(e = {}) {
|
|
4058
4106
|
this.options = {
|
|
@@ -4063,10 +4111,10 @@ var Du = class {
|
|
|
4063
4111
|
};
|
|
4064
4112
|
}
|
|
4065
4113
|
calculate(e, t) {
|
|
4066
|
-
return
|
|
4114
|
+
return Cu(e, t, { preferDDMMYYYY: this.options.preferDDMMYYYY });
|
|
4067
4115
|
}
|
|
4068
4116
|
calculateWorkbook(e) {
|
|
4069
|
-
return
|
|
4117
|
+
return Tu(e, { preferDDMMYYYY: this.options.preferDDMMYYYY });
|
|
4070
4118
|
}
|
|
4071
4119
|
getOptions() {
|
|
4072
4120
|
return { ...this.options };
|
|
@@ -4086,31 +4134,31 @@ var Du = class {
|
|
|
4086
4134
|
toStringArray(e) {
|
|
4087
4135
|
return e.data.map((e) => e.map((e) => String(e ?? "")));
|
|
4088
4136
|
}
|
|
4089
|
-
},
|
|
4137
|
+
}, Fu = (e) => e.length > 80 ? `${e.slice(0, 80)}…` : e, Iu = (e) => {
|
|
4090
4138
|
let t = typeof e == "object" && e && "v" in e ? e.v : e;
|
|
4091
4139
|
return typeof t == "string" && t.startsWith("=") ? t : null;
|
|
4092
4140
|
};
|
|
4093
|
-
function
|
|
4141
|
+
function Lu(e, t = zl) {
|
|
4094
4142
|
let n = e.map((e) => ({
|
|
4095
4143
|
name: e.name,
|
|
4096
|
-
data:
|
|
4097
|
-
})), r =
|
|
4098
|
-
let a =
|
|
4099
|
-
return a === null || !S(t) ? [] : [`${e[n]?.name ?? ""}!${J(i)}${r + 1} = ${t.code} (${
|
|
4144
|
+
data: xu(e.data)
|
|
4145
|
+
})), r = Bl(t, () => n.map((e) => Cu(e, n, { skipFormatting: !0 }))).flatMap((t, n) => t.data.flatMap((t, r) => t.flatMap((t, i) => {
|
|
4146
|
+
let a = Iu(e[n]?.data[r]?.[i]);
|
|
4147
|
+
return a === null || !S(t) ? [] : [`${e[n]?.name ?? ""}!${J(i)}${r + 1} = ${t.code} (${Fu(a)})`];
|
|
4100
4148
|
})));
|
|
4101
4149
|
return {
|
|
4102
4150
|
count: r.length,
|
|
4103
4151
|
samples: r.slice(0, 5)
|
|
4104
4152
|
};
|
|
4105
4153
|
}
|
|
4106
|
-
function
|
|
4154
|
+
function Ru({ count: e, samples: t }) {
|
|
4107
4155
|
if (e === 0) return "";
|
|
4108
4156
|
let n = e > t.length ? `, and ${e - t.length} more` : "";
|
|
4109
4157
|
return ` ${e} formula cell(s) calculate to an error; fix any that are not meant to be errors before telling the user the spreadsheet is ready: ${t.join("; ")}${n}.`;
|
|
4110
4158
|
}
|
|
4111
4159
|
//#endregion
|
|
4112
4160
|
//#region src/core/plugin.ts
|
|
4113
|
-
function
|
|
4161
|
+
function zu(e) {
|
|
4114
4162
|
if (typeof e != "string") return e;
|
|
4115
4163
|
try {
|
|
4116
4164
|
let t = JSON.parse(e);
|
|
@@ -4119,31 +4167,31 @@ function Mu(e) {
|
|
|
4119
4167
|
throw Error(`Invalid sheets format: sheets must be an array, not a string. Parse error: ${e instanceof Error ? e.message : String(e)}`, { cause: e });
|
|
4120
4168
|
}
|
|
4121
4169
|
}
|
|
4122
|
-
function
|
|
4170
|
+
function Bu(e) {
|
|
4123
4171
|
if (!Array.isArray(e) || e.length === 0) throw Error("At least one sheet is required. Sheets must be an array of sheet objects.");
|
|
4124
4172
|
e.forEach((e) => {
|
|
4125
4173
|
if (!e.name || !e.data || e.data.length === 0) throw Error(`Invalid sheet: ${e.name || "unnamed"}. Each sheet must have a name and data array.`);
|
|
4126
4174
|
});
|
|
4127
4175
|
}
|
|
4128
|
-
async function
|
|
4129
|
-
let t = await
|
|
4176
|
+
async function Vu(e) {
|
|
4177
|
+
let t = await Vl(e);
|
|
4130
4178
|
try {
|
|
4131
|
-
return (t.problems.length === 0 ? "" : ` These functions could not be used and calls to them show #NAME?: ${t.problems.slice(0, 5).map(({ name: e, reason: t }) => `${e} (${t})`).join("; ")}.`) +
|
|
4179
|
+
return (t.problems.length === 0 ? "" : ` These functions could not be used and calls to them show #NAME?: ${t.problems.slice(0, 5).map(({ name: e, reason: t }) => `${e} (${t})`).join("; ")}.`) + Ru(Lu(e, t));
|
|
4132
4180
|
} finally {
|
|
4133
4181
|
t.dispose();
|
|
4134
4182
|
}
|
|
4135
4183
|
}
|
|
4136
|
-
var
|
|
4137
|
-
let { title: n } = t, r =
|
|
4138
|
-
|
|
4139
|
-
let i = "Acknowledge that the spreadsheet has been created and is displayed to the user.", a = await
|
|
4184
|
+
var Hu = async (e, t) => {
|
|
4185
|
+
let { title: n } = t, r = zu(t.sheets);
|
|
4186
|
+
Bu(r);
|
|
4187
|
+
let i = "Acknowledge that the spreadsheet has been created and is displayed to the user.", a = await Vu(r), o = ge(e);
|
|
4140
4188
|
if (!o) return {
|
|
4141
4189
|
message: `Created spreadsheet: ${n}${a}`,
|
|
4142
4190
|
title: n,
|
|
4143
4191
|
data: { sheets: r },
|
|
4144
4192
|
instructions: i
|
|
4145
4193
|
};
|
|
4146
|
-
let { relPath: s, filePath: c } =
|
|
4194
|
+
let { relPath: s, filePath: c } = h();
|
|
4147
4195
|
return await o.write(s, JSON.stringify(r)), {
|
|
4148
4196
|
message: `Created spreadsheet: ${n}. Saved to ${c}; the user can edit cells there, so read that file for the current values.${a}`,
|
|
4149
4197
|
title: n,
|
|
@@ -4151,21 +4199,21 @@ var Fu = async (e, t) => {
|
|
|
4151
4199
|
instructions: i
|
|
4152
4200
|
};
|
|
4153
4201
|
};
|
|
4154
|
-
async function
|
|
4155
|
-
if (!("kind" in t)) return
|
|
4202
|
+
async function Uu(e, t) {
|
|
4203
|
+
if (!("kind" in t)) return Hu(e, t);
|
|
4156
4204
|
let n = ge(e);
|
|
4157
4205
|
if (!n) throw Error("This host does not provide files.artifacts, so spreadsheets cannot be loaded or saved");
|
|
4158
4206
|
if (!me(t)) throw Error("Invalid spreadsheet dispatch");
|
|
4159
4207
|
return we(n, t);
|
|
4160
4208
|
}
|
|
4161
|
-
var
|
|
4209
|
+
var Wu = {
|
|
4162
4210
|
toolDefinition: a,
|
|
4163
|
-
execute:
|
|
4211
|
+
execute: Uu,
|
|
4164
4212
|
generatingMessage: "Creating spreadsheet...",
|
|
4165
4213
|
waitingMessage: "Tell the user that the spreadsheet was created and will be presented shortly.",
|
|
4166
4214
|
isEnabled: () => !0,
|
|
4167
4215
|
systemPrompt: o
|
|
4168
|
-
},
|
|
4216
|
+
}, Gu = [
|
|
4169
4217
|
{
|
|
4170
4218
|
name: "Simple Budget",
|
|
4171
4219
|
args: {
|
|
@@ -4510,4 +4558,4 @@ var Lu = {
|
|
|
4510
4558
|
}
|
|
4511
4559
|
];
|
|
4512
4560
|
//#endregion
|
|
4513
|
-
export { s as C, i as E, c as S, a as T, me as _,
|
|
4561
|
+
export { s as C, i as E, c as S, a as T, me as _, Nu as a, g as b, zl as c, Ic as d, Ac as f, we as g, W as h, Pu as i, Bl as l, J as m, Hu as n, Cu as o, Oc as p, Wu as r, xu as s, Gu as t, Vl as u, ce as v, o as w, u as x, re as y };
|