@bilig/formula 0.1.0 → 0.1.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.
Files changed (30) hide show
  1. package/dist/builtins/lookup-hypothesis-builtins.d.ts +4 -5
  2. package/dist/builtins/lookup-hypothesis-builtins.js +393 -10
  3. package/dist/builtins/lookup-hypothesis-builtins.js.map +1 -1
  4. package/dist/builtins/lookup.js +3 -387
  5. package/dist/builtins/lookup.js.map +1 -1
  6. package/dist/builtins/placeholder.d.ts +2 -2
  7. package/dist/builtins/text-core-builtins.d.ts +12 -0
  8. package/dist/builtins/text-core-builtins.js +409 -0
  9. package/dist/builtins/text-core-builtins.js.map +1 -0
  10. package/dist/builtins/text-format-builtins.d.ts +14 -0
  11. package/dist/builtins/text-format-builtins.js +537 -0
  12. package/dist/builtins/text-format-builtins.js.map +1 -0
  13. package/dist/builtins/text-search-builtins.d.ts +21 -0
  14. package/dist/builtins/text-search-builtins.js +469 -0
  15. package/dist/builtins/text-search-builtins.js.map +1 -0
  16. package/dist/builtins/text.js +41 -1368
  17. package/dist/builtins/text.js.map +1 -1
  18. package/dist/js-evaluator-array-special-calls.d.ts +28 -0
  19. package/dist/js-evaluator-array-special-calls.js +340 -0
  20. package/dist/js-evaluator-array-special-calls.js.map +1 -0
  21. package/dist/js-evaluator-context-special-calls.d.ts +24 -0
  22. package/dist/js-evaluator-context-special-calls.js +156 -0
  23. package/dist/js-evaluator-context-special-calls.js.map +1 -0
  24. package/dist/js-evaluator-types.d.ts +117 -0
  25. package/dist/js-evaluator-types.js +2 -0
  26. package/dist/js-evaluator-types.js.map +1 -0
  27. package/dist/js-evaluator.d.ts +3 -100
  28. package/dist/js-evaluator.js +42 -492
  29. package/dist/js-evaluator.js.map +1 -1
  30. package/package.json +6 -6
@@ -0,0 +1,469 @@
1
+ import { ErrorCode, ValueTag } from "@bilig/protocol";
2
+ function compileRegex(pattern, caseSensitivity, global = false) {
3
+ try {
4
+ const flags = `${caseSensitivity === 1 ? "i" : ""}${global ? "g" : ""}`;
5
+ return new RegExp(pattern, flags);
6
+ }
7
+ catch {
8
+ return { tag: ValueTag.Error, code: ErrorCode.Value };
9
+ }
10
+ }
11
+ function isRegexError(value) {
12
+ return !(value instanceof RegExp);
13
+ }
14
+ function applyReplacementTemplate(template, match, captures) {
15
+ let output = "";
16
+ for (let index = 0; index < template.length; index += 1) {
17
+ const char = template[index];
18
+ if (char !== "$") {
19
+ output += char;
20
+ continue;
21
+ }
22
+ const next = template[index + 1];
23
+ if (next === undefined) {
24
+ output += "$";
25
+ continue;
26
+ }
27
+ if (next === "$") {
28
+ output += "$";
29
+ index += 1;
30
+ continue;
31
+ }
32
+ if (next === "&") {
33
+ output += match;
34
+ index += 1;
35
+ continue;
36
+ }
37
+ if (!/\d/.test(next)) {
38
+ output += "$";
39
+ continue;
40
+ }
41
+ const secondDigit = template[index + 2];
42
+ const twoDigitIndex = secondDigit !== undefined && /\d/.test(secondDigit) ? Number(`${next}${secondDigit}`) : -1;
43
+ if (twoDigitIndex >= 1 && twoDigitIndex <= captures.length) {
44
+ output += captures[twoDigitIndex - 1] ?? "";
45
+ index += 2;
46
+ continue;
47
+ }
48
+ const captureIndex = Number(next);
49
+ if (captureIndex >= 1 && captureIndex <= captures.length) {
50
+ output += captures[captureIndex - 1] ?? "";
51
+ index += 1;
52
+ continue;
53
+ }
54
+ output += `$${next}`;
55
+ index += 1;
56
+ }
57
+ return output;
58
+ }
59
+ function escapeRegExp(value) {
60
+ return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
61
+ }
62
+ function indexOfWithMode(text, delimiter, start, matchMode) {
63
+ if (matchMode === 1) {
64
+ return text.toLowerCase().indexOf(delimiter.toLowerCase(), start);
65
+ }
66
+ return text.indexOf(delimiter, start);
67
+ }
68
+ function lastIndexOfWithMode(text, delimiter, start, matchMode) {
69
+ if (matchMode === 1) {
70
+ return text.toLowerCase().lastIndexOf(delimiter.toLowerCase(), start);
71
+ }
72
+ return text.lastIndexOf(delimiter, start);
73
+ }
74
+ function hasSearchSyntax(pattern) {
75
+ for (let index = 0; index < pattern.length; index += 1) {
76
+ const char = pattern[index];
77
+ if (char === "~" || char === "*" || char === "?") {
78
+ return true;
79
+ }
80
+ }
81
+ return false;
82
+ }
83
+ function buildSearchRegex(pattern) {
84
+ let source = "^";
85
+ for (let index = 0; index < pattern.length; index += 1) {
86
+ const char = pattern[index];
87
+ if (char === "~") {
88
+ const next = pattern[index + 1];
89
+ if (next === undefined) {
90
+ source += escapeRegExp(char);
91
+ }
92
+ else {
93
+ source += escapeRegExp(next);
94
+ index += 1;
95
+ }
96
+ continue;
97
+ }
98
+ if (char === "*") {
99
+ source += "[\\s\\S]*";
100
+ continue;
101
+ }
102
+ if (char === "?") {
103
+ source += "[\\s\\S]";
104
+ continue;
105
+ }
106
+ source += escapeRegExp(char);
107
+ }
108
+ return new RegExp(source, "i");
109
+ }
110
+ function findPosition(deps, needle, haystack, start, caseSensitive, wildcardAware) {
111
+ const startIndex = start - 1;
112
+ if (needle === "") {
113
+ return start;
114
+ }
115
+ if (startIndex > haystack.length) {
116
+ return deps.error(ErrorCode.Value);
117
+ }
118
+ if (!wildcardAware || !hasSearchSyntax(needle)) {
119
+ const normalizedHaystack = caseSensitive ? haystack : haystack.toLowerCase();
120
+ const normalizedNeedle = caseSensitive ? needle : needle.toLowerCase();
121
+ const found = normalizedHaystack.indexOf(normalizedNeedle, startIndex);
122
+ return found === -1 ? deps.error(ErrorCode.Value) : found + 1;
123
+ }
124
+ const regex = buildSearchRegex(needle);
125
+ for (let index = startIndex; index <= haystack.length; index += 1) {
126
+ if (regex.test(haystack.slice(index))) {
127
+ return index + 1;
128
+ }
129
+ }
130
+ return deps.error(ErrorCode.Value);
131
+ }
132
+ export function createTextSearchBuiltins(deps) {
133
+ return {
134
+ FIND: (...args) => {
135
+ const existingError = deps.firstError(args);
136
+ if (existingError) {
137
+ return existingError;
138
+ }
139
+ const [findTextValue, withinTextValue, startValue] = args;
140
+ if (findTextValue === undefined || withinTextValue === undefined) {
141
+ return deps.error(ErrorCode.Value);
142
+ }
143
+ const start = deps.coercePositiveStart(startValue, 1);
144
+ if (deps.isErrorValue(start)) {
145
+ return start;
146
+ }
147
+ const found = findPosition(deps, deps.coerceText(findTextValue), deps.coerceText(withinTextValue), start, true, false);
148
+ return deps.isErrorValue(found) ? found : deps.numberResult(found);
149
+ },
150
+ SEARCH: (...args) => {
151
+ const existingError = deps.firstError(args);
152
+ if (existingError) {
153
+ return existingError;
154
+ }
155
+ const [findTextValue, withinTextValue, startValue] = args;
156
+ if (findTextValue === undefined || withinTextValue === undefined) {
157
+ return deps.error(ErrorCode.Value);
158
+ }
159
+ const start = deps.coercePositiveStart(startValue, 1);
160
+ if (deps.isErrorValue(start)) {
161
+ return start;
162
+ }
163
+ const found = findPosition(deps, deps.coerceText(findTextValue), deps.coerceText(withinTextValue), start, false, true);
164
+ return deps.isErrorValue(found) ? found : deps.numberResult(found);
165
+ },
166
+ SEARCHB: (...args) => {
167
+ const existingError = deps.firstError(args);
168
+ if (existingError) {
169
+ return existingError;
170
+ }
171
+ const [findTextValue, withinTextValue, startValue] = args;
172
+ if (findTextValue === undefined || withinTextValue === undefined) {
173
+ return deps.error(ErrorCode.Value);
174
+ }
175
+ const text = deps.coerceText(withinTextValue);
176
+ const start = deps.coercePositiveStart(startValue, 1);
177
+ if (deps.isErrorValue(start)) {
178
+ return start;
179
+ }
180
+ if (start > deps.utf8Bytes(text).length + 1) {
181
+ return deps.error(ErrorCode.Value);
182
+ }
183
+ const found = findPosition(deps, deps.coerceText(findTextValue), text, deps.bytePositionToCharPosition(text, start), false, true);
184
+ return deps.isErrorValue(found)
185
+ ? found
186
+ : deps.numberResult(deps.charPositionToBytePosition(text, found));
187
+ },
188
+ FINDB: (...args) => {
189
+ const existingError = deps.firstError(args);
190
+ if (existingError) {
191
+ return existingError;
192
+ }
193
+ const [findTextValue, withinTextValue, startValue] = args;
194
+ if (findTextValue === undefined || withinTextValue === undefined) {
195
+ return deps.error(ErrorCode.Value);
196
+ }
197
+ const start = deps.coercePositiveStart(startValue, 1);
198
+ if (deps.isErrorValue(start)) {
199
+ return start;
200
+ }
201
+ const findBytes = deps.utf8Bytes(deps.coerceText(findTextValue));
202
+ const withinBytes = deps.utf8Bytes(deps.coerceText(withinTextValue));
203
+ if (start > withinBytes.length + 1) {
204
+ return deps.error(ErrorCode.Value);
205
+ }
206
+ const found = deps.findSubBytes(withinBytes, findBytes, start - 1);
207
+ return found === -1 ? deps.error(ErrorCode.Value) : deps.numberResult(found + 1);
208
+ },
209
+ REGEXTEST: (...args) => {
210
+ const existingError = deps.firstError(args);
211
+ if (existingError) {
212
+ return existingError;
213
+ }
214
+ const [textValue, patternValue, caseSensitivityValue] = args;
215
+ if (textValue === undefined || patternValue === undefined) {
216
+ return deps.error(ErrorCode.Value);
217
+ }
218
+ const caseSensitivity = deps.coerceInteger(caseSensitivityValue, 0);
219
+ if (deps.isErrorValue(caseSensitivity) ||
220
+ (caseSensitivity !== 0 && caseSensitivity !== 1)) {
221
+ return deps.error(ErrorCode.Value);
222
+ }
223
+ const regex = compileRegex(deps.coerceText(patternValue), caseSensitivity);
224
+ if (isRegexError(regex)) {
225
+ return regex;
226
+ }
227
+ return deps.booleanResult(regex.test(deps.coerceText(textValue)));
228
+ },
229
+ REGEXREPLACE: (...args) => {
230
+ const existingError = deps.firstError(args);
231
+ if (existingError) {
232
+ return existingError;
233
+ }
234
+ const [textValue, patternValue, replacementValue, occurrenceValue, caseSensitivityValue] = args;
235
+ if (textValue === undefined || patternValue === undefined || replacementValue === undefined) {
236
+ return deps.error(ErrorCode.Value);
237
+ }
238
+ const occurrence = deps.coerceInteger(occurrenceValue, 0);
239
+ const caseSensitivity = deps.coerceInteger(caseSensitivityValue, 0);
240
+ if (deps.isErrorValue(occurrence) ||
241
+ deps.isErrorValue(caseSensitivity) ||
242
+ (caseSensitivity !== 0 && caseSensitivity !== 1)) {
243
+ return deps.error(ErrorCode.Value);
244
+ }
245
+ const text = deps.coerceText(textValue);
246
+ const replacement = deps.coerceText(replacementValue);
247
+ const regex = compileRegex(deps.coerceText(patternValue), caseSensitivity, true);
248
+ if (isRegexError(regex)) {
249
+ return regex;
250
+ }
251
+ if (occurrence === 0) {
252
+ return deps.stringResult(text.replace(regex, replacement));
253
+ }
254
+ const matches = [...text.matchAll(regex)];
255
+ if (matches.length === 0) {
256
+ return deps.stringResult(text);
257
+ }
258
+ const targetIndex = occurrence > 0 ? occurrence - 1 : matches.length + occurrence;
259
+ if (targetIndex < 0 || targetIndex >= matches.length) {
260
+ return deps.stringResult(text);
261
+ }
262
+ let currentIndex = -1;
263
+ return deps.stringResult(text.replace(regex, (match, ...rest) => {
264
+ currentIndex += 1;
265
+ if (currentIndex !== targetIndex) {
266
+ return match;
267
+ }
268
+ const captures = rest
269
+ .slice(0, -2)
270
+ .map((value) => (typeof value === "string" ? value : undefined));
271
+ return applyReplacementTemplate(replacement, match, captures);
272
+ }));
273
+ },
274
+ REGEXEXTRACT: (...args) => {
275
+ const existingError = deps.firstError(args);
276
+ if (existingError) {
277
+ return existingError;
278
+ }
279
+ const [textValue, patternValue, returnModeValue, caseSensitivityValue] = args;
280
+ if (textValue === undefined || patternValue === undefined) {
281
+ return deps.error(ErrorCode.Value);
282
+ }
283
+ const returnMode = deps.coerceInteger(returnModeValue, 0);
284
+ const caseSensitivity = deps.coerceInteger(caseSensitivityValue, 0);
285
+ if (deps.isErrorValue(returnMode) ||
286
+ deps.isErrorValue(caseSensitivity) ||
287
+ ![0, 1, 2].includes(returnMode) ||
288
+ (caseSensitivity !== 0 && caseSensitivity !== 1)) {
289
+ return deps.error(ErrorCode.Value);
290
+ }
291
+ const text = deps.coerceText(textValue);
292
+ const pattern = deps.coerceText(patternValue);
293
+ if (returnMode === 1) {
294
+ const regex = compileRegex(pattern, caseSensitivity, true);
295
+ if (isRegexError(regex)) {
296
+ return regex;
297
+ }
298
+ const matches = [...text.matchAll(regex)].map((entry) => entry[0]);
299
+ if (matches.length === 0) {
300
+ return deps.error(ErrorCode.NA);
301
+ }
302
+ return {
303
+ kind: "array",
304
+ rows: matches.length,
305
+ cols: 1,
306
+ values: matches.map((match) => deps.stringResult(match)),
307
+ };
308
+ }
309
+ const regex = compileRegex(pattern, caseSensitivity, false);
310
+ if (isRegexError(regex)) {
311
+ return regex;
312
+ }
313
+ const match = text.match(regex);
314
+ if (!match) {
315
+ return deps.error(ErrorCode.NA);
316
+ }
317
+ if (returnMode === 0) {
318
+ return deps.stringResult(match[0]);
319
+ }
320
+ const groups = match.slice(1);
321
+ if (groups.length === 0) {
322
+ return deps.error(ErrorCode.NA);
323
+ }
324
+ return {
325
+ kind: "array",
326
+ rows: 1,
327
+ cols: groups.length,
328
+ values: groups.map((group) => deps.stringResult(group ?? "")),
329
+ };
330
+ },
331
+ TEXTBEFORE: (...args) => {
332
+ const existingError = deps.firstError(args);
333
+ if (existingError) {
334
+ return existingError;
335
+ }
336
+ const [textValue, delimiterValue, instanceValue, matchModeValue, matchEndValue, ifNotFoundValue,] = args;
337
+ if (textValue === undefined || delimiterValue === undefined) {
338
+ return deps.error(ErrorCode.Value);
339
+ }
340
+ const text = deps.coerceText(textValue);
341
+ const delimiter = deps.coerceText(delimiterValue);
342
+ if (delimiter === "") {
343
+ return deps.error(ErrorCode.Value);
344
+ }
345
+ const instanceNumber = instanceValue === undefined ? 1 : deps.coerceNumber(instanceValue);
346
+ const matchMode = matchModeValue === undefined ? 0 : deps.coerceNumber(matchModeValue);
347
+ const matchEndNumber = matchEndValue === undefined ? 0 : deps.coerceNumber(matchEndValue);
348
+ if (instanceNumber === undefined ||
349
+ matchMode === undefined ||
350
+ matchEndNumber === undefined ||
351
+ !Number.isInteger(instanceNumber) ||
352
+ instanceNumber === 0 ||
353
+ !Number.isInteger(matchMode) ||
354
+ (matchMode !== 0 && matchMode !== 1)) {
355
+ return deps.error(ErrorCode.Value);
356
+ }
357
+ const matchEnd = matchEndNumber !== 0;
358
+ if (instanceNumber > 0) {
359
+ let searchFrom = 0;
360
+ let found = -1;
361
+ for (let count = 0; count < instanceNumber; count += 1) {
362
+ found = indexOfWithMode(text, delimiter, searchFrom, matchMode);
363
+ if (found === -1) {
364
+ return ifNotFoundValue ?? deps.error(ErrorCode.NA);
365
+ }
366
+ searchFrom = found + delimiter.length;
367
+ }
368
+ return deps.stringResult(text.slice(0, found));
369
+ }
370
+ let searchFrom = text.length;
371
+ let found = matchEnd ? text.length : -1;
372
+ for (let count = 0; count < Math.abs(instanceNumber); count += 1) {
373
+ found = lastIndexOfWithMode(text, delimiter, searchFrom, matchMode);
374
+ if (found === -1) {
375
+ return ifNotFoundValue ?? deps.error(ErrorCode.NA);
376
+ }
377
+ searchFrom = found - 1;
378
+ }
379
+ return deps.stringResult(text.slice(0, found));
380
+ },
381
+ TEXTAFTER: (...args) => {
382
+ const existingError = deps.firstError(args);
383
+ if (existingError) {
384
+ return existingError;
385
+ }
386
+ const [textValue, delimiterValue, instanceValue, matchModeValue, matchEndValue, ifNotFoundValue,] = args;
387
+ if (textValue === undefined || delimiterValue === undefined) {
388
+ return deps.error(ErrorCode.Value);
389
+ }
390
+ const text = deps.coerceText(textValue);
391
+ const delimiter = deps.coerceText(delimiterValue);
392
+ if (delimiter === "") {
393
+ return deps.error(ErrorCode.Value);
394
+ }
395
+ const instanceNumber = instanceValue === undefined ? 1 : deps.coerceNumber(instanceValue);
396
+ const matchMode = matchModeValue === undefined ? 0 : deps.coerceNumber(matchModeValue);
397
+ const matchEndNumber = matchEndValue === undefined ? 0 : deps.coerceNumber(matchEndValue);
398
+ if (instanceNumber === undefined ||
399
+ matchMode === undefined ||
400
+ matchEndNumber === undefined ||
401
+ !Number.isInteger(instanceNumber) ||
402
+ instanceNumber === 0 ||
403
+ !Number.isInteger(matchMode) ||
404
+ (matchMode !== 0 && matchMode !== 1)) {
405
+ return deps.error(ErrorCode.Value);
406
+ }
407
+ const matchEnd = matchEndNumber !== 0;
408
+ if (instanceNumber > 0) {
409
+ let searchFrom = 0;
410
+ let found = -1;
411
+ for (let count = 0; count < instanceNumber; count += 1) {
412
+ found = indexOfWithMode(text, delimiter, searchFrom, matchMode);
413
+ if (found === -1) {
414
+ return ifNotFoundValue ?? deps.error(ErrorCode.NA);
415
+ }
416
+ searchFrom = found + delimiter.length;
417
+ }
418
+ return deps.stringResult(text.slice(found + delimiter.length));
419
+ }
420
+ let searchFrom = text.length;
421
+ let found = matchEnd ? text.length : -1;
422
+ for (let count = 0; count < Math.abs(instanceNumber); count += 1) {
423
+ found = lastIndexOfWithMode(text, delimiter, searchFrom, matchMode);
424
+ if (found === -1) {
425
+ return ifNotFoundValue ?? deps.error(ErrorCode.NA);
426
+ }
427
+ searchFrom = found - 1;
428
+ }
429
+ return deps.stringResult(text.slice(found + delimiter.length));
430
+ },
431
+ TEXTJOIN: (...args) => {
432
+ const existingError = deps.firstError(args);
433
+ if (existingError) {
434
+ return existingError;
435
+ }
436
+ const [delimiterValue, ignoreEmptyValue, ...values] = args;
437
+ if (delimiterValue === undefined || ignoreEmptyValue === undefined || values.length === 0) {
438
+ return deps.error(ErrorCode.Value);
439
+ }
440
+ const delimiter = deps.coerceText(delimiterValue);
441
+ const ignoreEmpty = deps.coerceBoolean(ignoreEmptyValue, false);
442
+ if (typeof ignoreEmpty !== "boolean") {
443
+ return ignoreEmpty;
444
+ }
445
+ const valuesJoined = [];
446
+ for (const value of values) {
447
+ if (value === undefined) {
448
+ continue;
449
+ }
450
+ if (value.tag === ValueTag.Empty) {
451
+ if (!ignoreEmpty) {
452
+ valuesJoined.push("");
453
+ }
454
+ continue;
455
+ }
456
+ if (value.tag === ValueTag.String && value.value === "" && ignoreEmpty) {
457
+ continue;
458
+ }
459
+ if (value.tag === ValueTag.String && value.value === "" && !ignoreEmpty) {
460
+ valuesJoined.push("");
461
+ continue;
462
+ }
463
+ valuesJoined.push(deps.coerceText(value));
464
+ }
465
+ return deps.stringResult(valuesJoined.join(delimiter));
466
+ },
467
+ };
468
+ }
469
+ //# sourceMappingURL=text-search-builtins.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text-search-builtins.js","sourceRoot":"","sources":["../../src/builtins/text-search-builtins.ts"],"names":[],"mappings":"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"}