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