@rowsncolumns/functions 14.0.29

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 (149) hide show
  1. package/LICENSE.md +100 -0
  2. package/Readme.md +5 -0
  3. package/dist/cjs/formulas/array-formula.d.ts +4 -0
  4. package/dist/cjs/formulas/array-formula.d.ts.map +1 -0
  5. package/dist/cjs/formulas/array-formula.js +7 -0
  6. package/dist/cjs/formulas/crypto-price.d.ts +4 -0
  7. package/dist/cjs/formulas/crypto-price.d.ts.map +1 -0
  8. package/dist/cjs/formulas/crypto-price.js +63 -0
  9. package/dist/cjs/formulas/datasource.d.ts +4 -0
  10. package/dist/cjs/formulas/datasource.d.ts.map +1 -0
  11. package/dist/cjs/formulas/datasource.js +21 -0
  12. package/dist/cjs/formulas/formula-text.d.ts +5 -0
  13. package/dist/cjs/formulas/formula-text.d.ts.map +1 -0
  14. package/dist/cjs/formulas/formula-text.js +17 -0
  15. package/dist/cjs/formulas/get-pivot-data.d.ts +32 -0
  16. package/dist/cjs/formulas/get-pivot-data.d.ts.map +1 -0
  17. package/dist/cjs/formulas/get-pivot-data.js +188 -0
  18. package/dist/cjs/formulas/hyperlink.d.ts +5 -0
  19. package/dist/cjs/formulas/hyperlink.d.ts.map +1 -0
  20. package/dist/cjs/formulas/hyperlink.js +22 -0
  21. package/dist/cjs/formulas/image.d.ts +5 -0
  22. package/dist/cjs/formulas/image.d.ts.map +1 -0
  23. package/dist/cjs/formulas/image.js +17 -0
  24. package/dist/cjs/formulas/import-data.d.ts +11 -0
  25. package/dist/cjs/formulas/import-data.d.ts.map +1 -0
  26. package/dist/cjs/formulas/import-data.js +46 -0
  27. package/dist/cjs/formulas/index.d.ts +18 -0
  28. package/dist/cjs/formulas/index.d.ts.map +1 -0
  29. package/dist/cjs/formulas/index.js +37 -0
  30. package/dist/cjs/formulas/join.d.ts +4 -0
  31. package/dist/cjs/formulas/join.d.ts.map +1 -0
  32. package/dist/cjs/formulas/join.js +34 -0
  33. package/dist/cjs/formulas/multiply.d.ts +4 -0
  34. package/dist/cjs/formulas/multiply.d.ts.map +1 -0
  35. package/dist/cjs/formulas/multiply.js +15 -0
  36. package/dist/cjs/formulas/real-time.d.ts +4 -0
  37. package/dist/cjs/formulas/real-time.d.ts.map +1 -0
  38. package/dist/cjs/formulas/real-time.js +18 -0
  39. package/dist/cjs/formulas/selection-status.d.ts +4 -0
  40. package/dist/cjs/formulas/selection-status.d.ts.map +1 -0
  41. package/dist/cjs/formulas/selection-status.js +65 -0
  42. package/dist/cjs/formulas/sequence.d.ts +5 -0
  43. package/dist/cjs/formulas/sequence.d.ts.map +1 -0
  44. package/dist/cjs/formulas/sequence.js +29 -0
  45. package/dist/cjs/formulas/server.d.ts +22 -0
  46. package/dist/cjs/formulas/server.d.ts.map +1 -0
  47. package/dist/cjs/formulas/server.js +44 -0
  48. package/dist/cjs/formulas/sparkline.d.ts +5 -0
  49. package/dist/cjs/formulas/sparkline.d.ts.map +1 -0
  50. package/dist/cjs/formulas/sparkline.js +58 -0
  51. package/dist/cjs/formulas/split.d.ts +12 -0
  52. package/dist/cjs/formulas/split.d.ts.map +1 -0
  53. package/dist/cjs/formulas/split.js +48 -0
  54. package/dist/cjs/formulas/star-rating.d.ts +5 -0
  55. package/dist/cjs/formulas/star-rating.d.ts.map +1 -0
  56. package/dist/cjs/formulas/star-rating.js +13 -0
  57. package/dist/cjs/formulas/unique.d.ts +12 -0
  58. package/dist/cjs/formulas/unique.d.ts.map +1 -0
  59. package/dist/cjs/formulas/unique.js +78 -0
  60. package/dist/cjs/function-descriptions.d.ts +3 -0
  61. package/dist/cjs/function-descriptions.d.ts.map +1 -0
  62. package/dist/cjs/function-descriptions.js +8724 -0
  63. package/dist/cjs/index.d.ts +4 -0
  64. package/dist/cjs/index.d.ts.map +1 -0
  65. package/dist/cjs/index.js +7 -0
  66. package/dist/cjs/server.d.ts +4 -0
  67. package/dist/cjs/server.d.ts.map +1 -0
  68. package/dist/cjs/server.js +8 -0
  69. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -0
  70. package/dist/cjs/types.d.ts +2 -0
  71. package/dist/cjs/types.d.ts.map +1 -0
  72. package/dist/cjs/types.js +2 -0
  73. package/dist/cjs/vitest.config.d.ts +3 -0
  74. package/dist/cjs/vitest.config.d.ts.map +1 -0
  75. package/dist/cjs/vitest.config.js +18 -0
  76. package/dist/esm/formulas/array-formula.d.ts +4 -0
  77. package/dist/esm/formulas/array-formula.d.ts.map +1 -0
  78. package/dist/esm/formulas/array-formula.js +3 -0
  79. package/dist/esm/formulas/crypto-price.d.ts +4 -0
  80. package/dist/esm/formulas/crypto-price.d.ts.map +1 -0
  81. package/dist/esm/formulas/crypto-price.js +33 -0
  82. package/dist/esm/formulas/datasource.d.ts +4 -0
  83. package/dist/esm/formulas/datasource.d.ts.map +1 -0
  84. package/dist/esm/formulas/datasource.js +17 -0
  85. package/dist/esm/formulas/formula-text.d.ts +5 -0
  86. package/dist/esm/formulas/formula-text.d.ts.map +1 -0
  87. package/dist/esm/formulas/formula-text.js +12 -0
  88. package/dist/esm/formulas/get-pivot-data.d.ts +32 -0
  89. package/dist/esm/formulas/get-pivot-data.d.ts.map +1 -0
  90. package/dist/esm/formulas/get-pivot-data.js +144 -0
  91. package/dist/esm/formulas/hyperlink.d.ts +5 -0
  92. package/dist/esm/formulas/hyperlink.d.ts.map +1 -0
  93. package/dist/esm/formulas/hyperlink.js +17 -0
  94. package/dist/esm/formulas/image.d.ts +5 -0
  95. package/dist/esm/formulas/image.d.ts.map +1 -0
  96. package/dist/esm/formulas/image.js +13 -0
  97. package/dist/esm/formulas/import-data.d.ts +11 -0
  98. package/dist/esm/formulas/import-data.d.ts.map +1 -0
  99. package/dist/esm/formulas/import-data.js +28 -0
  100. package/dist/esm/formulas/index.d.ts +18 -0
  101. package/dist/esm/formulas/index.d.ts.map +1 -0
  102. package/dist/esm/formulas/index.js +17 -0
  103. package/dist/esm/formulas/join.d.ts +4 -0
  104. package/dist/esm/formulas/join.d.ts.map +1 -0
  105. package/dist/esm/formulas/join.js +25 -0
  106. package/dist/esm/formulas/multiply.d.ts +4 -0
  107. package/dist/esm/formulas/multiply.d.ts.map +1 -0
  108. package/dist/esm/formulas/multiply.js +11 -0
  109. package/dist/esm/formulas/real-time.d.ts +4 -0
  110. package/dist/esm/formulas/real-time.d.ts.map +1 -0
  111. package/dist/esm/formulas/real-time.js +14 -0
  112. package/dist/esm/formulas/selection-status.d.ts +4 -0
  113. package/dist/esm/formulas/selection-status.d.ts.map +1 -0
  114. package/dist/esm/formulas/selection-status.js +39 -0
  115. package/dist/esm/formulas/sequence.d.ts +5 -0
  116. package/dist/esm/formulas/sequence.d.ts.map +1 -0
  117. package/dist/esm/formulas/sequence.js +24 -0
  118. package/dist/esm/formulas/server.d.ts +22 -0
  119. package/dist/esm/formulas/server.d.ts.map +1 -0
  120. package/dist/esm/formulas/server.js +37 -0
  121. package/dist/esm/formulas/sparkline.d.ts +5 -0
  122. package/dist/esm/formulas/sparkline.d.ts.map +1 -0
  123. package/dist/esm/formulas/sparkline.js +52 -0
  124. package/dist/esm/formulas/split.d.ts +12 -0
  125. package/dist/esm/formulas/split.d.ts.map +1 -0
  126. package/dist/esm/formulas/split.js +44 -0
  127. package/dist/esm/formulas/star-rating.d.ts +5 -0
  128. package/dist/esm/formulas/star-rating.d.ts.map +1 -0
  129. package/dist/esm/formulas/star-rating.js +9 -0
  130. package/dist/esm/formulas/unique.d.ts +12 -0
  131. package/dist/esm/formulas/unique.d.ts.map +1 -0
  132. package/dist/esm/formulas/unique.js +58 -0
  133. package/dist/esm/function-descriptions.d.ts +3 -0
  134. package/dist/esm/function-descriptions.d.ts.map +1 -0
  135. package/dist/esm/function-descriptions.js +8721 -0
  136. package/dist/esm/index.d.ts +4 -0
  137. package/dist/esm/index.d.ts.map +1 -0
  138. package/dist/esm/index.js +3 -0
  139. package/dist/esm/server.d.ts +4 -0
  140. package/dist/esm/server.d.ts.map +1 -0
  141. package/dist/esm/server.js +3 -0
  142. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -0
  143. package/dist/esm/types.d.ts +2 -0
  144. package/dist/esm/types.d.ts.map +1 -0
  145. package/dist/esm/types.js +1 -0
  146. package/dist/esm/vitest.config.d.ts +3 -0
  147. package/dist/esm/vitest.config.d.ts.map +1 -0
  148. package/dist/esm/vitest.config.js +15 -0
  149. package/package.json +51 -0
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GETPIVOTDATA = exports.SPARKLINE = exports.FORMULATEXT = exports.DATASOURCE = exports.SPLIT = exports.JOIN = exports.SEQUENCE = exports.UNIQUE = exports.MULTIPLY = exports.SELECTION_STATUS = exports.IMAGE = exports.CRYPTOPRICE = exports.REALTIME = exports.HYPERLINK = exports.STARRATING = exports.ARRAYFORMULA = exports.IMPORTDATA = void 0;
4
+ var import_data_1 = require("./import-data");
5
+ Object.defineProperty(exports, "IMPORTDATA", { enumerable: true, get: function () { return import_data_1.IMPORTDATA; } });
6
+ var array_formula_1 = require("./array-formula");
7
+ Object.defineProperty(exports, "ARRAYFORMULA", { enumerable: true, get: function () { return array_formula_1.ARRAYFORMULA; } });
8
+ var star_rating_1 = require("./star-rating");
9
+ Object.defineProperty(exports, "STARRATING", { enumerable: true, get: function () { return star_rating_1.STARRATING; } });
10
+ var hyperlink_1 = require("./hyperlink");
11
+ Object.defineProperty(exports, "HYPERLINK", { enumerable: true, get: function () { return hyperlink_1.HYPERLINK; } });
12
+ var real_time_1 = require("./real-time");
13
+ Object.defineProperty(exports, "REALTIME", { enumerable: true, get: function () { return real_time_1.REALTIME; } });
14
+ var crypto_price_1 = require("./crypto-price");
15
+ Object.defineProperty(exports, "CRYPTOPRICE", { enumerable: true, get: function () { return crypto_price_1.CRYPTOPRICE; } });
16
+ var image_1 = require("./image");
17
+ Object.defineProperty(exports, "IMAGE", { enumerable: true, get: function () { return image_1.IMAGE; } });
18
+ var selection_status_1 = require("./selection-status");
19
+ Object.defineProperty(exports, "SELECTION_STATUS", { enumerable: true, get: function () { return selection_status_1.SELECTION_STATUS; } });
20
+ var multiply_1 = require("./multiply");
21
+ Object.defineProperty(exports, "MULTIPLY", { enumerable: true, get: function () { return multiply_1.MULTIPLY; } });
22
+ var unique_1 = require("./unique");
23
+ Object.defineProperty(exports, "UNIQUE", { enumerable: true, get: function () { return unique_1.UNIQUE; } });
24
+ var sequence_1 = require("./sequence");
25
+ Object.defineProperty(exports, "SEQUENCE", { enumerable: true, get: function () { return sequence_1.SEQUENCE; } });
26
+ var join_1 = require("./join");
27
+ Object.defineProperty(exports, "JOIN", { enumerable: true, get: function () { return join_1.JOIN; } });
28
+ var split_1 = require("./split");
29
+ Object.defineProperty(exports, "SPLIT", { enumerable: true, get: function () { return split_1.SPLIT; } });
30
+ var datasource_1 = require("./datasource");
31
+ Object.defineProperty(exports, "DATASOURCE", { enumerable: true, get: function () { return datasource_1.DATASOURCE; } });
32
+ var formula_text_1 = require("./formula-text");
33
+ Object.defineProperty(exports, "FORMULATEXT", { enumerable: true, get: function () { return formula_text_1.FORMULATEXT; } });
34
+ var sparkline_1 = require("./sparkline");
35
+ Object.defineProperty(exports, "SPARKLINE", { enumerable: true, get: function () { return sparkline_1.SPARKLINE; } });
36
+ var get_pivot_data_1 = require("./get-pivot-data");
37
+ Object.defineProperty(exports, "GETPIVOTDATA", { enumerable: true, get: function () { return get_pivot_data_1.GETPIVOTDATA; } });
@@ -0,0 +1,4 @@
1
+ import type { FunctionArgument } from "@rowsncolumns/calculator";
2
+ import type FormulaParser from "@rowsncolumns/fast-formula-parser";
3
+ export declare const JOIN: (_: FormulaParser, delimiter: FunctionArgument, ...args: FunctionArgument[]) => string;
4
+ //# sourceMappingURL=join.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"join.d.ts","sourceRoot":"","sources":["../../../formulas/join.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,KAAK,aAAa,MAAM,mCAAmC,CAAC;AAInE,eAAO,MAAM,IAAI,GACf,GAAG,aAAa,EAChB,WAAW,gBAAgB,EAC3B,GAAG,MAAM,gBAAgB,EAAE,WA6B5B,CAAC"}
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.JOIN = void 0;
4
+ var fast_formula_parser_1 = require("@rowsncolumns/fast-formula-parser");
5
+ var utils_1 = require("@rowsncolumns/utils");
6
+ var JOIN = function (_, delimiter) {
7
+ var args = [];
8
+ for (var _i = 2; _i < arguments.length; _i++) {
9
+ args[_i - 2] = arguments[_i];
10
+ }
11
+ if (!delimiter || (0, utils_1.isNil)(delimiter.value)) {
12
+ throw new fast_formula_parser_1.FormulaError("#NA!", "Invalid delimiter");
13
+ }
14
+ var delim = String(delimiter.value);
15
+ var values = args
16
+ .map(function (_a) {
17
+ var value = _a.value, position = _a.position, isRangeRef = _a.isRangeRef;
18
+ if (isRangeRef) {
19
+ // Validate
20
+ var rangePosition = position;
21
+ if (rangePosition.from.col !== rangePosition.to.col &&
22
+ rangePosition.from.row !== rangePosition.to.row) {
23
+ throw new fast_formula_parser_1.FormulaError("#VALUE!", "JOIN range must be a single row or a single column.");
24
+ }
25
+ }
26
+ if (Array.isArray(value)) {
27
+ return value.flat();
28
+ }
29
+ return value;
30
+ })
31
+ .flat();
32
+ return values.join(delim);
33
+ };
34
+ exports.JOIN = JOIN;
@@ -0,0 +1,4 @@
1
+ import type { FunctionArgument } from "@rowsncolumns/calculator";
2
+ import type FormulaParser from "@rowsncolumns/fast-formula-parser";
3
+ export declare const MULTIPLY: (_: FormulaParser, factor1: FunctionArgument, factor2: FunctionArgument) => number;
4
+ //# sourceMappingURL=multiply.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multiply.d.ts","sourceRoot":"","sources":["../../../formulas/multiply.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,KAAK,aAAa,MAAM,mCAAmC,CAAC;AAInE,eAAO,MAAM,QAAQ,GACnB,GAAG,aAAa,EAChB,SAAS,gBAAgB,EACzB,SAAS,gBAAgB,WAiB1B,CAAC"}
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MULTIPLY = void 0;
4
+ var fast_formula_parser_1 = require("@rowsncolumns/fast-formula-parser");
5
+ var utils_1 = require("@rowsncolumns/utils");
6
+ var MULTIPLY = function (_, factor1, factor2) {
7
+ if ((0, utils_1.isNil)(factor1.value) || (0, utils_1.isNil)(factor2.value)) {
8
+ throw new fast_formula_parser_1.FormulaError("#N/A!", "Wrong number of arguments to MULTIPLY. Expected 2 arguments.");
9
+ }
10
+ if (typeof factor1.value !== "number" || typeof factor2.value !== "number") {
11
+ throw new fast_formula_parser_1.FormulaError("#VALUE", "Function MULTIPLY expects number values.");
12
+ }
13
+ return factor1.value * factor2.value;
14
+ };
15
+ exports.MULTIPLY = MULTIPLY;
@@ -0,0 +1,4 @@
1
+ import { FunctionArgument } from "@rowsncolumns/calculator";
2
+ import type FormulaParser from "@rowsncolumns/fast-formula-parser";
3
+ export declare const REALTIME: (parser: FormulaParser, arg: FunctionArgument) => string;
4
+ //# sourceMappingURL=real-time.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"real-time.d.ts","sourceRoot":"","sources":["../../../formulas/real-time.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAEjB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,aAAa,MAAM,mCAAmC,CAAC;AAEnE,eAAO,MAAM,QAAQ,GAAI,QAAQ,aAAa,EAAE,KAAK,gBAAgB,WAepE,CAAC"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.REALTIME = void 0;
4
+ var calculator_1 = require("@rowsncolumns/calculator");
5
+ var REALTIME = function (parser, arg) {
6
+ (0, calculator_1.calculationPipeline)(parser, function (onUpdate) {
7
+ var timer = setInterval(function () {
8
+ onUpdate([[2, Math.random(), Math.random(), 2]]);
9
+ }, 5000);
10
+ console.log("sub", timer);
11
+ return function () {
12
+ console.log("unsub", timer);
13
+ clearTimeout(timer);
14
+ };
15
+ });
16
+ return "Loading";
17
+ };
18
+ exports.REALTIME = REALTIME;
@@ -0,0 +1,4 @@
1
+ import type { FunctionArgument } from "@rowsncolumns/calculator";
2
+ import type FormulaParser from "@rowsncolumns/fast-formula-parser";
3
+ export declare const SELECTION_STATUS: (_: FormulaParser, arg: FunctionArgument) => (number | undefined)[];
4
+ //# sourceMappingURL=selection-status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selection-status.d.ts","sourceRoot":"","sources":["../../../formulas/selection-status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,KAAK,aAAa,MAAM,mCAAmC,CAAC;AAGnE,eAAO,MAAM,gBAAgB,GAAI,GAAG,aAAa,EAAE,KAAK,gBAAgB,2BAsCvE,CAAC"}
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SELECTION_STATUS = void 0;
4
+ var tslib_1 = require("tslib");
5
+ var utils_1 = require("@rowsncolumns/utils");
6
+ var SELECTION_STATUS = function (_, arg) {
7
+ var e_1, _a, e_2, _b;
8
+ var sum = 0;
9
+ var count = 0;
10
+ var numCount = 0;
11
+ var min;
12
+ var max;
13
+ if (Array.isArray(arg.value)) {
14
+ try {
15
+ for (var _c = tslib_1.__values(arg.value), _d = _c.next(); !_d.done; _d = _c.next()) {
16
+ var row = _d.value;
17
+ try {
18
+ for (var row_1 = (e_2 = void 0, tslib_1.__values(row)), row_1_1 = row_1.next(); !row_1_1.done; row_1_1 = row_1.next()) {
19
+ var value = row_1_1.value;
20
+ if (typeof value === "number") {
21
+ sum += value;
22
+ numCount++;
23
+ if (min === undefined || value < min) {
24
+ min = value;
25
+ }
26
+ if (max === undefined || value > max) {
27
+ max = value;
28
+ }
29
+ }
30
+ if (!(0, utils_1.isNil)(value)) {
31
+ count++;
32
+ }
33
+ }
34
+ }
35
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
36
+ finally {
37
+ try {
38
+ if (row_1_1 && !row_1_1.done && (_b = row_1.return)) _b.call(row_1);
39
+ }
40
+ finally { if (e_2) throw e_2.error; }
41
+ }
42
+ }
43
+ }
44
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
45
+ finally {
46
+ try {
47
+ if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
48
+ }
49
+ finally { if (e_1) throw e_1.error; }
50
+ }
51
+ }
52
+ // [sum, count, average, min, max, numericalCount]
53
+ // `numericalCount` is the count of cells holding numbers — distinct
54
+ // from `count` which counts any non-empty cell. Matches Excel and
55
+ // Sheets status-bar semantics.
56
+ return [
57
+ numCount === 0 ? undefined : sum,
58
+ count,
59
+ numCount === 0 ? undefined : sum / numCount,
60
+ min,
61
+ max,
62
+ numCount,
63
+ ];
64
+ };
65
+ exports.SELECTION_STATUS = SELECTION_STATUS;
@@ -0,0 +1,5 @@
1
+ import type { FunctionArgument } from "@rowsncolumns/calculator";
2
+ import type FormulaParser from "@rowsncolumns/fast-formula-parser";
3
+ import { FormulaResultArray } from "@rowsncolumns/fast-formula-parser";
4
+ export declare const SEQUENCE: (_: FormulaParser, rows: FunctionArgument, columns: FunctionArgument, start: FunctionArgument | undefined, step: FunctionArgument | undefined) => FormulaResultArray;
5
+ //# sourceMappingURL=sequence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sequence.d.ts","sourceRoot":"","sources":["../../../formulas/sequence.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,KAAK,aAAa,MAAM,mCAAmC,CAAC;AACnE,OAAO,EAEL,kBAAkB,EACnB,MAAM,mCAAmC,CAAC;AAG3C,eAAO,MAAM,QAAQ,GACnB,GAAG,aAAa,EAChB,MAAM,gBAAgB,EACtB,SAAS,gBAAgB,EACzB,OAAO,gBAAgB,GAAG,SAAS,EACnC,MAAM,gBAAgB,GAAG,SAAS,uBA8BnC,CAAC"}
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SEQUENCE = void 0;
4
+ var fast_formula_parser_1 = require("@rowsncolumns/fast-formula-parser");
5
+ var utils_1 = require("@rowsncolumns/utils");
6
+ var SEQUENCE = function (_, rows, columns, start, step) {
7
+ var _a, _b, _c;
8
+ if (!rows.value || typeof (rows === null || rows === void 0 ? void 0 : rows.value) !== "number") {
9
+ throw new fast_formula_parser_1.FormulaError("#NUM!", "Function SEQUENCE parameter 1 should be greater than or equal to 1.");
10
+ }
11
+ if (!(0, utils_1.isNil)(columns) && typeof (columns === null || columns === void 0 ? void 0 : columns.value) !== "number") {
12
+ throw new fast_formula_parser_1.FormulaError("#NUM!", "Function SEQUENCE parameter 2 should be greater than or equal to 1.");
13
+ }
14
+ var rowValue = rows.value;
15
+ var columnValue = (_a = columns === null || columns === void 0 ? void 0 : columns.value) !== null && _a !== void 0 ? _a : 1;
16
+ var startValue = (_b = start === null || start === void 0 ? void 0 : start.value) !== null && _b !== void 0 ? _b : 1;
17
+ var stepValue = (_c = step === null || step === void 0 ? void 0 : step.value) !== null && _c !== void 0 ? _c : 1;
18
+ var results = [];
19
+ for (var i = 0; i < rowValue; i++) {
20
+ var rows_1 = [];
21
+ for (var j = 0; j < columnValue; j++) {
22
+ rows_1.push(startValue);
23
+ startValue += stepValue;
24
+ }
25
+ results.push(rows_1);
26
+ }
27
+ return results;
28
+ };
29
+ exports.SEQUENCE = SEQUENCE;
@@ -0,0 +1,22 @@
1
+ import type { FunctionArgument } from "@rowsncolumns/calculator";
2
+ import type FormulaParser from "@rowsncolumns/fast-formula-parser";
3
+ export declare const IMPORTDATA: (_parser: FormulaParser, _url: FunctionArgument) => Promise<never>;
4
+ export declare const functions: {
5
+ IMPORTDATA: (_parser: FormulaParser, _url: FunctionArgument) => Promise<never>;
6
+ ARRAYFORMULA: (_: FormulaParser, arg: FunctionArgument) => import("@rowsncolumns/fast-formula-parser").FormulaResult;
7
+ STARRATING: (_: FormulaParser, arg: FunctionArgument) => import("@rowsncolumns/fast-formula-parser").RecursiveFormula;
8
+ HYPERLINK: (_: FormulaParser, url: FunctionArgument, title?: FunctionArgument) => import("@rowsncolumns/common-types").HyperlinkResult | undefined;
9
+ REALTIME: (parser: FormulaParser, arg: FunctionArgument) => string;
10
+ CRYPTOPRICE: (parser: FormulaParser, arg: FunctionArgument) => Promise<number[][]>;
11
+ IMAGE: (_: FormulaParser, url: FunctionArgument) => import("@rowsncolumns/common-types").ImageResult;
12
+ SELECTION_STATUS: (_: FormulaParser, arg: FunctionArgument) => (number | undefined)[];
13
+ MULTIPLY: (_: FormulaParser, factor1: FunctionArgument, factor2: FunctionArgument) => number;
14
+ UNIQUE: (_: FormulaParser, range: FunctionArgument, byColumnArg?: FunctionArgument, exactlyOnceArg?: FunctionArgument) => import("@rowsncolumns/fast-formula-parser").FormulaResult;
15
+ SEQUENCE: (_: FormulaParser, rows: FunctionArgument, columns: FunctionArgument, start: FunctionArgument | undefined, step: FunctionArgument | undefined) => import("@rowsncolumns/fast-formula-parser").FormulaResultArray;
16
+ JOIN: (_: FormulaParser, delimiter: FunctionArgument, ...args: FunctionArgument[]) => string;
17
+ SPLIT: (_: FormulaParser, text: FunctionArgument, delimiter: FunctionArgument, splitByEach?: FunctionArgument, removeEmptyText?: FunctionArgument) => string[][];
18
+ DATASOURCE: (parser: FormulaParser, data: FunctionArgument, limit: FunctionArgument) => import("@rowsncolumns/calculator").DataSource | undefined;
19
+ FORMULATEXT: (parser: FormulaParser<import("@rowsncolumns/common-types").CellData>, arg: FunctionArgument) => string;
20
+ SPARKLINE: (parser: FormulaParser, dataArg: FunctionArgument, optionsArg: FunctionArgument) => import("@rowsncolumns/common-types").SparkLineResult | undefined;
21
+ };
22
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../formulas/server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,KAAK,aAAa,MAAM,mCAAmC,CAAC;AAsBnE,eAAO,MAAM,UAAU,GACrB,SAAS,aAAa,EACtB,MAAM,gBAAgB,mBAMvB,CAAC;AAEF,eAAO,MAAM,SAAS;0BATX,aAAa,QAChB,gBAAgB;;;;;;;;;;;;;;;;CAyB+B,CAAC"}
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.functions = exports.IMPORTDATA = void 0;
4
+ var tslib_1 = require("tslib");
5
+ var fast_formula_parser_1 = require("@rowsncolumns/fast-formula-parser");
6
+ var array_formula_1 = require("./array-formula");
7
+ var crypto_price_1 = require("./crypto-price");
8
+ var datasource_1 = require("./datasource");
9
+ var formula_text_1 = require("./formula-text");
10
+ var hyperlink_1 = require("./hyperlink");
11
+ var image_1 = require("./image");
12
+ var join_1 = require("./join");
13
+ var multiply_1 = require("./multiply");
14
+ var real_time_1 = require("./real-time");
15
+ var selection_status_1 = require("./selection-status");
16
+ var sequence_1 = require("./sequence");
17
+ var sparkline_1 = require("./sparkline");
18
+ var split_1 = require("./split");
19
+ var star_rating_1 = require("./star-rating");
20
+ var unique_1 = require("./unique");
21
+ var IMPORTDATA = function (_parser, _url) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
22
+ return tslib_1.__generator(this, function (_a) {
23
+ throw new fast_formula_parser_1.FormulaError("#N/A", "IMPORTDATA is not available in the server calculation worker.");
24
+ });
25
+ }); };
26
+ exports.IMPORTDATA = IMPORTDATA;
27
+ exports.functions = {
28
+ IMPORTDATA: exports.IMPORTDATA,
29
+ ARRAYFORMULA: array_formula_1.ARRAYFORMULA,
30
+ STARRATING: star_rating_1.STARRATING,
31
+ HYPERLINK: hyperlink_1.HYPERLINK,
32
+ REALTIME: real_time_1.REALTIME,
33
+ CRYPTOPRICE: crypto_price_1.CRYPTOPRICE,
34
+ IMAGE: image_1.IMAGE,
35
+ SELECTION_STATUS: selection_status_1.SELECTION_STATUS,
36
+ MULTIPLY: multiply_1.MULTIPLY,
37
+ UNIQUE: unique_1.UNIQUE,
38
+ SEQUENCE: sequence_1.SEQUENCE,
39
+ JOIN: join_1.JOIN,
40
+ SPLIT: split_1.SPLIT,
41
+ DATASOURCE: datasource_1.DATASOURCE,
42
+ FORMULATEXT: formula_text_1.FORMULATEXT,
43
+ SPARKLINE: sparkline_1.SPARKLINE,
44
+ };
@@ -0,0 +1,5 @@
1
+ import type { FunctionArgument } from "@rowsncolumns/calculator";
2
+ import { SparkLineResult } from "@rowsncolumns/common-types";
3
+ import type FormulaParser from "@rowsncolumns/fast-formula-parser";
4
+ export declare const SPARKLINE: (parser: FormulaParser, dataArg: FunctionArgument, optionsArg: FunctionArgument) => SparkLineResult | undefined;
5
+ //# sourceMappingURL=sparkline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sparkline.d.ts","sourceRoot":"","sources":["../../../formulas/sparkline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,KAAK,aAAa,MAAM,mCAAmC,CAAC;AAGnE,eAAO,MAAM,SAAS,GACpB,QAAQ,aAAa,EACrB,SAAS,gBAAgB,EACzB,YAAY,gBAAgB,KAC3B,eAAe,GAAG,SA6DpB,CAAC"}
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SPARKLINE = void 0;
4
+ var fast_formula_parser_1 = require("@rowsncolumns/fast-formula-parser");
5
+ var SPARKLINE = function (parser, dataArg, optionsArg) {
6
+ if (parser.isPreview) {
7
+ return;
8
+ }
9
+ if (!dataArg) {
10
+ throw new fast_formula_parser_1.FormulaError("#N/A", "Wrong number of arguments to SPARKLINE. Expected between 1 and 2 arguments, but got 0 arguments.");
11
+ }
12
+ // The options literal can arrive in either shape from
13
+ // fast-formula-parser:
14
+ // - row form: {"k1","v1","k2","v2"} → [["k1","v1","k2","v2"]]
15
+ // - pair form: {"k1","v1";"k2","v2"} → [["k1","v1"],["k2","v2"]]
16
+ // `Object.fromEntries` only works correctly for the pair form — for
17
+ // the row form it iterates the inner array and reads positions 0/1
18
+ // as the single [key, value] pair, silently dropping everything
19
+ // else (which is how `color`, `colorHigh`/`colorLow` and the high/
20
+ // low flags vanish before the renderer sees them). Flatten and walk
21
+ // in stride 2 so both shapes round-trip every pair.
22
+ var options = {};
23
+ if (Array.isArray(optionsArg === null || optionsArg === void 0 ? void 0 : optionsArg.value)) {
24
+ var flat = optionsArg.value.flat(Infinity);
25
+ for (var i = 0; i + 1 < flat.length; i += 2) {
26
+ var key = flat[i];
27
+ if (key == null)
28
+ continue;
29
+ options[String(key)] = flat[i + 1];
30
+ }
31
+ }
32
+ var isNumber = function (item) {
33
+ return typeof item === "number" && !isNaN(item);
34
+ };
35
+ var rawData = Array.isArray(dataArg.value)
36
+ ? dataArg.value.flat()
37
+ : [dataArg.value];
38
+ // Empty-cell handling: when the `emptycells` option is present
39
+ // (gap/zero/span — Excel's displayEmptyCellsAs) the renderer needs
40
+ // to know WHERE the empty cells were, so keep them as nulls.
41
+ // Without the option, compact them out — the legacy shape — so
42
+ // existing sparklines render byte-identical.
43
+ var preserveGaps = options.emptycells === "gap" ||
44
+ options.emptycells === "zero" ||
45
+ options.emptycells === "span";
46
+ var data = preserveGaps
47
+ ? rawData.map(function (item) { return (isNumber(item) ? item : null); })
48
+ : rawData.filter(isNumber);
49
+ if (data.filter(isNumber).length < 2) {
50
+ throw new fast_formula_parser_1.FormulaError("#N/A", "SPARKLINE requires more data points. Expected: 2, found: 0.");
51
+ }
52
+ return {
53
+ kind: "sparkline",
54
+ data: data,
55
+ options: options,
56
+ };
57
+ };
58
+ exports.SPARKLINE = SPARKLINE;
@@ -0,0 +1,12 @@
1
+ import type { FunctionArgument } from "@rowsncolumns/calculator";
2
+ import type FormulaParser from "@rowsncolumns/fast-formula-parser";
3
+ /**
4
+ * SPLIT(text, delimiter, [split_by_each], [remove_empty_text])
5
+ *
6
+ * Google Sheets semantics:
7
+ * - split_by_each (default TRUE): treat each character in `delimiter` as a
8
+ * separate delimiter; when FALSE, split on the whole delimiter string.
9
+ * - remove_empty_text (default TRUE): drop empty results.
10
+ */
11
+ export declare const SPLIT: (_: FormulaParser, text: FunctionArgument, delimiter: FunctionArgument, splitByEach?: FunctionArgument, removeEmptyText?: FunctionArgument) => string[][];
12
+ //# sourceMappingURL=split.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"split.d.ts","sourceRoot":"","sources":["../../../formulas/split.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,KAAK,aAAa,MAAM,mCAAmC,CAAC;AAOnE;;;;;;;GAOG;AACH,eAAO,MAAM,KAAK,GAChB,GAAG,aAAa,EAChB,MAAM,gBAAgB,EACtB,WAAW,gBAAgB,EAC3B,cAAc,gBAAgB,EAC9B,kBAAkB,gBAAgB,eAqCnC,CAAC"}
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SPLIT = void 0;
4
+ var fast_formula_parser_1 = require("@rowsncolumns/fast-formula-parser");
5
+ var utils_1 = require("@rowsncolumns/utils");
6
+ /** Escape a character so it is literal inside a regex character class. */
7
+ var escapeForCharClass = function (s) { return s.replace(/[\]\\^-]/g, "\\$&"); };
8
+ /**
9
+ * SPLIT(text, delimiter, [split_by_each], [remove_empty_text])
10
+ *
11
+ * Google Sheets semantics:
12
+ * - split_by_each (default TRUE): treat each character in `delimiter` as a
13
+ * separate delimiter; when FALSE, split on the whole delimiter string.
14
+ * - remove_empty_text (default TRUE): drop empty results.
15
+ */
16
+ var SPLIT = function (_, text, delimiter, splitByEach, removeEmptyText) {
17
+ if (!text || (0, utils_1.isNil)(text.value)) {
18
+ throw new fast_formula_parser_1.FormulaError("#NA!", "Invalid text");
19
+ }
20
+ if (!delimiter || (0, utils_1.isNil)(delimiter.value)) {
21
+ throw new fast_formula_parser_1.FormulaError("#NA!", "Invalid delimiter");
22
+ }
23
+ var textValue = String(text.value);
24
+ var delim = String(delimiter.value);
25
+ var byEach = splitByEach && !(0, utils_1.isNil)(splitByEach.value)
26
+ ? Boolean(splitByEach.value)
27
+ : true;
28
+ var removeEmpty = removeEmptyText && !(0, utils_1.isNil)(removeEmptyText.value)
29
+ ? Boolean(removeEmptyText.value)
30
+ : true;
31
+ var parts;
32
+ if (byEach) {
33
+ // Split on ANY single character present in `delim`.
34
+ parts =
35
+ delim.length === 0
36
+ ? [textValue]
37
+ : textValue.split(new RegExp("[".concat(escapeForCharClass(delim), "]")));
38
+ }
39
+ else {
40
+ // Split on the whole delimiter string.
41
+ parts = delim.length === 0 ? [textValue] : textValue.split(delim);
42
+ }
43
+ if (removeEmpty) {
44
+ parts = parts.filter(function (part) { return part !== ""; });
45
+ }
46
+ return [parts];
47
+ };
48
+ exports.SPLIT = SPLIT;
@@ -0,0 +1,5 @@
1
+ import type { FunctionArgument } from "@rowsncolumns/calculator";
2
+ import type FormulaParser from "@rowsncolumns/fast-formula-parser";
3
+ import { RecursiveFormula } from "@rowsncolumns/fast-formula-parser";
4
+ export declare const STARRATING: (_: FormulaParser, arg: FunctionArgument) => RecursiveFormula;
5
+ //# sourceMappingURL=star-rating.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"star-rating.d.ts","sourceRoot":"","sources":["../../../formulas/star-rating.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,KAAK,aAAa,MAAM,mCAAmC,CAAC;AACnE,OAAO,EAEL,gBAAgB,EACjB,MAAM,mCAAmC,CAAC;AAE3C,eAAO,MAAM,UAAU,GACrB,GAAG,aAAa,EAChB,KAAK,gBAAgB,KACpB,gBAOF,CAAC"}
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.STARRATING = void 0;
4
+ var fast_formula_parser_1 = require("@rowsncolumns/fast-formula-parser");
5
+ var STARRATING = function (_, arg) {
6
+ if (!(arg === null || arg === void 0 ? void 0 : arg.value) || typeof (arg === null || arg === void 0 ? void 0 : arg.value) === "string") {
7
+ throw new fast_formula_parser_1.FormulaError("#VALUE!", "Required argument not provided");
8
+ }
9
+ return {
10
+ _formulaResult: "=REPT(CHAR(11088),".concat(arg.value, ")"),
11
+ };
12
+ };
13
+ exports.STARRATING = STARRATING;
@@ -0,0 +1,12 @@
1
+ import type { FunctionArgument } from "@rowsncolumns/calculator";
2
+ import type FormulaParser from "@rowsncolumns/fast-formula-parser";
3
+ /**
4
+ * UNIQUE(range, [by_column], [exactly_once])
5
+ *
6
+ * Google Sheets semantics:
7
+ * - by_column (default FALSE): dedupe rows; when TRUE, dedupe columns.
8
+ * - exactly_once (default FALSE): return distinct records; when TRUE, return
9
+ * only records that appear exactly once.
10
+ */
11
+ export declare const UNIQUE: (_: FormulaParser, range: FunctionArgument, byColumnArg?: FunctionArgument, exactlyOnceArg?: FunctionArgument) => import("@rowsncolumns/fast-formula-parser").FormulaResult;
12
+ //# sourceMappingURL=unique.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unique.d.ts","sourceRoot":"","sources":["../../../formulas/unique.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,KAAK,aAAa,MAAM,mCAAmC,CAAC;AAgBnE;;;;;;;GAOG;AACH,eAAO,MAAM,MAAM,GACjB,GAAG,aAAa,EAChB,OAAO,gBAAgB,EACvB,cAAc,gBAAgB,EAC9B,iBAAiB,gBAAgB,8DAgDlC,CAAC"}
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UNIQUE = void 0;
4
+ var tslib_1 = require("tslib");
5
+ var fast_formula_parser_1 = require("@rowsncolumns/fast-formula-parser");
6
+ var utils_1 = require("@rowsncolumns/utils");
7
+ /** Transpose a rectangular 2D array. */
8
+ var transpose = function (matrix) {
9
+ if (matrix.length === 0)
10
+ return [];
11
+ var cols = matrix[0].length;
12
+ var out = [];
13
+ var _loop_1 = function (c) {
14
+ out.push(matrix.map(function (row) { return row[c]; }));
15
+ };
16
+ for (var c = 0; c < cols; c++) {
17
+ _loop_1(c);
18
+ }
19
+ return out;
20
+ };
21
+ /**
22
+ * UNIQUE(range, [by_column], [exactly_once])
23
+ *
24
+ * Google Sheets semantics:
25
+ * - by_column (default FALSE): dedupe rows; when TRUE, dedupe columns.
26
+ * - exactly_once (default FALSE): return distinct records; when TRUE, return
27
+ * only records that appear exactly once.
28
+ */
29
+ var UNIQUE = function (_, range, byColumnArg, exactlyOnceArg) {
30
+ var e_1, _a;
31
+ var _b;
32
+ if (!range) {
33
+ throw new fast_formula_parser_1.FormulaError("#NA!", "Wrong number of arguments to UNIQUE. Expected atleast 1 arguments, but got 0 arguments.");
34
+ }
35
+ // If the argument is not a cell or range ref
36
+ if (!range.isCellRef && !range.isRangeRef) {
37
+ return range.value;
38
+ }
39
+ if (range.isCellRef) {
40
+ return range.value;
41
+ }
42
+ var byColumn = byColumnArg && !(0, utils_1.isNil)(byColumnArg.value)
43
+ ? Boolean(byColumnArg.value)
44
+ : false;
45
+ var exactlyOnce = exactlyOnceArg && !(0, utils_1.isNil)(exactlyOnceArg.value)
46
+ ? Boolean(exactlyOnceArg.value)
47
+ : false;
48
+ var matrix = range.value;
49
+ // Records are the units we dedupe over: rows by default, columns when
50
+ // by_column is TRUE (transpose so the dedupe loop is uniform).
51
+ var records = byColumn ? transpose(matrix) : matrix;
52
+ var order = [];
53
+ var countByKey = new Map();
54
+ var firstByKey = new Map();
55
+ try {
56
+ for (var records_1 = tslib_1.__values(records), records_1_1 = records_1.next(); !records_1_1.done; records_1_1 = records_1.next()) {
57
+ var record = records_1_1.value;
58
+ var key = JSON.stringify(record);
59
+ if (!countByKey.has(key)) {
60
+ order.push(key);
61
+ firstByKey.set(key, record);
62
+ }
63
+ countByKey.set(key, ((_b = countByKey.get(key)) !== null && _b !== void 0 ? _b : 0) + 1);
64
+ }
65
+ }
66
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
67
+ finally {
68
+ try {
69
+ if (records_1_1 && !records_1_1.done && (_a = records_1.return)) _a.call(records_1);
70
+ }
71
+ finally { if (e_1) throw e_1.error; }
72
+ }
73
+ var resultRecords = order
74
+ .filter(function (key) { return (exactlyOnce ? countByKey.get(key) === 1 : true); })
75
+ .map(function (key) { return firstByKey.get(key); });
76
+ return byColumn ? transpose(resultRecords) : resultRecords;
77
+ };
78
+ exports.UNIQUE = UNIQUE;
@@ -0,0 +1,3 @@
1
+ import type { CalculatorFunction } from "@rowsncolumns/common-types";
2
+ export declare const functionDescriptions: CalculatorFunction[];
3
+ //# sourceMappingURL=function-descriptions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"function-descriptions.d.ts","sourceRoot":"","sources":["../../function-descriptions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAErE,eAAO,MAAM,oBAAoB,EAAE,kBAAkB,EA23SpD,CAAC"}