@bilig/formula 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (147) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +16 -0
  3. package/dist/addressing.d.ts +66 -0
  4. package/dist/addressing.js +179 -0
  5. package/dist/addressing.js.map +1 -0
  6. package/dist/ast.d.ts +74 -0
  7. package/dist/ast.js +2 -0
  8. package/dist/ast.js.map +1 -0
  9. package/dist/binder.d.ts +13 -0
  10. package/dist/binder.js +1700 -0
  11. package/dist/binder.js.map +1 -0
  12. package/dist/builtin-capabilities.d.ts +19 -0
  13. package/dist/builtin-capabilities.js +861 -0
  14. package/dist/builtin-capabilities.js.map +1 -0
  15. package/dist/builtins/complex.d.ts +10 -0
  16. package/dist/builtins/complex.js +407 -0
  17. package/dist/builtins/complex.js.map +1 -0
  18. package/dist/builtins/convert.d.ts +3 -0
  19. package/dist/builtins/convert.js +362 -0
  20. package/dist/builtins/convert.js.map +1 -0
  21. package/dist/builtins/datetime.d.ts +23 -0
  22. package/dist/builtins/datetime.js +1096 -0
  23. package/dist/builtins/datetime.js.map +1 -0
  24. package/dist/builtins/distribution-builtins.d.ts +16 -0
  25. package/dist/builtins/distribution-builtins.js +517 -0
  26. package/dist/builtins/distribution-builtins.js.map +1 -0
  27. package/dist/builtins/distributions.d.ts +34 -0
  28. package/dist/builtins/distributions.js +722 -0
  29. package/dist/builtins/distributions.js.map +1 -0
  30. package/dist/builtins/financial-builtins.d.ts +16 -0
  31. package/dist/builtins/financial-builtins.js +324 -0
  32. package/dist/builtins/financial-builtins.js.map +1 -0
  33. package/dist/builtins/financial.d.ts +11 -0
  34. package/dist/builtins/financial.js +241 -0
  35. package/dist/builtins/financial.js.map +1 -0
  36. package/dist/builtins/fixed-income-builtins.d.ts +14 -0
  37. package/dist/builtins/fixed-income-builtins.js +598 -0
  38. package/dist/builtins/fixed-income-builtins.js.map +1 -0
  39. package/dist/builtins/fixed-income.d.ts +42 -0
  40. package/dist/builtins/fixed-income.js +668 -0
  41. package/dist/builtins/fixed-income.js.map +1 -0
  42. package/dist/builtins/formatting.d.ts +8 -0
  43. package/dist/builtins/formatting.js +53 -0
  44. package/dist/builtins/formatting.js.map +1 -0
  45. package/dist/builtins/logical.d.ts +4 -0
  46. package/dist/builtins/logical.js +258 -0
  47. package/dist/builtins/logical.js.map +1 -0
  48. package/dist/builtins/lookup-array-shape-builtins.d.ts +21 -0
  49. package/dist/builtins/lookup-array-shape-builtins.js +517 -0
  50. package/dist/builtins/lookup-array-shape-builtins.js.map +1 -0
  51. package/dist/builtins/lookup-criteria-builtins.d.ts +16 -0
  52. package/dist/builtins/lookup-criteria-builtins.js +216 -0
  53. package/dist/builtins/lookup-criteria-builtins.js.map +1 -0
  54. package/dist/builtins/lookup-database-builtins.d.ts +17 -0
  55. package/dist/builtins/lookup-database-builtins.js +294 -0
  56. package/dist/builtins/lookup-database-builtins.js.map +1 -0
  57. package/dist/builtins/lookup-financial-builtins.d.ts +11 -0
  58. package/dist/builtins/lookup-financial-builtins.js +291 -0
  59. package/dist/builtins/lookup-financial-builtins.js.map +1 -0
  60. package/dist/builtins/lookup-hypothesis-builtins.d.ts +11 -0
  61. package/dist/builtins/lookup-hypothesis-builtins.js +57 -0
  62. package/dist/builtins/lookup-hypothesis-builtins.js.map +1 -0
  63. package/dist/builtins/lookup-matrix-builtins.d.ts +17 -0
  64. package/dist/builtins/lookup-matrix-builtins.js +218 -0
  65. package/dist/builtins/lookup-matrix-builtins.js.map +1 -0
  66. package/dist/builtins/lookup-order-statistics-builtins.d.ts +18 -0
  67. package/dist/builtins/lookup-order-statistics-builtins.js +575 -0
  68. package/dist/builtins/lookup-order-statistics-builtins.js.map +1 -0
  69. package/dist/builtins/lookup-reference-builtins.d.ts +18 -0
  70. package/dist/builtins/lookup-reference-builtins.js +300 -0
  71. package/dist/builtins/lookup-reference-builtins.js.map +1 -0
  72. package/dist/builtins/lookup-regression-builtins.d.ts +12 -0
  73. package/dist/builtins/lookup-regression-builtins.js +511 -0
  74. package/dist/builtins/lookup-regression-builtins.js.map +1 -0
  75. package/dist/builtins/lookup-sort-filter-builtins.d.ts +20 -0
  76. package/dist/builtins/lookup-sort-filter-builtins.js +382 -0
  77. package/dist/builtins/lookup-sort-filter-builtins.js.map +1 -0
  78. package/dist/builtins/lookup.d.ts +13 -0
  79. package/dist/builtins/lookup.js +867 -0
  80. package/dist/builtins/lookup.js.map +1 -0
  81. package/dist/builtins/math-builtins.d.ts +31 -0
  82. package/dist/builtins/math-builtins.js +420 -0
  83. package/dist/builtins/math-builtins.js.map +1 -0
  84. package/dist/builtins/numeric.d.ts +30 -0
  85. package/dist/builtins/numeric.js +150 -0
  86. package/dist/builtins/numeric.js.map +1 -0
  87. package/dist/builtins/placeholder.d.ts +9 -0
  88. package/dist/builtins/placeholder.js +540 -0
  89. package/dist/builtins/placeholder.js.map +1 -0
  90. package/dist/builtins/radix.d.ts +12 -0
  91. package/dist/builtins/radix.js +220 -0
  92. package/dist/builtins/radix.js.map +1 -0
  93. package/dist/builtins/statistical-builtins.d.ts +13 -0
  94. package/dist/builtins/statistical-builtins.js +240 -0
  95. package/dist/builtins/statistical-builtins.js.map +1 -0
  96. package/dist/builtins/statistics.d.ts +8 -0
  97. package/dist/builtins/statistics.js +74 -0
  98. package/dist/builtins/statistics.js.map +1 -0
  99. package/dist/builtins/text.d.ts +5 -0
  100. package/dist/builtins/text.js +1879 -0
  101. package/dist/builtins/text.js.map +1 -0
  102. package/dist/builtins.d.ts +8 -0
  103. package/dist/builtins.js +695 -0
  104. package/dist/builtins.js.map +1 -0
  105. package/dist/compatibility.d.ts +25 -0
  106. package/dist/compatibility.js +498 -0
  107. package/dist/compatibility.js.map +1 -0
  108. package/dist/compiler.d.ts +29 -0
  109. package/dist/compiler.js +474 -0
  110. package/dist/compiler.js.map +1 -0
  111. package/dist/external-function-adapter.d.ts +32 -0
  112. package/dist/external-function-adapter.js +42 -0
  113. package/dist/external-function-adapter.js.map +1 -0
  114. package/dist/generated/formula-inventory.d.ts +6839 -0
  115. package/dist/generated/formula-inventory.js +7368 -0
  116. package/dist/generated/formula-inventory.js.map +1 -0
  117. package/dist/group-pivot-evaluator.d.ts +28 -0
  118. package/dist/group-pivot-evaluator.js +435 -0
  119. package/dist/group-pivot-evaluator.js.map +1 -0
  120. package/dist/index.d.ts +16 -0
  121. package/dist/index.js +17 -0
  122. package/dist/index.js.map +1 -0
  123. package/dist/js-evaluator.d.ts +107 -0
  124. package/dist/js-evaluator.js +1651 -0
  125. package/dist/js-evaluator.js.map +1 -0
  126. package/dist/lexer.d.ts +6 -0
  127. package/dist/lexer.js +115 -0
  128. package/dist/lexer.js.map +1 -0
  129. package/dist/optimizer.d.ts +2 -0
  130. package/dist/optimizer.js +353 -0
  131. package/dist/optimizer.js.map +1 -0
  132. package/dist/parser.d.ts +2 -0
  133. package/dist/parser.js +352 -0
  134. package/dist/parser.js.map +1 -0
  135. package/dist/program-arena.d.ts +22 -0
  136. package/dist/program-arena.js +67 -0
  137. package/dist/program-arena.js.map +1 -0
  138. package/dist/runtime-values.d.ts +17 -0
  139. package/dist/runtime-values.js +11 -0
  140. package/dist/runtime-values.js.map +1 -0
  141. package/dist/special-call-rewrites.d.ts +2 -0
  142. package/dist/special-call-rewrites.js +74 -0
  143. package/dist/special-call-rewrites.js.map +1 -0
  144. package/dist/translation.d.ts +28 -0
  145. package/dist/translation.js +569 -0
  146. package/dist/translation.js.map +1 -0
  147. package/package.json +53 -0
@@ -0,0 +1,216 @@
1
+ import { ErrorCode } from "@bilig/protocol";
2
+ function validateCriteriaPairs(criteriaArgs, deps) {
3
+ if (criteriaArgs.length === 0 || criteriaArgs.length % 2 !== 0) {
4
+ return deps.errorValue(ErrorCode.Value);
5
+ }
6
+ const rangeCriteriaPairs = [];
7
+ for (let index = 0; index < criteriaArgs.length; index += 2) {
8
+ const range = deps.requireCellRange(criteriaArgs[index]);
9
+ if (!deps.isRangeArg(range)) {
10
+ return range;
11
+ }
12
+ const criteria = criteriaArgs[index + 1];
13
+ if (deps.isRangeArg(criteria)) {
14
+ return deps.errorValue(ErrorCode.Value);
15
+ }
16
+ if (deps.isError(criteria)) {
17
+ return criteria;
18
+ }
19
+ rangeCriteriaPairs.push({ range, criteria });
20
+ }
21
+ return rangeCriteriaPairs;
22
+ }
23
+ function findMatchingRowIndexes(targetRange, criteriaArgs, deps) {
24
+ const rangeCriteriaPairs = validateCriteriaPairs(criteriaArgs, deps);
25
+ if (!Array.isArray(rangeCriteriaPairs)) {
26
+ return rangeCriteriaPairs;
27
+ }
28
+ if (rangeCriteriaPairs.some((pair) => pair.range.values.length !== targetRange.values.length)) {
29
+ return deps.errorValue(ErrorCode.Value);
30
+ }
31
+ const matchingRows = [];
32
+ for (let row = 0; row < targetRange.values.length; row += 1) {
33
+ if (rangeCriteriaPairs.every((pair) => deps.matchesCriteria(pair.range.values[row], pair.criteria))) {
34
+ matchingRows.push(row);
35
+ }
36
+ }
37
+ return matchingRows;
38
+ }
39
+ function sumMatchingRows(range, rows, deps) {
40
+ let sum = 0;
41
+ for (const row of rows) {
42
+ sum += deps.toNumber(range.values[row]) ?? 0;
43
+ }
44
+ return sum;
45
+ }
46
+ export function createLookupCriteriaBuiltins(deps) {
47
+ return {
48
+ COUNTIF: (rangeArg, criteriaArg) => {
49
+ const range = deps.requireCellRange(rangeArg);
50
+ if (!deps.isRangeArg(range)) {
51
+ return range;
52
+ }
53
+ if (deps.isRangeArg(criteriaArg)) {
54
+ return deps.errorValue(ErrorCode.Value);
55
+ }
56
+ if (deps.isError(criteriaArg)) {
57
+ return criteriaArg;
58
+ }
59
+ let count = 0;
60
+ for (const value of range.values) {
61
+ if (deps.matchesCriteria(value, criteriaArg)) {
62
+ count += 1;
63
+ }
64
+ }
65
+ return deps.numberResult(count);
66
+ },
67
+ COUNTIFS: (...args) => {
68
+ const rangeCriteriaPairs = validateCriteriaPairs(args, deps);
69
+ if (!Array.isArray(rangeCriteriaPairs)) {
70
+ return rangeCriteriaPairs;
71
+ }
72
+ const expectedLength = rangeCriteriaPairs[0].range.values.length;
73
+ if (rangeCriteriaPairs.some((pair) => pair.range.values.length !== expectedLength)) {
74
+ return deps.errorValue(ErrorCode.Value);
75
+ }
76
+ let count = 0;
77
+ for (let row = 0; row < expectedLength; row += 1) {
78
+ if (rangeCriteriaPairs.every((pair) => deps.matchesCriteria(pair.range.values[row], pair.criteria))) {
79
+ count += 1;
80
+ }
81
+ }
82
+ return deps.numberResult(count);
83
+ },
84
+ SUMIF: (rangeArg, criteriaArg, sumRangeArg = rangeArg) => {
85
+ const range = deps.requireCellRange(rangeArg);
86
+ const sumRange = deps.requireCellRange(sumRangeArg);
87
+ if (!deps.isRangeArg(range)) {
88
+ return range;
89
+ }
90
+ if (!deps.isRangeArg(sumRange)) {
91
+ return sumRange;
92
+ }
93
+ if (range.values.length !== sumRange.values.length) {
94
+ return deps.errorValue(ErrorCode.Value);
95
+ }
96
+ if (deps.isRangeArg(criteriaArg)) {
97
+ return deps.errorValue(ErrorCode.Value);
98
+ }
99
+ if (deps.isError(criteriaArg)) {
100
+ return criteriaArg;
101
+ }
102
+ let sum = 0;
103
+ for (let index = 0; index < range.values.length; index += 1) {
104
+ if (!deps.matchesCriteria(range.values[index], criteriaArg)) {
105
+ continue;
106
+ }
107
+ sum += deps.toNumber(sumRange.values[index]) ?? 0;
108
+ }
109
+ return deps.numberResult(sum);
110
+ },
111
+ SUMIFS: (sumRangeArg, ...criteriaArgs) => {
112
+ const sumRange = deps.requireCellRange(sumRangeArg);
113
+ if (!deps.isRangeArg(sumRange)) {
114
+ return sumRange;
115
+ }
116
+ const matchingRows = findMatchingRowIndexes(sumRange, criteriaArgs, deps);
117
+ if (!Array.isArray(matchingRows)) {
118
+ return matchingRows;
119
+ }
120
+ return deps.numberResult(sumMatchingRows(sumRange, matchingRows, deps));
121
+ },
122
+ AVERAGEIF: (rangeArg, criteriaArg, averageRangeArg = rangeArg) => {
123
+ const range = deps.requireCellRange(rangeArg);
124
+ const averageRange = deps.requireCellRange(averageRangeArg);
125
+ if (!deps.isRangeArg(range)) {
126
+ return range;
127
+ }
128
+ if (!deps.isRangeArg(averageRange)) {
129
+ return averageRange;
130
+ }
131
+ if (range.values.length !== averageRange.values.length) {
132
+ return deps.errorValue(ErrorCode.Value);
133
+ }
134
+ if (deps.isRangeArg(criteriaArg)) {
135
+ return deps.errorValue(ErrorCode.Value);
136
+ }
137
+ if (deps.isError(criteriaArg)) {
138
+ return criteriaArg;
139
+ }
140
+ let count = 0;
141
+ let sum = 0;
142
+ for (let index = 0; index < range.values.length; index += 1) {
143
+ if (!deps.matchesCriteria(range.values[index], criteriaArg)) {
144
+ continue;
145
+ }
146
+ const numeric = deps.toNumber(averageRange.values[index]);
147
+ if (numeric === undefined) {
148
+ continue;
149
+ }
150
+ count += 1;
151
+ sum += numeric;
152
+ }
153
+ return count === 0 ? deps.errorValue(ErrorCode.Div0) : deps.numberResult(sum / count);
154
+ },
155
+ AVERAGEIFS: (averageRangeArg, ...criteriaArgs) => {
156
+ const averageRange = deps.requireCellRange(averageRangeArg);
157
+ if (!deps.isRangeArg(averageRange)) {
158
+ return averageRange;
159
+ }
160
+ const matchingRows = findMatchingRowIndexes(averageRange, criteriaArgs, deps);
161
+ if (!Array.isArray(matchingRows)) {
162
+ return matchingRows;
163
+ }
164
+ let count = 0;
165
+ let sum = 0;
166
+ for (const row of matchingRows) {
167
+ const numeric = deps.toNumber(averageRange.values[row]);
168
+ if (numeric === undefined) {
169
+ continue;
170
+ }
171
+ count += 1;
172
+ sum += numeric;
173
+ }
174
+ return count === 0 ? deps.errorValue(ErrorCode.Div0) : deps.numberResult(sum / count);
175
+ },
176
+ MINIFS: (minRangeArg, ...criteriaArgs) => {
177
+ const minRange = deps.requireCellRange(minRangeArg);
178
+ if (!deps.isRangeArg(minRange)) {
179
+ return minRange;
180
+ }
181
+ const matchingRows = findMatchingRowIndexes(minRange, criteriaArgs, deps);
182
+ if (!Array.isArray(matchingRows)) {
183
+ return matchingRows;
184
+ }
185
+ let minimum = Number.POSITIVE_INFINITY;
186
+ for (const row of matchingRows) {
187
+ const numeric = deps.numericAggregateCandidate(minRange.values[row]);
188
+ if (numeric === undefined) {
189
+ continue;
190
+ }
191
+ minimum = Math.min(minimum, numeric);
192
+ }
193
+ return deps.numberResult(minimum === Number.POSITIVE_INFINITY ? 0 : minimum);
194
+ },
195
+ MAXIFS: (maxRangeArg, ...criteriaArgs) => {
196
+ const maxRange = deps.requireCellRange(maxRangeArg);
197
+ if (!deps.isRangeArg(maxRange)) {
198
+ return maxRange;
199
+ }
200
+ const matchingRows = findMatchingRowIndexes(maxRange, criteriaArgs, deps);
201
+ if (!Array.isArray(matchingRows)) {
202
+ return matchingRows;
203
+ }
204
+ let maximum = Number.NEGATIVE_INFINITY;
205
+ for (const row of matchingRows) {
206
+ const numeric = deps.numericAggregateCandidate(maxRange.values[row]);
207
+ if (numeric === undefined) {
208
+ continue;
209
+ }
210
+ maximum = Math.max(maximum, numeric);
211
+ }
212
+ return deps.numberResult(maximum === Number.NEGATIVE_INFINITY ? 0 : maximum);
213
+ },
214
+ };
215
+ }
216
+ //# sourceMappingURL=lookup-criteria-builtins.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lookup-criteria-builtins.js","sourceRoot":"","sources":["../../src/builtins/lookup-criteria-builtins.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { ErrorCode, ValueTag, type CellValue } from "@bilig/protocol";
2
+ import type { LookupBuiltin, LookupBuiltinArgument, RangeBuiltinArgument } from "./lookup.js";
3
+ interface LookupDatabaseBuiltinDeps {
4
+ errorValue: (code: ErrorCode) => CellValue;
5
+ numberResult: (value: number) => CellValue;
6
+ isError: (value: LookupBuiltinArgument | undefined) => value is Extract<CellValue, {
7
+ tag: ValueTag.Error;
8
+ }>;
9
+ isRangeArg: (value: LookupBuiltinArgument | undefined) => value is RangeBuiltinArgument;
10
+ toNumber: (value: CellValue) => number | undefined;
11
+ toStringValue: (value: CellValue) => string;
12
+ requireCellRange: (arg: LookupBuiltinArgument) => RangeBuiltinArgument | CellValue;
13
+ getRangeValue: (range: RangeBuiltinArgument, row: number, col: number) => CellValue;
14
+ matchesCriteria: (value: CellValue, criteria: CellValue) => boolean;
15
+ }
16
+ export declare function createLookupDatabaseBuiltins(deps: LookupDatabaseBuiltinDeps): Record<string, LookupBuiltin>;
17
+ export {};
@@ -0,0 +1,294 @@
1
+ import { ErrorCode, ValueTag } from "@bilig/protocol";
2
+ function normalizeHeaderLabel(value, deps) {
3
+ return deps.toStringValue(value).trim().toUpperCase();
4
+ }
5
+ function scalarFromLookupArgument(arg, deps) {
6
+ if (!deps.isRangeArg(arg)) {
7
+ return arg;
8
+ }
9
+ if (arg.refKind !== "cells" || arg.values.length !== 1) {
10
+ return deps.errorValue(ErrorCode.Value);
11
+ }
12
+ return arg.values[0] ?? { tag: ValueTag.Empty };
13
+ }
14
+ function resolveDatabaseFieldIndex(database, fieldArg, allowOmitted, deps) {
15
+ const field = scalarFromLookupArgument(fieldArg, deps);
16
+ if (deps.isError(field)) {
17
+ return field;
18
+ }
19
+ if (field.tag === ValueTag.Empty) {
20
+ return allowOmitted ? undefined : deps.errorValue(ErrorCode.Value);
21
+ }
22
+ if (field.tag === ValueTag.Number) {
23
+ const position = Math.trunc(field.value);
24
+ return position >= 1 && position <= database.cols ? position - 1 : deps.errorValue(ErrorCode.Value);
25
+ }
26
+ if (field.tag !== ValueTag.String) {
27
+ return deps.errorValue(ErrorCode.Value);
28
+ }
29
+ const normalizedField = normalizeHeaderLabel(field, deps);
30
+ if (normalizedField === "") {
31
+ return allowOmitted ? undefined : deps.errorValue(ErrorCode.Value);
32
+ }
33
+ for (let col = 0; col < database.cols; col += 1) {
34
+ if (normalizeHeaderLabel(deps.getRangeValue(database, 0, col), deps) === normalizedField) {
35
+ return col;
36
+ }
37
+ }
38
+ return deps.errorValue(ErrorCode.Value);
39
+ }
40
+ function buildDatabaseCriteriaRows(database, criteria, deps) {
41
+ if (criteria.rows < 2 || criteria.cols < 1) {
42
+ return deps.errorValue(ErrorCode.Value);
43
+ }
44
+ const headerColumns = [];
45
+ const headerBlocked = [];
46
+ for (let col = 0; col < criteria.cols; col += 1) {
47
+ const header = deps.getRangeValue(criteria, 0, col);
48
+ if (header.tag === ValueTag.Error) {
49
+ return header;
50
+ }
51
+ const normalized = normalizeHeaderLabel(header, deps);
52
+ if (normalized === "") {
53
+ headerColumns.push(-1);
54
+ headerBlocked.push(true);
55
+ continue;
56
+ }
57
+ let matchedColumn = -1;
58
+ for (let databaseCol = 0; databaseCol < database.cols; databaseCol += 1) {
59
+ if (normalizeHeaderLabel(deps.getRangeValue(database, 0, databaseCol), deps) === normalized) {
60
+ matchedColumn = databaseCol;
61
+ break;
62
+ }
63
+ }
64
+ headerColumns.push(matchedColumn);
65
+ headerBlocked.push(matchedColumn < 0);
66
+ }
67
+ const rows = [];
68
+ for (let row = 1; row < criteria.rows; row += 1) {
69
+ const clauses = [];
70
+ let blocked = false;
71
+ for (let col = 0; col < criteria.cols; col += 1) {
72
+ const value = deps.getRangeValue(criteria, row, col);
73
+ if (value.tag === ValueTag.Empty) {
74
+ continue;
75
+ }
76
+ if (value.tag === ValueTag.Error) {
77
+ return value;
78
+ }
79
+ if (headerBlocked[col]) {
80
+ blocked = true;
81
+ continue;
82
+ }
83
+ const databaseColumn = headerColumns[col];
84
+ if (databaseColumn === undefined || databaseColumn < 0) {
85
+ continue;
86
+ }
87
+ clauses.push({ columnIndex: databaseColumn, criteria: value });
88
+ }
89
+ rows.push({ clauses, blocked });
90
+ }
91
+ return rows;
92
+ }
93
+ function recordMatchesDatabaseCriteria(database, databaseRow, criteriaRows, deps) {
94
+ for (const criteriaRow of criteriaRows) {
95
+ if (criteriaRow.blocked) {
96
+ continue;
97
+ }
98
+ if (criteriaRow.clauses.every((clause) => deps.matchesCriteria(deps.getRangeValue(database, databaseRow, clause.columnIndex), clause.criteria))) {
99
+ return true;
100
+ }
101
+ }
102
+ return false;
103
+ }
104
+ function matchingDatabaseRows(databaseArg, criteriaArg, deps) {
105
+ const database = deps.requireCellRange(databaseArg);
106
+ if (!deps.isRangeArg(database)) {
107
+ return database;
108
+ }
109
+ const criteria = deps.requireCellRange(criteriaArg);
110
+ if (!deps.isRangeArg(criteria)) {
111
+ return criteria;
112
+ }
113
+ if (database.rows < 1 || database.cols < 1) {
114
+ return deps.errorValue(ErrorCode.Value);
115
+ }
116
+ const criteriaRows = buildDatabaseCriteriaRows(database, criteria, deps);
117
+ if (!Array.isArray(criteriaRows)) {
118
+ return criteriaRows;
119
+ }
120
+ const matchingRows = [];
121
+ for (let row = 1; row < database.rows; row += 1) {
122
+ if (recordMatchesDatabaseCriteria(database, row, criteriaRows, deps)) {
123
+ matchingRows.push(row);
124
+ }
125
+ }
126
+ return { database, matchingRows };
127
+ }
128
+ function selectedDatabaseFieldValues(databaseArg, fieldArg, criteriaArg, allowOmittedField, deps) {
129
+ const matches = matchingDatabaseRows(databaseArg, criteriaArg, deps);
130
+ if ("tag" in matches) {
131
+ return matches;
132
+ }
133
+ const fieldIndex = resolveDatabaseFieldIndex(matches.database, fieldArg, allowOmittedField, deps);
134
+ if (typeof fieldIndex !== "number" && fieldIndex !== undefined) {
135
+ return fieldIndex;
136
+ }
137
+ return fieldIndex === undefined
138
+ ? {
139
+ database: matches.database,
140
+ matchingRows: matches.matchingRows,
141
+ }
142
+ : {
143
+ database: matches.database,
144
+ matchingRows: matches.matchingRows,
145
+ fieldIndex,
146
+ };
147
+ }
148
+ function sampleVariance(numbers) {
149
+ if (numbers.length < 2) {
150
+ return undefined;
151
+ }
152
+ const mean = numbers.reduce((sum, value) => sum + value, 0) / numbers.length;
153
+ return numbers.reduce((sum, value) => sum + (value - mean) ** 2, 0) / (numbers.length - 1);
154
+ }
155
+ function populationVariance(numbers) {
156
+ if (numbers.length === 0) {
157
+ return undefined;
158
+ }
159
+ const mean = numbers.reduce((sum, value) => sum + value, 0) / numbers.length;
160
+ return numbers.reduce((sum, value) => sum + (value - mean) ** 2, 0) / numbers.length;
161
+ }
162
+ function collectSelectionNumbers(selection, deps) {
163
+ const values = [];
164
+ for (const row of selection.matchingRows) {
165
+ const numeric = deps.toNumber(deps.getRangeValue(selection.database, row, selection.fieldIndex ?? 0));
166
+ if (numeric !== undefined) {
167
+ values.push(numeric);
168
+ }
169
+ }
170
+ return values;
171
+ }
172
+ export function createLookupDatabaseBuiltins(deps) {
173
+ return {
174
+ DAVERAGE: (databaseArg, fieldArg, criteriaArg) => {
175
+ const selection = selectedDatabaseFieldValues(databaseArg, fieldArg, criteriaArg, false, deps);
176
+ if ("tag" in selection) {
177
+ return selection;
178
+ }
179
+ const values = collectSelectionNumbers(selection, deps);
180
+ if (values.length === 0) {
181
+ return deps.errorValue(ErrorCode.Div0);
182
+ }
183
+ const sum = values.reduce((total, value) => total + value, 0);
184
+ return deps.numberResult(sum / values.length);
185
+ },
186
+ DCOUNT: (databaseArg, fieldArg, criteriaArg) => {
187
+ const selection = selectedDatabaseFieldValues(databaseArg, fieldArg, criteriaArg, true, deps);
188
+ if ("tag" in selection) {
189
+ return selection;
190
+ }
191
+ if (selection.fieldIndex === undefined) {
192
+ return deps.numberResult(selection.matchingRows.length);
193
+ }
194
+ return deps.numberResult(collectSelectionNumbers(selection, deps).length);
195
+ },
196
+ DCOUNTA: (databaseArg, fieldArg, criteriaArg) => {
197
+ const selection = selectedDatabaseFieldValues(databaseArg, fieldArg, criteriaArg, true, deps);
198
+ if ("tag" in selection) {
199
+ return selection;
200
+ }
201
+ if (selection.fieldIndex === undefined) {
202
+ return deps.numberResult(selection.matchingRows.length);
203
+ }
204
+ let count = 0;
205
+ for (const row of selection.matchingRows) {
206
+ if (deps.getRangeValue(selection.database, row, selection.fieldIndex).tag !== ValueTag.Empty) {
207
+ count += 1;
208
+ }
209
+ }
210
+ return deps.numberResult(count);
211
+ },
212
+ DGET: (databaseArg, fieldArg, criteriaArg) => {
213
+ const selection = selectedDatabaseFieldValues(databaseArg, fieldArg, criteriaArg, false, deps);
214
+ if ("tag" in selection) {
215
+ return selection;
216
+ }
217
+ if (selection.matchingRows.length !== 1) {
218
+ return deps.errorValue(ErrorCode.Value);
219
+ }
220
+ return deps.getRangeValue(selection.database, selection.matchingRows[0], selection.fieldIndex ?? 0);
221
+ },
222
+ DMAX: (databaseArg, fieldArg, criteriaArg) => {
223
+ const selection = selectedDatabaseFieldValues(databaseArg, fieldArg, criteriaArg, false, deps);
224
+ if ("tag" in selection) {
225
+ return selection;
226
+ }
227
+ const values = collectSelectionNumbers(selection, deps);
228
+ return deps.numberResult(values.length === 0 ? 0 : Math.max(...values));
229
+ },
230
+ DMIN: (databaseArg, fieldArg, criteriaArg) => {
231
+ const selection = selectedDatabaseFieldValues(databaseArg, fieldArg, criteriaArg, false, deps);
232
+ if ("tag" in selection) {
233
+ return selection;
234
+ }
235
+ const values = collectSelectionNumbers(selection, deps);
236
+ return deps.numberResult(values.length === 0 ? 0 : Math.min(...values));
237
+ },
238
+ DPRODUCT: (databaseArg, fieldArg, criteriaArg) => {
239
+ const selection = selectedDatabaseFieldValues(databaseArg, fieldArg, criteriaArg, false, deps);
240
+ if ("tag" in selection) {
241
+ return selection;
242
+ }
243
+ const values = collectSelectionNumbers(selection, deps);
244
+ if (values.length === 0) {
245
+ return deps.numberResult(0);
246
+ }
247
+ return deps.numberResult(values.reduce((product, value) => product * value, 1));
248
+ },
249
+ DSTDEV: (databaseArg, fieldArg, criteriaArg) => {
250
+ const selection = selectedDatabaseFieldValues(databaseArg, fieldArg, criteriaArg, false, deps);
251
+ if ("tag" in selection) {
252
+ return selection;
253
+ }
254
+ const variance = sampleVariance(collectSelectionNumbers(selection, deps));
255
+ return variance === undefined
256
+ ? deps.errorValue(ErrorCode.Div0)
257
+ : deps.numberResult(Math.sqrt(variance));
258
+ },
259
+ DSTDEVP: (databaseArg, fieldArg, criteriaArg) => {
260
+ const selection = selectedDatabaseFieldValues(databaseArg, fieldArg, criteriaArg, false, deps);
261
+ if ("tag" in selection) {
262
+ return selection;
263
+ }
264
+ const variance = populationVariance(collectSelectionNumbers(selection, deps));
265
+ return variance === undefined
266
+ ? deps.errorValue(ErrorCode.Div0)
267
+ : deps.numberResult(Math.sqrt(variance));
268
+ },
269
+ DSUM: (databaseArg, fieldArg, criteriaArg) => {
270
+ const selection = selectedDatabaseFieldValues(databaseArg, fieldArg, criteriaArg, false, deps);
271
+ if ("tag" in selection) {
272
+ return selection;
273
+ }
274
+ return deps.numberResult(collectSelectionNumbers(selection, deps).reduce((sum, value) => sum + value, 0));
275
+ },
276
+ DVAR: (databaseArg, fieldArg, criteriaArg) => {
277
+ const selection = selectedDatabaseFieldValues(databaseArg, fieldArg, criteriaArg, false, deps);
278
+ if ("tag" in selection) {
279
+ return selection;
280
+ }
281
+ const variance = sampleVariance(collectSelectionNumbers(selection, deps));
282
+ return variance === undefined ? deps.errorValue(ErrorCode.Div0) : deps.numberResult(variance);
283
+ },
284
+ DVARP: (databaseArg, fieldArg, criteriaArg) => {
285
+ const selection = selectedDatabaseFieldValues(databaseArg, fieldArg, criteriaArg, false, deps);
286
+ if ("tag" in selection) {
287
+ return selection;
288
+ }
289
+ const variance = populationVariance(collectSelectionNumbers(selection, deps));
290
+ return variance === undefined ? deps.errorValue(ErrorCode.Div0) : deps.numberResult(variance);
291
+ },
292
+ };
293
+ }
294
+ //# sourceMappingURL=lookup-database-builtins.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lookup-database-builtins.js","sourceRoot":"","sources":["../../src/builtins/lookup-database-builtins.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAkB,MAAM,iBAAiB,CAAC;AAiCtE,SAAS,oBAAoB,CAAC,KAAgB,EAAE,IAA+B;IAC7E,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AACxD,CAAC;AAED,SAAS,wBAAwB,CAC/B,GAA0B,EAC1B,IAA+B;IAE/B,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1B,OAAO,GAAG,CAAC;IACb,CAAC;IACD,IAAI,GAAG,CAAC,OAAO,KAAK,OAAO,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvD,OAAO,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC;AAClD,CAAC;AAED,SAAS,yBAAyB,CAChC,QAA8B,EAC9B,QAA+B,EAC/B,YAAqB,EACrB,IAA+B;IAE/B,MAAM,KAAK,GAAG,wBAAwB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IACvD,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,CAAC,KAAK,EAAE,CAAC;QACjC,OAAO,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACrE,CAAC;IAED,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,CAAC,MAAM,EAAE,CAAC;QAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACzC,OAAO,QAAQ,IAAI,CAAC,IAAI,QAAQ,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACtG,CAAC;IAED,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,CAAC,MAAM,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,eAAe,GAAG,oBAAoB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC1D,IAAI,eAAe,KAAK,EAAE,EAAE,CAAC;QAC3B,OAAO,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACrE,CAAC;IACD,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;QAChD,IAAI,oBAAoB,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,eAAe,EAAE,CAAC;YACzF,OAAO,GAAG,CAAC;QACb,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAC1C,CAAC;AAED,SAAS,yBAAyB,CAChC,QAA8B,EAC9B,QAA8B,EAC9B,IAA+B;IAE/B,IAAI,QAAQ,CAAC,IAAI,GAAG,CAAC,IAAI,QAAQ,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QAC3C,OAAO,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,aAAa,GAAa,EAAE,CAAC;IACnC,MAAM,aAAa,GAAc,EAAE,CAAC;IACpC,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;QAChD,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;QACpD,IAAI,MAAM,CAAC,GAAG,KAAK,QAAQ,CAAC,KAAK,EAAE,CAAC;YAClC,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,MAAM,UAAU,GAAG,oBAAoB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACtD,IAAI,UAAU,KAAK,EAAE,EAAE,CAAC;YACtB,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACvB,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACzB,SAAS;QACX,CAAC;QACD,IAAI,aAAa,GAAG,CAAC,CAAC,CAAC;QACvB,KAAK,IAAI,WAAW,GAAG,CAAC,EAAE,WAAW,GAAG,QAAQ,CAAC,IAAI,EAAE,WAAW,IAAI,CAAC,EAAE,CAAC;YACxE,IAAI,oBAAoB,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC,EAAE,WAAW,CAAC,EAAE,IAAI,CAAC,KAAK,UAAU,EAAE,CAAC;gBAC5F,aAAa,GAAG,WAAW,CAAC;gBAC5B,MAAM;YACR,CAAC;QACH,CAAC;QACD,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAClC,aAAa,CAAC,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC;IACxC,CAAC;IAED,MAAM,IAAI,GAA0B,EAAE,CAAC;IACvC,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;QAChD,MAAM,OAAO,GAA6B,EAAE,CAAC;QAC7C,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;YAChD,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YACrD,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,CAAC,KAAK,EAAE,CAAC;gBACjC,SAAS;YACX,CAAC;YACD,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,CAAC,KAAK,EAAE,CAAC;gBACjC,OAAO,KAAK,CAAC;YACf,CAAC;YACD,IAAI,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;gBACvB,OAAO,GAAG,IAAI,CAAC;gBACf,SAAS;YACX,CAAC;YACD,MAAM,cAAc,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;YAC1C,IAAI,cAAc,KAAK,SAAS,IAAI,cAAc,GAAG,CAAC,EAAE,CAAC;gBACvD,SAAS;YACX,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,cAAc,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;QACjE,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,6BAA6B,CACpC,QAA8B,EAC9B,WAAmB,EACnB,YAA4C,EAC5C,IAA+B;IAE/B,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;QACvC,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;YACxB,SAAS;QACX,CAAC;QACD,IACE,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,EAAE,CACnC,IAAI,CAAC,eAAe,CAClB,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,EAC7D,MAAM,CAAC,QAAQ,CAChB,CACF,EACD,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,oBAAoB,CAC3B,WAAkC,EAClC,WAAkC,EAClC,IAA+B;IAE/B,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;IACpD,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC/B,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;IACpD,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC/B,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,IAAI,QAAQ,CAAC,IAAI,GAAG,CAAC,IAAI,QAAQ,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QAC3C,OAAO,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,YAAY,GAAG,yBAAyB,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;IACzE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;QACjC,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;QAChD,IAAI,6BAA6B,CAAC,QAAQ,EAAE,GAAG,EAAE,YAAY,EAAE,IAAI,CAAC,EAAE,CAAC;YACrE,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC;AACpC,CAAC;AAED,SAAS,2BAA2B,CAClC,WAAkC,EAClC,QAA+B,EAC/B,WAAkC,EAClC,iBAA0B,EAC1B,IAA+B;IAE/B,MAAM,OAAO,GAAG,oBAAoB,CAAC,WAAW,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;IACrE,IAAI,KAAK,IAAI,OAAO,EAAE,CAAC;QACrB,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,MAAM,UAAU,GAAG,yBAAyB,CAAC,OAAO,CAAC,QAAQ,EAAE,QAAQ,EAAE,iBAAiB,EAAE,IAAI,CAAC,CAAC;IAClG,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC/D,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,OAAO,UAAU,KAAK,SAAS;QAC7B,CAAC,CAAC;YACE,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,YAAY,EAAE,OAAO,CAAC,YAAY;SACnC;QACH,CAAC,CAAC;YACE,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,UAAU;SACX,CAAC;AACR,CAAC;AAED,SAAS,cAAc,CAAC,OAA0B;IAChD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAC7E,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC7F,CAAC;AAED,SAAS,kBAAkB,CAAC,OAA0B;IACpD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAC7E,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;AACvF,CAAC;AAED,SAAS,uBAAuB,CAC9B,SAA4B,EAC5B,IAA+B;IAE/B,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,MAAM,GAAG,IAAI,SAAS,CAAC,YAAY,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAC3B,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,QAAQ,EAAE,GAAG,EAAE,SAAS,CAAC,UAAU,IAAI,CAAC,CAAC,CACvE,CAAC;QACF,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,4BAA4B,CAC1C,IAA+B;IAE/B,OAAO;QACL,QAAQ,EAAE,CAAC,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE;YAC/C,MAAM,SAAS,GAAG,2BAA2B,CAAC,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;YAC/F,IAAI,KAAK,IAAI,SAAS,EAAE,CAAC;gBACvB,OAAO,SAAS,CAAC;YACnB,CAAC;YAED,MAAM,MAAM,GAAG,uBAAuB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YACxD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACxB,OAAO,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YACzC,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC;YAC9D,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QAChD,CAAC;QACD,MAAM,EAAE,CAAC,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE;YAC7C,MAAM,SAAS,GAAG,2BAA2B,CAAC,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YAC9F,IAAI,KAAK,IAAI,SAAS,EAAE,CAAC;gBACvB,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,IAAI,SAAS,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;gBACvC,OAAO,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YAC1D,CAAC;YACD,OAAO,IAAI,CAAC,YAAY,CAAC,uBAAuB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC;QAC5E,CAAC;QACD,OAAO,EAAE,CAAC,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE;YAC9C,MAAM,SAAS,GAAG,2BAA2B,CAAC,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YAC9F,IAAI,KAAK,IAAI,SAAS,EAAE,CAAC;gBACvB,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,IAAI,SAAS,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;gBACvC,OAAO,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YAC1D,CAAC;YACD,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,KAAK,MAAM,GAAG,IAAI,SAAS,CAAC,YAAY,EAAE,CAAC;gBACzC,IAAI,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,QAAQ,EAAE,GAAG,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC,GAAG,KAAK,QAAQ,CAAC,KAAK,EAAE,CAAC;oBAC7F,KAAK,IAAI,CAAC,CAAC;gBACb,CAAC;YACH,CAAC;YACD,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAClC,CAAC;QACD,IAAI,EAAE,CAAC,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE;YAC3C,MAAM,SAAS,GAAG,2BAA2B,CAAC,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;YAC/F,IAAI,KAAK,IAAI,SAAS,EAAE,CAAC;gBACvB,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,IAAI,SAAS,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACxC,OAAO,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YAC1C,CAAC;YACD,OAAO,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,QAAQ,EAAE,SAAS,CAAC,YAAY,CAAC,CAAC,CAAE,EAAE,SAAS,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC;QACvG,CAAC;QACD,IAAI,EAAE,CAAC,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE;YAC3C,MAAM,SAAS,GAAG,2BAA2B,CAAC,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;YAC/F,IAAI,KAAK,IAAI,SAAS,EAAE,CAAC;gBACvB,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,MAAM,MAAM,GAAG,uBAAuB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YACxD,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;QAC1E,CAAC;QACD,IAAI,EAAE,CAAC,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE;YAC3C,MAAM,SAAS,GAAG,2BAA2B,CAAC,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;YAC/F,IAAI,KAAK,IAAI,SAAS,EAAE,CAAC;gBACvB,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,MAAM,MAAM,GAAG,uBAAuB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YACxD,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;QAC1E,CAAC;QACD,QAAQ,EAAE,CAAC,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE;YAC/C,MAAM,SAAS,GAAG,2BAA2B,CAAC,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;YAC/F,IAAI,KAAK,IAAI,SAAS,EAAE,CAAC;gBACvB,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,MAAM,MAAM,GAAG,uBAAuB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YACxD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACxB,OAAO,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAC9B,CAAC;YACD,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,OAAO,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;QAClF,CAAC;QACD,MAAM,EAAE,CAAC,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE;YAC7C,MAAM,SAAS,GAAG,2BAA2B,CAAC,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;YAC/F,IAAI,KAAK,IAAI,SAAS,EAAE,CAAC;gBACvB,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,MAAM,QAAQ,GAAG,cAAc,CAAC,uBAAuB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;YAC1E,OAAO,QAAQ,KAAK,SAAS;gBAC3B,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC;gBACjC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC7C,CAAC;QACD,OAAO,EAAE,CAAC,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE;YAC9C,MAAM,SAAS,GAAG,2BAA2B,CAAC,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;YAC/F,IAAI,KAAK,IAAI,SAAS,EAAE,CAAC;gBACvB,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,MAAM,QAAQ,GAAG,kBAAkB,CAAC,uBAAuB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;YAC9E,OAAO,QAAQ,KAAK,SAAS;gBAC3B,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC;gBACjC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC7C,CAAC;QACD,IAAI,EAAE,CAAC,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE;YAC3C,MAAM,SAAS,GAAG,2BAA2B,CAAC,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;YAC/F,IAAI,KAAK,IAAI,SAAS,EAAE,CAAC;gBACvB,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,OAAO,IAAI,CAAC,YAAY,CACtB,uBAAuB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,EAAE,CAAC,CAAC,CAChF,CAAC;QACJ,CAAC;QACD,IAAI,EAAE,CAAC,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE;YAC3C,MAAM,SAAS,GAAG,2BAA2B,CAAC,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;YAC/F,IAAI,KAAK,IAAI,SAAS,EAAE,CAAC;gBACvB,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,MAAM,QAAQ,GAAG,cAAc,CAAC,uBAAuB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;YAC1E,OAAO,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QAChG,CAAC;QACD,KAAK,EAAE,CAAC,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE;YAC5C,MAAM,SAAS,GAAG,2BAA2B,CAAC,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;YAC/F,IAAI,KAAK,IAAI,SAAS,EAAE,CAAC;gBACvB,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,MAAM,QAAQ,GAAG,kBAAkB,CAAC,uBAAuB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;YAC9E,OAAO,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QAChG,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { ErrorCode, type CellValue } from "@bilig/protocol";
2
+ import type { LookupBuiltin, LookupBuiltinArgument, RangeBuiltinArgument } from "./lookup.js";
3
+ interface LookupFinancialBuiltinDeps {
4
+ errorValue: (code: ErrorCode) => CellValue;
5
+ numberResult: (value: number) => CellValue;
6
+ isRangeArg: (value: LookupBuiltinArgument | undefined) => value is RangeBuiltinArgument;
7
+ toNumber: (value: CellValue) => number | undefined;
8
+ collectNumericSeries: (arg: LookupBuiltinArgument, mode: "lenient" | "strict") => number[] | CellValue;
9
+ }
10
+ export declare function createLookupFinancialBuiltins(deps: LookupFinancialBuiltinDeps): Record<string, LookupBuiltin>;
11
+ export {};