commit
message
chore: emit ts declarations
author
Stephen Murphy <[email protected]>
date
2018-04-25 05:37:04
stats
51 file(s) changed,
3438 insertions(+),
41 deletions(-)
files
dist/Cell.d.ts
dist/Cell.js
dist/Errors.d.ts
dist/Errors.js
dist/Formulas.d.ts
dist/Formulas/AllFormulas.d.ts
dist/Formulas/Convert.d.ts
dist/Formulas/Date.d.ts
dist/Formulas/Date.js
dist/Formulas/Engineering.d.ts
dist/Formulas/Financial.d.ts
dist/Formulas/Info.d.ts
dist/Formulas/Logical.d.ts
dist/Formulas/Lookup.d.ts
dist/Formulas/Math.d.ts
dist/Formulas/Math.js
dist/Formulas/Range.d.ts
dist/Formulas/Statistical.d.ts
dist/Formulas/Text.d.ts
dist/Formulas/Text.js
dist/Parser/DataStore.d.ts
dist/Parser/DataStore.js
dist/Parser/Parser.d.ts
dist/Parser/Parser.js
dist/Parser/ParserConstants.d.ts
dist/Parser/ReduceActions.d.ts
dist/Parser/ReductionPair.d.ts
dist/Parser/ReductionPair.js
dist/Parser/RuleIndex.d.ts
dist/Parser/Rules.d.ts
dist/Parser/Symbols.d.ts
dist/Sheet.d.ts
dist/Sheet.js
dist/Utilities/ArgsChecker.d.ts
dist/Utilities/ArgsChecker.js
dist/Utilities/CriteriaFunctionFactory.d.ts
dist/Utilities/CriteriaFunctionFactory.js
dist/Utilities/DateRegExBuilder.d.ts
dist/Utilities/DateRegExBuilder.js
dist/Utilities/Filter.d.ts
dist/Utilities/Filter.js
dist/Utilities/MathHelpers.d.ts
dist/Utilities/MoreUtils.d.ts
dist/Utilities/MoreUtils.js
dist/Utilities/ObjectBuilder.d.ts
dist/Utilities/ObjectBuilder.js
dist/Utilities/Serializer.d.ts
dist/Utilities/Serializer.js
dist/Utilities/TypeConverter.d.ts
dist/Utilities/TypeConverter.js
tsconfig.json
1diff --git a/dist/Cell.d.ts b/dist/Cell.d.ts
2new file mode 100644
3index 0000000..236395f
4--- /dev/null
5+++ b/dist/Cell.d.ts
6@@ -0,0 +1,126 @@
7+declare const CELL_ID_ERROR = "CELL_ID_ERROR";
8+/**
9+ * Represents a cell id error, and is thrown when a cells id does not conform to A1 notation.
10+ */
11+declare class CellIdError extends Error {
12+ constructor(msg: string);
13+}
14+/**
15+ * Cell represents a cell in the spreadsheet. It contains a nullable rawFormulaText, and a value, which is not nullable unless
16+ * the parsing of the rawFormulaText results in an error.
17+ */
18+declare class Cell {
19+ /**
20+ * The raw formula text that can be parse, excluding the proceeding =
21+ * E.g: SUM(A2:A4, 10)
22+ */
23+ private rawFormulaText;
24+ private typedValue;
25+ private dependencies;
26+ private error;
27+ private id;
28+ private row;
29+ private col;
30+ /**
31+ * Creates an empty cell with an id.
32+ * @param id key of the cell in A1-format.
33+ */
34+ constructor(id: string);
35+ /**
36+ * Update this cell's dependencies, where `dependencies` is a unique list of A1-format cell IDs.
37+ * @param dependencies to merge with existing dependencies.
38+ */
39+ updateDependencies(dependencies: Array<string>): void;
40+ /**
41+ * Return a list of dependencies in A1-format cell IDs, in no particular order, but likely in order of occurrence in
42+ * rawFormulaText.
43+ * @returns {Array<string>} list of dependencies in A1-format
44+ */
45+ getDependencies(): Array<string>;
46+ /**
47+ * Return the zero-indexed column number of this cell.
48+ * @returns {number} column
49+ */
50+ getColumn(): number;
51+ /**
52+ * Return the zero-indexed row number of this cell.
53+ * @returns {number} row
54+ */
55+ getRow(): number;
56+ /**
57+ * Get the A1-format ID of this cell.
58+ * @returns {string} cell ID
59+ */
60+ getId(): string;
61+ /**
62+ * Get the rawFormulaText of this cell if set. Defaults to null, so should be used in combination with hasFormula().
63+ * @returns {string} rawFormulaText of this cell, if set. Nullable.
64+ */
65+ getFormula(): string;
66+ /**
67+ * Returns true if this cell has a formula to be parsed.
68+ * @returns {boolean}
69+ */
70+ hasFormula(): boolean;
71+ /**
72+ * Sets the value or rawFormulaText for this cell. If the input begins with =, then it is considered to be a rawFormulaText. If it
73+ * is not, then it is a value, and set as the raw value for this cell.
74+ * @param rawFormula
75+ */
76+ setValue(rawFormula: string): void;
77+ /**
78+ * Gets the rawFormulaText for this cell, which is either null or a string.
79+ * @returns {string}
80+ */
81+ getRawFormulaText(): string | null;
82+ /**
83+ * Get the value of this cell if a value is present. If this cell was given a formula but not a value, this may return
84+ * null.
85+ * @returns {any}
86+ */
87+ getValue(): any;
88+ /**
89+ * CLears a cells value.
90+ */
91+ clearValue(): void;
92+ /**
93+ * Set error for this cell. Usually in the case of a parse error when parsing the rawFormulaText.
94+ * @param error to set.
95+ */
96+ setError(error: Error): void;
97+ /**
98+ * Get the error for this cell. If the rawFormulaText is not parsed properly, or is null, this could be null.
99+ * @returns {Error} error to return, could be null.
100+ */
101+ getError(): Error;
102+ /**
103+ * Easier way to check if this cell has an error.
104+ * @returns {boolean}
105+ */
106+ hasError(): boolean;
107+ /**
108+ * A cell is deemed blank if it contains no value, no error, and no typed value.
109+ * @returns {boolean}
110+ */
111+ isBlank(): boolean;
112+ /**
113+ * Returns the human-readable string representation of this cell, omitting some obvious fields.
114+ * @returns {string}
115+ */
116+ toString(): string;
117+ /**
118+ * Comparing two cells.
119+ * @param other
120+ * @returns {boolean}
121+ */
122+ equals(other: Cell): boolean;
123+ /**
124+ * Build a cell with an id and value.
125+ * @param id - A1-notation id or key.
126+ * @param value - value of the cell as a string
127+ * @returns {Cell}
128+ * @constructor
129+ */
130+ static BuildFrom(id: string, value: any): Cell;
131+}
132+export { Cell, CellIdError, CELL_ID_ERROR };
133diff --git a/dist/Cell.js b/dist/Cell.js
134index c88c5b9..ee91a8b 100644
135--- a/dist/Cell.js
136+++ b/dist/Cell.js
137@@ -15,7 +15,7 @@ exports.CELL_ID_ERROR = CELL_ID_ERROR;
138 /**
139 * Represents a cell id error, and is thrown when a cells id does not conform to A1 notation.
140 */
141-var CellIdError = (function (_super) {
142+var CellIdError = /** @class */ (function (_super) {
143 __extends(CellIdError, _super);
144 function CellIdError(msg) {
145 var _this = _super.call(this) || this;
146@@ -30,7 +30,7 @@ exports.CellIdError = CellIdError;
147 * Cell represents a cell in the spreadsheet. It contains a nullable rawFormulaText, and a value, which is not nullable unless
148 * the parsing of the rawFormulaText results in an error.
149 */
150-var Cell = (function () {
151+var Cell = /** @class */ (function () {
152 /**
153 * Creates an empty cell with an id.
154 * @param id key of the cell in A1-format.
155diff --git a/dist/Errors.d.ts b/dist/Errors.d.ts
156new file mode 100644
157index 0000000..c469777
158--- /dev/null
159+++ b/dist/Errors.d.ts
160@@ -0,0 +1,65 @@
161+declare let NULL_ERROR: string;
162+declare let DIV_ZERO_ERROR: string;
163+declare let VALUE_ERROR: string;
164+declare let REF_ERROR: string;
165+declare let NAME_ERROR: string;
166+declare let NUM_ERROR: string;
167+declare let NA_ERROR: string;
168+declare let PARSE_ERROR: string;
169+/**
170+ * Execution or parsing produced a null value, or intersection of ranges produced zero cells.
171+ */
172+declare class NullError extends Error {
173+ constructor(message: string);
174+}
175+/**
176+ * Attempt to divide by zero, including division by an empty cell.
177+ */
178+declare class DivZeroError extends Error {
179+ constructor(message: string);
180+}
181+/**
182+ * Parameter is wrong type, or value is incompatible, or cannot be parsed, converted, or manipulated.
183+ */
184+declare class ValueError extends Error {
185+ constructor(message: string);
186+}
187+/**
188+ * Reference to invalid cell, range, or empty range.
189+ */
190+declare class RefError extends Error {
191+ constructor(message: string);
192+}
193+/**
194+ * Unrecognized/deleted name.
195+ */
196+declare class NameError extends Error {
197+ constructor(message: string);
198+}
199+/**
200+ * Failed to meet domain constraints (e.g., input number too high or too low).
201+ */
202+declare class NumError extends Error {
203+ constructor(message: string);
204+}
205+/**
206+ * Lookup functions which failed and NA() return this value.
207+ */
208+declare class NAError extends Error {
209+ constructor(message: string);
210+}
211+/**
212+ * Input could not be parsed.
213+ */
214+declare class ParseError extends Error {
215+ constructor(message: string);
216+}
217+/**
218+ * Constructs an error by error name.
219+ * @param {string} name - Name of error. If not one of DIV_ZERO_ERROR, NULL_ERROR, VALUE_ERROR, REF_ERROR, NAME_ERROR,
220+ * NUM_ERROR,NA_ERROR, or PARSE_ERROR, will default to ParseError.
221+ * @param {string} msg - Message for error, will default to empty string.
222+ * @returns {Error}
223+ */
224+declare function constructErrorByName(name: string, msg?: string): Error;
225+export { DIV_ZERO_ERROR, NULL_ERROR, VALUE_ERROR, REF_ERROR, NAME_ERROR, NUM_ERROR, NA_ERROR, PARSE_ERROR, DivZeroError, NullError, ValueError, RefError, NameError, NumError, NAError, ParseError, constructErrorByName };
226diff --git a/dist/Errors.js b/dist/Errors.js
227index dae35e3..7d92a71 100644
228--- a/dist/Errors.js
229+++ b/dist/Errors.js
230@@ -29,7 +29,7 @@ exports.PARSE_ERROR = PARSE_ERROR;
231 /**
232 * Execution or parsing produced a null value, or intersection of ranges produced zero cells.
233 */
234-var NullError = (function (_super) {
235+var NullError = /** @class */ (function (_super) {
236 __extends(NullError, _super);
237 function NullError(message) {
238 var _this = _super.call(this, message) || this;
239@@ -42,7 +42,7 @@ exports.NullError = NullError;
240 /**
241 * Attempt to divide by zero, including division by an empty cell.
242 */
243-var DivZeroError = (function (_super) {
244+var DivZeroError = /** @class */ (function (_super) {
245 __extends(DivZeroError, _super);
246 function DivZeroError(message) {
247 var _this = _super.call(this, message) || this;
248@@ -55,7 +55,7 @@ exports.DivZeroError = DivZeroError;
249 /**
250 * Parameter is wrong type, or value is incompatible, or cannot be parsed, converted, or manipulated.
251 */
252-var ValueError = (function (_super) {
253+var ValueError = /** @class */ (function (_super) {
254 __extends(ValueError, _super);
255 function ValueError(message) {
256 var _this = _super.call(this, message) || this;
257@@ -68,7 +68,7 @@ exports.ValueError = ValueError;
258 /**
259 * Reference to invalid cell, range, or empty range.
260 */
261-var RefError = (function (_super) {
262+var RefError = /** @class */ (function (_super) {
263 __extends(RefError, _super);
264 function RefError(message) {
265 var _this = _super.call(this, message) || this;
266@@ -81,7 +81,7 @@ exports.RefError = RefError;
267 /**
268 * Unrecognized/deleted name.
269 */
270-var NameError = (function (_super) {
271+var NameError = /** @class */ (function (_super) {
272 __extends(NameError, _super);
273 function NameError(message) {
274 var _this = _super.call(this, message) || this;
275@@ -94,7 +94,7 @@ exports.NameError = NameError;
276 /**
277 * Failed to meet domain constraints (e.g., input number too high or too low).
278 */
279-var NumError = (function (_super) {
280+var NumError = /** @class */ (function (_super) {
281 __extends(NumError, _super);
282 function NumError(message) {
283 var _this = _super.call(this, message) || this;
284@@ -107,7 +107,7 @@ exports.NumError = NumError;
285 /**
286 * Lookup functions which failed and NA() return this value.
287 */
288-var NAError = (function (_super) {
289+var NAError = /** @class */ (function (_super) {
290 __extends(NAError, _super);
291 function NAError(message) {
292 var _this = _super.call(this, message) || this;
293@@ -120,7 +120,7 @@ exports.NAError = NAError;
294 /**
295 * Input could not be parsed.
296 */
297-var ParseError = (function (_super) {
298+var ParseError = /** @class */ (function (_super) {
299 __extends(ParseError, _super);
300 function ParseError(message) {
301 var _this = _super.call(this, message) || this;
302diff --git a/dist/Formulas.d.ts b/dist/Formulas.d.ts
303new file mode 100644
304index 0000000..4847415
305--- /dev/null
306+++ b/dist/Formulas.d.ts
307@@ -0,0 +1,6 @@
308+declare let Formulas: {
309+ exists: (fn: string) => boolean;
310+ get: (fn: string) => any;
311+ isTryCatchFormula: (fn: string) => boolean;
312+};
313+export { Formulas };
314diff --git a/dist/Formulas/AllFormulas.d.ts b/dist/Formulas/AllFormulas.d.ts
315new file mode 100644
316index 0000000..76c4fc9
317--- /dev/null
318+++ b/dist/Formulas/AllFormulas.d.ts
319@@ -0,0 +1,24 @@
320+import { ABS, ACOS, ACOSH, ACOTH, ASIN, ASINH, ATAN, ATAN2, ATANH, COT, COTH, COSH, COS, COUNTUNIQUE, EVEN, ERF, ERFC, INT, ISEVEN, ISODD, MOD, ODD, SIN, SINH, SUM, SQRT, SQRTPI, PI, POWER, LOG, LOG10, LN, TAN, TANH, ROUND, ROUNDDOWN, ROUNDUP, SUMPRODUCT, SUMIF, SUMSQ, SUMX2MY2, SUMX2PY2, FLOOR, IF, COUNTIF, COUNTIFS, CEILING, TRUNC, RADIANS, DEGREES, COMBIN, MULTIPLY, MINUS, RAND, RANDBETWEEN, SIGN, DIVIDE, EQ, GT, GTE, LT, LTE, NE, GCD, LCM, GAMMALN, PRODUCT, QUOTIENT, UPLUS, UMINUS, MROUND, FACTDOUBLE, UNARY_PERCENT, MULTINOMIAL, SERIESSUM, SUBTOTAL } from "./Math";
321+import { FREQUENCY, GROWTH, LINEST } from "./Range";
322+import { NA, ISTEXT, ISLOGICAL, ISNUMBER, ISNONTEXT, ISEMAIL, ISURL, N, ISREF, ERRORTYPE, ISBLANK, ISERR, ISERROR, ISNA, IFERROR, TYPE, COLUMN, ROW, ISFORMULA } from "./Info";
323+import { CHOOSE, ADDRESS, COLUMNS, ROWS } from "./Lookup";
324+import { TO_DATE, TO_DOLLARS, TO_PERCENT, TO_TEXT } from "./Convert";
325+import { AND, EXACT, TRUE, FALSE, NOT, OR, XOR } from "./Logical";
326+import { BIN2DEC, BIN2HEX, BIN2OCT, DEC2BIN, DEC2HEX, DEC2OCT, DELTA } from "./Engineering";
327+import { ACCRINT, CUMPRINC, CUMIPMT, DB, DDB, DOLLAR, DOLLARDE, DOLLARFR, EFFECT, SYD, SLN, NPV, NPER, NOMINAL, MIRR, IRR, IPMT, FV, PPMT, FVSCHEDULE, PV, RATE } from "./Financial";
328+import { AVERAGE, AVERAGEA, AVERAGEIF, AVEDEV, CORREL, COUNT, COUNTA, PEARSON, MEDIAN, DEVSQ, EXPONDIST, FINV, FISHER, FISHERINV, MAX, MAXA, MIN, MINA, QUARTILE, PERCENTILE, STDEV, STDEVA, STDEVP, STDEVPA, TRIMMEAN, SLOPE, STANDARDIZE, SMALL, LARGE, KURT, INTERCEPT, FORECAST, POISSON, PERCENTRANK, PERCENTRANK$EXC, NORMSINV, NORMSDIST, NORMDIST, NORMINV, NEGBINOMDIST, GEOMEAN, HARMEAN, CONFIDENCE, BINOMDIST, COVAR, WEIBULL, VARPA, VARP, VARA, VAR, PERMUT, RSQ, SKEW, STEYX, PROB, MODE, RANK, RANK$AVG, RANK$EQ, LOGNORMDIST, TDIST, HYPGEOMDIST, ZTEST } from "./Statistical";
329+import { ARABIC, CHAR, CODE, SPLIT, CONCATENATE, CONVERT, TRIM, LOWER, UPPER, T, ROMAN, TEXT, FIND, JOIN, LEN, LEFT, RIGHT, SEARCH, REPT, VALUE, CLEAN, MID, PROPER, REPLACE, SUBSTITUTE } from "./Text";
330+import { DATE, DATEVALUE, DATEDIF, DAYS, DAY, DAYS360, EDATE, EOMONTH, MONTH, YEAR, WEEKDAY, WEEKNUM, YEARFRAC, TIMEVALUE, HOUR, MINUTE, SECOND, NETWORKDAYS, NETWORKDAYS$INTL, NOW, TODAY, TIME, WORKDAY, WORKDAY$INTL } from "./Date";
331+declare const __COMPLEX: {
332+ "F.DIST": (x: any, degreesFreedom1: any, degreesFreedom2: any, cumulative: any) => number | boolean;
333+ "NETWORKDAYS.INTL": (startDate: any, endDate: any, weekend?: any, holidays?: any) => number;
334+ "WORKDAY.INTL": (startDate: any, numberOfDays: any, weekend?: any, holidays?: any) => number;
335+ "POISSON.DIST": (x: any, meanValue: any, cumulative?: any) => number;
336+ "PERCENTRANK.INC": (data: any, x: any, significance?: any) => number;
337+ "PERCENTRANK.EXC": (data: any, x: any, significance?: any) => number;
338+ "ERROR.TYPE": (value: any) => 1 | 2 | 6 | 7 | 8 | 3 | 5 | 4;
339+ "RANK.AVG": (value: any, data: any, isAscending?: any) => number;
340+ "RANK.EQ": (value: any, data: any, isAscending?: any) => number;
341+};
342+declare const __TRY_CATCH_FORMULAS: Object;
343+export { __COMPLEX, __TRY_CATCH_FORMULAS, ABS, ACOS, ACCRINT, ACOSH, ACOTH, AND, ARABIC, ASIN, ASINH, ATAN, ATAN2, ATANH, AVEDEV, AVERAGE, AVERAGEA, AVERAGEIF, BIN2DEC, BIN2HEX, BIN2OCT, CEILING, CHAR, CODE, COMBIN, CONCATENATE, CONVERT, CORREL, PEARSON, COS, PI, COSH, COT, COTH, COUNT, COUNTA, COUNTIF, COUNTIFS, COUNTUNIQUE, CUMIPMT, CUMPRINC, DATE, DATEVALUE, DAY, DAYS, DAYS360, DB, DDB, DEC2BIN, DEC2HEX, DEC2OCT, DEGREES, DELTA, DEVSQ, DOLLAR, DOLLARDE, DOLLARFR, EDATE, EFFECT, EOMONTH, ERF, ERFC, EVEN, EXACT, EXPONDIST, FALSE, FINV, FISHER, FISHERINV, FLOOR, IF, INT, ISEVEN, ISODD, LN, LOG, LOG10, MAX, MAXA, MEDIAN, MIN, MINA, MOD, TRUE, NOT, ODD, OR, POWER, ROUND, ROUNDDOWN, ROUNDUP, SIN, SINH, SPLIT, SQRT, SQRTPI, SUM, SUMIF, SUMPRODUCT, SUMSQ, SUMX2MY2, SUMX2PY2, TAN, TANH, TRUNC, XOR, YEARFRAC, RADIANS, MONTH, YEAR, WEEKDAY, WEEKNUM, DATEDIF, TIMEVALUE, HOUR, MINUTE, SECOND, NETWORKDAYS, NETWORKDAYS$INTL, NOW, TODAY, TIME, WORKDAY, WORKDAY$INTL, MULTIPLY, MINUS, RAND, RANDBETWEEN, SIGN, DIVIDE, EQ, GT, GTE, LT, LTE, NE, NA, CHOOSE, GCD, TRIM, LCM, GAMMALN, QUARTILE, PERCENTILE, PRODUCT, QUOTIENT, UPLUS, UMINUS, STDEV, STDEVA, STDEVP, STDEVPA, ISTEXT, ISLOGICAL, ISNUMBER, ISNONTEXT, MROUND, FACTDOUBLE, FREQUENCY, GROWTH, TRIMMEAN, SLOPE, LOWER, UPPER, STANDARDIZE, SMALL, LARGE, KURT, INTERCEPT, FORECAST, SYD, SLN, NPV, NPER, NOMINAL, MIRR, IRR, IPMT, FV, ISEMAIL, ISURL, LINEST, POISSON, PERCENTRANK, PERCENTRANK$EXC, NORMSINV, NORMSDIST, NORMDIST, NORMINV, NEGBINOMDIST, GEOMEAN, HARMEAN, CONFIDENCE, N, UNARY_PERCENT, MULTINOMIAL, BINOMDIST, COVAR, ISREF, ERRORTYPE, ISBLANK, ISERR, ISERROR, ISNA, IFERROR, TYPE, COLUMN, ROW, T, PPMT, WEIBULL, VARPA, VARP, VARA, VAR, PERMUT, RSQ, SKEW, STEYX, PROB, MODE, RANK, RANK$AVG, RANK$EQ, LOGNORMDIST, TDIST, TO_DATE, TO_DOLLARS, TO_PERCENT, TO_TEXT, ISFORMULA, ADDRESS, COLUMNS, ROWS, SERIESSUM, ROMAN, TEXT, FVSCHEDULE, PV, RATE, SUBTOTAL, HYPGEOMDIST, ZTEST, FIND, JOIN, LEN, LEFT, RIGHT, SEARCH, REPT, VALUE, CLEAN, MID, PROPER, REPLACE, SUBSTITUTE };
344diff --git a/dist/Formulas/Convert.d.ts b/dist/Formulas/Convert.d.ts
345new file mode 100644
346index 0000000..551db02
347--- /dev/null
348+++ b/dist/Formulas/Convert.d.ts
349@@ -0,0 +1,32 @@
350+/**
351+ * Converts a number to a Date.
352+ * @param value - Value to convert. If the input is a number, will convert to a date. If value is non-numeric, will
353+ * return value unchanged.
354+ * @returns {any}
355+ * @constructor
356+ */
357+declare let TO_DATE: (value: any) => any;
358+/**
359+ * Converts a number to a Dollar value.
360+ * @param value - Value to convert. If the input is a number, will return as a dollar value. If value is non-numeric,
361+ * will return value unchanged.
362+ * @returns {any}
363+ * @constructor
364+ */
365+declare let TO_DOLLARS: (value: any) => any;
366+/**
367+ * Converts a number to a percent value where 1 = 100 percent.
368+ * @param value - Value to convert. If the input is a number, will return as a percent value. If value is non-numeric,
369+ * will return value unchanged.
370+ * @returns {any}
371+ * @constructor
372+ */
373+declare let TO_PERCENT: (value: any) => any;
374+/**
375+ * Converts a number to a text value
376+ * @param value - Value to convert. If the input is a text, will return as a text value.
377+ * @returns {any}
378+ * @constructor
379+ */
380+declare let TO_TEXT: (value: any) => string;
381+export { TO_DATE, TO_DOLLARS, TO_PERCENT, TO_TEXT };
382diff --git a/dist/Formulas/Date.d.ts b/dist/Formulas/Date.d.ts
383new file mode 100644
384index 0000000..d2b907a
385--- /dev/null
386+++ b/dist/Formulas/Date.d.ts
387@@ -0,0 +1,266 @@
388+/// <reference path="../../node_modules/moment/moment.d.ts" />
389+/**
390+ * Converts a provided year, month, and day into a date.
391+ * @param year - The year component of the date.
392+ * @param month - The month component of the date.
393+ * @param day - The day component of the date.
394+ * @returns {number} newly created date.
395+ * @constructor
396+ */
397+declare let DATE: (year: any, month: any, day: any) => number;
398+/**
399+ * Converts a provided date string in a known format to a date value.
400+ * @param dateString - The string representing the date. Understood formats include any date format which is
401+ * normally auto-converted when entered, without quotation marks, directly into a cell. Understood formats may depend on
402+ * region and language settings.
403+ * @returns {number} of days since 1900/1/1, inclusively.
404+ * @constructor
405+ */
406+declare let DATEVALUE: (dateString: any) => number;
407+/**
408+ * Returns a date a specified number of months before or after another date.
409+ * @param startDate - The date from which to calculate the result.
410+ * @param months - The number of months before (negative) or after (positive) start_date to calculate.
411+ * @returns {number} date a specified number of months before or after another date
412+ * @constructor
413+ */
414+declare let EDATE: (startDate: any, months: any) => number;
415+/**
416+ * Returns a date representing the last day of a month which falls a specified number of months before or after another
417+ * date.
418+ * @param startDate - The date from which to calculate the the result.
419+ * @param months - The number of months before (negative) or after (positive) start_date to consider. The last
420+ * calendar day of the calculated month is returned.
421+ * @returns {number} the last day of a month
422+ * @constructor
423+ */
424+declare let EOMONTH: (startDate: any, months: any) => number;
425+/**
426+ * Returns the day of the month that a specific date falls on, in numeric format.
427+ * @param date - The date from which to extract the day. Must be a reference to a cell containing a date, a
428+ * function returning a date type, or a number.
429+ * @returns {number} day of the month
430+ * @constructor
431+ */
432+declare let DAY: (date: any) => number;
433+/**
434+ * Returns the number of days between two dates.
435+ * @param endDate most recently occurring
436+ * @param startDate not most recently occurring
437+ * @returns {number} of days between start_date and end_date
438+ * @constructor
439+ */
440+declare let DAYS: (endDate: any, startDate: any) => number;
441+/**
442+ * Returns the difference between two days based on the 360 day year used in some financial interest calculations.
443+ * @param startDate - The start date to consider in the calculation. Must be a reference to a cell containing
444+ * a date, a function returning a date type, or a number.
445+ * @param endDate - The end date to consider in the calculation. Must be a reference to a cell containing a
446+ * date, a function returning a date type, or a number.
447+ * @param methodToUse - [ OPTIONAL - 0 by default ] - An indicator of what day count method to use.
448+ * 0 indicates the US method - Under the US method, if start_date is the last day of a month, the day of month of
449+ * start_date is changed to 30 for the purposes of the calculation. Furthermore if end_date is the last day of a month
450+ * and the day of the month of start_date is earlier than the 30th, end_date is changed to the first day of the month
451+ * following end_date, otherwise the day of month of end_date is changed to 30.
452+ * Any other value indicates the European method - Under the European method, any start_date or end_date that falls on
453+ * the 31st of a month has its day of month changed to 30.
454+ * @returns {number} of days between two dates
455+ * @constructor
456+ */
457+declare let DAYS360: (startDate: any, endDate: any, methodToUse?: any) => number;
458+/**
459+ * Returns the month of the year a specific date falls in, in numeric format.
460+ * @param date - The date from which to extract the month. Must be a reference to a cell containing a date, a
461+ * function returning a date type, or a number.
462+ * @returns {number} month of the year that the input date falls on.
463+ * @constructor
464+ */
465+declare let MONTH: (date: any) => number;
466+/**
467+ * Returns the year specified by a given date.
468+ * @param date - The date from which to calculate the year. Must be a cell reference to a cell containing a
469+ * date, a function returning a date type, or a number.
470+ * @returns {number} year of the input date
471+ * @constructor
472+ */
473+declare let YEAR: (date: any) => number;
474+/**
475+ * Returns a number representing the day of the week of the date provided.
476+ * @param date - The date for which to determine the day of the week. Must be a reference to a cell containing
477+ * a date, a function returning a date type, or a number.
478+ * @param offsetType - [ OPTIONAL - 1 by default ] - A number indicating which numbering system to use to represent
479+ * weekdays. By default counts starting with Sunday = 1. If type is 1, days are counted from Sunday and the value of
480+ * Sunday is 1, therefore the value of Saturday is 7. If type is 2, days are counted from Monday and the value of Monday
481+ * is 1, therefore the value of Sunday is 7. If type is 3, days are counted from Monday and the value of Monday is 0,
482+ * therefore the value of Sunday is 6.
483+ * @returns {number} day of week
484+ * @constructor
485+ */
486+declare let WEEKDAY: (date: any, offsetType?: any) => number;
487+/**
488+ * Returns a number representing the week of the year where the provided date falls. When inputting the date, it is best
489+ * to use the DATE function, as text values may return errors.
490+ *
491+ * Behind the scenes, there are two week numbering "systems" used for this function: System 1 - The first week of the
492+ * year is considered to be the week containing January 1, which is numbered week 1. System 2 - The first week of the
493+ * year is considered to be the week containing the first Thursday of the year, which is numbered as week 1. System 2 is
494+ * the approach specified in ISO 8601, also known as the European system for numbering weeks.
495+ *
496+ * @param date - The date for which to determine the week number. Must be a reference to a cell containing a
497+ * date, a function returning a date type, or a number.
498+ * @param shiftType - [ OPTIONAL - default is 1 ] - A number representing the day that a week starts on as well as
499+ * the system used for determining the first week of the year (1=Sunday, 2=Monday).
500+ * @returns {number} representing week number of year.
501+ * @constructor
502+ */
503+declare let WEEKNUM: (date: any, shiftType?: any) => number;
504+/**
505+ * Calculates the number of days, months, or years between two dates.
506+ * @param startDate - The start date to consider in the calculation. Must be a reference to a cell containing
507+ * a DATE, a function returning a DATE type, or a number.
508+ * @param endDate - The end date to consider in the calculation. Must be a reference to a cell containing a
509+ * DATE, a function returning a DATE type, or a number.
510+ * @param unit - A text abbreviation for unit of time. For example,"M" for month. Accepted values are "Y": the
511+ * number of whole years between start_date and end_date, "M": the number of whole months between start_date and
512+ * end_date, "D": the number of days between start_date and end_date, "MD": the number of days between start_date and
513+ * end_date after subtracting whole months, "YM": the number of whole months between start_date and end_date after
514+ * subtracting whole years, "YD": the number of days between start_date and end_date, assuming start_date and end_date
515+ * were no more than one year apart.
516+ * @returns {number} number of days, months, or years between two dates.
517+ * @constructor
518+ */
519+declare let DATEDIF: (startDate: any, endDate: any, unit: any) => number;
520+/**
521+ * Returns the number of years, including fractional years, between two dates using a specified day count convention.
522+ *
523+ * Further reading:
524+ *
525+ * * http://christian-fries.de/blog/files/2013-yearfrac.html
526+ *
527+ * * http://finmath.net/finmath-lib/
528+ *
529+ * @param startDate - The start date to consider in the calculation. Must be a reference to a cell
530+ * containing a date, a function returning a date type, or a number.
531+ * @param endDate - The end date to consider in the calculation. Must be a reference to a cell containing
532+ * a date, a function returning a date type, or a number.
533+ * @param dayCountConvention - [ OPTIONAL - 0 by default ] - An indicator of what day count method to
534+ * use.
535+ * @returns {number}the number of years, including fractional years, between two dates
536+ * @constructor
537+ */
538+declare let YEARFRAC: (startDate: any, endDate: any, dayCountConvention?: any) => number;
539+/**
540+ * Returns the fraction of a 24-hour day the time represents.
541+ * @param timeString - The string that holds the time representation. Eg: "10am", "10:10", "10:10am", "10:10:11",
542+ * or "10:10:11am".
543+ * @returns {number} representing the fraction of a 24-hour day
544+ * @constructor
545+ */
546+declare let TIMEVALUE: (timeString: any) => number;
547+/**
548+ * Returns the hour component of a specific time, in numeric format.
549+ * @param time - The time from which to calculate the hour component. Must be a reference to a cell containing
550+ * a date/time, a function returning a date/time type, or a number.
551+ * @returns {number}
552+ * @constructor
553+ */
554+declare let HOUR: (time: any) => number;
555+/**
556+ * Returns the minute component of a specific time, in numeric format.
557+ * @param time - The time from which to calculate the minute component. Must be a reference to a cell
558+ * containing a date/time, a function returning a date/time type, or a number.
559+ * @returns {number} minute of the time passed in.
560+ * @constructor
561+ */
562+declare let MINUTE: (time: any) => number;
563+/**
564+ * Returns the second component of a specific time, in numeric format.
565+ * @param time - The time from which to calculate the second component. Must be a reference to a cell
566+ * containing a date/time, a function returning a date/time type, or a number.
567+ * @returns {number} second component of a specific time.
568+ * @constructor
569+ */
570+declare let SECOND: (time: any) => number;
571+/**
572+ * Returns the number of net working days between two provided days.
573+ * @param startDate - The start date of the period from which to calculate the number of net working days.
574+ * @param endDate - The end date of the period from which to calculate the number of net working days.
575+ * @param holidays - [ OPTIONAL ] - A range or array constant containing the date serial numbers to consider
576+ * holidays. The values provided within an array for holidays must be date serial number values, as returned by N or
577+ * date values, as returned by DATE, DATEVALUE or TO_DATE. Values specified by a range should be standard date values or
578+ * date serial numbers.
579+ * @returns {number} the number of net working days between two provided dates.
580+ * @constructor
581+ */
582+declare let NETWORKDAYS: (startDate: any, endDate: any, holidays?: any) => number;
583+/**
584+ * Returns the number of networking days between two provided days excluding specified weekend days and holidays.
585+ * @param startDate - The start date of the period from which to calculate the number of net working days.
586+ * @param endDate - The end date of the period from which to calculate the number of net working days.
587+ * @param weekend - [ OPTIONAL - 1 by default ] - A number or string representing which days of the week are
588+ * considered weekends. String method: weekends can be specified using seven 0’s and 1’s, where the first number in the
589+ * set represents Monday and the last number is for Sunday. A zero means that the day is a work day, a 1 means that the
590+ * day is a weekend. For example, “0000011” would mean Saturday and Sunday are weekends. Number method: instead of using
591+ * the string method above, a single number can be used. 1 = Saturday/Sunday are weekends, 2 = Sunday/Monday, and this
592+ * pattern repeats until 7 = Friday/Saturday. 11 = Sunday is the only weekend, 12 = Monday is the only weekend, and this
593+ * pattern repeats until 17 = Saturday is the only weekend.
594+ * @param holidays - [ OPTIONAL ] - A range or array constant containing the dates to consider as holidays.
595+ * The values provided within an array for holidays must be date serial number values, as returned by N or date values,
596+ * as returned by DATE, DATEVALUE or TO_DATE. Values specified by a range should be standard date values or date serial
597+ * numbers.
598+ * @returns {number} of networking days between two provided days
599+ * @constructor
600+ */
601+declare let NETWORKDAYS$INTL: (startDate: any, endDate: any, weekend?: any, holidays?: any) => number;
602+/**
603+ * Returns the current date and time as a date value.
604+ * @returns {number} representing the current date and time.
605+ * @constructor
606+ */
607+declare let NOW: () => number;
608+/**
609+ * Returns the current date as a date value.
610+ * @returns {number} today
611+ * @constructor
612+ */
613+declare let TODAY: () => number;
614+/**
615+ * Converts a provided hour, minute, and second into a time. Will silently recalculate numeric time values which fall
616+ * outside of valid ranges. Eg: TIME(24, 0, 0) is the same as TIME(0, 0, 0).
617+ * @param hours - The hour component of the time.
618+ * @param minutes - The minute component of the time.
619+ * @param seconds - The second component of the time.
620+ * @returns {number} time of day
621+ * @constructor
622+ */
623+declare let TIME: (hours: any, minutes: any, seconds: any) => number;
624+/**
625+ * Calculates the end date after a specified number of working days.
626+ * @param startDate - The date from which to begin counting.
627+ * @param numberOfDays - The number of working days to advance from start_date. If negative, counts backwards. If
628+ * not an integer, truncate.
629+ * @param holidays - [ OPTIONAL ] - A range or array constant containing the dates to consider holidays. The
630+ * values provided within an array for holidays must be date serial number values, as returned by N or date values, as
631+ * returned by DATE, DATEVALUE or TO_DATE. Values specified by a range should be standard date values or date serial
632+ * numbers.
633+ * @returns {number} end date after a specified number of working days.
634+ * @constructor
635+ */
636+declare let WORKDAY: (startDate: any, numberOfDays: any, holidays?: any) => number;
637+/**
638+ * Calculates the date after a specified number of workdays excluding specified weekend days and holidays.
639+ * @param startDate - The date from which to begin counting.
640+ * @param numberOfDays - The number of working days to advance from start_date. If negative, counts backwards.
641+ * @param weekend - [ OPTIONAL - 1 by default ] - A number or string representing which days of the week are
642+ * considered weekends. String method: weekends can be specified using seven 0’s and 1’s, where the first number in the
643+ * set represents Monday and the last number is for Sunday. A zero means that the day is a work day, a 1 means that the
644+ * day is a weekend. For example, “0000011” would mean Saturday and Sunday are weekends. Number method: instead of using
645+ * the string method above, a single number can be used. 1 = Saturday/Sunday are weekends, 2 = Sunday/Monday, and this
646+ * pattern repeats until 7 = Friday/Saturday. 11 = Sunday is the only weekend, 12 = Monday is the only weekend, and this
647+ * pattern repeats until 17 = Saturday is the only weekend.
648+ * @param holidays - [ OPTIONAL ] - A range or array constant containing the dates to consider holidays.
649+ * @returns {number}
650+ * @constructor
651+ */
652+declare let WORKDAY$INTL: (startDate: any, numberOfDays: any, weekend?: any, holidays?: any) => number;
653+export { DATE, DATEVALUE, DATEDIF, DAYS, DAY, DAYS360, EDATE, EOMONTH, MONTH, YEAR, WEEKDAY, WEEKNUM, YEARFRAC, TIMEVALUE, HOUR, MINUTE, SECOND, NETWORKDAYS, NETWORKDAYS$INTL, NOW, TODAY, TIME, WORKDAY, WORKDAY$INTL };
654diff --git a/dist/Formulas/Date.js b/dist/Formulas/Date.js
655index 934aa36..93b14ba 100644
656--- a/dist/Formulas/Date.js
657+++ b/dist/Formulas/Date.js
658@@ -290,7 +290,7 @@ var WEEKNUM = function (date, shiftType) {
659 if (dm.weekYear() !== dm.year()) {
660 week = dm.weeksInYear() + 1;
661 }
662- if (dayOfWeek === 0) {
663+ if (dayOfWeek === 0) { // sunday shift back
664 return week - 1;
665 }
666 return week;
667@@ -299,7 +299,7 @@ var WEEKNUM = function (date, shiftType) {
668 if (dm.weekYear() !== dm.year()) {
669 week = dm.weeksInYear() + 1;
670 }
671- if (dayOfWeek <= 1) {
672+ if (dayOfWeek <= 1) { // sunday, monday shift back
673 return week - 1;
674 }
675 return week;
676@@ -308,7 +308,7 @@ var WEEKNUM = function (date, shiftType) {
677 if (dm.weekYear() !== dm.year()) {
678 week = dm.weeksInYear() + 1;
679 }
680- if (dayOfWeek <= 2) {
681+ if (dayOfWeek <= 2) { // sunday, monday, tuesday shift back
682 return week - 1;
683 }
684 return week;
685diff --git a/dist/Formulas/Engineering.d.ts b/dist/Formulas/Engineering.d.ts
686new file mode 100644
687index 0000000..4ff6133
688--- /dev/null
689+++ b/dist/Formulas/Engineering.d.ts
690@@ -0,0 +1,73 @@
691+/**
692+ * Converts a signed binary number to decimal format.
693+ * @param signedBinaryNumber - The signed 10-bit binary value to be converted to decimal, provided as a
694+ * string. The most significant bit of signed_binary_number is the sign bit; that is, negative numbers are represented
695+ * in two's complement format.
696+ * @returns {number}
697+ * @constructor
698+ */
699+declare let BIN2DEC: (signedBinaryNumber: any) => number;
700+/**
701+ * Converts a signed binary number to signed hexadecimal format.
702+ * @param signedBinaryNumber - The signed 10-bit binary value to be converted to signed hexadecimal,
703+ * provided as a string. The most significant bit of signed_binary_number is the sign bit; that is, negative numbers are
704+ * represented in two's complement format.
705+ * @param significantDigits - [ OPTIONAL ] - The number of significant digits to ensure in the result.
706+ * @returns {string} string representation of a signed hexadecimal
707+ * @constructor
708+ */
709+declare let BIN2HEX: (signedBinaryNumber: any, significantDigits?: any) => string;
710+/**
711+ * Converts a signed binary number to signed octal format.
712+ * @param signedBinaryNumber - The signed 10-bit binary value to be converted to signed octal, provided as a
713+ * string. The most significant bit of signed_binary_number is the sign bit; that is, negative numbers are represented
714+ * in two's complement format.
715+ * @param significantDigits - [ OPTIONAL ] - The number of significant digits to ensure in the result. If
716+ * this is greater than the number of significant digits in the result, the result is left-padded with zeros until the
717+ * total number of digits reaches significant_digits.
718+ * @returns {string} number in octal format
719+ * @constructor
720+ */
721+declare let BIN2OCT: (signedBinaryNumber: any, significantDigits?: any) => string;
722+/**
723+ * Converts a decimal number to signed octal format.
724+ * @param decimalDumber - The decimal value to be converted to signed octal,provided as a string. For this
725+ * function, this value has a maximum of 536870911 if positive, and a minimum of -53687092 if negative.
726+ * @param significantDigits - [ OPTIONAL ] The number of significant digits to ensure in the result. If this
727+ * is greater than the number of significant digits in the result, the result is left-padded with zeros until the total
728+ * number of digits reaches significant_digits.
729+ * @returns {string} octal string representation of the decimal number
730+ * @constructor
731+ */
732+declare let DEC2OCT: (decimalDumber: any, significantDigits?: any) => string;
733+/**
734+ * Converts a decimal number to signed hexadecimal format.
735+ * @param decimalDumber - The decimal value to be converted to signed hexadecimal, provided as a string. This
736+ * value has a maximum of 549755813887 if positive, and a minimum of -549755814888 if negative.
737+ * @param significantDigits - [ OPTIONAL ] - The number of significant digits to ensure in the result. If
738+ * this is greater than the number of significant digits in the result, the result is left-padded with zeros until the
739+ * total number of digits reaches significant_digits. This value is ignored if decimal_number is negative.
740+ * @returns {string} hexadecimal string representation of the decimal number
741+ * @constructor
742+ */
743+declare let DEC2HEX: (decimalDumber: any, significantDigits?: any) => string;
744+/**
745+ * Converts a decimal number to signed binary format.
746+ * @param decimalDumber - The decimal value to be converted to signed binary, provided as a string. For this
747+ * function, this value has a maximum of 511 if positive, and a minimum of -512 if negative.
748+ * @param significantDigits - [ OPTIONAL ] The number of significant digits to ensure in the result. If this
749+ * is greater than the number of significant digits in the result, the result is left-padded with zeros until the total
750+ * number of digits reaches significant_digits.
751+ * @returns {string} signed binary string representation of the input decimal number.
752+ * @constructor
753+ */
754+declare let DEC2BIN: (decimalDumber: any, significantDigits?: any) => string;
755+/**
756+ * Compare two numeric values, returning 1 if they're equal.
757+ * @param one - The first number to compare.
758+ * @param two - The second number to compare.
759+ * @returns {number} 1 if they're equal, 0 if they're not equal.
760+ * @constructor
761+ */
762+declare let DELTA: (one: any, two?: any) => number;
763+export { BIN2DEC, BIN2HEX, BIN2OCT, DEC2BIN, DEC2HEX, DEC2OCT, DELTA };
764diff --git a/dist/Formulas/Financial.d.ts b/dist/Formulas/Financial.d.ts
765new file mode 100644
766index 0000000..f8c4d56
767--- /dev/null
768+++ b/dist/Formulas/Financial.d.ts
769@@ -0,0 +1,263 @@
770+/**
771+ * Calculates the depreciation of an asset for a specified period using the double-declining balance method.
772+ * @param cost - The initial cost of the asset.
773+ * @param salvage - The value of the asset at the end of depreciation.
774+ * @param life - The number of periods over which the asset is depreciated.
775+ * @param period - The single period within life for which to calculate depreciation.
776+ * @param factor - [ OPTIONAL - 2 by default ] - The factor by which depreciation decreases.
777+ * @returns {number} depreciation of an asset for a specified period
778+ * @constructor
779+ */
780+declare let DDB: (cost: any, salvage: any, life: any, period: any, factor?: any) => number;
781+/**
782+ * Calculates the depreciation of an asset for a specified period using the arithmetic declining balance method.
783+ * @param cost - The initial cost of the asset.
784+ * @param salvage - The value of the asset at the end of depreciation.
785+ * @param life - The number of periods over which the asset is depreciated.
786+ * @param period - The single period within life for which to calculate depreciation.
787+ * @param month - [ OPTIONAL - 12 by default ] - The number of months in the first year of depreciation.
788+ * @returns {number} depreciated value
789+ * @constructor
790+ */
791+declare let DB: (cost: any, salvage: any, life: any, period: any, month: any) => number;
792+/**
793+ * Formats a number into the locale-specific currency format. WARNING: Currently the equivalent of TRUNC, since this
794+ * returns numbers
795+ * @param number - The value to be formatted.
796+ * @param places - [ OPTIONAL - 2 by default ] - The number of decimal places to display.
797+ * @returns {number} dollars
798+ * @constructor
799+ */
800+declare let DOLLAR: (number: any, places?: any) => number;
801+/**
802+ * Converts a price quotation given as a decimal fraction into a decimal value.
803+ * @param fractionalPrice - The price quotation given using fractional decimal conventions.
804+ * @param unit - The units of the fraction, e.g. 8 for 1/8ths or 32 for 1/32nds.
805+ * @returns {number} decimal value.
806+ * @constructor
807+ */
808+declare let DOLLARDE: (fractionalPrice: any, unit: any) => number;
809+/**
810+ * Converts a price quotation given as a decimal value into a decimal fraction.
811+ * @param decimalPrice - The price quotation given as a decimal value.
812+ * @param unit - The units of the desired fraction, e.g. 8 for 1/8ths or 32 for 1/32nds
813+ * @returns {number} price quotation as decimal fraction.
814+ * @constructor
815+ */
816+declare let DOLLARFR: (decimalPrice: any, unit: any) => number;
817+/**
818+ * Calculates the annual effective interest rate given the nominal rate and number of compounding periods per year.
819+ * @param nominalRate - The nominal interest rate per year.
820+ * @param periodsPerYear - The number of compounding periods per year.
821+ * @returns {number} annual effective interest rate
822+ * @constructor
823+ */
824+declare let EFFECT: (nominalRate: any, periodsPerYear: any) => number;
825+/**
826+ * Calculates the periodic payment for an annuity investment based on constant-amount periodic payments and a constant
827+ * interest rate.
828+ * @param rate - The interest rate.
829+ * @param periods - The number of payments to be made.
830+ * @param presentValue - The current value of the annuity.
831+ * @param futureValue [ OPTIONAL ] - The future value remaining after the final payment has been made.
832+ * @param endOrBeginning [ OPTIONAL - 0 by default ] - Whether payments are due at the end (0) or beginning (1) of each
833+ * period.
834+ * @returns {number}
835+ * @constructor
836+ */
837+declare let PMT: (rate: any, periods: any, presentValue: any, futureValue?: any, endOrBeginning?: any) => number;
838+/**
839+ * Returns the future value of an investment based on periodic, constant payments and a constant interest rate.
840+ * @param rate - The rate of periodic interest.
841+ * @param periods - The total number of periods.
842+ * @param payment - The annuity paid regularly per period
843+ * @param value - [OPTIONAL] - The present cash value of an investment.
844+ * @param type - [OPTIONAL] - Defines whether the payment is due at the beginning (1) or the end (0) of a period.
845+ * @returns {number}
846+ * @constructor
847+ */
848+declare let FV: (rate: any, periods: any, payment: any, value?: any, type?: any) => number;
849+/**
850+ * Calculates the cumulative principal paid over a range of payment periods for an investment based on constant-amount
851+ * periodic payments and a constant interest rate.
852+ * @param rate - The interest rate.
853+ * @param numberOfPeriods - The number of payments to be made.
854+ * @param presentValue - The current value of the annuity.
855+ * @param firstPeriod - The number of the payment period to begin the cumulative calculation. must be greater
856+ * than or equal to 1.
857+ * @param lastPeriod - The number of the payment period to end the cumulative calculation, must be greater
858+ * than first_period.
859+ * @param endOrBeginning - Whether payments are due at the end (0) or beginning (1) of each period
860+ * @returns {number} cumulative principal
861+ * @constructor
862+ */
863+declare let CUMPRINC: (rate: any, numberOfPeriods: any, presentValue: any, firstPeriod: any, lastPeriod: any, endOrBeginning: any) => number;
864+/**
865+ * Calculates the cumulative interest over a range of payment periods for an investment based on constant-amount
866+ * periodic payments and a constant interest rate.
867+ * @param rate - The interest rate.
868+ * @param numberOfPeriods - The number of payments to be made.
869+ * @param presentValue - The current value of the annuity.
870+ * @param firstPeriod - The number of the payment period to begin the cumulative calculation, must be greater
871+ * than or equal to 1.
872+ * @param lastPeriod - The number of the payment period to end the cumulative calculation, must be greater
873+ * than first_period.
874+ * @param endOrBeginning - Whether payments are due at the end (0) or beginning (1) of each period.
875+ * @returns {number} cumulative interest
876+ * @constructor
877+ */
878+declare let CUMIPMT: (rate: any, numberOfPeriods: any, presentValue: any, firstPeriod: any, lastPeriod: any, endOrBeginning: any) => number;
879+/**
880+ * Calculates the accrued interest of a security that has periodic payments.
881+ * WARNING: This function has been implemented to specifications as outlined in Google Spreadsheets, LibreOffice, and
882+ * OpenOffice. It functions much the same as MSExcel's ACCRINT, but there are several key differences. Below are links
883+ * to illustrate the differences. Please see the source code for more information on differences. Links: https://quant.stackexchange.com/questions/7040/whats-the-algorithm-behind-excels-accrint, https://support.office.com/en-us/article/ACCRINT-function-fe45d089-6722-4fb3-9379-e1f911d8dc74, https://quant.stackexchange.com/questions/7040/whats-the-algorithm-behind-excels-accrint, https://support.google.com/docs/answer/3093200 .
884+ * @param issue - The date the security was initially issued.
885+ * @param firstPayment - The first date interest will be paid.
886+ * @param settlement - The settlement date of the security, the date after issuance when the security is
887+ * delivered to the buyer. Is the maturity date of the security if it is held until maturity rather than sold.
888+ * @param rate - The annualized rate of interest.
889+ * @param redemption - The redemption amount per 100 face value, or par.
890+ * @param frequency - The number of coupon payments per year. For annual payments, frequency = 1; for
891+ * semiannual, frequency = 2; for quarterly, frequency = 4.
892+ * @param dayCountConvention - [ OPTIONAL - 0 by default ] - An indicator of what day count method to use.
893+ * 0 or omitted = US (NASD) 30/360, 1 = Actual/actual, 2 = Actual/360, 3 = Actual/365, 4 = European 30/360.
894+ * @returns {number}
895+ * @constructor
896+ * TODO: This function is based off of the open-source versions I was able to dig up online. We should implement a
897+ * TODO: second version that is closer to what MSExcel does and is named something like `ACCRINT.MS`.
898+ */
899+declare let ACCRINT: (issue: any, firstPayment: any, settlement: any, rate: any, redemption: any, frequency: any, dayCountConvention?: any) => number;
900+/**
901+ * Returns the arithmetic-declining depreciation rate. Use this function to calculate the depreciation amount for one
902+ * period of the total depreciation span of an object. Arithmetic declining depreciation reduces the depreciation amount
903+ * from period to period by a fixed sum.
904+ * @param cost - The initial cost of an asset.
905+ * @param salvage - the value of an asset after depreciation.
906+ * @param life - The period fixing the time span over which an asset is depreciated.
907+ * @param period - The period for which the depreciation is to be calculated.
908+ * @returns {number}
909+ * @constructor
910+ */
911+declare let SYD: (cost: any, salvage: any, life: any, period: any) => number;
912+/**
913+ * Returns the straight-line depreciation of an asset for one period. The amount of the depreciation is constant during
914+ * the depreciation period.
915+ * @param cost - The initial cost of the asset.
916+ * @param salvage - The value of an asset at the end of the depreciation.
917+ * @param life - The depreciation period determining the number of periods in the deprecation of the asset.
918+ * @returns {number}
919+ * @constructor
920+ */
921+declare let SLN: (cost: any, salvage: any, life: any) => number;
922+/**
923+ * Returns the net present value of an investment based on a series of periodic cash flows and a discount rate.
924+ * @param rate - The discount rate for a period.
925+ * @param values - The values representing deposits or withdrawals.
926+ * @returns {number}
927+ * @constructor
928+ * TODO: This function can return results that are prone to floating point precision errors.
929+ */
930+declare let NPV: (rate: any, ...values: any[]) => number;
931+/**
932+ * Returns the number of payment for an investment. Number is based on constant-amount payments made periodically and a
933+ * constant interest rate.
934+ * @param rate - The interest rate.
935+ * @param payment - The amount of each payment.
936+ * @param present - THe current value.
937+ * @param future - [OPTIONAL] - The future value remaining after the final payment has been made.
938+ * @param type [OPTIONAL 0 by default] - 1 indicates payments are due at the beginning of each period. 0 indicates
939+ * payments are due at the end of each period.
940+ * @returns {number}
941+ * @constructor
942+ */
943+declare let NPER: (rate: any, payment: any, present: any, future?: any, type?: any) => number;
944+/**
945+ * Calculates the yearly nominal interest rate, given the effective rate and the number of compounding periods per year.
946+ * @param rate - The effective interest rate.
947+ * @param periods - The number of periodic interest payments per year.
948+ * @returns {number}
949+ * @constructor
950+ */
951+declare let NOMINAL: (rate: any, periods: any) => number;
952+/**
953+ * Calculates the modified internal rate of return of a series of investments.
954+ * @param values - Range or values of payments. Ignores text values.
955+ * @param financeRate - The rate of interest of the investments.
956+ * @param reinvestRate - The rate of interest of the reinvestment.
957+ * @returns {number}
958+ * @constructor
959+ * TODO: This relies on NPV and will therefore be prone to floating-point errors.
960+ */
961+declare let MIRR: (values: any, financeRate: any, reinvestRate: any) => number;
962+/**
963+ * Calculates the internal rate of return for an investment. The values represent cash flow values at regular intervals;
964+ * at least one value must be negative (payments), and at least one value must be positive (income).
965+ *
966+ * Relevant StackOverflow discussion: https://stackoverflow.com/questions/15089151/javascript-irr-internal-rate-of-return-formula-accuracy
967+ *
968+ * @param values - Range containing values. Ignores text values.
969+ * @param guess - [OPTIONAL] - The estimated value. Defaults to 0.01.
970+ * @returns {number}
971+ * @constructor
972+ */
973+declare let IRR: (values: any, guess?: any) => any;
974+/**
975+ * Calculates the periodic amortization for an investment with regular payments and a constant interest rate.
976+ * @param rate - The periodic interest rate.
977+ * @param period - The period for which the compound interest is calculated.
978+ * @param periods - The total number of periods during which the annuity is paid.
979+ * @param present - The present cash value in sequence of payments.
980+ * @param future - [OPTIONAL] - The desired value (future value) at the end of the periods.
981+ * @param type - [OPTIONAL] - Defines whether the payment is due at the beginning (1) or the end (0) of a period.
982+ * @returns {number}
983+ * @constructor
984+ */
985+declare let IPMT: (rate: any, period: any, periods: any, present: any, future?: any, type?: any) => number;
986+/**
987+ * Returns for a given period the payment on the principal for an investment that is based on periodic and constant
988+ * payments and a constant interest rate.
989+ * @param rate - The periodic interest rate.
990+ * @param period - The amortization period.
991+ * @param periods - The total number of periods during which the annuity is paid.
992+ * @param present - The present value in the sequence of payments.
993+ * @param future - [OPTIONAL] - The desired future value. Defaults to 0.
994+ * @param type - [OPTIONAL] - Indicates how the year is to be calculated. 0 indicates payments are due at end of
995+ * period, 1 indicates payments are due at beginning of period. Defaults to 0.
996+ * @returns {number}
997+ * @constructor
998+ */
999+declare let PPMT: (rate: any, period: any, periods: any, present: any, future?: any, type?: any) => number;
1000+/**
1001+ * Calculates the accumulated value of the starting capital for a series of periodically varying interest rates.
1002+ * @param principal - The starting capital.
1003+ * @param rateSchedule - Range or Array that is a series of interest rates.
1004+ * @returns {number}
1005+ * @constructor
1006+ */
1007+declare let FVSCHEDULE: (principal: any, rateSchedule: any) => number;
1008+/**
1009+ * Returns the present value of an investment resulting from a series of regular payments.
1010+ * @param rate - The interest rate per period.
1011+ * @param periods - The total number of payment periods
1012+ * @param paymentPerPeriod - The regular payment made per period.
1013+ * @param future - [OPTIONAL defaults to 0] The future value remaining after the final installment has been made
1014+ * @param type - [OPTIONAL defaults to 0] Defines whether the payment is due at the beginning (1) or the end (0) of a
1015+ * period.
1016+ * @constructor
1017+ */
1018+declare let PV: (rate: any, periods: any, paymentPerPeriod: any, future?: any, type?: any) => number;
1019+/**
1020+ * Returns the constant interest rate per period of an annuity.
1021+ * @param periods - The total number of periods, during which payments are made (payment period).
1022+ * @param paymentPerPeriod - The constant payment (annuity) paid during each period.
1023+ * @param presentValue - The cash value in the sequence of payments
1024+ * @param futureValue - [OPTIONAL defaults to 0] The future value, which is reached at the end of the periodic payments.
1025+ * @param beginningOrEnd - [OPTIONAL defaults to 0] Defines whether the payment is due at the beginning (1) or the end
1026+ * (0) of a period.
1027+ * @param guessRate - [OPTIONAL] - Determines the estimated value of the interest with iterative
1028+ * calculation.
1029+ * @constructor
1030+ */
1031+declare let RATE: (periods: any, paymentPerPeriod: any, presentValue: any, futureValue?: any, beginningOrEnd?: any, guessRate?: any) => any;
1032+export { ACCRINT, CUMPRINC, CUMIPMT, DB, DDB, DOLLAR, DOLLARDE, DOLLARFR, EFFECT, PMT, SYD, SLN, NPV, NPER, NOMINAL, MIRR, IRR, IPMT, FV, PPMT, FVSCHEDULE, PV, RATE };
1033diff --git a/dist/Formulas/Info.d.ts b/dist/Formulas/Info.d.ts
1034new file mode 100644
1035index 0000000..48d6c5c
1036--- /dev/null
1037+++ b/dist/Formulas/Info.d.ts
1038@@ -0,0 +1,142 @@
1039+/**
1040+ * Returns the "value not available" error, "#N/A".
1041+ * @constructor
1042+ */
1043+declare let NA: () => never;
1044+/**
1045+ * Returns true if a value is text.
1046+ * @param value - value or reference to check.
1047+ * @returns {boolean}.
1048+ * @constructor
1049+ */
1050+declare let ISTEXT: (value: any) => boolean;
1051+/**
1052+ * Returns true if a value is not text.
1053+ * @param value - value or reference to check.
1054+ * @returns {boolean}.
1055+ * @constructor
1056+ */
1057+declare let ISNONTEXT: (value: any) => boolean;
1058+/**
1059+ * Returns true if value is a boolean (FALSE, or TRUE). Numerical and text values return false.
1060+ * @param value - value or reference to check.
1061+ * @returns {boolean}
1062+ * @constructor
1063+ */
1064+declare let ISLOGICAL: (value: any) => boolean;
1065+/**
1066+ * Returns true if value or reference is a number.
1067+ * @param value - value or reference to check.
1068+ * @returns {boolean}
1069+ * @constructor
1070+ */
1071+declare let ISNUMBER: (value: any) => boolean;
1072+/**
1073+ * Returns true if input is a valid email. Valid domains are Original top-level domains and Country code top-level
1074+ * domains.
1075+ * @param value - Value to check whether it is an email or not.
1076+ * @returns {boolean}
1077+ * @constructor
1078+ */
1079+declare let ISEMAIL: (value: any) => boolean;
1080+/**
1081+ * Returns true if the input is a valid URL.
1082+ * @param value - Value to check
1083+ * @returns {boolean}
1084+ * @constructor
1085+ */
1086+declare let ISURL: (value: any) => boolean;
1087+/**
1088+ * Returns the value as a number.
1089+ * @param value - value to return.
1090+ * @returns {number}
1091+ * @constructor
1092+ */
1093+declare let N: (value: any) => number;
1094+/**
1095+ * Tests if the content of one or several cells is a reference. Verifies the type of references in a cell or a range of
1096+ * cells. If an error occurs, the function returns a logical or numerical value.
1097+ * @param value - The value to be tested, to determine whether it is a reference.
1098+ * @returns {boolean}
1099+ * @constructor
1100+ */
1101+declare let ISREF: (value: any) => boolean;
1102+/**
1103+ * Returns the number corresponding to an error value occurring in a different cell. With the aid of this number, an
1104+ * error message text can be generated. If an error occurs, the function returns a logical or numerical value.
1105+ * @param value - Contains either the address/reference of the cell in which the error occurs, or the error directly.
1106+ * Eg: `=ERRORTYPE(NA())`
1107+ * @constructor
1108+ */
1109+declare let ERRORTYPE: (value: any) => 1 | 2 | 6 | 7 | 8 | 3 | 5 | 4;
1110+/**
1111+ * Returns TRUE if the reference to a cell is blank. This function is used to determine if the content of a cell is
1112+ * empty. A cell with a formula inside is not empty. If an error occurs, the function returns a logical or numerical
1113+ * value.
1114+ * @param value - The content to be tested.
1115+ * @returns {boolean}
1116+ * @constructor
1117+ */
1118+declare let ISBLANK: (value: any) => boolean;
1119+/**
1120+ * Returns TRUE if the value refers to any error value except #N/A. You can use this function to control error values
1121+ * in certain cells. If an error occurs, the function returns a logical or numerical value.
1122+ * @param value - Any value or expression in which a test is performed to determine whether an error value not equal to
1123+ * #N/A is present.
1124+ * @returns {boolean}
1125+ * @constructor
1126+ */
1127+declare let ISERR: (value: any) => boolean;
1128+/**
1129+ * Tests if the cells contain general error values. ISERROR recognizes the #N/A error value. If an error occurs, the
1130+ * function returns a logical or numerical value.
1131+ * @param value - is any value where a test is performed to determine whether it is an error value.
1132+ * @returns {boolean}
1133+ * @constructor
1134+ */
1135+declare let ISERROR: (value: any) => boolean;
1136+/**
1137+ * Returns TRUE if a cell contains the #N/A (value not available) error value. If an error occurs, the function returns
1138+ * a logical or numerical value.
1139+ * @param value - The value or expression to be tested.
1140+ * @returns {boolean}
1141+ * @constructor
1142+ */
1143+declare let ISNA: (value: any) => boolean;
1144+/**
1145+ * Returns the first argument if no error value is present, otherwise returns the second argument if provided, or a
1146+ * blank if the second argument is absent. Blank value is `null`.
1147+ * @param value - Value to check for error.
1148+ * @param valueIfError - [OPTIONAL] - Value to return if no error is present in the first argument.
1149+ * @returns {any}
1150+ * @constructor
1151+ */
1152+declare let IFERROR: (value: any, valueIfError?: any) => any;
1153+/**
1154+ * Returns a number corresponding to the type of data passed into the function. 1 = number, 2 = text, 4 = boolean,
1155+ * 16 = error, 64 = array/range, 128 = any other type of cell.
1156+ * @param value - Value for which the type will be determined.
1157+ * @returns {number}
1158+ * @constructor
1159+ */
1160+declare let TYPE: (value: any) => 1 | 2 | 16 | 4 | 64 | 128;
1161+/**
1162+ * Returns the column number of a specified cell, starting with column 1 for A.
1163+ * @param cell - Cell, defaults to the cell calling this formula, when used in the context of a spreadsheet.
1164+ * @constructor
1165+ */
1166+declare let COLUMN: (cell: any) => number;
1167+/**
1168+ * Returns the row number of a specified cell, starting with row 1 for A1.
1169+ * @param cell - Cell, defaults to the cell calling this formula, when used in the context of a spreadsheet.
1170+ * @constructor
1171+ */
1172+declare let ROW: (cell: any) => number;
1173+/**
1174+ * Returns TRUE if a cell is a formula cell. Must be given a reference.
1175+ * @param value - To check.
1176+ * @returns {boolean}
1177+ * @constructor
1178+ */
1179+declare let ISFORMULA: (value: any) => boolean;
1180+export { NA, ISTEXT, ISLOGICAL, ISNUMBER, ISNONTEXT, ISEMAIL, ISURL, N, ISREF, ERRORTYPE, ISBLANK, ISERR, ISERROR, ISNA, IFERROR, TYPE, COLUMN, ROW, ISFORMULA };
1181diff --git a/dist/Formulas/Logical.d.ts b/dist/Formulas/Logical.d.ts
1182new file mode 100644
1183index 0000000..f9c99dd
1184--- /dev/null
1185+++ b/dist/Formulas/Logical.d.ts
1186@@ -0,0 +1,53 @@
1187+/**
1188+ * Returns true if all of the provided arguments are logically true, and false if any of the provided arguments are
1189+ * logically false.
1190+ * @param values At least one expression or reference to a cell containing an expression that represents some logical
1191+ * value, i.e. TRUE or FALSE, or an expression that can be coerced to a logical value.
1192+ * @returns {boolean} if all values are logically true.
1193+ * @constructor
1194+ */
1195+declare let AND: (...values: any[]) => boolean;
1196+/**
1197+ * Tests whether two strings are identical, returning true if they are.
1198+ * @param one - The first string to compare
1199+ * @param two - The second string to compare
1200+ * @returns {boolean}
1201+ * @constructor
1202+ */
1203+declare let EXACT: (one: any, two: any) => boolean;
1204+/**
1205+ * Returns true.
1206+ * @returns {boolean} true boolean
1207+ * @constructor
1208+ */
1209+declare let TRUE: () => boolean;
1210+/**
1211+ * Returns false.
1212+ * @returns {boolean} false boolean
1213+ * @constructor
1214+ */
1215+declare let FALSE: () => boolean;
1216+/**
1217+ * Returns the opposite of a logical value - NOT(TRUE) returns FALSE; NOT(FALSE) returns TRUE.
1218+ * @param value - An expression or reference to a cell holding an expression that represents some logical value.
1219+ * @returns {boolean} opposite of a logical value input
1220+ * @constructor
1221+ */
1222+declare let NOT: (value: any) => boolean;
1223+/**
1224+ * Returns true if any of the provided arguments are logically true, and false if all of the provided arguments are
1225+ * logically false.
1226+ * @param values An expression or reference to a cell containing an expression that represents some logical value, i.e.
1227+ * TRUE or FALSE, or an expression that can be coerced to a logical value.
1228+ * @returns {boolean}
1229+ * @constructor
1230+ */
1231+declare let OR: (...values: any[]) => boolean;
1232+/**
1233+ * Exclusive or or exclusive disjunction is a logical operation that outputs true only when inputs differ.
1234+ * @param values to check for exclusivity.
1235+ * @returns {boolean} returns true if only one input is considered logically true.
1236+ * @constructor
1237+ */
1238+declare let XOR: (...values: any[]) => boolean;
1239+export { AND, EXACT, TRUE, FALSE, NOT, OR, XOR };
1240diff --git a/dist/Formulas/Lookup.d.ts b/dist/Formulas/Lookup.d.ts
1241new file mode 100644
1242index 0000000..fed5789
1243--- /dev/null
1244+++ b/dist/Formulas/Lookup.d.ts
1245@@ -0,0 +1,29 @@
1246+/**
1247+ * Returns an element from a list of choices based on index.
1248+ * @param index - Which choice to return. Index starts at 1.
1249+ * @param values - Array of potential value to return. Required. May be a reference to a cell or an individual value.
1250+ * @constructor
1251+ */
1252+declare let CHOOSE: (index: any, ...values: any[]) => any;
1253+/**
1254+ * Returns a text representation of a cell address based on the row, column, and sheet.
1255+ * @param row - Row of cell address.
1256+ * @param column - Column of cell address
1257+ * @param {number} absoluteVsRelativeMode - [OPTIONAL - default is 1] Should return a relative(A1, vs $A$1) or absolute address. 1 is row and
1258+ * column absolute (e.g. $A$1), 2 is row absolute and column relative (e.g. A$1), 3 is row relative and column absolute
1259+ * (e.g. $A1), 4 is row and column relative (e.g. A1).
1260+ * @param {boolean} useA1Notation - [OPTIONAL - default is TRUE] Should use A1 notation.
1261+ * @param sheet - [OPTIONAL] Sheet name to use in address.
1262+ * @returns {string}
1263+ * @constructor
1264+ */
1265+declare let ADDRESS: (row: any, column: any, absoluteVsRelativeMode?: number, useA1Notation?: boolean, sheet?: any) => string;
1266+/**
1267+ * Gets the number of columns in a specified array or range.
1268+ * @param value - The array of range to consider.
1269+ * @returns {number}
1270+ * @constructor
1271+ */
1272+declare let COLUMNS: (value: any) => number;
1273+declare let ROWS: (value: any) => number;
1274+export { CHOOSE, ADDRESS, COLUMNS, ROWS };
1275diff --git a/dist/Formulas/Math.d.ts b/dist/Formulas/Math.d.ts
1276new file mode 100644
1277index 0000000..f025f31
1278--- /dev/null
1279+++ b/dist/Formulas/Math.d.ts
1280@@ -0,0 +1,590 @@
1281+/**
1282+ * Returns the greatest common divisor of one or more integers.
1283+ * @param values - The values or ranges whose factors to consider in a calculation to find the greatest common divisor.
1284+ * @returns {number} greatest common divisor.
1285+ * @constructor
1286+ */
1287+declare let GCD: (...values: any[]) => any;
1288+/**
1289+ * Returns the least common multiple of one or more integers.
1290+ * @param values - The values or range whose factors to consider in a calculation to find the least common multiple.
1291+ * @returns {number}
1292+ * @constructor
1293+ */
1294+declare let LCM: (...values: any[]) => number;
1295+/**
1296+ * Returns the the logarithm of a specified Gamma function, base e (Euler's number).
1297+ * @param value - The input number. The natural logarithm of Gamma (value) will be returned. Must be positive.
1298+ * @returns {number}
1299+ * @constructor
1300+ */
1301+declare let GAMMALN: (value: any) => number;
1302+/**
1303+ * Returns the absolute value of a number.
1304+ * @param value to get the absolute value of.
1305+ * @returns {number} absolute value
1306+ * @constructor
1307+ */
1308+declare let ABS: (value: any) => number;
1309+/**
1310+ * Returns the inverse cosine of a value, in radians.
1311+ * @param value The value for which to calculate the inverse cosine. Must be between -1 and 1, inclusive.
1312+ * @returns {number} inverse cosine of value
1313+ * @constructor
1314+ */
1315+declare let ACOS: (value: any) => number;
1316+/**
1317+ * Returns the inverse hyperbolic cosine of a number.
1318+ * @param value The value for which to calculate the inverse hyperbolic cosine. Must be greater than or equal to 1.
1319+ * @returns {number} to find the inverse hyperbolic cosine for.
1320+ * @constructor
1321+ */
1322+declare let ACOSH: (value: any) => number;
1323+/**
1324+ * Calculate the hyperbolic arc-cotangent of a value
1325+ * @param value number not between -1 and 1 inclusively.
1326+ * @returns {number} hyperbolic arc-cotangent
1327+ * @constructor
1328+ */
1329+declare let ACOTH: (value: any) => number;
1330+/**
1331+ * Returns the inverse sine of a value, in radians.
1332+ * @param value The value for which to calculate the inverse sine. Must be between -1 and 1, inclusive.
1333+ * @returns {number} inverse sine of input value
1334+ * @constructor
1335+ */
1336+declare let ASIN: (value: any) => number;
1337+/**
1338+ * Returns the inverse hyperbolic sine of a number.
1339+ * @param value The value for which to calculate the inverse hyperbolic sine.
1340+ * @returns {number} inverse hyperbolic sine of input
1341+ * @constructor
1342+ */
1343+declare let ASINH: (value: any) => number;
1344+/**
1345+ * Returns the inverse tangent of a value, in radians.
1346+ * @param value The value for which to calculate the inverse tangent.
1347+ * @returns {number} inverse tangent of input value
1348+ * @constructor
1349+ */
1350+declare let ATAN: (value: any) => number;
1351+/**
1352+ * Returns the angle between the x-axis and a line segment from the origin (0,0) to specified coordinate pair (x,y), in radians.
1353+ * @param x The x coordinate of the endpoint of the line segment for which to calculate the angle from the x-axis.
1354+ * @param y The y coordinate of the endpoint of the line segment for which to calculate the angle from the x-axis.
1355+ * @returns {number} angle in radians
1356+ * @constructor
1357+ */
1358+declare let ATAN2: (x: any, y: any) => number;
1359+/**
1360+ * Returns the inverse hyperbolic tangent of a number.
1361+ * @param value The value for which to calculate the inverse hyperbolic tangent. Must be between -1 and 1, exclusive.
1362+ * @returns {number} inverse hyperbolic tangent of input
1363+ * @constructor
1364+ */
1365+declare let ATANH: (value: any) => number;
1366+/**
1367+ * Rounds a number up to the nearest even integer.
1368+ * @param value The value to round to the next greatest even number.
1369+ * @returns {number} next greatest even number
1370+ * @constructor
1371+ */
1372+declare let EVEN: (value: any) => number;
1373+/**
1374+ * Returns the result of the modulo operator, the remainder after a division operation.
1375+ * @param dividend The number to be divided to find the remainder.
1376+ * @param divisor The number to divide by.
1377+ * @returns {number}
1378+ * @constructor
1379+ */
1380+declare let MOD: (dividend: any, divisor: any) => number;
1381+/**
1382+ * Rounds a number up to the nearest odd integer.
1383+ * @param value The value to round to the next greatest odd number.
1384+ * @returns {number} value to round up to next greatest odd number.
1385+ * @constructor
1386+ */
1387+declare let ODD: (value: any) => number;
1388+/**
1389+ * Returns a number raised to a power.
1390+ * @param base - The number to raise to the exponent power.
1391+ * @param exponent - The exponent to raise base to.
1392+ * @returns {number} resulting number
1393+ * @constructor
1394+ */
1395+declare let POWER: (base: any, exponent: any) => number;
1396+/**
1397+ * Returns the sum of a series of numbers and/or cells.
1398+ * @param values The first number or range to add together.
1399+ * @returns {number} The sum of the series
1400+ * @constructor
1401+ */
1402+declare let SUM: (...values: any[]) => number;
1403+/**
1404+ * Returns the positive square root of a positive number.
1405+ * @param value - The number for which to calculate the positive square root.
1406+ * @returns {number} square root
1407+ * @constructor
1408+ */
1409+declare let SQRT: (value: any) => number;
1410+/**
1411+ * Returns the positive square root of the product of Pi and the given positive number.
1412+ * @param value - The number which will be multiplied by Pi and have the product's square root returned
1413+ * @returns {number} the positive square root of the product of Pi and the given positive number.
1414+ * @constructor
1415+ */
1416+declare let SQRTPI: (value: any) => number;
1417+/**
1418+ * Returns the cosine of an angle provided in radians.
1419+ * @param value - The angle to find the cosine of, in radians.
1420+ * @returns {number} cosine of angle
1421+ * @constructor
1422+ */
1423+declare let COS: (value: any) => number;
1424+/**
1425+ * Returns the hyperbolic cosine of any real number.
1426+ * @param value - Any real value to calculate the hyperbolic cosine of.
1427+ * @returns {number} the hyperbolic cosine of the input
1428+ * @constructor
1429+ */
1430+declare let COSH: (value: any) => number;
1431+/**
1432+ * Returns the cotangent of any real number. Defined as cot(x) = 1 / tan(x).
1433+ * @param value - number to calculate the cotangent for
1434+ * @returns {number} cotangent
1435+ * @constructor
1436+ */
1437+declare let COT: (value: any) => number;
1438+/**
1439+ * Return the hyperbolic cotangent of a value, defined as coth(x) = 1 / tanh(x).
1440+ * @param value - value to calculate the hyperbolic cotangent value of
1441+ * @returns {number} hyperbolic cotangent
1442+ * @constructor
1443+ */
1444+declare let COTH: (value: any) => number;
1445+/**
1446+ * Rounds a number down to the nearest integer that is less than or equal to it.
1447+ * @param value - The value to round down to the nearest integer.
1448+ * @returns {number} Rounded number
1449+ * @constructor
1450+ */
1451+declare let INT: (value: any) => number;
1452+/**
1453+ * Checks whether the provided value is even.
1454+ * @param value - The value to be verified as even.
1455+ * @returns {boolean} whether this value is even or not
1456+ * @constructor
1457+ */
1458+declare let ISEVEN: (value: any) => boolean;
1459+/**
1460+ * Checks whether the provided value is odd.
1461+ * @param value - The value to be verified as odd.
1462+ * @returns {boolean} whether this value is odd or not
1463+ * @constructor
1464+ */
1465+declare let ISODD: (value: any) => boolean;
1466+/**
1467+ * Returns the sine of an angle provided in radians.
1468+ * @param value - The angle to find the sine of, in radians.
1469+ * @returns {number} Sine of angle.
1470+ * @constructor
1471+ */
1472+declare let SIN: (value: any) => number;
1473+/**
1474+ * Returns the hyperbolic sine of any real number.
1475+ * @param value - real number to find the hyperbolic sine of
1476+ * @returns {number} hyperbolic sine
1477+ * @constructor
1478+ */
1479+declare let SINH: (value: any) => number;
1480+/**
1481+ * The value Pi.
1482+ * @returns {number} Pi.
1483+ * @constructor
1484+ */
1485+declare let PI: () => number;
1486+/**
1487+ * Returns the the logarithm of a number, base 10.
1488+ * @param value - The value for which to calculate the logarithm, base 10.
1489+ * @returns {number} logarithm of the number, in base 10.
1490+ * @constructor
1491+ */
1492+declare let LOG10: (value: any) => number;
1493+/**
1494+ * Returns the the logarithm of a number given a base.
1495+ * @param value - The value for which to calculate the logarithm given base.
1496+ * @param base - The base to use for calculation of the logarithm. Defaults to 10.
1497+ * @returns {number}
1498+ * @constructor
1499+ */
1500+declare let LOG: (value: any, base: any) => number;
1501+/**
1502+ * Returns the logarithm of a number, base e (Euler's number).
1503+ * @param value - The value for which to calculate the logarithm, base e.
1504+ * @returns {number} logarithm calculated
1505+ * @constructor
1506+ */
1507+declare let LN: (value: any) => number;
1508+/**
1509+ * Returns the tangent of an angle provided in radians.
1510+ * @param value - The angle to find the tangent of, in radians.
1511+ * @returns {number} tangent in radians
1512+ * @constructor
1513+ */
1514+declare let TAN: (value: any) => number;
1515+/**
1516+ * Returns the hyperbolic tangent of any real number.
1517+ * @param value - Any real value to calculate the hyperbolic tangent of.
1518+ * @returns {number} hyperbolic tangent
1519+ * @constructor
1520+ */
1521+declare let TANH: (value: any) => number;
1522+/**
1523+ * Rounds a number up to the nearest integer multiple of specified significance.
1524+ * @param value The value to round up to the nearest integer multiple of factor.
1525+ * @param factor - [ OPTIONAL ] The number to whose multiples value will be rounded.
1526+ * @returns {number}
1527+ * @constructor
1528+ */
1529+declare let CEILING: (value: any, factor?: any) => number;
1530+/**
1531+ * Rounds a number down to the nearest integer multiple of specified significance.
1532+ * @param value - The value to round down to the nearest integer multiple of factor.
1533+ * @param factor - The number to whose multiples value will be rounded.
1534+ * @returns {number}
1535+ * @constructor
1536+ */
1537+declare let FLOOR: (value: any, factor?: any) => number;
1538+/**
1539+ * Returns one value if a logical expression is TRUE and another if it is FALSE.
1540+ * @param logicalExpression - An expression or reference to a cell containing an expression that represents some logical value, i.e. TRUE or FALSE.
1541+ * @param valueIfTrue - The value the function returns if logical_expression is TRUE
1542+ * @param valueIfFalse - The value the function returns if logical_expression is FALSE.
1543+ * @returns one value if a logical expression is TRUE and another if it is FALSE.
1544+ * @constructor
1545+ */
1546+declare let IF: (logicalExpression: any, valueIfTrue: any, valueIfFalse: any) => any;
1547+/**
1548+ * Returns a conditional count across a range.
1549+ * @param range - The range that is tested against criterion., value[1];
1550+ * @param criteria - The pattern or test to apply to range. If the range to check against contains text,
1551+ * this must be a string. It can be a comparison based string (e.g. "=1", "<1", ">=1") or it can be a wild-card string,
1552+ * in which * matches any number of characters, and ? matches the next character. Both ? and * can be escaped by placing
1553+ * a ~ in front of them. If it is neither, it will compared with values in the range using equality comparison.
1554+ * @returns {number}
1555+ * @constructor
1556+ */
1557+declare let COUNTIF: (range: any, criteria: any) => number;
1558+/**
1559+ * Returns the count of a range depending on multiple criteria.
1560+ * @param values[0] criteria_range1 - The range to check against criterion1.
1561+ * @param values[1] criterion1 - The pattern or test to apply to criteria_range1.
1562+ * @param values[2...N] Repeated sets of ranges and criterion to check.
1563+ * @returns {number} count
1564+ * @constructor
1565+ */
1566+declare let COUNTIFS: (...values: any[]) => number;
1567+/**
1568+ * Rounds a number to a certain number of decimal places according to standard rules.
1569+ * @param value - The value to round to places number of places.
1570+ * @param places - The number of decimal places to which to round.
1571+ * @returns {number}
1572+ * @constructor
1573+ */
1574+declare let ROUND: (value: any, places: any) => number;
1575+/**
1576+ * Rounds a number to a certain number of decimal places, always rounding down to the next valid increment.
1577+ * @param value - The value to round to places number of places, always rounding down.
1578+ * @param places - (optional) The number of decimal places to which to round.
1579+ * @returns {number}
1580+ * @constructor
1581+ */
1582+declare let ROUNDDOWN: (value: any, places?: any) => number;
1583+/**
1584+ * Rounds a number to a certain number of decimal places, always rounding up to the next valid increment.
1585+ * @param value - The value to round to places number of places, always rounding up.
1586+ * @param places - (optional) The number of decimal places to which to round.
1587+ * @returns {number}
1588+ * @constructor
1589+ */
1590+declare let ROUNDUP: (value: any, places?: any) => number;
1591+/**
1592+ * Returns a conditional sum across a range.
1593+ * @param range - The range which is tested against criterion.
1594+ * @param criteria - The pattern or test to apply to range. If the range to check against contains text, this must be a
1595+ * string. It can be a comparison based string (e.g. "=1", "<1", ">=1") or it can be a wild-card string, in which *
1596+ * matches any number of characters, and ? matches the next character. Both ? and * can be escaped by placing a ~ in
1597+ * front of them.
1598+ * @param sumRange - (optional) The range to be summed, if different from range.
1599+ * @returns {number}
1600+ * @constructor
1601+ */
1602+declare let SUMIF: (range: any, criteria: any, sumRange?: any) => number;
1603+/**
1604+ * Returns the sum of the squares of a series of numbers and/or cells.
1605+ * @param values The values or range(s) whose squares to add together.
1606+ * @returns {number} the sum of the squares if the input.
1607+ * @constructor
1608+ */
1609+declare let SUMSQ: (...values: any[]) => number;
1610+/**
1611+ * Returns the product of two numbers. Equivalent to the `*` operator.
1612+ * @param factor1 - The first multiplicand.
1613+ * @param factor2 - The second multiplicand.
1614+ * @constructor
1615+ */
1616+declare let MULTIPLY: (factor1: any, factor2: any) => number;
1617+/**
1618+ * Returns the result of the first number minus the second number. Equivalent to the `-` operator.
1619+ * @param one - The first number.
1620+ * @param two - the second number.
1621+ * @returns {number}
1622+ * @constructor
1623+ */
1624+declare let MINUS: (one: any, two: any) => number;
1625+/**
1626+ * Returns true if two specified values are equal and true otherwise. Equivalent to the "=" operator.
1627+ * @param one - First value to check.
1628+ * @param two - Second value to check.
1629+ * @returns {boolean} true if values are equal, false if they are not equal.
1630+ * @constructor
1631+ */
1632+declare let EQ: (one: any, two: any) => boolean;
1633+/**
1634+ * Returns true if the first argument is strictly greater than the second, and false otherwise. Equivalent to the `>`
1635+ * operator.
1636+ * @param one - The value to test as being greater than `two`.
1637+ * @param two - The second value.
1638+ * @returns {boolean}
1639+ * @constructor
1640+ */
1641+declare let GT: (one: any, two: any) => boolean;
1642+/**
1643+ * Returns true if the first argument is greater than or equal to the second, and false otherwise. Equivalent to the
1644+ * `>=` operator.
1645+ * @param one - The value to test as being greater than or equal to `two`.
1646+ * @param two -The second value.
1647+ * @returns {boolean}
1648+ * @constructor
1649+ */
1650+declare let GTE: (one: any, two: any) => boolean;
1651+/**
1652+ * Returns true if the first argument is strictly less than the second, and false otherwise. Equivalent to the `<`
1653+ * operator.
1654+ * @param one - The value to test as being less than `two`.
1655+ * @param two - The second value.
1656+ * @returns {boolean}
1657+ * @constructor
1658+ */
1659+declare let LT: (one: any, two: any) => boolean;
1660+/**
1661+ * Returns true if the first argument is less than or equal to the second, and true otherwise. Equivalent to the
1662+ * `<=` operator.
1663+ * @param one - The value to test as being less than or equal to `two`.
1664+ * @param two - The second value.
1665+ * @constructor
1666+ */
1667+declare let LTE: (one: any, two: any) => boolean;
1668+/**
1669+ * Returns "TRUE" if two specified values are not equal and "FALSE" otherwise. Equivalent to the "<>" operator.
1670+ * @param one - The value to test as being not equal to `two`.
1671+ * @param two - The second valud.
1672+ * @returns {boolean}
1673+ * @constructor
1674+ */
1675+declare let NE: (one: any, two: any) => boolean;
1676+/**
1677+ * Returns one number divided by another. Equivalent to the `/` operator.
1678+ * @param dividend - The number to be divided.
1679+ * @param divisor - The number to divide by, cannot be 0.
1680+ * @returns {number} result of dividend / divisor.
1681+ * @constructor
1682+ */
1683+declare let DIVIDE: (dividend: any, divisor: any) => number;
1684+/**
1685+ * Returns a random number between 0 inclusive and 1 exclusive.
1686+ * @returns {number}
1687+ * @constructor
1688+ */
1689+declare let RAND: () => number;
1690+/**
1691+ * Returns a uniformly random integer between two values, inclusive on high and low. Values with decimal parts may be
1692+ * used for low and/or high; this will cause the least and greatest possible values to be the next integer greater than
1693+ * low and/or the next integer less than high, respectively.
1694+ * @param low - lowest value
1695+ * @param high - highest value
1696+ * @returns {number} between low and high.
1697+ * @constructor
1698+ */
1699+declare let RANDBETWEEN: (low: any, high: any) => number;
1700+/**
1701+ * Given an input number, returns `-1` if it is negative, `1` if positive, and `0` if it is zero.
1702+ * @param value - The value to check the sign for
1703+ * @returns {number} `-1` if it is negative, `1` if positive, and `0` if it is zero.
1704+ * @constructor
1705+ */
1706+declare let SIGN: (value: any) => 0 | 1 | -1;
1707+/**
1708+ * Truncates a number to a certain number of significant digits by omitting less significant digits.
1709+ * @param value - The value to be truncated.
1710+ * @param places - [ OPTIONAL - 0 by default ] - The number of significant digits to the right of the decimal point to
1711+ * retain. If places is greater than the number of significant digits in value, value is returned without modification.
1712+ * places may be negative, in which case the specified number of digits to the left of the decimal place are changed to
1713+ * zero. All digits to the right of the decimal place are discarded. If all digits of value are changed to zero, TRUNC
1714+ * simply returns 0.
1715+ * @returns {number} after truncation
1716+ * @constructor
1717+ */
1718+declare let TRUNC: (value: any, places?: any) => number;
1719+/**
1720+ * Converts an angle value in degrees to radians.
1721+ * @param angle - The angle to convert from degrees to radians.
1722+ * @returns {number} radians
1723+ * @constructor
1724+ */
1725+declare let RADIANS: (angle: any) => number;
1726+/**
1727+ * Converts an angle value in radians to degrees.
1728+ * @param angle - The angle to convert from radians to degrees.
1729+ * @returns {number} degrees
1730+ * @constructor
1731+ */
1732+declare let DEGREES: (angle: any) => number;
1733+/**
1734+ * Returns the complementary Gauss error function of a value.
1735+ * @param value - The number for which to calculate the complementary Gauss error function.
1736+ * @returns {number} complementary Gauss error function of a value
1737+ * @constructor
1738+ */
1739+declare let ERFC: (value: any) => number;
1740+/**
1741+ * Returns the error function integrated between lower_limit and upper_limit.
1742+ * @param lowerLimit - The lower bound for integrating ERF.
1743+ * @param upperLimit - [Optional]. The upper bound for integrating ERF. If omitted, ERF integrates between
1744+ * zero and lower_limit.
1745+ * @returns {number} error function integrated between lower_limit and upper_limit
1746+ * @constructor
1747+ */
1748+declare let ERF: (lowerLimit: any, upperLimit?: any) => number;
1749+/**
1750+ * Calculates the sum of the sums of the squares of values in two arrays.
1751+ * @param arrayX - The array or range of values whose squares will be added to the squares of corresponding
1752+ * entries in arrayY and added together.
1753+ * @param arrayY - The array or range of values whose squares will be added to the squares of corresponding
1754+ * entries in arrayX and added together.
1755+ * @returns {number} sum of the sums of the squares
1756+ * @constructor
1757+ */
1758+declare let SUMX2PY2: (arrayX: any, arrayY: any) => number;
1759+/**
1760+ * Calculates the sum of the differences of the squares of values in two arrays.
1761+ * @param arrayX - The array or range of values whose squares will be reduced by the squares of corresponding
1762+ * entries in array_y and added together.
1763+ * @param arrayY - The array or range of values whose squares will be subtracted from the squares of
1764+ * corresponding entries in array_x and added together.
1765+ * @returns {number} sum of the differences of the squares
1766+ * @constructor
1767+ */
1768+declare let SUMX2MY2: (arrayX: any, arrayY: any) => number;
1769+/**
1770+ * Counts the number of unique values in a list of specified values and ranges.
1771+ * @param values The values or ranges to consider for uniqueness. Supports an arbitrary number of arguments for this
1772+ * function.
1773+ * @returns {number} of unique values passed in.
1774+ * @constructor
1775+ */
1776+declare let COUNTUNIQUE: (...values: any[]) => number;
1777+/**
1778+ * Calculates the sum of the products of corresponding entries in two equal-sized arrays or ranges.
1779+ * @param values Arrays or ranges whose entries will be multiplied with corresponding entries in the second such array
1780+ * or range.
1781+ * @returns {number} sum of the products
1782+ * @constructor
1783+ */
1784+declare let SUMPRODUCT: (...values: any[]) => number;
1785+/**
1786+ * Returns the number of ways to choose some number of objects from a pool of a given size of objects.
1787+ * @param m - The size of the pool of objects to choose from.
1788+ * @param k - The number of objects to choose.
1789+ * @returns {number} number of ways
1790+ * @constructor
1791+ */
1792+declare let COMBIN: (m: any, k: any) => number;
1793+/**
1794+ * Multiply a series of numbers together.
1795+ * @param values - values or range of values to multiply by each other.
1796+ * @constructor
1797+ */
1798+declare let PRODUCT: (...values: any[]) => number;
1799+/**
1800+ * Divide one number by another
1801+ * @param dividend - number to be divided by the divisor.
1802+ * @param divisor - number to divide the dividend.
1803+ * @returns {number}
1804+ * @constructor
1805+ */
1806+declare let QUOTIENT: (dividend: any, divisor: any) => number;
1807+/**
1808+ * Returns a value, but does nothing to it. If given a range, will return first value.
1809+ * @param value to return
1810+ * @returns any value
1811+ * @constructor
1812+ */
1813+declare let UPLUS: (value: any) => any;
1814+/**
1815+ * Returns the same number, but with the sign reversed.
1816+ * @param value to reverse the sign on
1817+ * @returns {number}
1818+ * @constructor
1819+ */
1820+declare let UMINUS: (value: any) => number;
1821+/**
1822+ * Rounds a number to the nearest integer multiple of another.
1823+ * @param value - value to round.
1824+ * @param factor - multiple.
1825+ * @returns {number}
1826+ * @constructor
1827+ */
1828+declare let MROUND: (value: any, factor: any) => number;
1829+/**
1830+ * Calculates the double-factorial of a number.
1831+ * @param value - value or reference to calculate.
1832+ * @returns {number}
1833+ * @constructor
1834+ */
1835+declare let FACTDOUBLE: (value: any) => any;
1836+/**
1837+ * Returns a value as a percentage where 100 is 1.0, and 0 is 0.
1838+ * @param value - To convert.
1839+ * @returns {number}
1840+ * @constructor
1841+ */
1842+declare let UNARY_PERCENT: (value: any) => number;
1843+/**
1844+ * Returns the factorial of the sum of the arguments divided by the product of the factorials of the arguments.
1845+ * @param values - Range of numbers.
1846+ * @returns {number}
1847+ * @constructor
1848+ */
1849+declare let MULTINOMIAL: (...values: any[]) => number;
1850+/**
1851+ * Returns a sum of powers of the number x in accordance with the following formula.
1852+ * @param x - The number as an independent variable.
1853+ * @param n - The starting power.
1854+ * @param m - The number to increment by
1855+ * @param coefficients - A series of coefficients. For each coefficient the series sum is extended by one section. You
1856+ * can only enter coefficients using cell references.
1857+ * @returns {number}
1858+ * @constructor
1859+ */
1860+declare let SERIESSUM: (x: any, n: any, m: any, coefficients: any) => number;
1861+/**
1862+ * Calculates subtotals. If a range already contains subtotals, these are not used for further calculations.
1863+ * @param functionCode - A value that stands for another function: 1=AVERAGE, 2=COUNT, 3=COUNTA, 4=MAX, 5=MIN,
1864+ * 6=PRODUCT, 7=STDEV, 8=STDEVP, 9=SUM, 10=VAR, 11=VARP.
1865+ * @param values - The ranges whose cells are included.
1866+ * @returns {Array}
1867+ * @constructor
1868+ */
1869+declare let SUBTOTAL: (functionCode: any, ...values: any[][]) => any;
1870+export { ABS, ACOS, ACOSH, ACOTH, ASIN, ASINH, ATAN, ATAN2, ATANH, COT, COTH, COSH, COS, COUNTUNIQUE, EVEN, ERF, ERFC, INT, ISEVEN, ISODD, MOD, ODD, SIN, SINH, SUM, SQRT, SQRTPI, PI, POWER, LOG, LOG10, LN, MULTIPLY, MINUS, TAN, TANH, ROUND, ROUNDDOWN, ROUNDUP, SUMPRODUCT, SUMIF, SUMSQ, SUMX2MY2, SUMX2PY2, FLOOR, IF, COUNTIF, COUNTIFS, CEILING, TRUNC, RADIANS, DEGREES, COMBIN, RAND, RANDBETWEEN, SIGN, DIVIDE, EQ, GT, GTE, LT, LTE, NE, GCD, LCM, GAMMALN, PRODUCT, QUOTIENT, UPLUS, UMINUS, MROUND, FACTDOUBLE, UNARY_PERCENT, MULTINOMIAL, SERIESSUM, SUBTOTAL };
1871diff --git a/dist/Formulas/Math.js b/dist/Formulas/Math.js
1872index e082514..7eae70d 100644
1873--- a/dist/Formulas/Math.js
1874+++ b/dist/Formulas/Math.js
1875@@ -684,7 +684,7 @@ var COUNTIFS = function () {
1876 }
1877 var criteriaEvaluation = criteriaEvaluationFunctions[x + 1];
1878 if (otherCriteriaEvaluationSuccessfulSoFar) {
1879- if (!criteriaEvaluation(filteredValues[x][i])) {
1880+ if (!criteriaEvaluation(filteredValues[x][i])) { // evaluate THIS value with x+1 index, which is criteria.
1881 otherCriteriaEvaluationSuccessfulSoFar = false;
1882 }
1883 }
1884diff --git a/dist/Formulas/Range.d.ts b/dist/Formulas/Range.d.ts
1885new file mode 100644
1886index 0000000..4d50241
1887--- /dev/null
1888+++ b/dist/Formulas/Range.d.ts
1889@@ -0,0 +1,32 @@
1890+/**
1891+ * Calculates the frequency distribution of a range into specified classes or "bins".
1892+ * @param range - to get frequency for.
1893+ * @param bins - or classes.
1894+ * @returns {Array<number>}
1895+ * @constructor
1896+ * TODO: Returns ColumnArray (values stacked in Y-direction)
1897+ */
1898+declare let FREQUENCY: (range: any, bins: any) => number[];
1899+/**
1900+ * Given partial data with exponential growth, fits and ideal exponential growth trend, and predicts future values. For
1901+ * more information see: https://xkcd.com/1102/
1902+ * @param knownY - The range or array containing the dependent, y, values that are known, and will be used to fit an
1903+ * ideal exponential growth curve.
1904+ * @param knownX - OPTIONAL - The range or values of the independent variables that correspond to knownY.
1905+ * @param newX - OPTIONAL - The range, values, or data-points to return the y-values on the ideal curve fit.
1906+ * @param shouldUseConstant - OPTIONAL - True by default. Given an exponential function y = b*m^x, should this function
1907+ * calculate b?
1908+ * @returns {Array}
1909+ * @constructor
1910+ * TODO: Returns RowArray (values stacked in X-direction)
1911+ */
1912+declare let GROWTH: (knownY: any, knownX?: any, newX?: any, shouldUseConstant?: any) => any[];
1913+/**
1914+ * Returns the parameters of a linear trend.
1915+ * @param dataY - The range of data representing Y values.
1916+ * @param dataX - The range of data representing X values.
1917+ * @returns {number[]}
1918+ * @constructor
1919+ */
1920+declare let LINEST: (dataY: any, dataX: any) => number[];
1921+export { FREQUENCY, GROWTH, LINEST };
1922diff --git a/dist/Formulas/Statistical.d.ts b/dist/Formulas/Statistical.d.ts
1923new file mode 100644
1924index 0000000..4107e57
1925--- /dev/null
1926+++ b/dist/Formulas/Statistical.d.ts
1927@@ -0,0 +1,536 @@
1928+/**
1929+ * Calculates the sum of squares of deviations based on a sample.
1930+ * @param values - The values or ranges of the sample.
1931+ * @returns {number} sum of squares of deviations
1932+ * @constructor
1933+ */
1934+declare let DEVSQ: (...values: any[]) => number;
1935+/**
1936+ * Returns the median value in a numeric dataset.
1937+ * @param values - The value(s) or range(s) to consider when calculating the median value.
1938+ * @returns {number} the median value of the dataset
1939+ * @constructor
1940+ */
1941+declare let MEDIAN: (...values: any[]) => number;
1942+/**
1943+ * Returns the numerical average value in a dataset, ignoring text.
1944+ * @param values - The values or ranges to consider when calculating the average value.
1945+ * @returns {number} the average value of this dataset.
1946+ * @constructor
1947+ */
1948+declare let AVERAGE: (...values: any[]) => number;
1949+/**
1950+ * Calculates the average of the magnitudes of deviations of data from a dataset's mean.
1951+ * @param values - The value(s) or range(s)
1952+ * @returns {number} average of the magnitudes of deviations of data from a dataset's mean
1953+ * @constructor
1954+ */
1955+declare let AVEDEV: (...values: any[]) => number;
1956+/**
1957+ * Returns the numerical average value in a dataset, coercing text values in ranges to 0 values.
1958+ * @param values - value(s) or range(s) to consider when calculating the average value.
1959+ * @returns {number} the numerical average value in a dataset
1960+ * @constructor
1961+ */
1962+declare let AVERAGEA: (...values: any[]) => number;
1963+/**
1964+ * Calculates r, the Pearson product-moment correlation coefficient of a dataset. Any text encountered in the arguments
1965+ * will be ignored. CORREL is synonymous with PEARSON.
1966+ * @param dataY - The range representing the array or matrix of dependent data.
1967+ * @param dataX - The range representing the array or matrix of independent data.
1968+ * @returns {number} the Pearson product-moment correlation coefficient.
1969+ * @constructor
1970+ */
1971+declare let CORREL: (dataY: any, dataX: any) => number;
1972+/**
1973+ * Calculates r, the Pearson product-moment correlation coefficient of a dataset. Any text encountered in the arguments
1974+ * will be ignored. PEARSON is synonymous with CORREL.
1975+ * @param dataY - The range representing the array or matrix of dependent data.
1976+ * @param dataX - The range representing the array or matrix of independent data.
1977+ * @returns {number} the Pearson product-moment correlation coefficient.
1978+ * @constructor
1979+ */
1980+declare let PEARSON: (dataY: any, dataX: any) => any;
1981+/**
1982+ * Returns the value of the exponential distribution function with a specified lambda at a specified value.
1983+ * @param x - The input to the exponential distribution function. If cumulative is TRUE then EXPONDIST returns
1984+ * the cumulative probability of all values up to x.
1985+ * @param lambda - The lambda to specify the exponential distribution function.
1986+ * @param cumulative - Whether to use the exponential cumulative distribution.
1987+ * @returns {number} value of the exponential distribution function.
1988+ * @constructor
1989+ */
1990+declare let EXPONDIST: (x: any, lambda: any, cumulative: any) => number;
1991+/**
1992+ * Calculates the left-tailed F probability distribution (degree of diversity) for two data sets with given input x.
1993+ * Alternately called Fisher-Snedecor distribution or Snecdor's F distribution.
1994+ * @param x - The input to the F probability distribution function. The value at which to evaluate the function.
1995+ * Must be a positive number.
1996+ * @param degreesFreedom1 - The numerator degrees of freedom.
1997+ * @param degreesFreedom2 - The denominator degrees of freedom.
1998+ * @param cumulative - Logical value that determines the form of the function. If true returns the cumulative
1999+ * distribution function. If false returns the probability density function.
2000+ * @returns {number|boolean} left-tailed F probability distribution
2001+ * @constructor
2002+ * TODO: This function should be stricter in its return type.
2003+ */
2004+declare let FDIST$LEFTTAILED: (x: any, degreesFreedom1: any, degreesFreedom2: any, cumulative: any) => number | boolean;
2005+/**
2006+ * Returns the inverse of the (right-tailed) F probability distribution. If p = FDIST(x,...), then FINV(p,...) = x. The
2007+ * F distribution can be used in an F-test that compares the degree of variability in two data sets.
2008+ * @param probability - A probability associated with the F cumulative distribution.
2009+ * @param degFreedom1 - Required. The numerator degrees of freedom.
2010+ * @param degFreedom2 - Required. The denominator degrees of freedom.
2011+ * @returns {number} inverse of the (right-tailed) F probability distribution
2012+ * @constructor
2013+ */
2014+declare let FINV: (probability: any, degFreedom1: any, degFreedom2: any) => number;
2015+/**
2016+ * Returns the Fisher transformation of a specified value.
2017+ * @param value - The value for which to calculate the Fisher transformation.
2018+ * @returns {number} Fisher transformation
2019+ * @constructor
2020+ */
2021+declare let FISHER: (value: any) => number;
2022+/**
2023+ * Returns the inverse Fisher transformation of a specified value.
2024+ * @param value - The value for which to calculate the inverse Fisher transformation.
2025+ * @returns {number} inverse Fisher transformation
2026+ * @constructor
2027+ */
2028+declare let FISHERINV: (value: any) => number;
2029+/**
2030+ * Returns the maximum value in a numeric dataset.
2031+ * @param values - The values or range(s) to consider when calculating the maximum value.
2032+ * @returns {number} the maximum value of the dataset
2033+ * @constructor
2034+ */
2035+declare let MAX: (...values: any[]) => number;
2036+/**
2037+ * Returns the maximum numeric value in a dataset.
2038+ * @param values - The value(s) or range(s) to consider when calculating the maximum value.
2039+ * @returns {number} maximum value of the dataset
2040+ * @constructor
2041+ */
2042+declare let MAXA: (...values: any[]) => number;
2043+/**
2044+ * Returns the minimum value in a numeric dataset.
2045+ * @param values - The value(s) or range(s) to consider when calculating the minimum value.
2046+ * @returns {number} the minimum value of the dataset
2047+ * @constructor
2048+ */
2049+declare let MIN: (...values: any[]) => number;
2050+/**
2051+ * Returns the minimum numeric value in a dataset.
2052+ * @param values - The value(s) or range(s) to consider when calculating the minimum value.
2053+ * @returns {number} the minimum value in the dataset
2054+ * @constructor
2055+ */
2056+declare let MINA: (...values: any[]) => number;
2057+/**
2058+ * Returns the average of a range depending on criteria.
2059+ * @param criteriaRange - The range to check against criterion.
2060+ * @param criterion - The pattern or test to apply to criteria_range.
2061+ * @param averageRange - [optional] The range to average. If not included, criteria_range is used for the
2062+ * average instead.
2063+ * @returns {number}
2064+ * @constructor
2065+ * TODO: This needs to also accept a third parameter "average_range"
2066+ */
2067+declare let AVERAGEIF: (criteriaRange: any, criterion: any, averageRange?: any) => number;
2068+/**
2069+ * Returns the a count of the number of numeric values in a dataset.
2070+ * @param values - The values or ranges to consider when counting.
2071+ * @returns {number} number of numeric values in a dataset.
2072+ * @constructor
2073+ */
2074+declare let COUNT: (...values: any[]) => number;
2075+/**
2076+ * Returns the a count of the number of values in a dataset.
2077+ * @param values - The values or ranges to consider when counting.
2078+ * @returns {number} number of values in a dataset.
2079+ * @constructor
2080+ */
2081+declare let COUNTA: (...values: any[]) => number;
2082+/**
2083+ * Returns the value at a given percentile of a set of data.
2084+ * @param data - The array or range containing the dataset to consider.
2085+ * @param percent - percentile to be calculated and returned.
2086+ * @returns {number}
2087+ * @constructor
2088+ */
2089+declare let PERCENTILE: (data: any, percent: any) => number;
2090+/**
2091+ * Returns a value nearest to a specified quartile of a set of data.
2092+ * @param data - The array or range containing the set of data to consider.
2093+ * @param quartile - Which quartile value to return. 0 returns 0 percent mark, 1 returns 25 percent mark, 2 returns 50
2094+ * percent mark, 3 returns 75 percent mark, 4 returns 100 percent mark.
2095+ * @constructor
2096+ */
2097+declare let QUARTILE: (data: any, quartile: any) => number;
2098+/**
2099+ * Calculates the standard deviation of a range, ignoring string values, regardless of whether they can be converted to
2100+ * numbers.
2101+ * @param values - Range of sample.
2102+ * @returns {number}
2103+ * @constructor
2104+ */
2105+declare let STDEV: (...values: any[]) => number;
2106+/**
2107+ * Calculates the standard deviation of a range, converting string values to numbers, if possible. If a value cannot
2108+ * be converted to a number, formula will throw a value error.
2109+ * @param values - Range of sample.
2110+ * @returns {number}
2111+ * @constructor
2112+ */
2113+declare let STDEVA: (...values: any[]) => number;
2114+/**
2115+ * Calculates the standard deviation of an entire population, ignoring string values, regardless of whether they can be
2116+ * converted to numbers.
2117+ * @param values - Entire sample.
2118+ * @returns {number}
2119+ * @constructor
2120+ */
2121+declare let STDEVP: (...values: any[]) => number;
2122+/**
2123+ * Calculates the standard deviation of an entire population, including text and boolean values, if possible. If a value
2124+ * cannot be converted to a number, formula will throw a value error.
2125+ * @param values - Entire sample.
2126+ * @returns {number}
2127+ * @constructor
2128+ */
2129+declare let STDEVPA: (...values: any[]) => number;
2130+/**
2131+ * Returns the mean value of a range excluding some percentage of the range on the high and low ends of the range.
2132+ * @param range - Array or range to consider.
2133+ * @param percent - The portion of the data to exclude on both ends of the range.
2134+ * @returns {number}
2135+ * @constructor
2136+ */
2137+declare let TRIMMEAN: (range: any, percent: any) => number;
2138+/**
2139+ * Returns the slope of the line calculated from linear regression of a range. Any text values passed in will be ignored
2140+ * @param rangeY - The range or array representing the dependent data.
2141+ * @param rangeX - The range or array representing the independent data.
2142+ * @constructor
2143+ */
2144+declare let SLOPE: (rangeY: any, rangeX: any) => number;
2145+/**
2146+ * Returns the normalized equivalent of a random variable given mean and standard deviation of the distribution.
2147+ * @param value - Value to be standardized.
2148+ * @param meanValue - Arithmetic mean of the distribution
2149+ * @param std - The standard deviation of the distribution or range.
2150+ * @returns {number}
2151+ * @constructor
2152+ */
2153+declare let STANDARDIZE: (value: any, meanValue: any, std: any) => number;
2154+/**
2155+ * Returns the Nth smallest value in the range, ignoring text values.
2156+ * @param range - Range or data-set to consider.
2157+ * @param n - N in 'Nth'.
2158+ * @constructor
2159+ */
2160+declare let SMALL: (range: any, n: any) => number;
2161+/**
2162+ * Returns the Nth largest value in the range, ignoring text values.
2163+ * @param range - Range or data-set to consider.
2164+ * @param n - N in 'Nth'.
2165+ * @constructor
2166+ */
2167+declare let LARGE: (range: any, n: any) => number;
2168+/**
2169+ * Returns the kurtosis of a data set or range. Ignores text values.
2170+ * @param values - data set or range to calculate. Must be at least 4 values.
2171+ * @returns {number}
2172+ * @constructor
2173+ */
2174+declare let KURT: (...values: any[]) => number;
2175+/**
2176+ * Calculates the y-value at which a line will intersect the y-axis by using known x-values and y-values. Any text
2177+ * values will be ignored.
2178+ * @param rangeY - Dependent range of values.
2179+ * @param rangeX - Independent range of values.
2180+ * @returns {number}
2181+ * @constructor
2182+ */
2183+declare let INTERCEPT: (rangeY: any, rangeX: any) => number;
2184+/**
2185+ * Calculates the a future value using existing x-values and y-values. Any text values will be ignored.
2186+ * @param x - The data point for which you would like to predict the value.
2187+ * @param rangeY - Dependent range of values.
2188+ * @param rangeX - Independent range of values.
2189+ * @returns {number}
2190+ * @constructor
2191+ * TODO: This formula will fail to parse since the first argument is followed by an argument that is an array.
2192+ * TODO (continued) This is a known issue.
2193+ */
2194+declare let FORECAST: (x: any, rangeY: any, rangeX: any) => number;
2195+/**
2196+ * Returns the Poisson distribution for the given number. Functions the same as POISSON.DIST.
2197+ * @param x - Number to use.
2198+ * @param meanValue - The middle value for the Poisson distribution.
2199+ * @param cumulative - [OPTIONAL] - 0 calculates the density function, 1 calculates the distribution. Defaults to 0.
2200+ * @returns {number}
2201+ * @constructor
2202+ */
2203+declare let POISSON: (x: any, meanValue: any, cumulative?: any) => number;
2204+/**
2205+ * Returns the percentage rank (percentile) of the given value in a sample. Functions the same as PERCENTRANK.INC.
2206+ * @param data - The array or range of data in the sample.
2207+ * @param x - The value.
2208+ * @param significance - [OPTIONAL] - The number of significant digits to use in the calculation. Defaults to 3.
2209+ * @returns {number}
2210+ * @constructor
2211+ */
2212+declare let PERCENTRANK: (data: any, x: any, significance?: any) => number;
2213+/**
2214+ * Returns the percentage rank (percentile) from 0 to 1 exclusive for a value in a sample.
2215+ * @param data - The array or range of data in the sample.
2216+ * @param x - The value
2217+ * @param significance - [OPTIONAL] - The number of significant digits to use in the calculation. Defaults to 3.
2218+ * @returns {number}
2219+ * @constructor
2220+ */
2221+declare let PERCENTRANK$EXC: (data: any, x: any, significance?: any) => number;
2222+/**
2223+ * Returns the inverse of the standard normal distribution for the given number.
2224+ * @param probability - The probability value.
2225+ * @returns {number}
2226+ * @constructor
2227+ */
2228+declare let NORMSINV: (probability: any) => any;
2229+/**
2230+ * Returns the standard normal cumulative distribution for the given number.
2231+ * @param z - Value to use in calculation.
2232+ * @returns {number}
2233+ * @constructor
2234+ */
2235+declare let NORMSDIST: (z: any) => number;
2236+/**
2237+ * Returns the normal distribution for the given number in the distribution.
2238+ * @param x - Value to use.
2239+ * @param meanValue - The mean value of the distribution.
2240+ * @param standDev - The standard deviation of the distribution.
2241+ * @param cumulative - 0 calculates the density function, 1 calculates the distribution.
2242+ * @returns {number}
2243+ * @constructor
2244+ */
2245+declare let NORMDIST: (x: any, meanValue: any, standDev: any, cumulative: any) => number;
2246+/**
2247+ * Returns the inverse of the normal distribution for the given number in the distribution.
2248+ * @param probability - Number in the distribution.
2249+ * @param meanVal - The mean value in the normal distribution.
2250+ * @param standDev - The standard deviation of the normal distribution.
2251+ * @returns {number}
2252+ * @constructor
2253+ */
2254+declare let NORMINV: (probability: any, meanVal: any, standDev: any) => any;
2255+/**
2256+ * Returns the negative binomial distribution.
2257+ * @param k - The value returned for unsuccessful tests.
2258+ * @param r - The value returned for successful tests.
2259+ * @param p - The probability of the success of an attempt, between 0 and 1 inclusively.
2260+ * @returns {number}
2261+ * @constructor
2262+ */
2263+declare let NEGBINOMDIST: (k: any, r: any, p: any) => number;
2264+/**
2265+ * Returns the geometric mean of a sample.
2266+ * @param values - The numerical arguments or ranges that represent a random sample.
2267+ * @returns {number}
2268+ * @constructor
2269+ */
2270+declare let GEOMEAN: (...values: any[]) => number;
2271+/**
2272+ * Returns the harmonic mean of a data set.
2273+ * @param values - The numerical arguments or ranges that represent a sample.
2274+ * @returns {number}
2275+ * @constructor
2276+ */
2277+declare let HARMEAN: (...values: any[]) => number;
2278+/**
2279+ * Returns the (1-alpha) confidence interval for a normal distribution.
2280+ * @param alpha - The level of the confidence interval
2281+ * @param standDev - The standard deviation for the total population
2282+ * @param size - The size of the population.
2283+ * @returns {number}
2284+ * @constructor
2285+ */
2286+declare let CONFIDENCE: (alpha: any, standDev: any, size: any) => number;
2287+/**
2288+ * Returns the individual term binomial distribution probability.
2289+ * @param successes - The number of successes in a set of trials.
2290+ * @param trials - The number of independent trials.
2291+ * @param probability - The probability of success on each trial.
2292+ * @param cumulative - 0 calculates the probability of a single event, 1 calculates the cumulative probability.
2293+ * @returns {number}
2294+ * @constructor
2295+ */
2296+declare let BINOMDIST: (successes: any, trials: any, probability: any, cumulative: any) => number;
2297+/**
2298+ * Returns the covariance of the product of paired deviations.
2299+ * @param dataY - The first range of data.
2300+ * @param dataX - The second range of data.
2301+ * @returns {number}
2302+ * @constructor
2303+ */
2304+declare let COVAR: (dataY: any, dataX: any) => number;
2305+/**
2306+ * Returns the values of the Weibull distribution for the given number.
2307+ * @param x - Number to use in calculation.
2308+ * @param shape - The Alpha parameter of the Weibull distribution. Should be greater than 0.
2309+ * @param scale - The Beta parameter of the Weibull distribution. Should be greater than 0.
2310+ * @param cumulative - Indicates the type of function: If 0 the form of the function is calculated, if 1 then the
2311+ * distribution is calculated.
2312+ * @returns {number}
2313+ * @constructor
2314+ */
2315+declare let WEIBULL: (x: any, shape: any, scale: any, cumulative: any) => number;
2316+/**
2317+ * Estimate the variance based on the entire population. Text will be converted to numbers, if possible.
2318+ * @param values - Values of population.
2319+ * @returns {number}
2320+ * @constructor
2321+ */
2322+declare let VARPA: (...values: any[]) => number;
2323+/**
2324+ * Estimate the variance based on the entire population.
2325+ * @param values - Values of entire population.
2326+ * @returns {number}
2327+ * @constructor
2328+ */
2329+declare let VARP: (...values: any[]) => number;
2330+/**
2331+ * Estimate the variance based on a sample.
2332+ * @param values
2333+ * @returns {number}
2334+ * @constructor
2335+ */
2336+declare let VARA: (...values: any[]) => number;
2337+/**
2338+ * Estimate the variance based on a sample.
2339+ * @param values - Values in sample.
2340+ * @constructor
2341+ */
2342+declare let VAR: (...values: any[]) => number;
2343+/**
2344+ * Returns the number of permutations for a given number of objects.
2345+ * @param total - The total number of objects
2346+ * @param objects - The number of objects in each permutation.
2347+ * @returns {number}
2348+ * @constructor
2349+ */
2350+declare let PERMUT: (total: any, objects: any) => number;
2351+/**
2352+ * Returns the square of the Pearson correlation coefficient based on the given values.
2353+ * @param rangeY - An array or range of data points.
2354+ * @param rangeX - An array or range of data points.
2355+ * @returns {number}
2356+ * @constructor
2357+ */
2358+declare let RSQ: (rangeY: any, rangeX: any) => number;
2359+/**
2360+ * Returns the skewness of a distribution.
2361+ * @param values - The numerical values or range.
2362+ * @returns {number}
2363+ * @constructor
2364+ */
2365+declare let SKEW: (...values: any[]) => number;
2366+/**
2367+ * Returns the standard error of the predicted y value for each x in the regression. Text values will be ignored.
2368+ * @param rangeY - An array or range of data points.
2369+ * @param rangeX - An array or range of data points.
2370+ * @returns {number}
2371+ * @constructor
2372+ */
2373+declare let STEYX: (rangeY: any, rangeX: any) => number;
2374+/**
2375+ * Returns the probability that values in a range are between two limits. Data is the array or range of data in the
2376+ * sample.
2377+ * @param range - The array or range of data in the sample.
2378+ * @param probability - The array or range of the corresponding probabilities
2379+ * @param start - The start value of the interval whose probabilities are to be summed.
2380+ * @param end - [OPTIONAL] - The end value of the interval whose probabilities are to be summed. If this parameter is
2381+ * missing, the probability for the start value is calculated
2382+ * @returns {number}
2383+ * @constructor
2384+ */
2385+declare let PROB: (range: any, probability: any, start: any, end?: any) => any;
2386+/**
2387+ * Returns the most commonly occurring value in a range.
2388+ * @param values - Range(s) or values to consider.
2389+ * @returns {number}
2390+ * @constructor
2391+ */
2392+declare let MODE: (...values: any[]) => any;
2393+/**
2394+ * Returns the position of a given entry in the entire list, measured either from top to bottom or bottom to top.
2395+ * @param value - Value to find the rank of.
2396+ * @param data - Values or range of the data-set.
2397+ * @param isAscending - [OPTIONAL] The type of rank: 0 to rank from the highest, 1 to rank from the lowest. Defaults to
2398+ * 0.
2399+ * @returns {number}
2400+ * @constructor
2401+ */
2402+declare let RANK: (value: any, data: any, isAscending?: any) => number;
2403+/**
2404+ * Returns the position of a given entry in the entire list, measured either from top to bottom or bottom to top. If
2405+ * more than one value exists in the same data-set, the average range of the values will be returned.
2406+ * @param value - Value to find the rank of.
2407+ * @param data - Values or range of the data-set.
2408+ * @param isAscending - [OPTIONAL] The type of rank: 0 to rank from the highest, 1 to rank from the lowest. Defaults to
2409+ * 0.
2410+ * @returns {number}
2411+ * @constructor
2412+ */
2413+declare let RANK$AVG: (value: any, data: any, isAscending?: any) => number;
2414+/**
2415+ * Returns the position of a given entry in the entire list, measured either from top to bottom or bottom to top. If
2416+ * there is more than one entry of the same value in the dataset, the top rank of the entries will be returned.
2417+ * @param value - Value to find the rank of.
2418+ * @param data - Values or range of the data-set.
2419+ * @param isAscending - [OPTIONAL] The type of rank: 0 to rank from the highest, 1 to rank from the lowest. Defaults to
2420+ * 0.
2421+ * @returns {number}
2422+ * @constructor
2423+ */
2424+declare let RANK$EQ: (value: any, data: any, isAscending?: any) => number;
2425+/**
2426+ * Returns the cumulative lognormal distribution for the given number.
2427+ * @param x - The probability value.
2428+ * @param meanValue - The mean value of the standard logarithmic distribution.
2429+ * @param standardDev - The standard deviation of the standard logarithmic distribution.
2430+ * @returns {number}
2431+ * @constructor
2432+ */
2433+declare let LOGNORMDIST: (x: any, meanValue: any, standardDev: any) => number;
2434+/**
2435+ * Returns the t-distribution for the given number.
2436+ * @param x - Value to use in calculation.
2437+ * @param degreesOfFreedom - The number of degrees of freedom for the t-distribution.
2438+ * @param tails - 1 returns the one-tailed test, 2 returns the two-tailed test.
2439+ * @returns {number}
2440+ * @constructor
2441+ */
2442+declare let TDIST: (x: any, degreesOfFreedom: any, tails: any) => number;
2443+/**
2444+ * Returns the hypergeometric distribution. X is the number of results achieved in the random sample.
2445+ * @param numberOfSuccesses - The number of results achieved in the random sample.
2446+ * @param numberOfDraws - The size of the random sample.
2447+ * @param successesInPop - The number of possible results in the total population.
2448+ * @param populationSize - The size of the total population.
2449+ * @returns {number}
2450+ * @constructor
2451+ */
2452+declare let HYPGEOMDIST: (numberOfSuccesses: any, numberOfDraws: any, successesInPop: any, populationSize: any) => number;
2453+/**
2454+ * Returns the two-tailed P value of a z test with standard distribution.
2455+ * @param range - Te array of the data.
2456+ * @param value - The value to be tested.
2457+ * @param stdDev - [OPTIONAL] The standard deviation of the total population. If this argument is missing, the standard
2458+ * deviation of the sample is processed.
2459+ * @returns {number}
2460+ * @constructor
2461+ */
2462+declare let ZTEST: (range: any, value: any, stdDev?: any) => number;
2463+export { AVERAGE, AVERAGEA, AVERAGEIF, AVEDEV, CORREL, COUNT, COUNTA, PEARSON, MEDIAN, DEVSQ, EXPONDIST, FDIST$LEFTTAILED, FINV, FISHER, FISHERINV, MAX, MAXA, MIN, MINA, QUARTILE, PERCENTILE, STDEV, STDEVA, STDEVP, STDEVPA, TRIMMEAN, SLOPE, STANDARDIZE, SMALL, LARGE, KURT, INTERCEPT, FORECAST, POISSON, PERCENTRANK, PERCENTRANK$EXC, NORMSINV, NORMSDIST, NORMDIST, NORMINV, NEGBINOMDIST, GEOMEAN, HARMEAN, CONFIDENCE, BINOMDIST, COVAR, WEIBULL, VARPA, VARP, VARA, VAR, PERMUT, RSQ, SKEW, STEYX, PROB, MODE, RANK, RANK$AVG, RANK$EQ, LOGNORMDIST, TDIST, HYPGEOMDIST, ZTEST };
2464diff --git a/dist/Formulas/Text.d.ts b/dist/Formulas/Text.d.ts
2465new file mode 100644
2466index 0000000..b5089d7
2467--- /dev/null
2468+++ b/dist/Formulas/Text.d.ts
2469@@ -0,0 +1,205 @@
2470+/**
2471+ * Computes the value of a Roman numeral.
2472+ * @param text - The Roman numeral to format, whose value must be between 1 and 3999, inclusive.
2473+ * @returns {number} value in integer format
2474+ * @constructor
2475+ */
2476+declare let ARABIC: (text?: any) => number;
2477+/**
2478+ * Convert a number into a character according to the current Unicode table.
2479+ * @param value - The number of the character to look up from the current Unicode table in decimal format.
2480+ * @returns {string} character corresponding to Unicode number
2481+ * @constructor
2482+ */
2483+declare let CHAR: (value: any) => string;
2484+/**
2485+ * Returns the numeric Unicode map value of the first character in the string provided.
2486+ * @param value - The string whose first character's Unicode map value will be returned.
2487+ * @returns {number} number of the first character's Unicode value
2488+ * @constructor
2489+ */
2490+declare let CODE: (value: any) => number;
2491+/**
2492+ * Divides text around a specified character or string, and puts each fragment into a separate cell in the row.
2493+ * @param text - The text to divide.
2494+ * @param delimiter - The character or characters to use to split text.
2495+ * @param splitByEach - [optional] Whether or not to divide text around each character contained in
2496+ * delimiter.
2497+ * @returns {Array<string>} containing the split
2498+ * @constructor
2499+ * TODO: At some point this needs to return a more complex type than Array. Needs to return a type that has a dimension.
2500+ */
2501+declare let SPLIT: (text: any, delimiter: any, splitByEach?: any) => string[];
2502+/**
2503+ * Appends strings to one another.
2504+ * @param values - to append to one another. Must contain at least one value
2505+ * @returns {string} concatenated string
2506+ * @constructor
2507+ */
2508+declare let CONCATENATE: (...values: any[]) => string;
2509+/**
2510+ * Converts a numeric value to a different unit of measure.
2511+ * @param value - the numeric value in start_unit to convert to end_unit.
2512+ * @param startUnit - The starting unit, the unit currently assigned to value.
2513+ * @param endUnit - The unit of measure into which to convert value.
2514+ * @returns {number}
2515+ * @constructor
2516+ * TODO: Looking up units is not efficient at all. We should use an object instead of iterating through an array.
2517+ */
2518+declare let CONVERT: (value: any, startUnit: any, endUnit: any) => number;
2519+/**
2520+ * Removes leading and trailing spaces in a specified string.
2521+ * @param value - The string or reference to a cell containing a string to be trimmed.
2522+ * @returns {string}
2523+ * @constructor
2524+ */
2525+declare let TRIM: (value: any) => string;
2526+/**
2527+ * Converts text to lowercase.
2528+ * @param value - Text to convert.
2529+ * @constructor
2530+ */
2531+declare let LOWER: (value: any) => string;
2532+/**
2533+ * Converts text to uppercase.
2534+ * @param value - Text to convert.
2535+ * @constructor
2536+ */
2537+declare let UPPER: (value: any) => string;
2538+/**
2539+ * Returns string arguments as text, or the empty string if the value is not text.
2540+ * @param value - Value to return.
2541+ * @constructor
2542+ */
2543+declare let T: (value: any) => string;
2544+/**
2545+ * Converts a number into a Roman numeral.
2546+ * @param value - The value to convert. Must be between 0 and 3999.
2547+ * @constructor
2548+ * TODO: Second parameter should be 'rule_relaxation'.
2549+ */
2550+declare let ROMAN: (value: any) => string;
2551+/**
2552+ * Converts a number into text according to a given format.
2553+ * @param value - The value to be converted.
2554+ * @param format - Text which defines the format. "0" forces the display of zeros, while "#" suppresses the display of
2555+ * zeros. For example TEXT(22.1,"000.00") produces 022.10, while TEXT(22.1,"###.##") produces 22.1, and
2556+ * TEXT(22.405,"00.00") results in 22.41. To format days: "dddd" indicates full name of the day of the week, "ddd"
2557+ * short name of the day of the week, "dd" indicates the day of the month as two digits, "d" indicates day of the month
2558+ * as one or two digits, "mmmmm" indicates the first letter in the month of the year, "mmmm" indicates the full name of
2559+ * the month of the year, "mmm" indicates short name of the month of the year, "mm" indicates month of the year as two
2560+ * digits or the number of minutes in a time, depending on whether it follows yy or dd, or if it follows hh, "m" month
2561+ * of the year as one or two digits or the number of minutes in a time, depending on whether it follows yy or dd, or if
2562+ * it follows hh, "yyyy" indicates year as four digits, "yy" and "y" indicate year as two digits, "hh" indicates hour
2563+ * on a 24-hour clock, "h" indicates hour on a 12-hour clock, "ss.000" indicates milliseconds in a time, "ss" indicates
2564+ * seconds in a time, "AM/PM" or "A/P" indicate displaying hours based on a 12-hour clock and showing AM or PM
2565+ * depending on the time of day. Eg: `TEXT("01/09/2012 10:04:33AM", "mmmm-dd-yyyy, hh:mm AM/PM")` would result in
2566+ * "January-09-2012, 10:04 AM".
2567+ * @constructor
2568+ */
2569+declare let TEXT: (value: any, format: any) => string;
2570+/**
2571+ * Looks for a string of text within another string. Where to begin the search can also be defined. The search term can
2572+ * be a number or any string of characters. The search is case-sensitive.
2573+ * @param searchFor - The text to be found.
2574+ * @param searchIn - The text where the search takes place.
2575+ * @param startAt - [OPTIONAL defaults to 1] - The position in the text from which the search starts.
2576+ * @returns {number}
2577+ * @constructor
2578+ */
2579+declare let FIND: (searchFor: any, searchIn: any, startAt?: any) => any;
2580+/**
2581+ * Concatenates the values of one or more arrays using a specified delimiter.
2582+ * @param delimiter - The string to place between the values.
2583+ * @param values - The values to be appended using the delimiter.
2584+ * @returns {string}
2585+ * @constructor
2586+ */
2587+declare let JOIN: (delimiter: any, ...values: any[]) => string;
2588+/**
2589+ * Returns the length of a string including spaces.
2590+ * @param value - The text whose length is to be determined.
2591+ * @constructor
2592+ */
2593+declare let LEN: (value: any) => any;
2594+/**
2595+ * Returns the first character or characters in a text string.
2596+ * @param text - The text where the initial partial words are to be determined.
2597+ * @param numberOfCharacters [OPTIONAL] - The number of characters for the start text. If this parameter is not defined,
2598+ * one character is returned.
2599+ * @returns {string}
2600+ * @constructor
2601+ */
2602+declare let LEFT: (text: any, numberOfCharacters?: any) => any;
2603+/**
2604+ * Defines the last character or characters in a text string.
2605+ * @param text - The text where the initial partial words are to be determined.
2606+ * @param numberOfCharacters [OPTIONAL] - The number of characters for the start text. If this parameter is not defined,
2607+ * one character is returned.
2608+ * @returns {string}
2609+ * @constructor
2610+ */
2611+declare let RIGHT: (text: any, numberOfCharacters?: any) => any;
2612+/**
2613+ * Returns the position of a text segment within a character string. The start of the search can be set as an option.
2614+ * The search text can be a number or any sequence of characters. The search is not case-sensitive.
2615+ * @param findText - The text to be searched for.
2616+ * @param withinText - The text where the search will take place
2617+ * @param position - [OPTIONAL default 1] The position in the text where the search is to start.
2618+ * @constructor
2619+ */
2620+declare let SEARCH: (findText: any, withinText: any, position?: any) => any;
2621+/**
2622+ * Repeats a character string by the given number of copies.
2623+ * @param text - The text to be repeated.
2624+ * @param numberOfReps - The number of repetitions
2625+ * @constructor
2626+ */
2627+declare let REPT: (text: any, numberOfReps: any) => string;
2628+/**
2629+ * Converts a value into a number if possible.
2630+ * @param value - The value to convert to a number.
2631+ * @returns {number}
2632+ * @constructor
2633+ */
2634+declare let VALUE: (value: any) => number;
2635+/**
2636+ * Removes all non-printing characters from the string.
2637+ * @param text - The text from which to remove all non-printable characters.
2638+ * @returns {string}
2639+ * @constructor
2640+ */
2641+declare let CLEAN: (text: any) => any;
2642+/**
2643+ * Returns a text segment of a character string. The parameters specify the starting position and the number of
2644+ * characters.
2645+ * @param text - The text containing the characters to extract.
2646+ * @param start - The position of the first character in the text to extract.
2647+ * @param number - The number of characters in the part of the text.
2648+ * @returns {string}
2649+ * @constructor
2650+ */
2651+declare let MID: (text: any, start: any, number: any) => any;
2652+declare let PROPER: (text: any) => any;
2653+/**
2654+ * Replaces part of a text string with a different text string. This function can be used to replace both characters and
2655+ * numbers (which are automatically converted to text). The result of the function is always displayed as text.
2656+ * @param text - The text of which a part will be replaced.
2657+ * @param position - The position within the text where the replacement will begin.
2658+ * @param length - The number of characters in text to be replaced.
2659+ * @param newText - The text which replaces text.
2660+ * @constructor
2661+ */
2662+declare let REPLACE: (text: any, position: any, length: any, newText: any) => any;
2663+/**
2664+ * Substitutes new text for old text in a string.
2665+ * @param text - The text in which text segments are to be exchanged.
2666+ * @param searchFor - The text segment that is to be replaced (a number of times)
2667+ * @param replaceWith - The text that is to replace the text segment.
2668+ * @param occurrence - [OPTIONAL] - Indicates how many occurrences of the search text are to be replaced. If this
2669+ * parameter is missing, the search text is replaced throughout.
2670+ * @returns {string}
2671+ * @constructor
2672+ */
2673+declare let SUBSTITUTE: (text: any, searchFor: any, replaceWith: any, occurrence?: any) => any;
2674+export { ARABIC, CHAR, CODE, SPLIT, CONCATENATE, CONVERT, TRIM, LOWER, UPPER, T, ROMAN, TEXT, FIND, JOIN, LEN, LEFT, RIGHT, SEARCH, REPT, VALUE, CLEAN, MID, PROPER, REPLACE, SUBSTITUTE };
2675diff --git a/dist/Formulas/Text.js b/dist/Formulas/Text.js
2676index 141bd6c..0e7801a 100644
2677--- a/dist/Formulas/Text.js
2678+++ b/dist/Formulas/Text.js
2679@@ -44,7 +44,7 @@ exports.ARABIC = ARABIC;
2680 var CHAR = function (value) {
2681 ArgsChecker_1.ArgsChecker.checkLength(arguments, 1, "CHAR");
2682 var n = TypeConverter_1.TypeConverter.firstValueAsNumber(value);
2683- if (n < 1 || n > 1114112) {
2684+ if (n < 1 || n > 1114112) { //limit
2685 throw new Errors_1.NumError("Function CHAR parameter 1 value " + n + " is out of range.");
2686 }
2687 return String.fromCharCode(n);
2688diff --git a/dist/Parser/DataStore.d.ts b/dist/Parser/DataStore.d.ts
2689new file mode 100644
2690index 0000000..a3fc3bc
2691--- /dev/null
2692+++ b/dist/Parser/DataStore.d.ts
2693@@ -0,0 +1,17 @@
2694+/**
2695+ * Holds cell values, and allows for the updating and manipulation of those cells.
2696+ */
2697+import { Cell } from "../Cell";
2698+/**
2699+ * Cell DataStore that stores cells in memory.
2700+ */
2701+declare class DataStore {
2702+ /**
2703+ * Holds cells inside an object for quick access.
2704+ */
2705+ data: Object;
2706+ getCell(key: string): Cell;
2707+ addCell(cell: Cell): Cell;
2708+ getDependencies(id: string): any[];
2709+}
2710+export { DataStore };
2711diff --git a/dist/Parser/DataStore.js b/dist/Parser/DataStore.js
2712index 3a3c5bc..8aae0a4 100644
2713--- a/dist/Parser/DataStore.js
2714+++ b/dist/Parser/DataStore.js
2715@@ -7,7 +7,7 @@ var Cell_1 = require("../Cell");
2716 /**
2717 * Cell DataStore that stores cells in memory.
2718 */
2719-var DataStore = (function () {
2720+var DataStore = /** @class */ (function () {
2721 function DataStore() {
2722 /**
2723 * Holds cells inside an object for quick access.
2724diff --git a/dist/Parser/Parser.d.ts b/dist/Parser/Parser.d.ts
2725new file mode 100644
2726index 0000000..e63dbc7
2727--- /dev/null
2728+++ b/dist/Parser/Parser.d.ts
2729@@ -0,0 +1,10 @@
2730+/**
2731+ * Creates a new FormulaParser, which parses formulas, and does minimal error handling.
2732+ *
2733+ * @param handler should be a Sheet, since the parser needs access to fixedCellValue, cellValue, cellRangeValue, and
2734+ * fixedCellRangeValue
2735+ * @returns formula parser instance for use with parser.js
2736+ * @constructor
2737+ */
2738+declare let FormulaParser: (handler: any) => any;
2739+export { FormulaParser };
2740diff --git a/dist/Parser/Parser.js b/dist/Parser/Parser.js
2741index 78513a8..5497377 100644
2742--- a/dist/Parser/Parser.js
2743+++ b/dist/Parser/Parser.js
2744@@ -427,7 +427,7 @@ var Parser = (function () {
2745 // Reduce: enough tokens have been gathered to reduce input through evaluation.
2746 // Accept: return.
2747 switch (action[0]) {
2748- case ParserConstants_1.SHIFT:
2749+ case ParserConstants_1.SHIFT: // Shift
2750 stack.push(symbol);
2751 semanticValueStack.push(lexer.yytext);
2752 locationStack.push(lexer.yylloc);
2753@@ -438,7 +438,7 @@ var Parser = (function () {
2754 if (Formulas_1.Formulas.isTryCatchFormula(lexer.yytext)) {
2755 catchFailuresOn = true;
2756 }
2757- if (!preErrorSymbol) {
2758+ if (!preErrorSymbol) { // normal execution/no error
2759 yyleng = lexer.yyleng;
2760 yytext = lexer.yytext;
2761 yylineno = lexer.yylineno;
2762@@ -453,7 +453,7 @@ var Parser = (function () {
2763 preErrorSymbol = null;
2764 }
2765 break;
2766- case ParserConstants_1.REDUCE:
2767+ case ParserConstants_1.REDUCE: // Reduce
2768 // console.log("REDUCE", "literal", lexer.yytext, " symbol", symbol, " symbol name", SYMBOL_INDEX_TO_NAME[symbol], " action", action,
2769 // " stack", stack, " semanticValueStack", semanticValueStack);
2770 var currentProduction = ParserConstants_1.PRODUCTIONS[action[1]];
2771@@ -754,7 +754,11 @@ var Parser = (function () {
2772 return this.conditions.INITIAL.rules;
2773 }
2774 },
2775- options: {},
2776+ options: {
2777+ // backtrack_lexer?
2778+ // ranges?
2779+ // flex?
2780+ },
2781 mapRuleIndexToSymbolEnumeration: function (ruleIndex) {
2782 switch (ruleIndex) {
2783 case 0 /* WhiteSpace */:
2784diff --git a/dist/Parser/ParserConstants.d.ts b/dist/Parser/ParserConstants.d.ts
2785new file mode 100644
2786index 0000000..0162cd8
2787--- /dev/null
2788+++ b/dist/Parser/ParserConstants.d.ts
2789@@ -0,0 +1,51 @@
2790+import { Symbol } from "./Symbols";
2791+import { ReductionPair } from "./ReductionPair";
2792+import { RULES } from "./Rules";
2793+/**
2794+ * Actions to take when processing tokens one by one. We're always either taking the next token, reducing our current
2795+ * tokens, or accepting and returning.
2796+ */
2797+declare const SHIFT = 1;
2798+declare const REDUCE = 2;
2799+declare const ACCEPT = 3;
2800+declare const PRODUCTIONS: ReductionPair[];
2801+declare const SYMBOL_NAME_TO_INDEX: {
2802+ "$accept": Symbol;
2803+ "$end": Symbol;
2804+ "error": Symbol;
2805+ "expressions": Symbol;
2806+ "expression": Symbol;
2807+ "EOF": Symbol;
2808+ "variableSequence": Symbol;
2809+ "number": Symbol;
2810+ "STRING": Symbol;
2811+ "&": Symbol;
2812+ "=": Symbol;
2813+ "+": Symbol;
2814+ "(": Symbol;
2815+ ")": Symbol;
2816+ "<": Symbol;
2817+ ">": Symbol;
2818+ "-": Symbol;
2819+ "*": Symbol;
2820+ "/": Symbol;
2821+ "^": Symbol;
2822+ "FUNCTION": Symbol;
2823+ "expseq": Symbol;
2824+ "cell": Symbol;
2825+ "FIXEDCELL": Symbol;
2826+ ":": Symbol;
2827+ "CELL": Symbol;
2828+ "ARRAY": Symbol;
2829+ ";": Symbol;
2830+ ",": Symbol;
2831+ "VARIABLE": Symbol;
2832+ "DECIMAL": Symbol;
2833+ "NUMBER": Symbol;
2834+ "%": Symbol;
2835+ "#": Symbol;
2836+ "!": Symbol;
2837+};
2838+declare const SYMBOL_INDEX_TO_NAME: {};
2839+declare const ACTION_TABLE: any[];
2840+export { ACTION_TABLE, RULES, REDUCE, ACCEPT, SHIFT, SYMBOL_INDEX_TO_NAME, SYMBOL_NAME_TO_INDEX, PRODUCTIONS };
2841diff --git a/dist/Parser/ReduceActions.d.ts b/dist/Parser/ReduceActions.d.ts
2842new file mode 100644
2843index 0000000..e8e7964
2844--- /dev/null
2845+++ b/dist/Parser/ReduceActions.d.ts
2846@@ -0,0 +1,44 @@
2847+declare const enum ReduceActions {
2848+ NoAction = 0,
2849+ ReturnLast = 1,
2850+ CallVariable = 2,
2851+ AsNumber = 5,
2852+ AsString = 6,
2853+ Ampersand = 7,
2854+ Equals = 8,
2855+ Plus = 9,
2856+ LastExpression = 10,
2857+ LTE = 11,
2858+ GTE = 12,
2859+ NotEqual = 13,
2860+ GT = 15,
2861+ LT = 16,
2862+ Minus = 17,
2863+ Multiply = 18,
2864+ Divide = 19,
2865+ ToPower = 20,
2866+ InvertNumber = 21,
2867+ ToNumberNANAsZero = 22,
2868+ CallFunctionLastBlank = 23,
2869+ CallFunctionLastTwoInStack = 24,
2870+ CellValueAsExpression = 25,
2871+ ErrorAndContinue = 26,
2872+ ErrorAndContinueWithOtherErrors = 27,
2873+ FixedCellValue = 28,
2874+ FixedCellRangeValue = 29,
2875+ CellValue = 30,
2876+ CellRangeValue = 31,
2877+ EnsureIsArray = 32,
2878+ EnsureYYTextIsArray = 33,
2879+ ReduceInt = 34,
2880+ ReducePercent = 35,
2881+ WrapCurrentTokenAsArray = 36,
2882+ EnsureLastTwoINArrayAndPush = 37,
2883+ ReflexiveReduce = 38,
2884+ ReduceFloat = 39,
2885+ ReducePrevAsPercent = 40,
2886+ ReduceLastThreeA = 41,
2887+ ReduceLastThreeB = 42,
2888+ AsError = 43,
2889+}
2890+export { ReduceActions };
2891diff --git a/dist/Parser/ReductionPair.d.ts b/dist/Parser/ReductionPair.d.ts
2892new file mode 100644
2893index 0000000..da3ee86
2894--- /dev/null
2895+++ b/dist/Parser/ReductionPair.d.ts
2896@@ -0,0 +1,19 @@
2897+/**
2898+ * Represents the length to reduce the stack by, and the replacement symbol that will replace those tokens in the stack.
2899+ */
2900+declare class ReductionPair {
2901+ private lengthToReduceStackBy;
2902+ private replacementSymbol;
2903+ constructor(replacementSymbol: number, length: number);
2904+ /**
2905+ * Get the number representing the length to reduce the stack by.
2906+ * @returns {number}
2907+ */
2908+ getLengthToReduceStackBy(): number;
2909+ /**
2910+ * Get the replacement token index.
2911+ * @returns {number}
2912+ */
2913+ getReplacementSymbol(): number;
2914+}
2915+export { ReductionPair };
2916diff --git a/dist/Parser/ReductionPair.js b/dist/Parser/ReductionPair.js
2917index ce872ec..b82afd0 100644
2918--- a/dist/Parser/ReductionPair.js
2919+++ b/dist/Parser/ReductionPair.js
2920@@ -3,7 +3,7 @@ exports.__esModule = true;
2921 /**
2922 * Represents the length to reduce the stack by, and the replacement symbol that will replace those tokens in the stack.
2923 */
2924-var ReductionPair = (function () {
2925+var ReductionPair = /** @class */ (function () {
2926 function ReductionPair(replacementSymbol, length) {
2927 this.lengthToReduceStackBy = length;
2928 this.replacementSymbol = replacementSymbol;
2929diff --git a/dist/Parser/RuleIndex.d.ts b/dist/Parser/RuleIndex.d.ts
2930new file mode 100644
2931index 0000000..49aa888
2932--- /dev/null
2933+++ b/dist/Parser/RuleIndex.d.ts
2934@@ -0,0 +1,37 @@
2935+declare const enum RuleIndex {
2936+ WhiteSpace = 0,
2937+ DoubleQuotes = 1,
2938+ SingleQuotes = 2,
2939+ FormulaName = 3,
2940+ $A1Cell = 6,
2941+ A1Cell = 7,
2942+ FormulaNameSimple = 8,
2943+ Variable = 9,
2944+ SimpleVariable = 10,
2945+ Integer = 11,
2946+ SelfContainedArray = 12,
2947+ DollarSign = 13,
2948+ Ampersand = 14,
2949+ SingleWhitespace = 15,
2950+ Period = 16,
2951+ Colon = 17,
2952+ Semicolon = 18,
2953+ Comma = 19,
2954+ Asterisk = 20,
2955+ ForwardSlash = 21,
2956+ Minus = 22,
2957+ Plus = 23,
2958+ Caret = 24,
2959+ OpenParen = 25,
2960+ CloseParen = 26,
2961+ GreaterThan = 27,
2962+ LessThanSign = 28,
2963+ OpenDoubleQuote = 30,
2964+ OpenSingleQuote = 31,
2965+ ExclamationPoint = 32,
2966+ Equals = 33,
2967+ Percent = 34,
2968+ FullError = 35,
2969+ EndOfString = 36,
2970+}
2971+export { RuleIndex };
2972diff --git a/dist/Parser/Rules.d.ts b/dist/Parser/Rules.d.ts
2973new file mode 100644
2974index 0000000..24bfc04
2975--- /dev/null
2976+++ b/dist/Parser/Rules.d.ts
2977@@ -0,0 +1,2 @@
2978+declare let RULES: any[];
2979+export { RULES };
2980diff --git a/dist/Parser/Symbols.d.ts b/dist/Parser/Symbols.d.ts
2981new file mode 100644
2982index 0000000..0a29106
2983--- /dev/null
2984+++ b/dist/Parser/Symbols.d.ts
2985@@ -0,0 +1,39 @@
2986+declare enum Symbol {
2987+ Accept = 0,
2988+ End = 1,
2989+ Error = 2,
2990+ Expressions = 3,
2991+ Expression = 4,
2992+ EOF = 5,
2993+ VariableSeq = 6,
2994+ Number = 9,
2995+ String = 10,
2996+ Ampersand = 11,
2997+ Equals = 12,
2998+ Plus = 13,
2999+ LeftParen = 14,
3000+ RightParen = 15,
3001+ LessThan = 16,
3002+ GreaterThan = 17,
3003+ Minus = 19,
3004+ Asterisk = 20,
3005+ Divide = 21,
3006+ Carrot = 22,
3007+ Function = 23,
3008+ ExpressionSeq = 24,
3009+ Cell = 25,
3010+ FixedCell = 26,
3011+ Colon = 27,
3012+ CellUpper = 28,
3013+ Array = 29,
3014+ Semicolon = 30,
3015+ Comma = 31,
3016+ Variable = 32,
3017+ Decimal = 33,
3018+ NumberUpper = 34,
3019+ Percent = 35,
3020+ FullError = 36,
3021+ ExclamationPoint = 37,
3022+ ReflexiveReduce = 38,
3023+}
3024+export { Symbol };
3025diff --git a/dist/Sheet.d.ts b/dist/Sheet.d.ts
3026new file mode 100644
3027index 0000000..13519e1
3028--- /dev/null
3029+++ b/dist/Sheet.d.ts
3030@@ -0,0 +1,107 @@
3031+import { Cell } from "./Cell";
3032+/**
3033+ * Represents a spreadsheet parser and data-store that act together as a functional spreadsheet.
3034+ */
3035+declare class Sheet {
3036+ private parser;
3037+ private dataStore;
3038+ constructor();
3039+ /**
3040+ * Iterate through cells in the data-store, returning the collected cells in the range.
3041+ * @param origin
3042+ * @param startCell
3043+ * @param endCell
3044+ * @returns {{index: Array; value: Array}}
3045+ */
3046+ iterateCells(origin: any, startCell: any, endCell: any): {
3047+ index: any[];
3048+ value: any[];
3049+ };
3050+ /**
3051+ * Call function with given arguments. Used for calling formulas.
3052+ * @param fn
3053+ * @param args
3054+ * @returns {any}
3055+ */
3056+ callFunction(fn: any, args: any): any;
3057+ /**
3058+ * Call variable, which could include calling a function.
3059+ * @param args
3060+ * @returns {any}
3061+ */
3062+ callVariable(args: any): any;
3063+ /**
3064+ * Fetch cell, updating dependencies in process.
3065+ * @param origin
3066+ * @param cellId
3067+ * @returns {Cell}
3068+ */
3069+ cellValue(origin: any, cellId: any): Cell;
3070+ /**
3071+ * Get a range of cells.
3072+ * @param origin - the cell id in A1 notation from which this range is being referenced.
3073+ * @param {string} start - first cell coordinate (in A1 notation) in iteration
3074+ * @param {string} end - final cell coordinate (in A1 notation) in iteration
3075+ * @returns {Array}
3076+ */
3077+ cellRangeValue(origin: any, start: string, end: string): any[];
3078+ /**
3079+ * Get a fixed cell value.
3080+ * @param origin
3081+ * @param id
3082+ * @returns {Cell}
3083+ */
3084+ fixedCellValue(origin: any, id: any): Cell;
3085+ /**
3086+ * Get a fixed cell value range.
3087+ * @param origin
3088+ * @param start
3089+ * @param end
3090+ * @returns {Array}
3091+ */
3092+ fixedCellRangeValue(origin: any, start: any, end: any): any[];
3093+ /**
3094+ * Recalculate dependencies for a cell.
3095+ * @param {Cell} cell
3096+ */
3097+ private recalculateCellDependencies(cell);
3098+ /**
3099+ * Executes the formula in a cell.
3100+ * @param {Cell} cell
3101+ * @returns {{error: Error; result: any} | {error: any; result: any}}
3102+ */
3103+ private calculateCellFormula(cell);
3104+ /**
3105+ * Add a cell to the data-store, recording and updating dependencies if necessary.
3106+ * @param {Cell} cell
3107+ */
3108+ private registerCellInDataStore(cell);
3109+ /**
3110+ * Parse a formula for a given cellId. This involves all calculations and look-ups.
3111+ * @param formula
3112+ * @param cellId
3113+ * @returns {any}
3114+ */
3115+ parse(formula: any, cellId: any): {
3116+ error: any;
3117+ result: any;
3118+ };
3119+ /**
3120+ * Set a cell's value, by id.
3121+ * @param {string} id
3122+ * @param {string} value
3123+ */
3124+ setCell(id: string, value: string): void;
3125+ /**
3126+ * Get a cell from the data-store, returning null if a cell is undefined.
3127+ * @param {string} id
3128+ * @returns {Cell}
3129+ */
3130+ getCell(id: string): Cell;
3131+ /**
3132+ * Load an a matrix of cells into the data-store.
3133+ * @param {Array<Array<any>>} input
3134+ */
3135+ load(input: Array<Array<any>>): void;
3136+}
3137+export { Sheet };
3138diff --git a/dist/Sheet.js b/dist/Sheet.js
3139index f0027c6..a14720e 100644
3140--- a/dist/Sheet.js
3141+++ b/dist/Sheet.js
3142@@ -9,7 +9,7 @@ var MoreUtils_1 = require("./Utilities/MoreUtils");
3143 /**
3144 * Represents a spreadsheet parser and data-store that act together as a functional spreadsheet.
3145 */
3146-var Sheet = (function () {
3147+var Sheet = /** @class */ (function () {
3148 function Sheet() {
3149 this.parser = Parser_1.FormulaParser(this);
3150 this.dataStore = new DataStore_1.DataStore();
3151diff --git a/dist/Utilities/ArgsChecker.d.ts b/dist/Utilities/ArgsChecker.d.ts
3152new file mode 100644
3153index 0000000..f4dacc4
3154--- /dev/null
3155+++ b/dist/Utilities/ArgsChecker.d.ts
3156@@ -0,0 +1,28 @@
3157+/**
3158+ * Static class to check argument length within expected ranges when calling functions.
3159+ */
3160+declare class ArgsChecker {
3161+ /**
3162+ * Checks to see if the arguments are of the correct length.
3163+ * @param args to check length of
3164+ * @param length expected length
3165+ * @param caller name of the function calling this function, for use in error message formatting
3166+ */
3167+ static checkLength(args: Array<any> | IArguments, length: number, caller?: string): void;
3168+ /**
3169+ * Checks to see if the arguments are at least a certain length.
3170+ * @param args to check length of
3171+ * @param length expected length
3172+ * @param caller name of the function calling this function, for use in error message formatting
3173+ */
3174+ static checkAtLeastLength(args: any, length: number, caller?: string): void;
3175+ /**
3176+ * Checks to see if the arguments are within a max and min, inclusively
3177+ * @param args to check length of
3178+ * @param low least number of arguments
3179+ * @param high max number of arguments
3180+ * @param caller name of the function calling this function, for use in error message formatting
3181+ */
3182+ static checkLengthWithin(args: any, low: number, high: number, caller?: string): void;
3183+}
3184+export { ArgsChecker };
3185diff --git a/dist/Utilities/ArgsChecker.js b/dist/Utilities/ArgsChecker.js
3186index ff7c368..c7e9bb6 100644
3187--- a/dist/Utilities/ArgsChecker.js
3188+++ b/dist/Utilities/ArgsChecker.js
3189@@ -4,7 +4,7 @@ var Errors_1 = require("../Errors");
3190 /**
3191 * Static class to check argument length within expected ranges when calling functions.
3192 */
3193-var ArgsChecker = (function () {
3194+var ArgsChecker = /** @class */ (function () {
3195 function ArgsChecker() {
3196 }
3197 /**
3198diff --git a/dist/Utilities/CriteriaFunctionFactory.d.ts b/dist/Utilities/CriteriaFunctionFactory.d.ts
3199new file mode 100644
3200index 0000000..d3be549
3201--- /dev/null
3202+++ b/dist/Utilities/CriteriaFunctionFactory.d.ts
3203@@ -0,0 +1,16 @@
3204+/**
3205+ * Creates a criteria function to evaluate elements in a range in an *IF function.
3206+ */
3207+declare class CriteriaFunctionFactory {
3208+ /**
3209+ * If the criteria is a number, use strict equality checking.
3210+ * If the criteria is a string, check to see if it is a comparator.
3211+ * If the criteria is a string, and it is not a comparator, check for regex.
3212+ * If the criteria is a string and has not matched the above, finally use strict equality checking as a fallback.
3213+ * If the criteria has not been set, default to false-returning criteria function.
3214+ * @param criteria
3215+ * @returns {(x:any)=>boolean}
3216+ */
3217+ static createCriteriaFunction(criteria: string): Function;
3218+}
3219+export { CriteriaFunctionFactory };
3220diff --git a/dist/Utilities/CriteriaFunctionFactory.js b/dist/Utilities/CriteriaFunctionFactory.js
3221index a1519ca..e2651ff 100644
3222--- a/dist/Utilities/CriteriaFunctionFactory.js
3223+++ b/dist/Utilities/CriteriaFunctionFactory.js
3224@@ -23,7 +23,7 @@ function wildCardRegex(c) {
3225 /**
3226 * Creates a criteria function to evaluate elements in a range in an *IF function.
3227 */
3228-var CriteriaFunctionFactory = (function () {
3229+var CriteriaFunctionFactory = /** @class */ (function () {
3230 function CriteriaFunctionFactory() {
3231 }
3232 /**
3233diff --git a/dist/Utilities/DateRegExBuilder.d.ts b/dist/Utilities/DateRegExBuilder.d.ts
3234new file mode 100644
3235index 0000000..03ebc2f
3236--- /dev/null
3237+++ b/dist/Utilities/DateRegExBuilder.d.ts
3238@@ -0,0 +1,123 @@
3239+/**
3240+ * Build a regular expression step by step, to make it easier to build and read the resulting regular expressions.
3241+ */
3242+declare class DateRegExBuilder {
3243+ private regexString;
3244+ private static ZERO_OR_MORE_SPACES;
3245+ static DateRegExBuilder(): DateRegExBuilder;
3246+ /**
3247+ * Start the regular expression builder by matching the start of a line and zero or more spaces.
3248+ * @returns {DateRegExBuilder} builder
3249+ */
3250+ start(): DateRegExBuilder;
3251+ /**
3252+ * End the regular expression builder by matching the end of the line.
3253+ * @returns {DateRegExBuilder} builder
3254+ */
3255+ end(): DateRegExBuilder;
3256+ /**
3257+ * Capture all month full name and short names to the regular expression.
3258+ * @returns {DateRegExBuilder} builder
3259+ */
3260+ MONTHNAME(): DateRegExBuilder;
3261+ /**
3262+ * Capture all month full name and short names to the regular expression, in addition to any followed by one or more
3263+ * spaces.
3264+ * @returns {DateRegExBuilder} builder
3265+ * @constructor
3266+ */
3267+ MONTHNAME_W_SPACE(): DateRegExBuilder;
3268+ /**
3269+ * Add capture group for optionally capturing day names.
3270+ * @returns {DateRegExBuilder} builder
3271+ * @constructor
3272+ */
3273+ OPTIONAL_DAYNAME(): DateRegExBuilder;
3274+ /**
3275+ * Add capture group for optionally capturing a comma followed by one or more spaces.
3276+ * @returns {DateRegExBuilder} builder
3277+ * @constructor
3278+ */
3279+ OPTIONAL_COMMA(): DateRegExBuilder;
3280+ /**
3281+ * Add capture group for capturing month digits between 01 and 12, inclusively.
3282+ * @returns {DateRegExBuilder} builder
3283+ * @constructor
3284+ */
3285+ MM(): DateRegExBuilder;
3286+ /**
3287+ * Add capture group for capturing month digits between 01 and 12, inclusively, in addition to any followed by one or
3288+ * more spaces.
3289+ * @returns {DateRegExBuilder} builder
3290+ * @constructor
3291+ */
3292+ MM_W_SPACE(): DateRegExBuilder;
3293+ /**
3294+ * Add capture group for capturing day digits between 01 and 31, inclusively.
3295+ * @returns {DateRegExBuilder} builder
3296+ * @constructor
3297+ */
3298+ DD(): DateRegExBuilder;
3299+ /**
3300+ * Add capture group for capturing day digits between 01 and 31, inclusively, in addition to any followed by one or
3301+ * more spaces.
3302+ * @returns {DateRegExBuilder} builder
3303+ * @constructor
3304+ */
3305+ DD_W_SPACE(): DateRegExBuilder;
3306+ /**
3307+ * Add capture group for capturing 4 digits or 3 digits starting with 0-9.
3308+ * @returns {DateRegExBuilder} builder
3309+ * @constructor
3310+ */
3311+ YYYY(): DateRegExBuilder;
3312+ /**
3313+ * Add capture group for capturing 1 through 4 digits.
3314+ * @returns {DateRegExBuilder} builder
3315+ * @constructor
3316+ */
3317+ YYYY14(): DateRegExBuilder;
3318+ /**
3319+ * Add capture group for capturing 1 through 4 digits, in addition to any followed by one or more spaces.
3320+ * @returns {DateRegExBuilder} builder
3321+ * @constructor
3322+ */
3323+ YYYY14_W_SPACE(): DateRegExBuilder;
3324+ YYYY2_OR_4_W_SPACE(): DateRegExBuilder;
3325+ /**
3326+ * Add capture group for a flexible delimiter, including ", ", " ", ". ", "\", "-".
3327+ * @returns {DateRegExBuilder} builder
3328+ * @constructor
3329+ */
3330+ FLEX_DELIMITER(): DateRegExBuilder;
3331+ /**
3332+ * Add capture group for a flexible delimiter, including ", ", " ", ".", "\", "-". Different from FLEX_DELIMITER
3333+ * in that it will match periods with zero or more spaces on either side.
3334+ * For reference: https://regex101.com/r/q1fp1z/1/
3335+ * @returns {DateRegExBuilder} builder
3336+ * @constructor
3337+ */
3338+ FLEX_DELIMITER_LOOSEDOT(): DateRegExBuilder;
3339+ /**
3340+ * Add an optional capture group for capturing timestamps including: "10am", "10:10", "10:10pm", "10:10:10",
3341+ * "10:10:10am", along with zero or more spaces after semi colons, AM or PM, and unlimited number of digits per unit.
3342+ * @returns {DateRegExBuilder} builder
3343+ * @constructor
3344+ */
3345+ OPTIONAL_TIMESTAMP_CAPTURE_GROUP(): DateRegExBuilder;
3346+ /**
3347+ * Add a capture group for capturing timestamps including: "10am", "10:10", "10:10pm", "10:10:10",
3348+ * "10:10:10am", along with zero or more spaces after semi colons, AM or PM, and unlimited number of digits per unit.
3349+ * See https://regex101.com/r/0bmj5n/1/ for more information of 9-digit maximum. One series, "12:00001989198298am",
3350+ * has a maximum of 10 digits: "0*(?:[1-9]{1}[0-9]{0,9})?"
3351+ * @returns {DateRegExBuilder} builder
3352+ * @constructor
3353+ */
3354+ TIMESTAMP_UNITS_CAPTURE_GROUP(): DateRegExBuilder;
3355+ /**
3356+ * Build the regular expression and ignore case.
3357+ * @returns {RegExp}
3358+ */
3359+ build(): RegExp;
3360+}
3361+export { DateRegExBuilder };
3362diff --git a/dist/Utilities/DateRegExBuilder.js b/dist/Utilities/DateRegExBuilder.js
3363index 33f8a2b..46385ef 100644
3364--- a/dist/Utilities/DateRegExBuilder.js
3365+++ b/dist/Utilities/DateRegExBuilder.js
3366@@ -3,7 +3,7 @@ exports.__esModule = true;
3367 /**
3368 * Build a regular expression step by step, to make it easier to build and read the resulting regular expressions.
3369 */
3370-var DateRegExBuilder = (function () {
3371+var DateRegExBuilder = /** @class */ (function () {
3372 function DateRegExBuilder() {
3373 this.regexString = "";
3374 }
3375@@ -182,7 +182,7 @@ var DateRegExBuilder = (function () {
3376 DateRegExBuilder.prototype.build = function () {
3377 return new RegExp(this.regexString, 'i');
3378 };
3379+ DateRegExBuilder.ZERO_OR_MORE_SPACES = "\\s*";
3380 return DateRegExBuilder;
3381 }());
3382-DateRegExBuilder.ZERO_OR_MORE_SPACES = "\\s*";
3383 exports.DateRegExBuilder = DateRegExBuilder;
3384diff --git a/dist/Utilities/Filter.d.ts b/dist/Utilities/Filter.d.ts
3385new file mode 100644
3386index 0000000..e832218
3387--- /dev/null
3388+++ b/dist/Utilities/Filter.d.ts
3389@@ -0,0 +1,42 @@
3390+/**
3391+ * Static class to help filter down Arrays
3392+ */
3393+declare class Filter {
3394+ /**
3395+ * Converts string values in array to 0
3396+ * @param arr to convert
3397+ * @returns {Array} array in which all string values have been converted to 0.
3398+ */
3399+ static stringValuesToZeros(arr: Array<any>): Array<any>;
3400+ /**
3401+ * Flatten an array of arrays of ...etc.
3402+ * @param values array of values
3403+ * @returns {Array} flattened array
3404+ */
3405+ static flatten(values: Array<any>): Array<any>;
3406+ /**
3407+ * Flatten an array of arrays of... etc, but throw an error if any are empty references.
3408+ * @param values array of values
3409+ * @returns {Array} flattened array
3410+ */
3411+ static flattenAndThrow(values: Array<any>): Array<any>;
3412+ /**
3413+ * Filter out all strings from an array.
3414+ * @param arr to filter
3415+ * @returns {Array} filtered array
3416+ */
3417+ static filterOutStringValues(arr: Array<any>): Array<any>;
3418+ /**
3419+ * Filters out non number values.
3420+ * @param arr to filter
3421+ * @returns {Array} filtered array
3422+ */
3423+ static filterOutNonNumberValues(arr: Array<any>): Array<any>;
3424+ /**
3425+ * Returns an array as unique values.
3426+ * @param arr - to filter down to uniques.
3427+ * @returns {Array}
3428+ */
3429+ static unique(arr: Array<any>): Array<any>;
3430+}
3431+export { Filter };
3432diff --git a/dist/Utilities/Filter.js b/dist/Utilities/Filter.js
3433index 48ce227..4560421 100644
3434--- a/dist/Utilities/Filter.js
3435+++ b/dist/Utilities/Filter.js
3436@@ -4,7 +4,7 @@ var Errors_1 = require("../Errors");
3437 /**
3438 * Static class to help filter down Arrays
3439 */
3440-var Filter = (function () {
3441+var Filter = /** @class */ (function () {
3442 function Filter() {
3443 }
3444 /**
3445diff --git a/dist/Utilities/MathHelpers.d.ts b/dist/Utilities/MathHelpers.d.ts
3446new file mode 100644
3447index 0000000..17a706e
3448--- /dev/null
3449+++ b/dist/Utilities/MathHelpers.d.ts
3450@@ -0,0 +1,90 @@
3451+/**
3452+ * Returns the continued fraction for the incomplete Beta function with parameters a and b modified by Lentz's method
3453+ * evaluated at x. For more information see http://jstat.github.io/special-functions.html#betacf
3454+ */
3455+declare function betacf(x: any, a: any, b: any): any;
3456+/**
3457+ * Returns the incomplete Beta function evaluated at (x,a,b). See http://jstat.github.io/special-functions.html#ibeta
3458+ * for more information.
3459+ */
3460+declare function ibeta(x: any, a: any, b: any): number;
3461+/**
3462+ * Returns the inverse of the incomplete Beta function evaluated at (p,a,b). For more information see
3463+ * http://jstat.github.io/special-functions.html#ibetainv
3464+ */
3465+declare function ibetainv(p: any, a: any, b: any): any;
3466+/**
3467+ * http://jstat.github.io/distributions.html
3468+ */
3469+declare function inv(x: any, df1: any, df2: any): number;
3470+/**
3471+ * Return the standard deviation of a vector. By defaut, the population standard deviation is returned. Passing true
3472+ * for the flag parameter returns the sample standard deviation. See http://jstat.github.io/vector.html#stdev for
3473+ * more information.
3474+ */
3475+declare function stdev(arr: any, flag: any): number;
3476+/**
3477+ * Return the variance of a vector. By default, the population variance is calculated. Passing true as the flag
3478+ * indicates computes the sample variance instead. See http://jstat.github.io/vector.html#variance for more
3479+ * information.
3480+ */
3481+declare function variance(arr: any, flag: any): number;
3482+/**
3483+ * Return the sum of a vector. See http://jstat.github.io/vector.html#sum for more information.
3484+ */
3485+declare function sum(arr: any): number;
3486+/**
3487+ * Return the mean of a vector. See http://jstat.github.io/vector.html#mean for more information.
3488+ */
3489+declare function mean(arr: any): number;
3490+/**
3491+ * Return the sum of squared errors of prediction of a vector. See http://jstat.github.io/vector.html#sumsqerr for
3492+ * more information.
3493+ */
3494+declare function sumsqerr(arr: any): number;
3495+/**
3496+ * Return the covariance of two vectors. See http://jstat.github.io/vector.html#covariance for more information.
3497+ */
3498+declare function covariance(arr1: any, arr2: any): number;
3499+/**
3500+ * Returns the Log-Gamma function evaluated at x. See http://jstat.github.io/special-functions.html#gammaln for more
3501+ * information.
3502+ */
3503+declare function gammaln(x: any): number;
3504+/**
3505+ * Returns the Gamma function evaluated at x. This is sometimes called the 'complete' gamma function. See
3506+ * http://jstat.github.io/special-functions.html#gammafn for more information.
3507+ */
3508+declare function gammafn(x: any): any;
3509+/**
3510+ * Returns the value of x in the cdf of the Gamma distribution with the parameters shape (k) and scale (theta). Notice
3511+ * that if using the alpha beta convention, scale = 1/beta. For more information see
3512+ * http://jstat.github.io/distributions.html#jStat.gamma.cdf
3513+ */
3514+declare function cdf(x: any, df1: any, df2: any): number;
3515+/**
3516+ * Returns the error function evaluated at x. See also:
3517+ *
3518+ * * http://jstat.github.io/special-functions.html#erf
3519+ *
3520+ * * https://github.com/jstat/jstat/search?utf8=%E2%9C%93&q=erf&type=
3521+ *
3522+ * @param x to evaluate
3523+ * @returns {number} error
3524+ */
3525+declare function erf(x: any): number;
3526+/**
3527+ * Returns the value of x in the pdf of the Gamma distribution with the parameters shape (k) and scale (theta). Notice
3528+ * that if using the alpha beta convention, scale = 1/beta. For more information see
3529+ * http://jstat.github.io/distributions.html#jStat.gamma.pdf
3530+ */
3531+declare function pdf(x: any, df1: any, df2: any): number;
3532+declare function betaln(x: any, y: any): number;
3533+declare function betafn(x: any, y: any): number;
3534+/**
3535+ * Cleans a float number.
3536+ * @param n - number to clean
3537+ * @returns {number} - clean number
3538+ */
3539+declare function cleanFloat(n: any): number;
3540+export { betacf, betafn, betaln, cdf, covariance, erf, gammafn, gammaln, ibeta, ibetainv, inv, mean, pdf, stdev, sum, sumsqerr, variance, cleanFloat };
3541diff --git a/dist/Utilities/MoreUtils.d.ts b/dist/Utilities/MoreUtils.d.ts
3542new file mode 100644
3543index 0000000..f9e7612
3544--- /dev/null
3545+++ b/dist/Utilities/MoreUtils.d.ts
3546@@ -0,0 +1,134 @@
3547+/**
3548+ * If the value is UNDEFINED, return true.
3549+ * @param value - Value to check if undefined.
3550+ * @returns {boolean}
3551+ */
3552+declare function isUndefined(value: any): boolean;
3553+/**
3554+ * If the value is DEFINED, return true.
3555+ * @param value - Value to check if is defined.
3556+ * @returns {boolean}
3557+ */
3558+declare function isDefined(value: any): boolean;
3559+/**
3560+ * Returns true if value is an instance of a Array.
3561+ * @param value
3562+ * @returns {boolean}
3563+ */
3564+declare function isArray(value: any): boolean;
3565+/**
3566+ * Alphabetical character to number.
3567+ * @param chr
3568+ * @returns {number}
3569+ */
3570+declare function characterToNumber(chr: any): number;
3571+/**
3572+ * Converts a number to an alphabetical character.
3573+ * @param num
3574+ * @returns {string}
3575+ */
3576+declare function numberToCharacter(num: any): string;
3577+/**
3578+ * Converts a quoted string to an un-quoted string: `"hey"` to `hey`
3579+ * @param str
3580+ * @returns {string}
3581+ */
3582+declare function string(str: any): any;
3583+/**
3584+ * Converts XY coordinates (eg {0, 0}) to A1 coordinates (eg {A1}).
3585+ * @param x
3586+ * @param y
3587+ * @returns {string}
3588+ */
3589+declare function convertXYtoA1Coordinates(x: any, y: any): any;
3590+/**
3591+ * Returns RowCol coordinates of an A1 cellId
3592+ * @param cellId
3593+ * @returns {Object}
3594+ */
3595+declare function A1toRowColCoordinates(cellId: any): {
3596+ row: number;
3597+ col: number;
3598+};
3599+/**
3600+ * Class for building formatted strings with commas, forced number of leading and trailing zeros, and arbitrary leading
3601+ * and trailing strings.
3602+ */
3603+declare class NumberStringBuilder {
3604+ private n;
3605+ private shouldUseComma;
3606+ private integerZeroCount;
3607+ private decimalZeroCount;
3608+ private maxDecimalPlaces;
3609+ private headString;
3610+ private tailString;
3611+ /**
3612+ * Static builder, easier than `new`.
3613+ * @returns {NumberStringBuilder}
3614+ */
3615+ static start(): NumberStringBuilder;
3616+ /**
3617+ * Pads a given string with "0" on the right or left side until it is a certain width.
3618+ * @param {string} str - String to pad.
3619+ * @param {number} width - Width to pad to. If this is less than the strings length, will do nothing.
3620+ * @param {string} type - "right" or "left" side to append zeroes.
3621+ * @returns {string}
3622+ */
3623+ private static pad(str, width, type);
3624+ /**
3625+ * Rounds a number n to a certain number of digits.
3626+ * @param n - Number to round.
3627+ * @param digits - Digits to round to.
3628+ * @returns {number}
3629+ */
3630+ private static round(n, digits);
3631+ /**
3632+ * Set the number that we'll be formatting.
3633+ * @param {number} n - Number.
3634+ * @returns {NumberStringBuilder}
3635+ */
3636+ number(n: number): NumberStringBuilder;
3637+ /**
3638+ * The number of zeros to force on the left side of the decimal.
3639+ * @param {number} zeros
3640+ * @returns {NumberStringBuilder}
3641+ */
3642+ integerZeros(zeros: number): NumberStringBuilder;
3643+ /**
3644+ * The number of zeros to force on the right side of the decimal.
3645+ * @param {number} zeros
3646+ * @returns {NumberStringBuilder}
3647+ */
3648+ decimalZeros(zeros: number): NumberStringBuilder;
3649+ /**
3650+ * If you would like to force the maximum number of decimal places, without padding with zeros, set this.
3651+ * WARNING: Should not be used in conjunction with decimalZeros().
3652+ * @param {number} maxDecimalPlaces
3653+ * @returns {NumberStringBuilder}
3654+ */
3655+ maximumDecimalPlaces(maxDecimalPlaces: number): NumberStringBuilder;
3656+ /**
3657+ * Should digits to the left side of the decimal use comma-notation?
3658+ * @param {boolean} shouldUseComma
3659+ * @returns {NumberStringBuilder}
3660+ */
3661+ commafy(shouldUseComma: boolean): NumberStringBuilder;
3662+ /**
3663+ * String to append to the beginning of the final formatted number.
3664+ * @param {string} head
3665+ * @returns {NumberStringBuilder}
3666+ */
3667+ head(head: string): NumberStringBuilder;
3668+ /**
3669+ * String to append to the end of the final formatted number.
3670+ * @param {string} tail
3671+ * @returns {NumberStringBuilder}
3672+ */
3673+ tail(tail: string): NumberStringBuilder;
3674+ /**
3675+ * Building the string using the rules set in this builder.
3676+ * @returns {string}
3677+ */
3678+ build(): string;
3679+}
3680+export { isDefined, isUndefined, isArray, string, numberToCharacter, convertXYtoA1Coordinates, A1toRowColCoordinates, characterToNumber, NumberStringBuilder };
3681diff --git a/dist/Utilities/MoreUtils.js b/dist/Utilities/MoreUtils.js
3682index 4daf968..c9c8639 100644
3683--- a/dist/Utilities/MoreUtils.js
3684+++ b/dist/Utilities/MoreUtils.js
3685@@ -98,7 +98,7 @@ exports.A1toRowColCoordinates = A1toRowColCoordinates;
3686 * Class for building formatted strings with commas, forced number of leading and trailing zeros, and arbitrary leading
3687 * and trailing strings.
3688 */
3689-var NumberStringBuilder = (function () {
3690+var NumberStringBuilder = /** @class */ (function () {
3691 function NumberStringBuilder() {
3692 this.shouldUseComma = false;
3693 this.integerZeroCount = 1; // e.g. default to "0.1"
3694diff --git a/dist/Utilities/ObjectBuilder.d.ts b/dist/Utilities/ObjectBuilder.d.ts
3695new file mode 100644
3696index 0000000..c293175
3697--- /dev/null
3698+++ b/dist/Utilities/ObjectBuilder.d.ts
3699@@ -0,0 +1,11 @@
3700+/**
3701+ * Utility class to help build objects programmatically. Basically this allows me to have source code where constants
3702+ * are keys in objects.
3703+ */
3704+declare class ObjectBuilder {
3705+ o: Object;
3706+ static add(k: any, v: any): ObjectBuilder;
3707+ add(k: any, v: any): ObjectBuilder;
3708+ build(): Object;
3709+}
3710+export { ObjectBuilder };
3711diff --git a/dist/Utilities/ObjectBuilder.js b/dist/Utilities/ObjectBuilder.js
3712index 195367a..261aecc 100644
3713--- a/dist/Utilities/ObjectBuilder.js
3714+++ b/dist/Utilities/ObjectBuilder.js
3715@@ -4,7 +4,7 @@ exports.__esModule = true;
3716 * Utility class to help build objects programmatically. Basically this allows me to have source code where constants
3717 * are keys in objects.
3718 */
3719-var ObjectBuilder = (function () {
3720+var ObjectBuilder = /** @class */ (function () {
3721 function ObjectBuilder() {
3722 this.o = {};
3723 }
3724diff --git a/dist/Utilities/Serializer.d.ts b/dist/Utilities/Serializer.d.ts
3725new file mode 100644
3726index 0000000..2c13229
3727--- /dev/null
3728+++ b/dist/Utilities/Serializer.d.ts
3729@@ -0,0 +1,7 @@
3730+/**
3731+ * Class to hold static methods for serialization.
3732+ */
3733+declare class Serializer {
3734+ static serialize(value: any): string;
3735+}
3736+export { Serializer };
3737diff --git a/dist/Utilities/Serializer.js b/dist/Utilities/Serializer.js
3738index 7028479..733122d 100644
3739--- a/dist/Utilities/Serializer.js
3740+++ b/dist/Utilities/Serializer.js
3741@@ -3,7 +3,7 @@ exports.__esModule = true;
3742 /**
3743 * Class to hold static methods for serialization.
3744 */
3745-var Serializer = (function () {
3746+var Serializer = /** @class */ (function () {
3747 function Serializer() {
3748 }
3749 Serializer.serialize = function (value) {
3750diff --git a/dist/Utilities/TypeConverter.d.ts b/dist/Utilities/TypeConverter.d.ts
3751new file mode 100644
3752index 0000000..8384beb
3753--- /dev/null
3754+++ b/dist/Utilities/TypeConverter.d.ts
3755@@ -0,0 +1,171 @@
3756+import * as moment from "moment";
3757+/**
3758+ * Static class of helpers used to convert let ious types to each other.
3759+ */
3760+declare class TypeConverter {
3761+ static ORIGIN_MOMENT: moment.Moment;
3762+ private static SECONDS_IN_DAY;
3763+ /**
3764+ * Converts a datetime string to a moment object. Will return undefined if the string can't be converted.
3765+ * @param {string} timeString - string to parse and convert.
3766+ * @returns {moment.Moment}
3767+ */
3768+ static stringToMoment(timeString: string): moment.Moment;
3769+ /**
3770+ * Converts a time-formatted string to a number between 0 and 1, exclusive on 1.
3771+ * @param timeString
3772+ * @returns {number} representing time of day
3773+ */
3774+ static stringToTimeNumber(timeString: string): number;
3775+ /**
3776+ * Parses a string returning a moment that is either valid, invalid or undefined.
3777+ * @param dateString to parse.
3778+ * @returns {moment}
3779+ */
3780+ private static parseStringToMoment(dateString);
3781+ /**
3782+ * Parses a string as a date number. Throws error if parsing not possible.
3783+ * @param dateString to parse
3784+ * @returns {number} resulting date
3785+ */
3786+ static stringToDateNumber(dateString: string): number;
3787+ /**
3788+ * Converts strings to numbers, returning undefined if string cannot be parsed to number. Examples: "100", "342424",
3789+ * "10%", "33.213131", "41.1231", "10e+1", "10E-1", "10.44E1", "-$9.29", "+$9.29", "1,000.1", "2000,000,000".
3790+ * For reference see: https://regex101.com/r/PwghnF/9/
3791+ * @param value to parse.
3792+ * @returns {number} or undefined
3793+ */
3794+ static stringToNumber(value: string): number;
3795+ /**
3796+ * Converts any value to an inverted number or throws an error if it cannot coerce it to the number type
3797+ * @param value to convert
3798+ * @returns {number} to return. Will always return a number or throw an error. Never returns undefined.
3799+ */
3800+ static valueToInvertedNumber(value: any): number;
3801+ /**
3802+ * Converts any value to a number or throws an error if it cannot coerce it to the number type
3803+ * @param value to convert
3804+ * @returns {number} to return. Will always return a number or throw an error. Never returns undefined.
3805+ */
3806+ static valueToNumber(value: any): number;
3807+ /**
3808+ * Converts any value to a number, defaulting to 0 value in cases in which it cannot coerce it to a number type
3809+ * @param value to conver
3810+ * @returns {number} to return. Will always return a number or 0.
3811+ */
3812+ static valueToNumberGracefully(value: any): number;
3813+ /**
3814+ * Converts any value to a boolean or throws an error if it cannot coerce it to the boolean type.
3815+ * @param value to convert
3816+ * @returns {boolean} to return.
3817+ */
3818+ static valueToBoolean(value: any): boolean;
3819+ /**
3820+ * Convert a value to string.
3821+ * @param value of any type, including array. array cannot be empty.
3822+ * @returns {string} string representation of value
3823+ */
3824+ static valueToString(value: any): string;
3825+ /**
3826+ * Converts a value to a time number; a value between 0 and 1, exclusive on 1.
3827+ * @param value to convert
3828+ * @returns {number} representing a time value
3829+ */
3830+ static valueToTimestampNumber(value: any): number;
3831+ /**
3832+ * Returns true if string is number format.
3833+ * @param str to check
3834+ * @returns {boolean}
3835+ */
3836+ static isNumber(str: string): boolean;
3837+ /**
3838+ * Returns true if we can coerce it to the number type.
3839+ * @param value to coerce
3840+ * @returns {boolean} if could be coerced to a number
3841+ */
3842+ static canCoerceToNumber(value: any): boolean;
3843+ /**
3844+ * Takes any input type and will throw a REF_ERROR or coerce it into a number.
3845+ * @param input to attempt to coerce into a number
3846+ * @returns {number} number representation of the input
3847+ */
3848+ static firstValueAsNumber(input: any): number;
3849+ /**
3850+ * Takes any input type and will throw a REF_ERROR or coerce it into a string.
3851+ * @param input to attempt to coerce into a string
3852+ * @returns {number} number representation of the input
3853+ */
3854+ static firstValueAsString(input: any): string;
3855+ /**
3856+ * Returns the first value that is not of the type array. Will throw RefError if any empty arrays are passed in.
3857+ * @param input to retrieve first value of
3858+ * @returns {any} any non-array value.
3859+ */
3860+ static firstValue(input: any): any;
3861+ /**
3862+ * Takes any input type and will throw a REF_ERROR or coerce it into a string.
3863+ * @param input to attempt to coerce into a string
3864+ * @returns {number} number representation of the input
3865+ */
3866+ static firstValueAsBoolean(input: any): boolean;
3867+ /**
3868+ * Takes the input type and will throw a REF_ERROR or coerce it into a date number
3869+ * @param input input to attempt to coerce to a date number
3870+ * @param coerceBoolean should a boolean be converted
3871+ * @returns {number} representing a date
3872+ */
3873+ static firstValueAsDateNumber(input: any, coerceBoolean?: boolean): number;
3874+ /**
3875+ * Takes the input type and will throw a REF_ERROR or coerce it into a time number
3876+ * @param input input to attempt to coerce to a time number
3877+ * @returns {number} representing time of day
3878+ */
3879+ static firstValueAsTimestampNumber(input: any): number;
3880+ /**
3881+ * Convert a value to date number if possible.
3882+ * @param value to convert
3883+ * @param coerceBoolean should a boolean be converted
3884+ * @returns {number} date
3885+ */
3886+ static valueToDateNumber(value: any, coerceBoolean?: boolean): number;
3887+ /**
3888+ * Converts a moment to a date number.
3889+ * @param m to convert
3890+ * @returns {number} date
3891+ */
3892+ static momentToNumber(m: moment.Moment): number;
3893+ /**
3894+ * Converts a moment to a date number, floored to the whole day date.
3895+ * @param m to convert
3896+ * @returns {number} date
3897+ */
3898+ static momentToDayNumber(m: moment.Moment): number;
3899+ /**
3900+ * Converts a number to moment.
3901+ * @param n to convert
3902+ * @returns {Moment} date
3903+ */
3904+ static numberToMoment(n: number): moment.Moment;
3905+ /**
3906+ * Converts a number to moment while preserving the decimal part of the number.
3907+ * @param n to convert
3908+ * @returns {Moment} date
3909+ */
3910+ static decimalNumberToMoment(n: number): moment.Moment;
3911+ /**
3912+ * Using timestamp units, create a time number between 0 and 1, exclusive on end.
3913+ * @param hours
3914+ * @param minutes
3915+ * @param seconds
3916+ * @returns {number} representing time of day between 0 and 1, exclusive on end.
3917+ */
3918+ static unitsToTimeNumber(hours: number, minutes: number, seconds: number): number;
3919+}
3920+/**
3921+ * Catches divide by zero situations and throws them as errors
3922+ * @param n number to check
3923+ * @returns {number} n as long as it's not zero.
3924+ */
3925+declare let checkForDevideByZero: (n: number) => number;
3926+export { TypeConverter, checkForDevideByZero };
3927diff --git a/dist/Utilities/TypeConverter.js b/dist/Utilities/TypeConverter.js
3928index f539e0a..f181698 100644
3929--- a/dist/Utilities/TypeConverter.js
3930+++ b/dist/Utilities/TypeConverter.js
3931@@ -73,19 +73,19 @@ function isDefined(x) {
3932 */
3933 function matchTimestampAndMutateMoment(timestampString, momentToMutate) {
3934 var matches = timestampString.match(TIMESTAMP);
3935- if (matches && matches[1] !== undefined) {
3936+ if (matches && matches[1] !== undefined) { // 10am
3937 var hours = parseInt(matches[2]);
3938 if (hours > 12) {
3939 throw new Error();
3940 }
3941 momentToMutate.add(hours, 'hours');
3942 }
3943- else if (matches && matches[6] !== undefined) {
3944+ else if (matches && matches[6] !== undefined) { // 10:10
3945 var hours = parseInt(matches[7]);
3946 var minutes = parseInt(matches[8]);
3947 momentToMutate.add(hours, 'hours').add(minutes, 'minutes');
3948 }
3949- else if (matches && matches[11] !== undefined) {
3950+ else if (matches && matches[11] !== undefined) { // 10:10am
3951 var hours = parseInt(matches[13]);
3952 var minutes = parseInt(matches[14]);
3953 var pmTrue = (matches[16].toLowerCase() === "pm");
3954@@ -103,13 +103,13 @@ function matchTimestampAndMutateMoment(timestampString, momentToMutate) {
3955 }
3956 momentToMutate.add(minutes, 'minutes');
3957 }
3958- else if (matches && matches[17] !== undefined) {
3959+ else if (matches && matches[17] !== undefined) { // 10:10:10
3960 var hours = parseInt(matches[19]);
3961 var minutes = parseInt(matches[20]);
3962 var seconds = parseInt(matches[21]);
3963 momentToMutate.add(hours, 'hours').add(minutes, 'minutes').add(seconds, 'seconds');
3964 }
3965- else if (matches && matches[23] !== undefined) {
3966+ else if (matches && matches[23] !== undefined) { // // 10:10:10am
3967 var hours = parseInt(matches[25]);
3968 var minutes = parseInt(matches[26]);
3969 var seconds = parseInt(matches[27]);
3970@@ -136,7 +136,7 @@ function matchTimestampAndMutateMoment(timestampString, momentToMutate) {
3971 /**
3972 * Static class of helpers used to convert let ious types to each other.
3973 */
3974-var TypeConverter = (function () {
3975+var TypeConverter = /** @class */ (function () {
3976 function TypeConverter() {
3977 }
3978 /**
3979@@ -782,10 +782,10 @@ var TypeConverter = (function () {
3980 var v = (((hours % 24) * 60 * 60) + ((minutes) * 60) + (seconds)) / 86400;
3981 return v % 1;
3982 };
3983+ TypeConverter.ORIGIN_MOMENT = moment.utc([1899, 11, 30]).startOf("day");
3984+ TypeConverter.SECONDS_IN_DAY = 86400;
3985 return TypeConverter;
3986 }());
3987-TypeConverter.ORIGIN_MOMENT = moment.utc([1899, 11, 30]).startOf("day");
3988-TypeConverter.SECONDS_IN_DAY = 86400;
3989 exports.TypeConverter = TypeConverter;
3990 /**
3991 * Catches divide by zero situations and throws them as errors
3992@@ -794,7 +794,7 @@ exports.TypeConverter = TypeConverter;
3993 */
3994 var checkForDevideByZero = function (n) {
3995 n = +n; // Coerce to number.
3996- if (!n) {
3997+ if (!n) { // Matches +0, -0, NaN
3998 throw new Errors_1.DivZeroError("Evaluation of function caused a divide by zero error.");
3999 }
4000 return n;
4001diff --git a/tsconfig.json b/tsconfig.json
4002index 7396082..e76ee65 100644
4003--- a/tsconfig.json
4004+++ b/tsconfig.json
4005@@ -1,10 +1,10 @@
4006 {
4007 "compilerOptions": {
4008- "allowJs": true,
4009 "allowUnreachableCode": true,
4010 "allowUnusedLabels": true,
4011 "outDir": "dist",
4012- "sourceMap": false
4013+ "sourceMap": false,
4014+ "declaration": true
4015 },
4016 "files": [
4017 "src/Sheet.ts"