{"version":3,"file":"main.cjs","sources":["../src/modules/events.ts","../src/modules/renderBox.ts","../src/components/editor.ts","../src/utils/position.ts","../src/components/scroller.ts","../src/modules/cell.ts","../src/components/sheet.ts","../src/components/table.ts","../src/components/toolbar.ts","../src/modules/config.ts","../src/modules/selection.ts","../src/modules/styles.ts","../src/modules/viewport.ts","../src/modules/column.ts","../src/modules/row.ts","../src/utils/createData.ts","../src/modules/cache.ts","../src/components/columnsBar.ts","../src/components/rowsBar.ts","../src/modules/clipboard.ts","../node_modules/.pnpm/fast-formula-parser@1.0.19/node_modules/fast-formula-parser/grammar/type/collection.js","../node_modules/.pnpm/fast-formula-parser@1.0.19/node_modules/fast-formula-parser/formulas/helpers.js","../node_modules/.pnpm/fast-formula-parser@1.0.19/node_modules/fast-formula-parser/formulas/error.js","../node_modules/.pnpm/fast-formula-parser@1.0.19/node_modules/fast-formula-parser/ssf/ssf.js","../node_modules/.pnpm/bahttext@1.1.0/node_modules/bahttext/src/index.js","../node_modules/.pnpm/fast-formula-parser@1.0.19/node_modules/fast-formula-parser/formulas/functions/text.js","../node_modules/.pnpm/fast-formula-parser@1.0.19/node_modules/fast-formula-parser/formulas/operators.js","../node_modules/.pnpm/fast-formula-parser@1.0.19/node_modules/fast-formula-parser/formulas/functions/math.js","../node_modules/.pnpm/fast-formula-parser@1.0.19/node_modules/fast-formula-parser/formulas/functions/trigonometry.js","../node_modules/.pnpm/fast-formula-parser@1.0.19/node_modules/fast-formula-parser/formulas/functions/logical.js","../node_modules/.pnpm/bessel@1.0.2/node_modules/bessel/bessel.js","../node_modules/.pnpm/jstat@1.9.6/node_modules/jstat/dist/jstat.js","../node_modules/.pnpm/fast-formula-parser@1.0.19/node_modules/fast-formula-parser/formulas/functions/engineering.js","../node_modules/.pnpm/fast-formula-parser@1.0.19/node_modules/fast-formula-parser/formulas/functions/reference.js","../node_modules/.pnpm/fast-formula-parser@1.0.19/node_modules/fast-formula-parser/formulas/functions/information.js","../node_modules/.pnpm/fast-formula-parser@1.0.19/node_modules/fast-formula-parser/formulas/functions/distribution.js","../node_modules/.pnpm/fast-formula-parser@1.0.19/node_modules/fast-formula-parser/formulas/functions/statistical.js","../node_modules/.pnpm/fast-formula-parser@1.0.19/node_modules/fast-formula-parser/formulas/functions/date.js","../node_modules/.pnpm/fast-formula-parser@1.0.19/node_modules/fast-formula-parser/formulas/functions/web.js","../node_modules/.pnpm/chevrotain@7.1.2/node_modules/chevrotain/lib_esm/src/version.js","../node_modules/.pnpm/chevrotain@7.1.2/node_modules/chevrotain/lib_esm/src/utils/utils.js","../node_modules/.pnpm/regexp-to-ast@0.5.0/node_modules/regexp-to-ast/lib/regexp-to-ast.js","../node_modules/.pnpm/chevrotain@7.1.2/node_modules/chevrotain/lib_esm/src/scan/reg_exp_parser.js","../node_modules/.pnpm/chevrotain@7.1.2/node_modules/chevrotain/lib_esm/src/scan/reg_exp.js","../node_modules/.pnpm/chevrotain@7.1.2/node_modules/chevrotain/lib_esm/src/scan/lexer.js","../node_modules/.pnpm/chevrotain@7.1.2/node_modules/chevrotain/lib_esm/src/scan/tokens.js","../node_modules/.pnpm/chevrotain@7.1.2/node_modules/chevrotain/lib_esm/src/scan/lexer_errors_public.js","../node_modules/.pnpm/chevrotain@7.1.2/node_modules/chevrotain/lib_esm/src/scan/lexer_public.js","../node_modules/.pnpm/chevrotain@7.1.2/node_modules/chevrotain/lib_esm/src/scan/tokens_public.js","../node_modules/.pnpm/chevrotain@7.1.2/node_modules/chevrotain/lib_esm/src/parse/grammar/gast/gast_public.js","../node_modules/.pnpm/chevrotain@7.1.2/node_modules/chevrotain/lib_esm/src/parse/grammar/rest.js","../node_modules/.pnpm/chevrotain@7.1.2/node_modules/chevrotain/lib_esm/src/parse/grammar/gast/gast_visitor_public.js","../node_modules/.pnpm/chevrotain@7.1.2/node_modules/chevrotain/lib_esm/src/parse/grammar/gast/gast.js","../node_modules/.pnpm/chevrotain@7.1.2/node_modules/chevrotain/lib_esm/src/parse/grammar/first.js","../node_modules/.pnpm/chevrotain@7.1.2/node_modules/chevrotain/lib_esm/src/parse/constants.js","../node_modules/.pnpm/chevrotain@7.1.2/node_modules/chevrotain/lib_esm/src/parse/grammar/follow.js","../node_modules/.pnpm/chevrotain@7.1.2/node_modules/chevrotain/lib_esm/src/parse/errors_public.js","../node_modules/.pnpm/chevrotain@7.1.2/node_modules/chevrotain/lib_esm/src/parse/grammar/resolver.js","../node_modules/.pnpm/chevrotain@7.1.2/node_modules/chevrotain/lib_esm/src/parse/grammar/interpreter.js","../node_modules/.pnpm/chevrotain@7.1.2/node_modules/chevrotain/lib_esm/src/parse/grammar/lookahead.js","../node_modules/.pnpm/chevrotain@7.1.2/node_modules/chevrotain/lib_esm/src/parse/grammar/checks.js","../node_modules/.pnpm/chevrotain@7.1.2/node_modules/chevrotain/lib_esm/src/parse/grammar/gast/gast_resolver_public.js","../node_modules/.pnpm/chevrotain@7.1.2/node_modules/chevrotain/lib_esm/src/parse/exceptions_public.js","../node_modules/.pnpm/chevrotain@7.1.2/node_modules/chevrotain/lib_esm/src/parse/parser/traits/recoverable.js","../node_modules/.pnpm/chevrotain@7.1.2/node_modules/chevrotain/lib_esm/src/parse/grammar/keys.js","../node_modules/.pnpm/chevrotain@7.1.2/node_modules/chevrotain/lib_esm/src/parse/parser/traits/looksahead.js","../node_modules/.pnpm/chevrotain@7.1.2/node_modules/chevrotain/lib_esm/src/parse/cst/cst.js","../node_modules/.pnpm/chevrotain@7.1.2/node_modules/chevrotain/lib_esm/src/lang/lang_extensions.js","../node_modules/.pnpm/chevrotain@7.1.2/node_modules/chevrotain/lib_esm/src/parse/cst/cst_visitor.js","../node_modules/.pnpm/chevrotain@7.1.2/node_modules/chevrotain/lib_esm/src/parse/parser/traits/tree_builder.js","../node_modules/.pnpm/chevrotain@7.1.2/node_modules/chevrotain/lib_esm/src/parse/parser/traits/lexer_adapter.js","../node_modules/.pnpm/chevrotain@7.1.2/node_modules/chevrotain/lib_esm/src/parse/parser/traits/recognizer_api.js","../node_modules/.pnpm/chevrotain@7.1.2/node_modules/chevrotain/lib_esm/src/parse/parser/traits/recognizer_engine.js","../node_modules/.pnpm/chevrotain@7.1.2/node_modules/chevrotain/lib_esm/src/parse/parser/traits/error_handler.js","../node_modules/.pnpm/chevrotain@7.1.2/node_modules/chevrotain/lib_esm/src/parse/parser/traits/context_assist.js","../node_modules/.pnpm/chevrotain@7.1.2/node_modules/chevrotain/lib_esm/src/parse/parser/traits/gast_recorder.js","../node_modules/.pnpm/chevrotain@7.1.2/node_modules/chevrotain/lib_esm/src/parse/parser/traits/perf_tracer.js","../node_modules/.pnpm/chevrotain@7.1.2/node_modules/chevrotain/lib_esm/src/parse/parser/parser.js","../node_modules/.pnpm/chevrotain@7.1.2/node_modules/chevrotain/lib_esm/src/diagrams/render_public.js","../node_modules/.pnpm/chevrotain@7.1.2/node_modules/chevrotain/lib_esm/src/generate/generate.js","../node_modules/.pnpm/chevrotain@7.1.2/node_modules/chevrotain/lib_esm/src/generate/generate_public.js","../node_modules/.pnpm/chevrotain@7.1.2/node_modules/chevrotain/lib_esm/src/api.js","../node_modules/.pnpm/fast-formula-parser@1.0.19/node_modules/fast-formula-parser/grammar/lexing.js","../node_modules/.pnpm/fast-formula-parser@1.0.19/node_modules/fast-formula-parser/grammar/parsing.js","../node_modules/.pnpm/fast-formula-parser@1.0.19/node_modules/fast-formula-parser/grammar/utils.js","../node_modules/.pnpm/fast-formula-parser@1.0.19/node_modules/fast-formula-parser/grammar/hooks.js","../node_modules/.pnpm/fast-formula-parser@1.0.19/node_modules/fast-formula-parser/grammar/dependency/utils.js","../node_modules/.pnpm/fast-formula-parser@1.0.19/node_modules/fast-formula-parser/grammar/dependency/hooks.js","../node_modules/.pnpm/fast-formula-parser@1.0.19/node_modules/fast-formula-parser/index.js","../src/modules/formulaParser.ts","../src/main.ts"],"sourcesContent":["import { Selection } from \"../main\";\nexport var EventTypes;\n(function (EventTypes) {\n EventTypes[\"CELL_CLICK\"] = \"CELL_CLICK\";\n EventTypes[\"SELECTION_CHANGE\"] = \"CHANGE_SELECTION\";\n EventTypes[\"CELL_CHANGE\"] = \"CELL_CHANGE\";\n EventTypes[\"COPY_CELLS\"] = \"COPY_CELLS\";\n})(EventTypes || (EventTypes = {}));\nexport class Events {\n root;\n constructor(root) {\n this.root = root;\n }\n async dispatch(action) {\n switch (action.type) {\n case EventTypes.CELL_CLICK: {\n const { event, scroller } = action;\n //\n //* Here may be side effects\n //\n this.cellClick(event, scroller);\n break;\n }\n case EventTypes.SELECTION_CHANGE: {\n const { selection, enableCallback } = action;\n //\n //* Here may be side effects\n //\n this.changeSelection(selection, enableCallback);\n break;\n }\n case EventTypes.CELL_CHANGE: {\n const { cell, enableCallback } = action;\n if (cell.value.substring(0, 1).startsWith('=')) {\n try {\n await cell.evalFormula(this.root.formulaParser);\n cell.displayValue = cell.resultValue;\n this.root.renderCell(cell.position.row, cell.position.column);\n this.changeCellValues(cell, enableCallback);\n return;\n }\n catch (err) {\n console.error(err);\n }\n }\n this.root.renderCell(cell.position.row, cell.position.column);\n this.changeCellValues(cell, enableCallback);\n break;\n }\n case EventTypes.COPY_CELLS: {\n const { data, dataAsString, range } = action;\n this.copy(range, data, dataAsString);\n break;\n }\n default: {\n break;\n }\n }\n }\n cellClick = (event, scroller) => {\n if (event.button !== 0)\n return; // Left mouse button\n const { offsetX, offsetY } = event;\n const clickedCell = this.root.getCellByCoords(offsetX, offsetY);\n const cell = this.root.getCell(clickedCell);\n const selection = new Selection();\n selection.selectedCell = clickedCell;\n selection.selectedRange = {\n from: clickedCell,\n to: clickedCell,\n };\n scroller.setSelectingMode(true);\n this.changeSelection(selection, true);\n this.root.config.onCellClick?.(event, cell);\n };\n changeSelection = (selection, enableCallback = false) => {\n this.root.selection = selection;\n if (enableCallback)\n this.root.config.onSelectonChange?.(selection);\n this.root.renderSheet();\n this.root.renderColumnsBar();\n this.root.renderRowsBar();\n };\n changeCellValues(cell, enableCallback = true) {\n if (enableCallback)\n this.root.config.onCellChange?.(cell);\n }\n copy = (range, data, dataAsString) => {\n this.root.config.onCopy?.(range, data, dataAsString);\n };\n}\n","export class RenderBox {\n x;\n y;\n width;\n height;\n constructor(config, cellPosition) {\n this.x = this.getXCoord(cellPosition.column, config);\n this.y = this.getYCoord(cellPosition.row, config);\n this.width = config.columns[cellPosition.column].width;\n this.height = config.rows[cellPosition.row].height;\n }\n getXCoord(column, config) {\n let x = 0;\n for (let i = 0; i < column; i++) {\n x += config.columns[i].width;\n }\n return x;\n }\n getYCoord(row, config) {\n let y = 0;\n for (let i = 0; i < row; i++) {\n y += config.rows[i].height;\n }\n return y;\n }\n}\n","import { CSS_PREFIX } from \"../main\";\nimport { EventTypes } from \"../modules/events\";\nimport { RenderBox } from \"../modules/renderBox\";\nexport class Editor {\n element;\n root;\n constructor(root) {\n this.root = root;\n const element = document.createElement(\"input\");\n element.classList.add(CSS_PREFIX + \"editor\");\n this.element = element;\n this.hide();\n }\n hide() {\n this.element.style.display = \"none\";\n this.element.classList.add(\"hide\");\n this.element.blur();\n window.removeEventListener(\"click\", this.handleClickOutside);\n this.element.removeEventListener(\"keydown\", this.handleKeydown);\n this.root.focusTable();\n }\n show(position, initialString) {\n const { height, width, x, y } = new RenderBox(this.root.config, position);\n const cell = this.root.getCell(position);\n this.element.classList.remove(\"hide\");\n this.element.style.top =\n y - this.root.viewport.top + this.root.columnsBarHeight + \"px\";\n this.element.style.left =\n x - this.root.viewport.left + this.root.rowsBarWidth + \"px\";\n this.element.style.width = width + \"px\";\n this.element.style.height = height + \"px\";\n this.element.style.display = \"block\";\n window.addEventListener(\"click\", this.handleClickOutside);\n this.element.addEventListener(\"keydown\", this.handleKeydown);\n this.element.value = initialString ? initialString : cell.value;\n this.element.focus();\n if (!initialString)\n this.element.select();\n }\n handleKeydown = (event) => {\n const { key } = event;\n switch (key) {\n case \"Escape\": {\n this.hide();\n break;\n }\n case \"Enter\": {\n if (!this.root.selection.selectedCell)\n return;\n this.root.changeCellValues(this.root.selection.selectedCell, {\n value: this.element.value,\n displayValue: this.element.value,\n });\n this.root.events.dispatch({\n type: EventTypes.CELL_CHANGE,\n cell: this.root.getCell(this.root.selection.selectedCell),\n });\n this.hide();\n this.root.renderSelection();\n }\n }\n };\n handleClickOutside = (event) => {\n const target = event.target;\n if (!this.element.contains(target)) {\n this.hide();\n }\n };\n}\n","export function checkEqualRanges(range1, range2) {\n const equalRows = range1.from.row === range2.to.row;\n const equalColumns = range1.from.column === range2.to.column;\n return equalRows && equalColumns;\n}\nexport function checkEqualCellSelections(selection1, selection2) {\n return (selection1.column === selection2.column && selection1.row === selection2.row);\n}\n","import { CSS_PREFIX, Selection } from \"../main\";\nimport { EventTypes } from \"../modules/events\";\nimport { checkEqualCellSelections } from \"../utils/position\";\nexport class Scroller {\n element;\n verticalScroller;\n horizontalScroller;\n root;\n isSelecting = false;\n constructor(root) {\n this.root = root;\n const { horizontalScroller, scroller, verticalScroller } = this.buildComponent();\n this.element = scroller;\n this.verticalScroller = verticalScroller;\n this.horizontalScroller = horizontalScroller;\n this.element.style.height = this.root.config.view.height + \"px\";\n this.element.style.width = this.root.config.view.width + \"px\";\n this.element.style.top = this.root.columnsBarHeight + \"px\";\n this.element.style.left = this.root.rowsBarWidth + \"px\";\n this.element.tabIndex = -1;\n this.updateScrollerSize(); //* Init size set\n this.element.addEventListener(\"scroll\", this.handleScroll);\n this.element.addEventListener(\"mousedown\", this.handleClick);\n this.element.addEventListener(\"mousemove\", this.handleMouseMove);\n this.element.addEventListener(\"mouseup\", this.handleMouseUp);\n this.element.addEventListener(\"dblclick\", this.handleDoubleClick);\n this.element.addEventListener(\"keydown\", this.handleKeydown);\n this.element.addEventListener(\"paste\", (event) => {\n if (!this.root.selection.selectedCell)\n return;\n this.root.clipboard.paste(this.root, this.root.selection.selectedCell, event);\n });\n }\n setSelectingMode(mode) {\n this.isSelecting = mode;\n }\n handleMouseMove = (event) => {\n if (!this.isSelecting)\n return;\n const { offsetX, offsetY } = event;\n const lastSelectedCell = this.root.getCellByCoords(offsetX, offsetY);\n let isRangeChanged = false;\n if (this.root.selection.selectedRange) {\n isRangeChanged = !checkEqualCellSelections(this.root.selection.selectedRange.to, lastSelectedCell);\n if (isRangeChanged) {\n this.root.selection.selectedRange.to = lastSelectedCell;\n this.root.events.dispatch({\n type: EventTypes.SELECTION_CHANGE,\n selection: this.root.selection,\n enableCallback: true,\n });\n }\n }\n };\n handleMouseUp = () => {\n this.isSelecting = false;\n const newSelection = { ...this.root.selection };\n if (this.root.selection.selectedRange) {\n if (checkEqualCellSelections(this.root.selection.selectedRange.from, this.root.selection.selectedRange.to)) {\n newSelection.selectedRange = null;\n this.root.events.dispatch({\n type: EventTypes.SELECTION_CHANGE,\n selection: newSelection,\n enableCallback: false,\n });\n }\n }\n this.root.renderSheet();\n this.root.renderColumnsBar();\n this.root.renderRowsBar();\n };\n handleDoubleClick = (event) => {\n event.preventDefault();\n const position = this.root.getCellByCoords(event.offsetX, event.offsetY);\n this.root.showEditor(position);\n };\n handleKeydown = (event) => {\n //* Navigation\n if ([\"ArrowLeft\", \"ArrowRight\", \"ArrowUp\", \"ArrowDown\"].includes(event.key)) {\n event.preventDefault();\n this.root.selection.selectedRange = null;\n switch (event.key) {\n case \"ArrowLeft\": {\n if (this.root.selection.selectedCell &&\n this.root.selection.selectedCell.column > 0) {\n this.root.selection.selectedCell.column -= 1;\n // this.root.renderSheet();\n }\n break;\n }\n case \"ArrowRight\": {\n if (this.root.selection.selectedCell &&\n this.root.selection.selectedCell.column <\n this.root.config.columns.length - 1) {\n this.root.selection.selectedCell.column += 1;\n // this.root.renderSheet();\n }\n break;\n }\n case \"ArrowUp\": {\n if (this.root.selection.selectedCell &&\n this.root.selection.selectedCell.row > 0) {\n this.root.selection.selectedCell.row -= 1;\n // this.root.renderSheet();\n }\n break;\n }\n case \"ArrowDown\": {\n if (this.root.selection.selectedCell &&\n this.root.selection.selectedCell.row <\n this.root.config.rows.length - 1) {\n this.root.selection.selectedCell.row += 1;\n // this.root.renderSheet();\n }\n break;\n }\n }\n this.root.events.dispatch({\n type: EventTypes.SELECTION_CHANGE,\n selection: this.root.selection,\n enableCallback: true,\n });\n }\n //* Start typings\n const keysRegex = /^([a-z]|[а-я]|[0-9]|=)$/;\n if (!event.metaKey && !event.ctrlKey) {\n //* Prevent handle shortcutrs\n const isPressedLetterKey = keysRegex.test(event.key.toLowerCase());\n if (event.key === \"F2\" || isPressedLetterKey) {\n //* English and Russian keyboard. Or F2 button\n event.preventDefault();\n if (!this.root.selection.selectedCell)\n return;\n this.root.showEditor(this.root.selection.selectedCell, isPressedLetterKey ? event.key : undefined);\n }\n }\n if (event.key === \"Delete\") {\n event.preventDefault();\n this.root.deleteSelectedCellsValues();\n this.root.renderSheet();\n }\n if (event.metaKey || event.ctrlKey) {\n if (event.code === \"KeyC\") {\n let cells = undefined;\n const selection = new Selection();\n if (this.root.selection.selectedRange) {\n const { from, to } = this.root.selection.selectedRange;\n selection.selectedRange = this.root.selection.selectedRange;\n const subArrByRows = this.root.data.slice(from.row, to.row + 1);\n const subArrByCols = subArrByRows.map((row) => {\n return row.slice(from.column, to.column + 1);\n });\n cells = [...subArrByCols];\n }\n else if (this.root.selection.selectedCell) {\n const { column, row } = this.root.selection.selectedCell;\n cells = [[this.root.data[row][column]]];\n selection.selectedRange = {\n from: this.root.selection.selectedCell,\n to: this.root.selection.selectedCell,\n };\n }\n else {\n return;\n }\n this.root.clipboard.copy(cells, selection.selectedRange);\n return;\n }\n if (event.code === \"KeyV\") {\n // if (!this.root.selection.selectedCell) return;\n // this.root.clipboard.paste(this.root, this.root.selection.selectedCell);\n }\n }\n };\n handleClick = (event) => {\n this.root.events.dispatch({\n type: EventTypes.CELL_CLICK,\n event,\n scroller: this,\n });\n };\n handleScroll = () => {\n const rect = this.getViewportBoundlingRect();\n this.root.viewport.updateValues(rect);\n this.root.renderSheet();\n this.root.renderColumnsBar();\n this.root.renderRowsBar();\n };\n getViewportBoundlingRect() {\n const { scrollTop, scrollLeft } = this.element;\n const { height, width } = this.element.getBoundingClientRect();\n const bottom = scrollTop + height;\n const right = scrollLeft + width;\n return {\n top: scrollTop,\n left: scrollLeft,\n bottom,\n right,\n };\n }\n buildComponent() {\n const scroller = document.createElement(\"div\");\n const verticalScroller = document.createElement(\"div\");\n const horizontalScroller = document.createElement(\"div\");\n const groupScrollers = document.createElement(\"div\");\n const stack = document.createElement(\"div\");\n verticalScroller.style.width = \"0px\";\n verticalScroller.style.pointerEvents = \"none\";\n horizontalScroller.style.pointerEvents = \"none\";\n groupScrollers.style.display = \"flex\";\n stack.appendChild(verticalScroller);\n stack.appendChild(horizontalScroller);\n groupScrollers.appendChild(stack);\n this.verticalScroller = verticalScroller;\n this.horizontalScroller = horizontalScroller;\n scroller.appendChild(groupScrollers);\n scroller.contentEditable = \"false\";\n scroller.classList.add(CSS_PREFIX + \"scroller\");\n return { scroller, verticalScroller, horizontalScroller };\n }\n getActualHeight() {\n return this.root.config.rows.reduce((acc, curr) => {\n acc += curr.height;\n return acc;\n }, 0);\n }\n getActualWidth() {\n return this.root.config.columns.reduce((acc, curr) => {\n acc += curr.width;\n return acc;\n }, 0);\n }\n updateScrollerSize() {\n const totalHeight = this.getActualHeight();\n const totalWidth = this.getActualWidth();\n this.setScrollerHeight(totalHeight);\n this.setScrollerWidth(totalWidth);\n }\n setScrollerHeight(height) {\n this.verticalScroller.style.height = height + \"px\";\n }\n setScrollerWidth(width) {\n this.horizontalScroller.style.width = width + \"px\";\n }\n}\n","import { RenderBox } from \"./renderBox\";\nexport class CellStyles {\n fontSize = 16;\n fontColor = \"black\";\n background = \"white\";\n borderColor = \"black\";\n selectedBackground = \"#4287f5\";\n selectedFontColor = \"#ffffff\";\n constructor(props) {\n if (props) {\n Object.assign(this, props); // Override default styles\n }\n }\n}\nexport class Position {\n row;\n column;\n constructor(row, column) {\n this.row = row;\n this.column = column;\n }\n}\nexport class SerializableCell {\n value;\n displayValue;\n resultValue;\n position;\n style;\n constructor(props) {\n this.value = props.value;\n this.displayValue = props.displayValue;\n this.resultValue = props.resultValue;\n this.position = props.position;\n this.style = props.style;\n }\n}\nexport class Cell {\n /** True value (data) */\n value;\n /** Value to render */\n displayValue;\n /** This refers to the values that were obtained by calculations, for example, after calculating the formula */\n resultValue;\n position;\n style = null;\n cellsDependsOnThisCell = [];\n dependedFromCells = [];\n constructor(props) {\n this.value = props.value;\n this.displayValue = props.displayValue;\n this.resultValue = props.resultValue;\n this.position = props.position;\n this.style = props.style;\n }\n getSerializableCell() {\n const cell = new SerializableCell({\n displayValue: this.displayValue,\n position: this.position,\n resultValue: this.resultValue,\n style: this.style,\n value: this.value,\n });\n return cell;\n }\n changeStyles(styles) {\n this.style = styles;\n }\n changeValues(values) {\n Object.assign(this, values);\n }\n evalFormula(parser) {\n if (this.value.substring(0, 1) !== '=')\n return;\n this.resultValue = parser.parser.parse(this.value.slice(1), {\n col: this.position.column,\n row: this.position.row\n });\n }\n // private isCellInRange(root: Spreadsheet): boolean {\n // const { column, row } = this.position;\n // const { selectedRange } = root.selection;\n // if (!selectedRange) return false;\n // const isCellInRow =\n // row >= Math.min(selectedRange.from.row, selectedRange.to.row) &&\n // row <= Math.max(selectedRange.to.row, selectedRange.from.row);\n // const isCellInCol =\n // column >= Math.min(selectedRange.from.column, selectedRange.to.column) &&\n // column <= Math.max(selectedRange.to.column, selectedRange.from.column);\n // return isCellInCol && isCellInRow;\n // }\n render(root) {\n const renderBox = new RenderBox(root.config, this.position);\n let { x, y } = renderBox;\n const { height, width } = renderBox;\n const { ctx } = root;\n // const isCellSelected =\n // root.selection.selectedCell?.row === this.position.row &&\n // root.selection.selectedCell.column === this.position.column;\n // const isCellInRange = this.isCellInRange(root);\n y -= root.viewport.top;\n x -= root.viewport.left;\n const styles = this.style ?? root.styles.cells;\n ctx.clearRect(x, y, width, height);\n ctx.fillStyle = styles.background;\n ctx.strokeStyle = \"black\";\n ctx.fillRect(x, y, width - 1, height - 1);\n ctx.strokeRect(x, y, width, height);\n ctx.fillStyle = styles.fontColor;\n ctx.textAlign = \"left\";\n ctx.font = `${styles.fontSize}px Arial`;\n ctx.textBaseline = \"middle\";\n ctx.fillText(this.displayValue, x + 2, y + height / 2);\n }\n}\n","import { CSS_PREFIX, RenderBox } from \"../main\";\nimport { Position } from \"../modules/cell\";\n/**\n * Display (CANVAS) element where cells render\n */\nexport class Sheet {\n element;\n ctx;\n root;\n constructor(root) {\n this.root = root;\n const canvas = document.createElement(\"canvas\");\n canvas.classList.add(CSS_PREFIX + \"sheet\");\n //* Set up canvas sizes based on provided root config\n canvas.height = this.root.config.view.height;\n canvas.width = this.root.config.view.width;\n canvas.style.width = this.root.config.view.width + \"px\";\n canvas.style.height = this.root.config.view.height + \"px\";\n canvas.style.left = \"0px\";\n this.element = canvas;\n const ctx = this.element.getContext(\"2d\");\n if (!ctx)\n throw new Error(\"Enable hardware acceleration\");\n this.ctx = ctx;\n }\n getCellByCoords(x, y) {\n let row = 0;\n let height = 0;\n while (height <= y) {\n height += this.root.config.rows[row].height;\n if (height >= y)\n break;\n row++;\n }\n let col = 0;\n let width = 0;\n while (width <= x) {\n width += this.root.config.columns[col].width;\n if (width >= x)\n break;\n col++;\n }\n return new Position(row, col);\n }\n renderCell(position) {\n const { column, row } = position;\n this.root.data[row][column].render(this.root);\n }\n getSelectionRange() {\n const { selectedCell, selectedRange } = this.root.selection;\n if (!selectedCell && !selectedRange)\n return;\n if (selectedRange) {\n const startRow = Math.min(selectedRange.from.row, selectedRange.to.row);\n const startCol = Math.min(selectedRange.from.column, selectedRange.to.column);\n const lastRow = Math.max(selectedRange.from.row, selectedRange.to.row);\n const lastCol = Math.max(selectedRange.from.column, selectedRange.to.column);\n const startCellBox = new RenderBox(this.root.config, {\n row: startRow,\n column: startCol,\n });\n let width = 0;\n for (let col = startCol; col <= lastCol; col++) {\n width += this.root.config.columns[col].width;\n }\n let height = 0;\n for (let row = startRow; row <= lastRow; row++) {\n height += this.root.config.rows[row].height;\n }\n const x = startCellBox.x - this.root.viewport.left;\n const y = startCellBox.y - this.root.viewport.top;\n return { x, y, height, width };\n }\n if (!selectedRange && selectedCell) {\n const box = new RenderBox(this.root.config, selectedCell);\n box.x -= this.root.viewport.left;\n box.y -= this.root.viewport.top;\n return box;\n }\n }\n renderSelectionRange(x, y, width, height) {\n this.ctx.save();\n this.ctx.strokeStyle = \"#7da8ff\";\n this.ctx.lineWidth = 3;\n this.ctx.strokeRect(x, y, width, height);\n this.ctx.fillStyle = \"#7da8ff35\";\n this.ctx.fillRect(x, y, width, height);\n this.ctx.restore();\n }\n renderSelection() {\n const box = this.getSelectionRange();\n if (!box)\n return;\n const { height, width, x, y } = box;\n this.renderSelectionRange(x, y, width, height);\n }\n renderSheet() {\n const firstRowIdx = this.root.viewport.firstRow;\n const lastColIdx = this.root.viewport.lastCol + 3;\n const lastRowIdx = this.root.viewport.lastRow + 3;\n const firstColIdx = this.root.viewport.firstCol;\n for (let row = firstRowIdx; row <= lastRowIdx; row++) {\n for (let col = firstColIdx; col <= lastColIdx; col++) {\n if (!this.root.config.columns[col] || !this.root.config.rows[row])\n break; //* Prevent read undefined\n this.renderCell({ column: col, row });\n }\n }\n this.renderSelection();\n }\n}\n","import { CSS_PREFIX } from \"../main\";\n/** Base (root) component */\nexport class Table {\n element;\n root;\n constructor(root) {\n this.root = root;\n const container = document.createElement(\"div\");\n container.classList.add(CSS_PREFIX + \"spreadsheet_container\");\n this.element = container;\n this.changeElementSizes(this.root.viewProps);\n }\n changeElementSizes(sizes) {\n const { height, width } = sizes;\n this.element.style.width = width + this.root.rowsBarWidth + \"px\";\n this.element.style.height = height + this.root.columnsBarHeight + \"px\";\n }\n}\n","import { CSS_PREFIX } from \"../main\";\nexport class Toolbar {\n element;\n root;\n height = 0;\n constructor(root) {\n this.root = root;\n const toolbarElement = document.createElement(\"div\");\n toolbarElement.classList.add(CSS_PREFIX + \"toolbar\");\n this.element = toolbarElement;\n }\n}\n","export class Config {\n rows;\n columns;\n view = {\n width: 800,\n height: 600,\n };\n onCellClick = null;\n onSelectonChange = null;\n onCellChange = null;\n onCopy;\n constructor(props) {\n this.columns = props.columns;\n this.rows = props.rows;\n this.view = props.view;\n this.onCellClick = props.onCellClick ?? null;\n this.onSelectonChange = props.onSelectionChange ?? null;\n this.onCellChange = props.onCellChange ?? null;\n this.onCopy = props.onCopy ?? null;\n }\n}\n","export class Selection {\n selectedCell = null;\n selectedRange = null;\n}\n","import { CellStyles } from \"./cell\";\nexport class Styles {\n cells;\n constructor() {\n this.cells = new CellStyles();\n }\n}\n","export class Viewport {\n root;\n top;\n left;\n right;\n bottom;\n firstRow;\n lastRow;\n firstCol;\n lastCol;\n constructor(root, props) {\n this.root = root;\n this.top = props.top;\n this.left = props.left;\n this.right = props.right;\n this.bottom = props.bottom;\n this.firstRow = this.getFirstRow();\n this.lastCol = this.getFirstRow(); //!Temp\n this.firstCol = this.getFirstRow(); //!Temp\n this.lastRow = this.getLastRow();\n this.updateValues({\n top: 0,\n left: 0,\n right: this.root.viewProps.width,\n bottom: this.root.viewProps.height,\n });\n }\n updateValues(props) {\n this.top = props.top;\n this.left = props.left;\n this.right = props.right;\n this.bottom = props.bottom;\n this.firstRow = this.getFirstRow();\n this.lastRow = this.getLastRow();\n this.firstCol = this.getFirstCol();\n this.lastCol = this.getLastCol();\n }\n /** Get index of first row in viewport */\n getFirstRow() {\n const rowIdx = this.root.cache.getRowByYCoord(this.top);\n return rowIdx;\n }\n getLastRow() {\n const rowIdx = this.root.cache.getRowByYCoord(this.bottom);\n return rowIdx;\n }\n getFirstCol() {\n const colIdx = this.root.cache.getColumnByXCoord(this.left);\n return colIdx;\n }\n getLastCol() {\n const colIdx = this.root.cache.getColumnByXCoord(this.right);\n return colIdx;\n }\n}\n","export class Column {\n width;\n title;\n constructor(props) {\n this.width = props.width;\n this.title = props.title;\n }\n}\n","export class Row {\n height;\n title;\n constructor(props) {\n this.height = props.height;\n this.title = props.title;\n }\n}\n","import { Cell } from \"../modules/cell\";\nimport { Column } from \"../modules/column\";\nimport { Config } from \"../modules/config\";\nimport { Row } from \"../modules/row\";\nexport function createSampleData(rows, columns, fillCellsByCoords = false) {\n const data = [];\n for (let row = 0; row <= rows; row++) {\n const innerRow = [];\n for (let col = 0; col <= columns; col++) {\n const value = fillCellsByCoords ? `${row}:${col}` : \"\";\n const cell = new Cell({\n displayValue: value,\n resultValue: value,\n value,\n position: {\n column: col,\n row: row,\n },\n style: null,\n });\n innerRow.push(cell);\n }\n data.push(innerRow);\n }\n return data;\n}\nexport function createSampleConfig(rows, columns) {\n const rowsArr = [];\n for (let i = 0; i <= rows; i++) {\n const rowItem = new Row({\n height: 40,\n title: String(i),\n });\n rowsArr.push(rowItem);\n }\n const colsArr = [];\n for (let i = 0; i <= columns; i++) {\n const colItem = new Column({\n title: String(i),\n width: 150,\n });\n colsArr.push(colItem);\n }\n const config = new Config({\n columns: colsArr,\n rows: rowsArr,\n view: {\n height: 600,\n width: 800,\n },\n });\n return config;\n}\nexport function makeSpreadsheetConfigAndData(rows, columns) {\n const data = createSampleData(rows, columns);\n const config = createSampleConfig(rows, columns);\n return { data, config };\n}\n","export class CachedColumn {\n xPos;\n colIdx;\n constructor(props) {\n this.xPos = props.xPos;\n this.colIdx = props.colIdx;\n }\n}\nexport class CachedRow {\n yPos;\n rowIdx;\n constructor(props) {\n this.yPos = props.yPos;\n this.rowIdx = props.rowIdx;\n }\n}\nexport class Cache {\n columns;\n rows;\n constructor(initial) {\n this.columns = initial.columns;\n this.rows = initial.rows;\n }\n getRowByYCoord(y) {\n let rowIdx = 0;\n for (let i = 0; i < this.rows.length; i++) {\n rowIdx = i;\n if (y <= this.rows[i].yPos) { //* Intersection detect\n break;\n }\n }\n return rowIdx;\n }\n getColumnByXCoord(x) {\n let colIdx = 0;\n for (let i = 0; i < this.columns.length; i++) {\n colIdx = i;\n if (x <= this.columns[i].xPos) { //* Intersection detect\n break;\n }\n }\n return colIdx;\n }\n}\n","import { RenderBox } from \"../main\";\nexport class ColumnsBar {\n element;\n root;\n height = 35;\n width;\n // private resizerWidth = 1;\n ctx;\n constructor(root) {\n this.root = root;\n this.element = this.createElement();\n const ctx = this.element.getContext(\"2d\");\n if (!ctx)\n throw new Error(\"Enable hardware acceleration\");\n this.ctx = ctx;\n this.width = this.root.viewProps.width;\n }\n createElement() {\n const element = document.createElement(\"canvas\");\n element.style.position = \"absolute\";\n element.style.height = this.height + \"px\";\n element.style.width = this.root.viewProps.width + \"px\";\n element.style.display = \"block\";\n element.style.borderLeft = \"1px solid black\";\n // element.style.boxSizing = 'border-box'\n element.width = this.root.viewProps.width;\n element.height = this.height;\n return element;\n }\n setElementPosition(top, left) {\n this.element.style.top = top + \"px\";\n this.element.style.left = left + \"px\";\n }\n isColumnSelected(column) {\n const { selectedCell, selectedRange } = this.root.selection;\n if (selectedCell && selectedCell.column === column)\n return true;\n if (selectedRange) {\n const inRange = column >=\n Math.min(selectedRange.from.column, selectedRange.to.column) &&\n column <= Math.max(selectedRange.from.column, selectedRange.to.column);\n return inRange;\n }\n return false;\n }\n // private getYCoordWithOffset(renderBox: RenderBox): number {\n // const {y} = renderBox\n // return y + this.root.toolbarHeight\n // }\n // private getXCoordWithOffset(renderBox: RenderBox): number {\n // const {x} = renderBox\n // return x\n // }\n renderText(column, renderBox) {\n const { width, x } = renderBox;\n this.ctx.fillStyle = \"black\";\n this.ctx.textAlign = \"center\";\n this.ctx.textBaseline = \"middle\";\n this.ctx.font = \"12px Arial\";\n this.ctx.fillText(this.root.config.columns[column].title, x + width / 2 - this.root.viewport.left, 0 + this.height / 2);\n }\n renderRect(column, renderBox) {\n const { width, x } = renderBox;\n const isColSelected = this.isColumnSelected(column);\n this.ctx.fillStyle = isColSelected ? \"#c7ebff\" : \"white\";\n this.ctx.strokeStyle = \"black\";\n this.ctx.lineWidth = 1;\n const specialX = x - this.root.viewport.left;\n this.ctx.fillRect(specialX - 1, 0, width, this.height);\n this.ctx.strokeRect(specialX - 1, 0, width, this.height);\n }\n renderSingleColumn(column) {\n const renderBox = new RenderBox(this.root.config, {\n row: 0,\n column: column,\n });\n this.renderRect(column, renderBox);\n this.renderText(column, renderBox);\n }\n renderBar() {\n const lastColIdx = this.root.viewport.lastCol + 3;\n const firstColIdx = this.root.viewport.firstCol;\n this.ctx.beginPath();\n this.ctx.strokeStyle = \"black\";\n this.ctx.lineWidth = 1;\n this.ctx.moveTo(0, 0);\n this.ctx.lineTo(0, this.height);\n this.ctx.closePath();\n this.ctx.stroke();\n for (let col = firstColIdx; col <= lastColIdx; col++) {\n if (!this.root.config.columns[col])\n break;\n this.renderSingleColumn(col);\n }\n }\n}\n","import { RenderBox } from \"../main\";\nexport class RowsBar {\n element;\n ctx;\n root;\n width = 35;\n height;\n resizerHeight = 1;\n constructor(root) {\n this.root = root;\n this.element = this.createElement();\n const ctx = this.element.getContext(\"2d\");\n if (!ctx)\n throw new Error(\"Enable hardware acceleration\");\n this.ctx = ctx;\n this.height = this.root.viewProps.height;\n }\n createElement() {\n const element = document.createElement(\"canvas\");\n element.style.position = \"absolute\";\n element.style.height = this.root.viewProps.height + \"px\";\n element.style.width = this.width + \"px\";\n element.style.display = \"block\";\n element.style.borderTop = \"1px solid black\";\n // element.style.boxSizing = 'border-box'\n element.width = this.width;\n element.height = this.root.viewProps.height;\n return element;\n }\n setElementPosition(top, left) {\n this.element.style.top = top + \"px\";\n this.element.style.left = left + \"px\";\n }\n isRowSelected(row) {\n const { selectedCell, selectedRange } = this.root.selection;\n if (selectedCell && selectedCell.row === row)\n return true;\n if (selectedRange) {\n const inRange = row >= Math.min(selectedRange.from.row, selectedRange.to.row) &&\n row <= Math.max(selectedRange.from.row, selectedRange.to.row);\n return inRange;\n }\n return false;\n }\n renderText(row, renderBox) {\n const { y, height } = renderBox;\n this.ctx.fillStyle = \"black\";\n this.ctx.textAlign = \"center\";\n this.ctx.textBaseline = \"middle\";\n this.ctx.font = \"12px Arial\";\n this.ctx.fillText(this.root.config.rows[row].title, this.width / 2, y - this.root.viewport.top + height / 2);\n }\n renderRect(column, renderBox) {\n const { y, height } = renderBox;\n const isRowSeleted = this.isRowSelected(column);\n this.ctx.fillStyle = isRowSeleted ? \"#c7ebff\" : \"white\";\n this.ctx.strokeStyle = \"black\";\n this.ctx.lineWidth = this.resizerHeight;\n const specialY = y - this.root.viewport.top;\n this.ctx.fillRect(0, specialY - 1, this.width, height);\n this.ctx.strokeRect(0, specialY - 1, this.width, height);\n }\n renderSingleRow(row) {\n const renderBox = new RenderBox(this.root.config, {\n column: 0,\n row: row,\n });\n this.renderRect(row, renderBox);\n this.renderText(row, renderBox);\n }\n renderBar() {\n const lastRowIdx = this.root.viewport.lastRow + 3;\n const firstRowIdx = this.root.viewport.firstRow;\n this.ctx.beginPath();\n this.ctx.moveTo(0, 0);\n this.ctx.strokeStyle = \"black\";\n this.ctx.lineWidth = 16;\n this.ctx.lineTo(35, 0);\n this.ctx.closePath();\n this.ctx.stroke();\n for (let row = firstRowIdx; row <= lastRowIdx; row++) {\n if (!this.root.config.rows[row])\n break;\n this.renderSingleRow(row);\n }\n }\n}\n","import { Cell, CellStyles } from \"./cell\";\nimport { EventTypes } from \"./events\";\nexport class Clipboard {\n saved = null;\n root;\n constructor(root) {\n this.root = root;\n }\n copy(data, range) {\n const mapedData = data\n .map((row) => {\n return row\n .map((item) => {\n return item.displayValue;\n })\n .join(\"\\t\");\n })\n .join(\"\\n\");\n this.saved = data;\n navigator.clipboard.writeText(mapedData);\n this.root.events.dispatch({\n type: EventTypes.COPY_CELLS,\n data,\n dataAsString: mapedData,\n range,\n });\n }\n paste(root, { column, row }, event) {\n if (!this.saved) {\n if (!event.clipboardData)\n return;\n const data = event.clipboardData.getData(\"text\");\n try {\n const arr = data.split(\"\\n\").map((item) => item.split(\"\\t\"));\n const arrayOfCells = arr.map((innerRow) => {\n return innerRow.map((item) => {\n const cellProps = {\n displayValue: item,\n position: {\n column,\n row,\n },\n resultValue: item,\n style: new CellStyles(),\n value: item,\n };\n return new Cell(cellProps);\n });\n });\n const rowsLength = arrayOfCells.length;\n const colsLength = arrayOfCells[0] ? arrayOfCells[0].length : 0;\n for (let i = 0; i < rowsLength; i++) {\n for (let j = 0; j < colsLength; j++) {\n const savedCell = arrayOfCells[i][j];\n const position = {\n column: column + j,\n row: row + i,\n };\n const values = {\n displayValue: savedCell.displayValue,\n value: savedCell.value,\n style: savedCell.style,\n };\n root.changeCellValues(position, values, false);\n }\n }\n }\n catch (err) {\n console.error(\"Cannot read clipboard. \", err);\n }\n root.renderSheet();\n return;\n }\n const rowsLength = this.saved.length;\n const colsLength = this.saved[0] ? this.saved[0].length : 0;\n for (let i = 0; i < rowsLength; i++) {\n for (let j = 0; j < colsLength; j++) {\n const savedCell = this.saved[i][j];\n const position = {\n column: column + j,\n row: row + i,\n };\n const values = {\n displayValue: savedCell.displayValue,\n value: savedCell.value,\n style: savedCell.style,\n };\n root.changeCellValues(position, values, false);\n }\n }\n }\n}\n","/**\r\n * Represents unions.\r\n * (A1, A1:C5, ...)\r\n */\r\nclass Collection {\r\n\r\n constructor(data, refs) {\r\n if (data == null && refs == null) {\r\n this._data = [];\r\n this._refs = [];\r\n } else {\r\n if (data.length !== refs.length)\r\n throw Error('Collection: data length should match references length.');\r\n this._data = data;\r\n this._refs = refs;\r\n }\r\n }\r\n\r\n get data() {\r\n return this._data;\r\n }\r\n\r\n get refs() {\r\n return this._refs;\r\n }\r\n\r\n get length() {\r\n return this._data.length;\r\n }\r\n\r\n /**\r\n * Add data and references to this collection.\r\n * @param {{}} obj - data\r\n * @param {{}} ref - reference\r\n */\r\n add(obj, ref) {\r\n this._data.push(obj);\r\n this._refs.push(ref);\r\n }\r\n}\r\n\r\nmodule.exports = Collection;\r\n","const FormulaError = require('./error');\r\nconst Collection = require('../grammar/type/collection');\r\n\r\nconst Types = {\r\n NUMBER: 0,\r\n ARRAY: 1,\r\n BOOLEAN: 2,\r\n STRING: 3,\r\n RANGE_REF: 4, // can be 'A:C' or '1:4', not only 'A1:C3'\r\n CELL_REF: 5,\r\n COLLECTIONS: 6, // Unions of references\r\n NUMBER_NO_BOOLEAN: 10,\r\n};\r\n\r\nconst Factorials = [1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880, 3628800, 39916800, 479001600, 6227020800, 87178291200, 1307674368000, 20922789888000, 355687428096000, 6402373705728000, 121645100408832000, 2432902008176640000, 51090942171709440000, 1124000727777607680000, 25852016738884976640000, 620448401733239439360000, 15511210043330985984000000, 403291461126605635584000000, 10888869450418352160768000000, 304888344611713860501504000000, 8841761993739701954543616000000, 265252859812191058636308480000000, 8222838654177922817725562880000000, 263130836933693530167218012160000000, 8683317618811886495518194401280000000, 295232799039604140847618609643520000000, 10333147966386144929666651337523200000000, 371993326789901217467999448150835200000000, 13763753091226345046315979581580902400000000, 523022617466601111760007224100074291200000000, 20397882081197443358640281739902897356800000000, 815915283247897734345611269596115894272000000000, 33452526613163807108170062053440751665152000000000, 1405006117752879898543142606244511569936384000000000, 60415263063373835637355132068513997507264512000000000, 2658271574788448768043625811014615890319638528000000000, 119622220865480194561963161495657715064383733760000000000, 5502622159812088949850305428800254892961651752960000000000, 258623241511168180642964355153611979969197632389120000000000, 12413915592536072670862289047373375038521486354677760000000000, 608281864034267560872252163321295376887552831379210240000000000, 30414093201713378043612608166064768844377641568960512000000000000, 1551118753287382280224243016469303211063259720016986112000000000000, 80658175170943878571660636856403766975289505440883277824000000000000, 4274883284060025564298013753389399649690343788366813724672000000000000, 230843697339241380472092742683027581083278564571807941132288000000000000, 12696403353658275925965100847566516959580321051449436762275840000000000000, 710998587804863451854045647463724949736497978881168458687447040000000000000, 40526919504877216755680601905432322134980384796226602145184481280000000000000, 2350561331282878571829474910515074683828862318181142924420699914240000000000000, 138683118545689835737939019720389406345902876772687432540821294940160000000000000, 8320987112741390144276341183223364380754172606361245952449277696409600000000000000, 507580213877224798800856812176625227226004528988036003099405939480985600000000000000, 31469973260387937525653122354950764088012280797258232192163168247821107200000000000000, 1982608315404440064116146708361898137544773690227268628106279599612729753600000000000000, 126886932185884164103433389335161480802865516174545192198801894375214704230400000000000000, 8247650592082470666723170306785496252186258551345437492922123134388955774976000000000000000, 544344939077443064003729240247842752644293064388798874532860126869671081148416000000000000000, 36471110918188685288249859096605464427167635314049524593701628500267962436943872000000000000000, 2480035542436830599600990418569171581047399201355367672371710738018221445712183296000000000000000, 171122452428141311372468338881272839092270544893520369393648040923257279754140647424000000000000000, 11978571669969891796072783721689098736458938142546425857555362864628009582789845319680000000000000000, 850478588567862317521167644239926010288584608120796235886430763388588680378079017697280000000000000000, 61234458376886086861524070385274672740778091784697328983823014963978384987221689274204160000000000000000, 4470115461512684340891257138125051110076800700282905015819080092370422104067183317016903680000000000000000, 330788544151938641225953028221253782145683251820934971170611926835411235700971565459250872320000000000000000, 24809140811395398091946477116594033660926243886570122837795894512655842677572867409443815424000000000000000000, 1885494701666050254987932260861146558230394535379329335672487982961844043495537923117729972224000000000000000000, 145183092028285869634070784086308284983740379224208358846781574688061991349156420080065207861248000000000000000000, 11324281178206297831457521158732046228731749579488251990048962825668835325234200766245086213177344000000000000000000, 894618213078297528685144171539831652069808216779571907213868063227837990693501860533361810841010176000000000000000000, 71569457046263802294811533723186532165584657342365752577109445058227039255480148842668944867280814080000000000000000000, 5797126020747367985879734231578109105412357244731625958745865049716390179693892056256184534249745940480000000000000000000, 475364333701284174842138206989404946643813294067993328617160934076743994734899148613007131808479167119360000000000000000000, 39455239697206586511897471180120610571436503407643446275224357528369751562996629334879591940103770870906880000000000000000000, 3314240134565353266999387579130131288000666286242049487118846032383059131291716864129885722968716753156177920000000000000000000, 281710411438055027694947944226061159480056634330574206405101912752560026159795933451040286452340924018275123200000000000000000000, 24227095383672732381765523203441259715284870552429381750838764496720162249742450276789464634901319465571660595200000000000000000000, 2107757298379527717213600518699389595229783738061356212322972511214654115727593174080683423236414793504734471782400000000000000000000, 185482642257398439114796845645546284380220968949399346684421580986889562184028199319100141244804501828416633516851200000000000000000000, 16507955160908461081216919262453619309839666236496541854913520707833171034378509739399912570787600662729080382999756800000000000000000000, 1485715964481761497309522733620825737885569961284688766942216863704985393094065876545992131370884059645617234469978112000000000000000000000, 135200152767840296255166568759495142147586866476906677791741734597153670771559994765685283954750449427751168336768008192000000000000000000000, 12438414054641307255475324325873553077577991715875414356840239582938137710983519518443046123837041347353107486982656753664000000000000000000000, 1156772507081641574759205162306240436214753229576413535186142281213246807121467315215203289516844845303838996289387078090752000000000000000000000, 108736615665674308027365285256786601004186803580182872307497374434045199869417927630229109214583415458560865651202385340530688000000000000000000000, 10329978488239059262599702099394727095397746340117372869212250571234293987594703124871765375385424468563282236864226607350415360000000000000000000000, 991677934870949689209571401541893801158183648651267795444376054838492222809091499987689476037000748982075094738965754305639874560000000000000000000000, 96192759682482119853328425949563698712343813919172976158104477319333745612481875498805879175589072651261284189679678167647067832320000000000000000000000, 9426890448883247745626185743057242473809693764078951663494238777294707070023223798882976159207729119823605850588608460429412647567360000000000000000000000, 933262154439441526816992388562667004907159682643816214685929638952175999932299156089414639761565182862536979208272237582511852109168640000000000000000000000, 93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000];\r\n\r\nconst ReversedTypes = {};\r\nObject.keys(Types).forEach((key) => {\r\n ReversedTypes[Types[key]] = key;\r\n});\r\n\r\n/**\r\n * Formula helpers.\r\n */\r\nclass FormulaHelpers {\r\n constructor() {\r\n this.Types = Types;\r\n this.type2Number = {\r\n number: Types.NUMBER,\r\n boolean: Types.BOOLEAN,\r\n string: Types.STRING,\r\n object: -1\r\n };\r\n }\r\n\r\n checkFunctionResult(result) {\r\n const type = typeof result;\r\n // number\r\n if (type === 'number') {\r\n if (isNaN(result)) {\r\n return FormulaError.VALUE;\r\n } else if (!isFinite(result)) {\r\n return FormulaError.NUM;\r\n }\r\n }\r\n if (result === undefined || result === null)\r\n return FormulaError.NULL;\r\n return result;\r\n }\r\n\r\n /**\r\n * Flatten an array\r\n * @param {Array} arr1\r\n * @returns {*}\r\n */\r\n flattenDeep(arr1) {\r\n return arr1.reduce((acc, val) => Array.isArray(val) ? acc.concat(this.flattenDeep(val)) : acc.concat(val), []);\r\n }\r\n\r\n /**\r\n *\r\n * @param obj\r\n * @param isArray - if it is an array: [1,2,3], will extract the first element\r\n * @param allowBoolean - Allow parse boolean into number\r\n * @returns {number|FormulaError}\r\n */\r\n acceptNumber(obj, isArray = true, allowBoolean = true) {\r\n // check error\r\n if (obj instanceof FormulaError)\r\n return obj;\r\n let number;\r\n\r\n if (typeof obj === 'number')\r\n number = obj;\r\n // TRUE -> 1, FALSE -> 0\r\n else if (typeof obj === 'boolean') {\r\n if (allowBoolean) {\r\n number = Number(obj);\r\n } else {\r\n throw FormulaError.VALUE;\r\n }\r\n }\r\n // \"123\" -> 123\r\n else if (typeof obj === 'string') {\r\n if (obj.length === 0) {\r\n throw FormulaError.VALUE;\r\n }\r\n number = Number(obj);\r\n // Note: the unique never-equal-to-itself characteristic of NaN\r\n if (number !== number) {\r\n throw FormulaError.VALUE;\r\n }\r\n } else if (Array.isArray(obj)) {\r\n if (!isArray) {\r\n // for range ref, only allow single column range ref\r\n if (obj[0].length === 1) {\r\n number = this.acceptNumber(obj[0][0]);\r\n } else {\r\n throw FormulaError.VALUE;\r\n }\r\n } else {\r\n number = this.acceptNumber(obj[0][0]);\r\n }\r\n\r\n } else {\r\n throw Error('Unknown type in FormulaHelpers.acceptNumber')\r\n }\r\n return number;\r\n }\r\n\r\n /**\r\n * Flatten parameters to 1D array.\r\n * @see {@link FormulaHelpers.accept}\r\n * @param {Array} params - Parameter that needs to flatten.\r\n * @param {Types|null} valueType - The type each item should be,\r\n * null if allows any type. This only applies to literals.\r\n * @param {boolean} allowUnion - Allow union, e.g. (A1:C1, E4:F3)\r\n * @param {function} hook - Invoked after parsing each item.\r\n * of the array.\r\n * @param {*} [defValue=null] - The value if an param is omitted. i.e. SUM(1,2,,,,,)\r\n * @param {number} [minSize=1] - The minimum size of the parameters\r\n */\r\n flattenParams(params, valueType, allowUnion, hook, defValue = null, minSize = 1) {\r\n if (params.length < minSize)\r\n throw FormulaError.ARG_MISSING([valueType]);\r\n if (defValue == null) {\r\n defValue = valueType === Types.NUMBER ? 0 : valueType == null ? null : '';\r\n }\r\n params.forEach(param => {\r\n const {isCellRef, isRangeRef, isArray} = param;\r\n const isUnion = param.value instanceof Collection;\r\n const isLiteral = !isCellRef && !isRangeRef && !isArray && !isUnion;\r\n const info = {isLiteral, isCellRef, isRangeRef, isArray, isUnion};\r\n\r\n // single element\r\n if (isLiteral) {\r\n if (param.omitted)\r\n param = defValue;\r\n else\r\n param = this.accept(param, valueType, defValue);\r\n hook(param, info);\r\n }\r\n // cell reference of single range reference (A1:A1)\r\n else if (isCellRef) {\r\n hook(param.value, info);\r\n }\r\n // union\r\n else if (isUnion) {\r\n if (!allowUnion) throw FormulaError.VALUE;\r\n param = param.value.data;\r\n param = this.flattenDeep(param);\r\n param.forEach(item => {\r\n hook(item, info);\r\n })\r\n } else if (isRangeRef || isArray) {\r\n param = this.flattenDeep(param.value);\r\n param.forEach(item => {\r\n hook(item, info);\r\n })\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Check if the param valid, return the parsed param.\r\n * If type is not given, return the un-parsed param.\r\n * @param {*} param\r\n * @param {number|null} [type] - The expected type\r\n * NUMBER: Expect a single number,\r\n * ARRAY: Expect an flatten array,\r\n * BOOLEAN: Expect a single boolean,\r\n * STRING: Expect a single string,\r\n * COLLECTIONS: Expect an Array of the above types\r\n * null: Do not parse the value, return it directly.\r\n * The collection is not a flatted array.\r\n * @param {*} [defValue] - Default value if the param is not given.\r\n * if undefined, this param is required, a Error will throw if not given.\r\n * if null, and param is undefined, null will be returned.\r\n * @param {boolean} [flat=true] - If the array should be flattened,\r\n * only applicable when type is ARRAY.\r\n * If false, collection is disallowed.\r\n * @param {boolean} allowSingleValue - If pack single value into 2d array,\r\n * only applicable when type is ARRAY.\r\n * @return {string|number|boolean|{}|Array}\r\n */\r\n accept(param, type = null, defValue, flat = true, allowSingleValue = false) {\r\n // TODO: remove this array check\r\n if (Array.isArray(type))\r\n type = type[0];\r\n if (param == null && defValue === undefined) {\r\n throw FormulaError.ARG_MISSING([type]);\r\n } else if (param == null)\r\n return defValue;\r\n\r\n if (typeof param !== \"object\" || Array.isArray(param))\r\n return param;\r\n\r\n const isArray = param.isArray;\r\n if (param.value != null) param = param.value;\r\n\r\n // return an un-parsed type.\r\n if (type == null)\r\n return param;\r\n\r\n if (param instanceof FormulaError)\r\n throw param;\r\n\r\n if (type === Types.ARRAY) {\r\n if (Array.isArray(param)) {\r\n return flat ? this.flattenDeep(param) : param;\r\n } else if (param instanceof Collection) {\r\n throw FormulaError.VALUE;\r\n } else if (allowSingleValue) {\r\n return flat ? [param] : [[param]];\r\n }\r\n throw FormulaError.VALUE;\r\n } else if (type === Types.COLLECTIONS) {\r\n return param;\r\n }\r\n\r\n // the only possible type for expectSingle=true are: string, boolean, number;\r\n // If array encountered, extract the first element.\r\n // extract first element from array\r\n if (isArray) {\r\n param = param[0][0];\r\n }\r\n const paramType = this.type(param);\r\n if (type === Types.STRING) {\r\n if (paramType === Types.BOOLEAN)\r\n param = param ? 'TRUE' : 'FALSE';\r\n else\r\n param = `${param}`\r\n } else if (type === Types.BOOLEAN) {\r\n if (paramType === Types.STRING)\r\n throw FormulaError.VALUE;\r\n if (paramType === Types.NUMBER)\r\n param = Boolean(param);\r\n } else if (type === Types.NUMBER) {\r\n param = this.acceptNumber(param, false);\r\n } else if (type === Types.NUMBER_NO_BOOLEAN) {\r\n param = this.acceptNumber(param, false, false);\r\n } else {\r\n throw FormulaError.VALUE;\r\n }\r\n return param;\r\n }\r\n\r\n type(variable) {\r\n let type = this.type2Number[typeof variable];\r\n if (type === -1) {\r\n if (Array.isArray(variable))\r\n type = Types.ARRAY;\r\n else if (variable.ref) {\r\n if (variable.ref.from) {\r\n type = Types.RANGE_REF;\r\n } else {\r\n type = Types.CELL_REF;\r\n }\r\n } else if (variable instanceof Collection)\r\n type = Types.COLLECTIONS;\r\n }\r\n return type;\r\n }\r\n\r\n isRangeRef(param) {\r\n return param.ref && param.ref.from;\r\n }\r\n\r\n isCellRef(param) {\r\n return param.ref && !param.ref.from;\r\n }\r\n\r\n /**\r\n * Helper function for SUMIF, AVERAGEIF,...\r\n * @param context\r\n * @param range1\r\n * @param range2\r\n */\r\n retrieveRanges(context, range1, range2) {\r\n // process args\r\n range2 = Address.extend(range1, range2);\r\n\r\n // retrieve values\r\n range1 = this.retrieveArg(context, range1);\r\n range1 = H.accept(range1, Types.ARRAY, undefined, false, true);\r\n\r\n if (range2 !== range1) {\r\n range2 = this.retrieveArg(context, range2);\r\n range2 = H.accept(range2, Types.ARRAY, undefined, false, true);\r\n } else\r\n range2 = range1;\r\n\r\n return [range1, range2];\r\n }\r\n\r\n retrieveArg(context, arg) {\r\n if (arg === null)\r\n return {value: 0, isArray: false, omitted: true};\r\n const res = context.utils.extractRefValue(arg);\r\n return {value: res.val, isArray: res.isArray, ref: arg.ref};\r\n }\r\n}\r\n\r\nconst H = new FormulaHelpers();\r\n\r\nconst WildCard = {\r\n /**\r\n * @param {string|*} obj\r\n * @returns {*}\r\n */\r\n isWildCard: obj => {\r\n if (typeof obj === \"string\")\r\n return /[*?]/.test(obj);\r\n return false;\r\n },\r\n\r\n toRegex: (lookupText, flags) => {\r\n return RegExp(lookupText.replace(/[.+^${}()|[\\]\\\\]/g, '\\\\$&') // escape the special char for js regex\r\n .replace(/([^~]??)[?]/g, '$1.') // ? => .\r\n .replace(/([^~]??)[*]/g, '$1.*') // * => .*\r\n .replace(/~([?*])/g, '$1'), flags); // ~* => * and ~? => ?\r\n }\r\n};\r\n\r\nconst Criteria = {\r\n /**\r\n * Parse criteria, support comparison and wild card match.\r\n * @param {string|number} criteria\r\n * @return {{op: string, value: string|number|boolean|RegExp, match: boolean|undefined}} - The parsed criteria.\r\n */\r\n parse: (criteria) => {\r\n const type = typeof criteria;\r\n if (type === \"string\") {\r\n // criteria = 'TRUE' or 'FALSE'\r\n const upper = criteria.toUpperCase();\r\n if (upper === 'TRUE' || upper === 'FALSE') {\r\n // excel boolean\r\n return {op: '=', value: upper === 'TRUE'};\r\n }\r\n\r\n const res = criteria.match(/(<>|>=|<=|>|<|=)(.*)/);\r\n // is comparison\r\n if (res) {\r\n // [\">10\", \">\", \"10\", index: 0, input: \">10\", groups: undefined]\r\n let op = res[1], value;\r\n\r\n // string or boolean or error\r\n if (isNaN(res[2])) {\r\n const upper = res[2].toUpperCase();\r\n if (upper === 'TRUE' || upper === 'FALSE') {\r\n // excel boolean\r\n value = upper === 'TRUE';\r\n } else if (/#NULL!|#DIV\\/0!|#VALUE!|#NAME\\?|#NUM!|#N\\/A|#REF!/.test(res[2])) {\r\n // formula error\r\n value = new FormulaError(res[2]);\r\n } else {\r\n // string, can be wildcard\r\n value = res[2];\r\n if (WildCard.isWildCard(value)) {\r\n return {op: 'wc', value: WildCard.toRegex(value), match: op === '='}\r\n }\r\n }\r\n } else {\r\n // number\r\n value = Number(res[2])\r\n }\r\n return {op, value};\r\n\r\n } else if (WildCard.isWildCard(criteria)) {\r\n return {op: 'wc', value: WildCard.toRegex(criteria), match: true}\r\n } else {\r\n return {op: '=', value: criteria}\r\n }\r\n } else if (type === \"boolean\" || type === 'number' || (Array.isArray(criteria)\r\n || criteria instanceof FormulaError)) {\r\n return {op: '=', value: criteria}\r\n } else {\r\n throw Error(`Criteria.parse: type ${typeof criteria} not support`)\r\n }\r\n }\r\n};\r\n\r\nconst Address = {\r\n\r\n columnNumberToName: (number) => {\r\n let dividend = number;\r\n let name = '';\r\n let modulo = 0;\r\n\r\n while (dividend > 0) {\r\n modulo = (dividend - 1) % 26;\r\n name = String.fromCharCode('A'.charCodeAt(0) + modulo) + name;\r\n dividend = Math.floor((dividend - modulo) / 26);\r\n }\r\n\r\n return name;\r\n },\r\n\r\n columnNameToNumber: (columnName) => {\r\n columnName = columnName.toUpperCase();\r\n const len = columnName.length;\r\n let number = 0;\r\n for (let i = 0; i < len; i++) {\r\n const code = columnName.charCodeAt(i);\r\n if (!isNaN(code)) {\r\n number += (code - 64) * 26 ** (len - i - 1)\r\n }\r\n }\r\n return number;\r\n },\r\n\r\n /**\r\n * Extend range2 to match with the dimension in range1.\r\n * @param {{ref: {}}} range1\r\n * @param {{ref: {}}} [range2]\r\n */\r\n extend: (range1, range2) => {\r\n if (range2 == null) {\r\n return range1;\r\n }\r\n let rowOffset, colOffset;\r\n if (H.isCellRef(range1)) {\r\n rowOffset = 0;\r\n colOffset = 0;\r\n } else if (H.isRangeRef(range1)) {\r\n rowOffset = range1.ref.to.row - range1.ref.from.row;\r\n colOffset = range1.ref.to.col - range1.ref.from.col;\r\n } else throw Error('Address.extend should not reach here.');\r\n // if range2 is a cell reference\r\n if (H.isCellRef(range2)) {\r\n if (rowOffset > 0 || colOffset > 0)\r\n range2 = {\r\n ref: {\r\n from: {col: range2.ref.col, row: range2.ref.row},\r\n to: {row: range2.ref.row + rowOffset, col: range2.ref.col + colOffset}\r\n }\r\n };\r\n } else {\r\n // range2 is a range reference\r\n range2.ref.to.row = range2.ref.from.row + rowOffset;\r\n range2.ref.to.col = range2.ref.from.col + colOffset;\r\n }\r\n return range2;\r\n },\r\n};\r\n\r\nmodule.exports = {\r\n FormulaHelpers: H,\r\n Types,\r\n ReversedTypes,\r\n Factorials,\r\n WildCard,\r\n Criteria,\r\n Address,\r\n};\r\n","/**\r\n * Formula Error.\r\n */\r\nclass FormulaError extends Error {\r\n\r\n /**\r\n * @param {string} error - error code, i.e. #NUM!\r\n * @param {string} [msg] - detailed error message\r\n * @param {object|Error} [details]\r\n * @returns {FormulaError}\r\n */\r\n constructor(error, msg, details) {\r\n super(msg);\r\n if (msg == null && details == null && FormulaError.errorMap.has(error))\r\n return FormulaError.errorMap.get(error);\r\n else if (msg == null && details == null) {\r\n this._error = error;\r\n FormulaError.errorMap.set(error, this);\r\n } else {\r\n this._error = error;\r\n }\r\n this.details = details;\r\n }\r\n\r\n /**\r\n * Get the error name.\r\n * @returns {string} formula error\r\n */\r\n get error() {\r\n return this._error;\r\n }\r\n get name() {\r\n return this._error;\r\n }\r\n\r\n /**\r\n * Return true if two errors are same.\r\n * @param {FormulaError} err\r\n * @returns {boolean} if two errors are same.\r\n */\r\n equals(err) {\r\n return err instanceof FormulaError && err._error === this._error;\r\n }\r\n\r\n /**\r\n * Return the formula error in string representation.\r\n * @returns {string} the formula error in string representation.\r\n */\r\n toString() {\r\n return this._error;\r\n }\r\n}\r\n\r\nFormulaError.errorMap = new Map();\r\n\r\n/**\r\n * DIV0 error\r\n * @type {FormulaError}\r\n */\r\nFormulaError.DIV0 = new FormulaError(\"#DIV/0!\");\r\n\r\n/**\r\n * NA error\r\n * @type {FormulaError}\r\n */\r\nFormulaError.NA = new FormulaError(\"#N/A\");\r\n\r\n/**\r\n * NAME error\r\n * @type {FormulaError}\r\n */\r\nFormulaError.NAME = new FormulaError(\"#NAME?\");\r\n\r\n/**\r\n * NULL error\r\n * @type {FormulaError}\r\n */\r\nFormulaError.NULL = new FormulaError(\"#NULL!\");\r\n\r\n/**\r\n * NUM error\r\n * @type {FormulaError}\r\n */\r\nFormulaError.NUM = new FormulaError(\"#NUM!\");\r\n\r\n/**\r\n * REF error\r\n * @type {FormulaError}\r\n */\r\nFormulaError.REF = new FormulaError(\"#REF!\");\r\n\r\n/**\r\n * VALUE error\r\n * @type {FormulaError}\r\n */\r\nFormulaError.VALUE = new FormulaError(\"#VALUE!\");\r\n\r\n/**\r\n * NOT_IMPLEMENTED error\r\n * @param {string} functionName - the name of the not implemented function\r\n * @returns {FormulaError}\r\n * @constructor\r\n */\r\nFormulaError.NOT_IMPLEMENTED = (functionName) => {\r\n return new FormulaError(\"#NAME?\", `Function ${functionName} is not implemented.`)\r\n};\r\n\r\n/**\r\n * TOO_MANY_ARGS error\r\n * @param functionName - the name of the errored function\r\n * @returns {FormulaError}\r\n * @constructor\r\n */\r\nFormulaError.TOO_MANY_ARGS = (functionName) => {\r\n return new FormulaError(\"#N/A\", `Function ${functionName} has too many arguments.`)\r\n};\r\n\r\n/**\r\n * ARG_MISSING error\r\n * @param args - the name of the errored function\r\n * @returns {FormulaError}\r\n * @constructor\r\n */\r\nFormulaError.ARG_MISSING = (args) => {\r\n const {Types} = require('./helpers');\r\n return new FormulaError(\"#N/A\", `Argument type ${args.map(arg => Types[arg]).join(', ')} is missing.`)\r\n};\r\n\r\n/**\r\n * #ERROR!\r\n * Parse/Lex error or other unexpected errors\r\n * @param {string} msg\r\n * @param {object|Error} [details]\r\n * @return {FormulaError}\r\n * @constructor\r\n */\r\nFormulaError.ERROR = (msg, details) => {\r\n return new FormulaError('#ERROR!', msg, details);\r\n}\r\n\r\nmodule.exports = FormulaError;\r\n","// https://github.com/looker/ssf/blob/master/ssf.js\n/* ssf.js (C) 2013-present SheetJS -- http://sheetjs.com */\n\n/**\n * Spreadsheet formatter.\n * @type {{}}\n */\nclass SSF {\n}\n\n/**\n * The version of SSF.\n * @type {string}\n */\nSSF.version = '0.10.3';\n\nfunction _strrev(x) {\n let o = \"\", i = x.length - 1;\n while (i >= 0) o += x.charAt(i--);\n return o;\n}\n\nfunction fill(c, l) {\n let o = \"\";\n while (o.length < l) o += c;\n return o;\n}\n\nfunction pad0(v, d) {\n let t = \"\" + v;\n return t.length >= d ? t : fill('0', d - t.length) + t;\n}\n\nfunction pad_(v, d) {\n let t = \"\" + v;\n return t.length >= d ? t : fill(' ', d - t.length) + t;\n}\n\nfunction rpad_(v, d) {\n let t = \"\" + v;\n return t.length >= d ? t : t + fill(' ', d - t.length);\n}\n\nfunction pad0r1(v, d) {\n let t = \"\" + Math.round(v);\n return t.length >= d ? t : fill('0', d - t.length) + t;\n}\n\nfunction pad0r2(v, d) {\n let t = \"\" + v;\n return t.length >= d ? t : fill('0', d - t.length) + t;\n}\n\nconst p2_32 = Math.pow(2, 32);\n\nfunction pad0r(v, d) {\n if (v > p2_32 || v < -p2_32) return pad0r1(v, d);\n const i = Math.round(v);\n return pad0r2(i, d);\n}\n\nfunction isgeneral(s, i) {\n i = i || 0;\n return s.length >= 7 + i && (s.charCodeAt(i) | 32) === 103 && (s.charCodeAt(i + 1) | 32) === 101 && (s.charCodeAt(i + 2) | 32) === 110 && (s.charCodeAt(i + 3) | 32) === 101 && (s.charCodeAt(i + 4) | 32) === 114 && (s.charCodeAt(i + 5) | 32) === 97 && (s.charCodeAt(i + 6) | 32) === 108;\n}\n\nconst days = [\n ['Sun', 'Sunday'],\n ['Mon', 'Monday'],\n ['Tue', 'Tuesday'],\n ['Wed', 'Wednesday'],\n ['Thu', 'Thursday'],\n ['Fri', 'Friday'],\n ['Sat', 'Saturday']\n];\nconst months = [\n ['J', 'Jan', 'January'],\n ['F', 'Feb', 'February'],\n ['M', 'Mar', 'March'],\n ['A', 'Apr', 'April'],\n ['M', 'May', 'May'],\n ['J', 'Jun', 'June'],\n ['J', 'Jul', 'July'],\n ['A', 'Aug', 'August'],\n ['S', 'Sep', 'September'],\n ['O', 'Oct', 'October'],\n ['N', 'Nov', 'November'],\n ['D', 'Dec', 'December']\n];\n\nfunction init_table(t) {\n t[0] = 'General';\n t[1] = '0';\n t[2] = '0.00';\n t[3] = '#,##0';\n t[4] = '#,##0.00';\n t[9] = '0%';\n t[10] = '0.00%';\n t[11] = '0.00E+00';\n t[12] = '# ?/?';\n t[13] = '# ??/??';\n t[14] = 'm/d/yy';\n t[15] = 'd-mmm-yy';\n t[16] = 'd-mmm';\n t[17] = 'mmm-yy';\n t[18] = 'h:mm AM/PM';\n t[19] = 'h:mm:ss AM/PM';\n t[20] = 'h:mm';\n t[21] = 'h:mm:ss';\n t[22] = 'm/d/yy h:mm';\n t[37] = '#,##0 ;(#,##0)';\n t[38] = '#,##0 ;[Red](#,##0)';\n t[39] = '#,##0.00;(#,##0.00)';\n t[40] = '#,##0.00;[Red](#,##0.00)';\n t[45] = 'mm:ss';\n t[46] = '[h]:mm:ss';\n t[47] = 'mmss.0';\n t[48] = '##0.0E+0';\n t[49] = '@';\n t[56] = '\"上午/下午 \"hh\"時\"mm\"分\"ss\"秒 \"';\n t[65535] = 'General';\n}\n\nconst table_fmt = {};\ninit_table(table_fmt);\n\nfunction frac(x, D, mixed) {\n const sgn = x < 0 ? -1 : 1;\n let B = x * sgn;\n let P_2 = 0, P_1 = 1, P = 0;\n let Q_2 = 1, Q_1 = 0, Q = 0;\n let A = Math.floor(B);\n while (Q_1 < D) {\n A = Math.floor(B);\n P = A * P_1 + P_2;\n Q = A * Q_1 + Q_2;\n if ((B - A) < 0.00000005) break;\n B = 1 / (B - A);\n P_2 = P_1;\n P_1 = P;\n Q_2 = Q_1;\n Q_1 = Q;\n }\n if (Q > D) {\n if (Q_1 > D) {\n Q = Q_2;\n P = P_2;\n } else {\n Q = Q_1;\n P = P_1;\n }\n }\n if (!mixed) return [0, sgn * P, Q];\n const q = Math.floor(sgn * P / Q);\n return [q, sgn * P - q * Q, Q];\n}\n\nfunction parse_date_code(v, opts, b2) {\n if (v > 2958465 || v < 0) return null;\n let date = (v | 0), time = Math.floor(86400 * (v - date)), dow = 0;\n let dout = [];\n const out = {D: date, T: time, u: 86400 * (v - date) - time, y: 0, m: 0, d: 0, H: 0, M: 0, S: 0, q: 0};\n if (Math.abs(out.u) < 1e-6) out.u = 0;\n if (opts && opts.date1904) date += 1462;\n if (out.u > 0.9999) {\n out.u = 0;\n if (++time === 86400) {\n out.T = time = 0;\n ++date;\n ++out.D;\n }\n }\n if (date === 60) {\n dout = b2 ? [1317, 10, 29] : [1900, 2, 29];\n dow = 3;\n } else if (date === 0) {\n dout = b2 ? [1317, 8, 29] : [1900, 1, 0];\n dow = 6;\n } else {\n if (date > 60) --date;\n /* 1 = Jan 1 1900 in Gregorian */\n const d = new Date(1900, 0, 1);\n d.setDate(d.getDate() + date - 1);\n dout = [d.getFullYear(), d.getMonth() + 1, d.getDate()];\n dow = d.getDay();\n if (date < 60) dow = (dow + 6) % 7;\n if (b2) dow = fix_hijri(d, dout);\n }\n out.y = dout[0];\n out.m = dout[1];\n out.d = dout[2];\n out.S = time % 60;\n time = Math.floor(time / 60);\n out.M = time % 60;\n time = Math.floor(time / 60);\n out.H = time;\n out.q = dow;\n return out;\n}\n\nSSF.parse_date_code = parse_date_code;\nconst basedate = new Date(1899, 11, 31, 0, 0, 0);\nconst dnthresh = basedate.getTime();\nconst base1904 = new Date(1900, 2, 1, 0, 0, 0);\n\nfunction datenum_local(v, date1904) {\n let epoch = v.getTime();\n if (date1904) epoch -= 1461 * 24 * 60 * 60 * 1000;\n else if (v >= base1904) epoch += 24 * 60 * 60 * 1000;\n return (epoch - (dnthresh + (v.getTimezoneOffset() - basedate.getTimezoneOffset()) * 60000)) / (24 * 60 * 60 * 1000);\n}\n\nfunction general_fmt_int(v) {\n return v.toString(10);\n}\n\nSSF._general_int = general_fmt_int;\nconst general_fmt_num = (function make_general_fmt_num() {\n const gnr1 = /\\.(\\d*[1-9])0+$/, gnr2 = /\\.0*$/, gnr4 = /\\.(\\d*[1-9])0+/, gnr5 = /\\.0*[Ee]/,\n gnr6 = /(E[+-])(\\d)$/;\n\n function gfn2(v) {\n const w = (v < 0 ? 12 : 11);\n let o = gfn5(v.toFixed(12));\n if (o.length <= w) return o;\n o = v.toPrecision(10);\n if (o.length <= w) return o;\n return v.toExponential(5);\n }\n\n function gfn3(v) {\n let o = v.toFixed(11).replace(gnr1, \".$1\");\n if (o.length > (v < 0 ? 12 : 11)) o = v.toPrecision(6);\n return o;\n }\n\n function gfn4(o) {\n for (let i = 0; i !== o.length; ++i) if ((o.charCodeAt(i) | 0x20) === 101) return o.replace(gnr4, \".$1\").replace(gnr5, \"E\").replace(\"e\", \"E\").replace(gnr6, \"$10$2\");\n return o;\n }\n\n function gfn5(o) {\n return o.indexOf(\".\") > -1 ? o.replace(gnr2, \"\").replace(gnr1, \".$1\") : o;\n }\n\n return function general_fmt_num(v) {\n let V = Math.floor(Math.log(Math.abs(v)) * Math.LOG10E), o;\n if (V >= -4 && V <= -1) o = v.toPrecision(10 + V);\n else if (Math.abs(V) <= 9) o = gfn2(v);\n else if (V === 10) o = v.toFixed(10).substr(0, 12);\n else o = gfn3(v);\n return gfn5(gfn4(o));\n };\n})();\nSSF._general_num = general_fmt_num;\n\nfunction general_fmt(v, opts) {\n switch (typeof v) {\n case 'string':\n return v;\n case 'boolean':\n return v ? \"TRUE\" : \"FALSE\";\n case 'number':\n return (v | 0) === v ? general_fmt_int(v) : general_fmt_num(v);\n case 'undefined':\n return \"\";\n case 'object':\n if (v == null) return \"\";\n if (v instanceof Date) return format(14, datenum_local(v, opts && opts.date1904), opts);\n }\n throw new Error(\"unsupported value in General format: \" + v);\n}\n\nSSF._general = general_fmt;\n\nfunction fix_hijri() {\n return 0;\n}\n\n/*jshint -W086 */\nfunction write_date(type, fmt, val, ss0) {\n let o = \"\", ss = 0, tt = 0, y = val.y, out, outl = 0;\n switch (type) {\n case 98: /* 'b' buddhist year */\n y = val.y + 543;\n /* falls through */\n case 121: /* 'y' year */\n switch (fmt.length) {\n case 1:\n case 2:\n out = y % 100;\n outl = 2;\n break;\n default:\n out = y % 10000;\n outl = 4;\n break;\n }\n break;\n case 109: /* 'm' month */\n switch (fmt.length) {\n case 1:\n case 2:\n out = val.m;\n outl = fmt.length;\n break;\n case 3:\n return months[val.m - 1][1];\n case 5:\n return months[val.m - 1][0];\n default:\n return months[val.m - 1][2];\n }\n break;\n case 100: /* 'd' day */\n switch (fmt.length) {\n case 1:\n case 2:\n out = val.d;\n outl = fmt.length;\n break;\n case 3:\n return days[val.q][0];\n default:\n return days[val.q][1];\n }\n break;\n case 104: /* 'h' 12-hour */\n switch (fmt.length) {\n case 1:\n case 2:\n out = 1 + (val.H + 11) % 12;\n outl = fmt.length;\n break;\n default:\n throw 'bad hour format: ' + fmt;\n }\n break;\n case 72: /* 'H' 24-hour */\n switch (fmt.length) {\n case 1:\n case 2:\n out = val.H;\n outl = fmt.length;\n break;\n default:\n throw 'bad hour format: ' + fmt;\n }\n break;\n case 77: /* 'M' minutes */\n switch (fmt.length) {\n case 1:\n case 2:\n out = val.M;\n outl = fmt.length;\n break;\n default:\n throw 'bad minute format: ' + fmt;\n }\n break;\n case 115: /* 's' seconds */\n if (fmt !== 's' && fmt !== 'ss' && fmt !== '.0' && fmt !== '.00' && fmt !== '.000') throw 'bad second format: ' + fmt;\n if (val.u === 0 && (fmt === \"s\" || fmt === \"ss\")) return pad0(val.S, fmt.length);\n if (ss0 >= 2) tt = ss0 === 3 ? 1000 : 100;\n else tt = ss0 === 1 ? 10 : 1;\n ss = Math.round((tt) * (val.S + val.u));\n if (ss >= 60 * tt) ss = 0;\n if (fmt === 's') return ss === 0 ? \"0\" : \"\" + ss / tt;\n o = pad0(ss, 2 + ss0);\n if (fmt === 'ss') return o.substr(0, 2);\n return \".\" + o.substr(2, fmt.length - 1);\n case 90: /* 'Z' absolute time */\n switch (fmt) {\n case '[h]':\n case '[hh]':\n out = val.D * 24 + val.H;\n break;\n case '[m]':\n case '[mm]':\n out = (val.D * 24 + val.H) * 60 + val.M;\n break;\n case '[s]':\n case '[ss]':\n out = ((val.D * 24 + val.H) * 60 + val.M) * 60 + Math.round(val.S + val.u);\n break;\n default:\n throw 'bad abstime format: ' + fmt;\n }\n outl = fmt.length === 3 ? 1 : 2;\n break;\n case 101: /* 'e' era */\n out = y;\n outl = 1;\n }\n if (outl > 0) return pad0(out, outl); else return \"\";\n}\n\n/*jshint +W086 */\nfunction commaify(s) {\n const w = 3;\n if (s.length <= w) return s;\n let j = (s.length % w), o = s.substr(0, j);\n for (; j !== s.length; j += w) o += (o.length > 0 ? \",\" : \"\") + s.substr(j, w);\n return o;\n}\n\nconst write_num = (function make_write_num() {\n const pct1 = /%/g;\n\n function write_num_pct(type, fmt, val) {\n const sfmt = fmt.replace(pct1, \"\"), mul = fmt.length - sfmt.length;\n return write_num(type, sfmt, val * Math.pow(10, 2 * mul)) + fill(\"%\", mul);\n }\n\n function write_num_cm(type, fmt, val) {\n let idx = fmt.length - 1;\n while (fmt.charCodeAt(idx - 1) === 44) --idx;\n return write_num(type, fmt.substr(0, idx), val / Math.pow(10, 3 * (fmt.length - idx)));\n }\n\n function write_num_exp(fmt, val) {\n let o;\n let idx = fmt.indexOf(\"E\") - fmt.indexOf(\".\") - 1;\n if (fmt.match(/^#+0.0E\\+0$/)) {\n if (val === 0) return \"0.0E+0\";\n else if (val < 0) return \"-\" + write_num_exp(fmt, -val);\n let period = fmt.indexOf(\".\");\n if (period === -1) period = fmt.indexOf('E');\n let ee = Math.floor(Math.log(val) * Math.LOG10E) % period;\n if (ee < 0) ee += period;\n o = (val / Math.pow(10, ee)).toPrecision(idx + 1 + (period + ee) % period);\n if (o.indexOf(\"e\") === -1) {\n const fakee = Math.floor(Math.log(val) * Math.LOG10E);\n if (o.indexOf(\".\") === -1) o = o.charAt(0) + \".\" + o.substr(1) + \"E+\" + (fakee - o.length + ee);\n else o += \"E+\" + (fakee - ee);\n while (o.substr(0, 2) === \"0.\") {\n o = o.charAt(0) + o.substr(2, period) + \".\" + o.substr(2 + period);\n o = o.replace(/^0+([1-9])/, \"$1\").replace(/^0+\\./, \"0.\");\n }\n o = o.replace(/\\+-/, \"-\");\n }\n o = o.replace(/^([+-]?)(\\d*)\\.(\\d*)[Ee]/, function ($$, $1, $2, $3) {\n return $1 + $2 + $3.substr(0, (period + ee) % period) + \".\" + $3.substr(ee) + \"E\";\n });\n } else o = val.toExponential(idx);\n if (fmt.match(/E\\+00$/) && o.match(/e[+-]\\d$/)) o = o.substr(0, o.length - 1) + \"0\" + o.charAt(o.length - 1);\n if (fmt.match(/E\\-/) && o.match(/e\\+/)) o = o.replace(/e\\+/, \"e\");\n return o.replace(\"e\", \"E\");\n }\n\n const frac1 = /# (\\?+)( ?)\\/( ?)(\\d+)/;\n\n function write_num_f1(r, aval, sign) {\n const den = parseInt(r[4], 10), rr = Math.round(aval * den), base = Math.floor(rr / den);\n let myn = (rr - base * den), myd = den;\n return sign + (base === 0 ? \"\" : \"\" + base) + \" \" + (myn === 0 ? fill(\" \", r[1].length + 1 + r[4].length) : pad_(myn, r[1].length) + r[2] + \"/\" + r[3] + pad0(myd, r[4].length));\n }\n\n function write_num_f2(r, aval, sign) {\n return sign + (aval === 0 ? \"\" : \"\" + aval) + fill(\" \", r[1].length + 2 + r[4].length);\n }\n\n const dec1 = /^#*0*\\.([0#]+)/;\n const closeparen = /\\).*[0#]/;\n const phone = /\\(###\\) ###\\\\?-####/;\n\n function hashq(str) {\n let o = \"\", cc;\n for (let i = 0; i !== str.length; ++i) switch ((cc = str.charCodeAt(i))) {\n case 35:\n break;\n case 63:\n o += \" \";\n break;\n case 48:\n o += \"0\";\n break;\n default:\n o += String.fromCharCode(cc);\n }\n return o;\n }\n\n function rnd(val, d) {\n const dd = Math.pow(10, d);\n return \"\" + (Math.round(val * dd) / dd);\n }\n\n function dec(val, d) {\n if (d < ('' + Math.round((val - Math.floor(val)) * Math.pow(10, d))).length) {\n return 0;\n }\n return Math.round((val - Math.floor(val)) * Math.pow(10, d));\n }\n\n function carry(val, d) {\n if (d < ('' + Math.round((val - Math.floor(val)) * Math.pow(10, d))).length) {\n return 1;\n }\n return 0;\n }\n\n function flr(val) {\n if (val < 2147483647 && val > -2147483648) return \"\" + (val >= 0 ? (val | 0) : (val - 1 | 0));\n return \"\" + Math.floor(val);\n }\n\n function write_num_flt(type, fmt, val) {\n if (type.charCodeAt(0) === 40 && !fmt.match(closeparen)) {\n const ffmt = fmt.replace(/\\( */, \"\").replace(/ \\)/, \"\").replace(/\\)/, \"\");\n if (val >= 0) return write_num_flt('n', ffmt, val);\n return '(' + write_num_flt('n', ffmt, -val) + ')';\n }\n if (fmt.charCodeAt(fmt.length - 1) === 44) return write_num_cm(type, fmt, val);\n if (fmt.indexOf('%') !== -1) return write_num_pct(type, fmt, val);\n if (fmt.indexOf('E') !== -1) return write_num_exp(fmt, val);\n if (fmt.charCodeAt(0) === 36) return \"$\" + write_num_flt(type, fmt.substr(fmt.charAt(1) == ' ' ? 2 : 1), val);\n let o;\n let r, ri, ff, aval = Math.abs(val), sign = val < 0 ? \"-\" : \"\";\n if (fmt.match(/^00+$/)) return sign + pad0r(aval, fmt.length);\n if (fmt.match(/^[#?]+$/)) {\n o = pad0r(val, 0);\n if (o === \"0\") o = \"\";\n return o.length > fmt.length ? o : hashq(fmt.substr(0, fmt.length - o.length)) + o;\n }\n if ((r = fmt.match(frac1))) return write_num_f1(r, aval, sign);\n if (fmt.match(/^#+0+$/)) return sign + pad0r(aval, fmt.length - fmt.indexOf(\"0\"));\n if ((r = fmt.match(dec1))) {\n o = rnd(val, r[1].length).replace(/^([^\\.]+)$/, \"$1.\" + hashq(r[1])).replace(/\\.$/, \".\" + hashq(r[1])).replace(/\\.(\\d*)$/, function ($$, $1) {\n return \".\" + $1 + fill(\"0\", hashq(r[1]).length - $1.length);\n });\n return fmt.indexOf(\"0.\") !== -1 ? o : o.replace(/^0\\./, \".\");\n }\n fmt = fmt.replace(/^#+([0.])/, \"$1\");\n if ((r = fmt.match(/^(0*)\\.(#*)$/))) {\n return sign + rnd(aval, r[2].length).replace(/\\.(\\d*[1-9])0*$/, \".$1\").replace(/^(-?\\d*)$/, \"$1.\").replace(/^0\\./, r[1].length ? \"0.\" : \".\");\n }\n if ((r = fmt.match(/^#{1,3},##0(\\.?)$/))) return sign + commaify(pad0r(aval, 0));\n if ((r = fmt.match(/^#,##0\\.([#0]*0)$/))) {\n return val < 0 ? \"-\" + write_num_flt(type, fmt, -val) : commaify(\"\" + (Math.floor(val) + carry(val, r[1].length))) + \".\" + pad0(dec(val, r[1].length), r[1].length);\n }\n if ((r = fmt.match(/^#,#*,#0/))) return write_num_flt(type, fmt.replace(/^#,#*,/, \"\"), val);\n if ((r = fmt.match(/^([0#]+)(\\\\?-([0#]+))+$/))) {\n o = _strrev(write_num_flt(type, fmt.replace(/[\\\\-]/g, \"\"), val));\n ri = 0;\n return _strrev(_strrev(fmt.replace(/\\\\/g, \"\")).replace(/[0#]/g, function (x) {\n return ri < o.length ? o.charAt(ri++) : x === '0' ? '0' : \"\";\n }));\n }\n if (fmt.match(phone)) {\n o = write_num_flt(type, \"##########\", val);\n return \"(\" + o.substr(0, 3) + \") \" + o.substr(3, 3) + \"-\" + o.substr(6);\n }\n let oa = \"\";\n if ((r = fmt.match(/^([#0?]+)( ?)\\/( ?)([#0?]+)/))) {\n ri = Math.min(r[4].length, 7);\n ff = frac(aval, Math.pow(10, ri) - 1, false);\n o = \"\" + sign;\n oa = write_num(\"n\", r[1], ff[1]);\n if (oa.charAt(oa.length - 1) === \" \") oa = oa.substr(0, oa.length - 1) + \"0\";\n o += oa + r[2] + \"/\" + r[3];\n oa = rpad_(ff[2], ri);\n if (oa.length < r[4].length) oa = hashq(r[4].substr(r[4].length - oa.length)) + oa;\n o += oa;\n return o;\n }\n if ((r = fmt.match(/^# ([#0?]+)( ?)\\/( ?)([#0?]+)/))) {\n ri = Math.min(Math.max(r[1].length, r[4].length), 7);\n ff = frac(aval, Math.pow(10, ri) - 1, true);\n return sign + (ff[0] || (ff[1] ? \"\" : \"0\")) + \" \" + (ff[1] ? pad_(ff[1], ri) + r[2] + \"/\" + r[3] + rpad_(ff[2], ri) : fill(\" \", 2 * ri + 1 + r[2].length + r[3].length));\n }\n if ((r = fmt.match(/^[#0?]+$/))) {\n o = pad0r(val, 0);\n if (fmt.length <= o.length) return o;\n return hashq(fmt.substr(0, fmt.length - o.length)) + o;\n }\n if ((r = fmt.match(/^([#0?]+)\\.([#0]+)$/))) {\n o = \"\" + val.toFixed(Math.min(r[2].length, 10)).replace(/([^0])0+$/, \"$1\");\n ri = o.indexOf(\".\");\n const lres = fmt.indexOf(\".\") - ri, rres = fmt.length - o.length - lres;\n return hashq(fmt.substr(0, lres) + o + fmt.substr(fmt.length - rres));\n }\n if ((r = fmt.match(/^00,000\\.([#0]*0)$/))) {\n ri = dec(val, r[1].length);\n return val < 0 ? \"-\" + write_num_flt(type, fmt, -val) : commaify(flr(val)).replace(/^\\d,\\d{3}$/, \"0$&\").replace(/^\\d*$/, function ($$) {\n return \"00,\" + ($$.length < 3 ? pad0(0, 3 - $$.length) : \"\") + $$;\n }) + \".\" + pad0(ri, r[1].length);\n }\n switch (fmt) {\n case \"###,##0.00\":\n return write_num_flt(type, \"#,##0.00\", val);\n case \"###,###\":\n case \"##,###\":\n case \"#,###\":\n const x = commaify(pad0r(aval, 0));\n return x !== \"0\" ? sign + x : \"\";\n case \"###,###.00\":\n return write_num_flt(type, \"###,##0.00\", val).replace(/^0\\./, \".\");\n case \"#,###.00\":\n return write_num_flt(type, \"#,##0.00\", val).replace(/^0\\./, \".\");\n default:\n }\n throw new Error(\"unsupported format |\" + fmt + \"|\");\n }\n\n function write_num_cm2(type, fmt, val) {\n let idx = fmt.length - 1;\n while (fmt.charCodeAt(idx - 1) === 44) --idx;\n return write_num(type, fmt.substr(0, idx), val / Math.pow(10, 3 * (fmt.length - idx)));\n }\n\n function write_num_pct2(type, fmt, val) {\n const sfmt = fmt.replace(pct1, \"\"), mul = fmt.length - sfmt.length;\n return write_num(type, sfmt, val * Math.pow(10, 2 * mul)) + fill(\"%\", mul);\n }\n\n function write_num_exp2(fmt, val) {\n let o;\n let idx = fmt.indexOf(\"E\") - fmt.indexOf(\".\") - 1;\n if (fmt.match(/^#+0.0E\\+0$/)) {\n if (val === 0) return \"0.0E+0\";\n else if (val < 0) return \"-\" + write_num_exp2(fmt, -val);\n let period = fmt.indexOf(\".\");\n if (period === -1) period = fmt.indexOf('E');\n let ee = Math.floor(Math.log(val) * Math.LOG10E) % period;\n if (ee < 0) ee += period;\n o = (val / Math.pow(10, ee)).toPrecision(idx + 1 + (period + ee) % period);\n if (!o.match(/[Ee]/)) {\n const fakee = Math.floor(Math.log(val) * Math.LOG10E);\n if (o.indexOf(\".\") === -1) o = o.charAt(0) + \".\" + o.substr(1) + \"E+\" + (fakee - o.length + ee);\n else o += \"E+\" + (fakee - ee);\n o = o.replace(/\\+-/, \"-\");\n }\n o = o.replace(/^([+-]?)(\\d*)\\.(\\d*)[Ee]/, function ($$, $1, $2, $3) {\n return $1 + $2 + $3.substr(0, (period + ee) % period) + \".\" + $3.substr(ee) + \"E\";\n });\n } else o = val.toExponential(idx);\n if (fmt.match(/E\\+00$/) && o.match(/e[+-]\\d$/)) o = o.substr(0, o.length - 1) + \"0\" + o.charAt(o.length - 1);\n if (fmt.match(/E\\-/) && o.match(/e\\+/)) o = o.replace(/e\\+/, \"e\");\n return o.replace(\"e\", \"E\");\n }\n\n function write_num_int(type, fmt, val) {\n if (type.charCodeAt(0) === 40 && !fmt.match(closeparen)) {\n const ffmt = fmt.replace(/\\( */, \"\").replace(/ \\)/, \"\").replace(/\\)/, \"\");\n if (val >= 0) return write_num_int('n', ffmt, val);\n return '(' + write_num_int('n', ffmt, -val) + ')';\n }\n if (fmt.charCodeAt(fmt.length - 1) === 44) return write_num_cm2(type, fmt, val);\n if (fmt.indexOf('%') !== -1) return write_num_pct2(type, fmt, val);\n if (fmt.indexOf('E') !== -1) return write_num_exp2(fmt, val);\n if (fmt.charCodeAt(0) === 36) return \"$\" + write_num_int(type, fmt.substr(fmt.charAt(1) == ' ' ? 2 : 1), val);\n let o;\n let r, ri, ff, aval = Math.abs(val), sign = val < 0 ? \"-\" : \"\";\n if (fmt.match(/^00+$/)) return sign + pad0(aval, fmt.length);\n if (fmt.match(/^[#?]+$/)) {\n o = (\"\" + val);\n if (val === 0) o = \"\";\n return o.length > fmt.length ? o : hashq(fmt.substr(0, fmt.length - o.length)) + o;\n }\n if ((r = fmt.match(frac1))) return write_num_f2(r, aval, sign);\n if (fmt.match(/^#+0+$/)) return sign + pad0(aval, fmt.length - fmt.indexOf(\"0\"));\n if ((r = fmt.match(dec1))) {\n o = (\"\" + val).replace(/^([^\\.]+)$/, \"$1.\" + hashq(r[1])).replace(/\\.$/, \".\" + hashq(r[1]));\n o = o.replace(/\\.(\\d*)$/, function ($$, $1) {\n return \".\" + $1 + fill(\"0\", hashq(r[1]).length - $1.length);\n });\n return fmt.indexOf(\"0.\") !== -1 ? o : o.replace(/^0\\./, \".\");\n }\n fmt = fmt.replace(/^#+([0.])/, \"$1\");\n if ((r = fmt.match(/^(0*)\\.(#*)$/))) {\n return sign + (\"\" + aval).replace(/\\.(\\d*[1-9])0*$/, \".$1\").replace(/^(-?\\d*)$/, \"$1.\").replace(/^0\\./, r[1].length ? \"0.\" : \".\");\n }\n if ((r = fmt.match(/^#{1,3},##0(\\.?)$/))) return sign + commaify((\"\" + aval));\n if ((r = fmt.match(/^#,##0\\.([#0]*0)$/))) {\n return val < 0 ? \"-\" + write_num_int(type, fmt, -val) : commaify((\"\" + val)) + \".\" + fill('0', r[1].length);\n }\n if ((r = fmt.match(/^#,#*,#0/))) return write_num_int(type, fmt.replace(/^#,#*,/, \"\"), val);\n if ((r = fmt.match(/^([0#]+)(\\\\?-([0#]+))+$/))) {\n o = _strrev(write_num_int(type, fmt.replace(/[\\\\-]/g, \"\"), val));\n ri = 0;\n return _strrev(_strrev(fmt.replace(/\\\\/g, \"\")).replace(/[0#]/g, function (x) {\n return ri < o.length ? o.charAt(ri++) : x === '0' ? '0' : \"\";\n }));\n }\n if (fmt.match(phone)) {\n o = write_num_int(type, \"##########\", val);\n return \"(\" + o.substr(0, 3) + \") \" + o.substr(3, 3) + \"-\" + o.substr(6);\n }\n let oa = \"\";\n if ((r = fmt.match(/^([#0?]+)( ?)\\/( ?)([#0?]+)/))) {\n ri = Math.min(r[4].length, 7);\n ff = frac(aval, Math.pow(10, ri) - 1, false);\n o = \"\" + sign;\n oa = write_num(\"n\", r[1], ff[1]);\n if (oa.charAt(oa.length - 1) == \" \") oa = oa.substr(0, oa.length - 1) + \"0\";\n o += oa + r[2] + \"/\" + r[3];\n oa = rpad_(ff[2], ri);\n if (oa.length < r[4].length) oa = hashq(r[4].substr(r[4].length - oa.length)) + oa;\n o += oa;\n return o;\n }\n if ((r = fmt.match(/^# ([#0?]+)( ?)\\/( ?)([#0?]+)/))) {\n ri = Math.min(Math.max(r[1].length, r[4].length), 7);\n ff = frac(aval, Math.pow(10, ri) - 1, true);\n return sign + (ff[0] || (ff[1] ? \"\" : \"0\")) + \" \" + (ff[1] ? pad_(ff[1], ri) + r[2] + \"/\" + r[3] + rpad_(ff[2], ri) : fill(\" \", 2 * ri + 1 + r[2].length + r[3].length));\n }\n if ((r = fmt.match(/^[#0?]+$/))) {\n o = \"\" + val;\n if (fmt.length <= o.length) return o;\n return hashq(fmt.substr(0, fmt.length - o.length)) + o;\n }\n if ((r = fmt.match(/^([#0]+)\\.([#0]+)$/))) {\n o = \"\" + val.toFixed(Math.min(r[2].length, 10)).replace(/([^0])0+$/, \"$1\");\n ri = o.indexOf(\".\");\n let lres = fmt.indexOf(\".\") - ri, rres = fmt.length - o.length - lres;\n return hashq(fmt.substr(0, lres) + o + fmt.substr(fmt.length - rres));\n }\n if ((r = fmt.match(/^00,000\\.([#0]*0)$/))) {\n return val < 0 ? \"-\" + write_num_int(type, fmt, -val) : commaify(\"\" + val).replace(/^\\d,\\d{3}$/, \"0$&\").replace(/^\\d*$/, function ($$) {\n return \"00,\" + ($$.length < 3 ? pad0(0, 3 - $$.length) : \"\") + $$;\n }) + \".\" + pad0(0, r[1].length);\n }\n switch (fmt) {\n case \"###,###\":\n case \"##,###\":\n case \"#,###\":\n const x = commaify(\"\" + aval);\n return x !== \"0\" ? sign + x : \"\";\n default:\n if (fmt.match(/\\.[0#?]*$/)) return write_num_int(type, fmt.slice(0, fmt.lastIndexOf(\".\")), val) + hashq(fmt.slice(fmt.lastIndexOf(\".\")));\n }\n throw new Error(\"unsupported format |\" + fmt + \"|\");\n }\n\n return function write_num(type, fmt, val) {\n return (val | 0) === val ? write_num_int(type, fmt, val) : write_num_flt(type, fmt, val);\n };\n})();\n\nfunction split_fmt(fmt) {\n const out = [];\n let in_str = false, j = 0;\n for (let i = 0; i < fmt.length; ++i) switch ((/*cc=*/fmt.charCodeAt(i))) {\n case 34: /* '\"' */\n in_str = !in_str;\n break;\n case 95:\n case 42:\n case 92: /* '_' '*' '\\\\' */\n ++i;\n break;\n case 59: /* ';' */\n out[out.length] = fmt.substr(j, i - j);\n j = i + 1;\n }\n out[out.length] = fmt.substr(j);\n if (in_str === true) throw new Error(\"Format |\" + fmt + \"| unterminated string \");\n return out;\n}\n\nSSF._split = split_fmt;\nconst abstime = /\\[[HhMmSs]*\\]/;\n\nfunction fmt_is_date(fmt) {\n let i = 0, /*cc = 0,*/ c = \"\", o = \"\";\n while (i < fmt.length) {\n switch ((c = fmt.charAt(i))) {\n case 'G':\n if (isgeneral(fmt, i)) i += 6;\n i++;\n break;\n case '\"':\n for (; (/*cc=*/fmt.charCodeAt(++i)) !== 34 && i < fmt.length;) ++i;\n ++i;\n break;\n case '\\\\':\n i += 2;\n break;\n case '_':\n i += 2;\n break;\n case '@':\n ++i;\n break;\n case 'B':\n case 'b':\n if (fmt.charAt(i + 1) === \"1\" || fmt.charAt(i + 1) === \"2\") return true;\n /* falls through */\n case 'M':\n case 'D':\n case 'Y':\n case 'H':\n case 'S':\n case 'E':\n /* falls through */\n case 'm':\n case 'd':\n case 'y':\n case 'h':\n case 's':\n case 'e':\n case 'g':\n return true;\n case 'A':\n case 'a':\n if (fmt.substr(i, 3).toUpperCase() === \"A/P\") return true;\n if (fmt.substr(i, 5).toUpperCase() === \"AM/PM\") return true;\n ++i;\n break;\n case '[':\n o = c;\n while (fmt.charAt(i++) !== ']' && i < fmt.length) o += fmt.charAt(i);\n if (o.match(abstime)) return true;\n break;\n case '.':\n /* falls through */\n case '0':\n case '#':\n while (i < fmt.length && (\"0#?.,E+-%\".indexOf(c = fmt.charAt(++i)) > -1 || (c == '\\\\' && fmt.charAt(i + 1) == \"-\" && \"0#\".indexOf(fmt.charAt(i + 2)) > -1))) {/* empty */\n }\n break;\n case '?':\n while (fmt.charAt(++i) === c) {/* empty */\n }\n break;\n case '*':\n ++i;\n if (fmt.charAt(i) === ' ' || fmt.charAt(i) === '*') ++i;\n break;\n case '(':\n case ')':\n ++i;\n break;\n case '1':\n case '2':\n case '3':\n case '4':\n case '5':\n case '6':\n case '7':\n case '8':\n case '9':\n while (i < fmt.length && \"0123456789\".indexOf(fmt.charAt(++i)) > -1) {/* empty */\n }\n break;\n case ' ':\n ++i;\n break;\n default:\n ++i;\n break;\n }\n }\n return false;\n}\n\nSSF.is_date = fmt_is_date;\n\nfunction eval_fmt(fmt, v, opts, flen) {\n let out = [], o = \"\", i = 0, c = \"\", lst = 't', dt, j, cc;\n let hr = 'H';\n /* Tokenize */\n while (i < fmt.length) {\n switch ((c = fmt.charAt(i))) {\n case 'G': /* General */\n if (!isgeneral(fmt, i)) throw new Error('unrecognized character ' + c + ' in ' + fmt);\n out[out.length] = {t: 'G', v: 'General'};\n i += 7;\n break;\n case '\"': /* Literal text */\n for (o = \"\"; (cc = fmt.charCodeAt(++i)) !== 34 && i < fmt.length;) o += String.fromCharCode(cc);\n out[out.length] = {t: 't', v: o};\n ++i;\n break;\n case '\\\\':\n const w = fmt.charAt(++i), t = (w === \"(\" || w === \")\") ? w : 't';\n out[out.length] = {t: t, v: w};\n ++i;\n break;\n case '_':\n out[out.length] = {t: 't', v: \" \"};\n i += 2;\n break;\n case '@': /* Text Placeholder */\n out[out.length] = {t: 'T', v: v};\n ++i;\n break;\n case 'B':\n case 'b':\n if (fmt.charAt(i + 1) === \"1\" || fmt.charAt(i + 1) === \"2\") {\n if (dt == null) {\n dt = parse_date_code(v, opts, fmt.charAt(i + 1) === \"2\");\n if (dt == null) return \"\";\n }\n out[out.length] = {t: 'X', v: fmt.substr(i, 2)};\n lst = c;\n i += 2;\n break;\n }\n /* falls through */\n case 'M':\n case 'D':\n case 'Y':\n case 'H':\n case 'S':\n case 'E':\n c = c.toLowerCase();\n /* falls through */\n case 'm':\n case 'd':\n case 'y':\n case 'h':\n case 's':\n case 'e':\n case 'g':\n if (v < 0) return \"\";\n if (dt == null) {\n dt = parse_date_code(v, opts);\n if (dt == null) return \"\";\n }\n o = c;\n while (++i < fmt.length && fmt.charAt(i).toLowerCase() === c) o += c;\n if (c === 'm' && lst.toLowerCase() === 'h') c = 'M';\n if (c === 'h') c = hr;\n out[out.length] = {t: c, v: o};\n lst = c;\n break;\n case 'A':\n case 'a':\n const q = {t: c, v: c};\n if (dt == null) dt = parse_date_code(v, opts);\n if (fmt.substr(i, 3).toUpperCase() === \"A/P\") {\n if (dt != null) q.v = dt.H >= 12 ? \"P\" : \"A\";\n q.t = 'T';\n hr = 'h';\n i += 3;\n } else if (fmt.substr(i, 5).toUpperCase() === \"AM/PM\") {\n if (dt != null) q.v = dt.H >= 12 ? \"PM\" : \"AM\";\n q.t = 'T';\n i += 5;\n hr = 'h';\n } else {\n q.t = \"t\";\n ++i;\n }\n if (dt == null && q.t === 'T') return \"\";\n out[out.length] = q;\n lst = c;\n break;\n case '[':\n o = c;\n while (fmt.charAt(i++) !== ']' && i < fmt.length) o += fmt.charAt(i);\n if (o.slice(-1) !== ']') throw 'unterminated \"[\" block: |' + o + '|';\n if (o.match(abstime)) {\n if (dt == null) {\n dt = parse_date_code(v, opts);\n if (dt == null) return \"\";\n }\n out[out.length] = {t: 'Z', v: o.toLowerCase()};\n lst = o.charAt(1);\n } else if (o.indexOf(\"$\") > -1) {\n o = (o.match(/\\$([^-\\[\\]]*)/) || [])[1] || \"$\";\n if (!fmt_is_date(fmt)) out[out.length] = {t: 't', v: o};\n }\n break;\n /* Numbers */\n case '.':\n if (dt != null) {\n o = c;\n while (++i < fmt.length && (c = fmt.charAt(i)) === \"0\") o += c;\n out[out.length] = {t: 's', v: o};\n break;\n }\n /* falls through */\n case '0':\n case '#':\n o = c;\n while ((++i < fmt.length && \"0#?.,E+-%\".indexOf(c = fmt.charAt(i)) > -1) || (c == '\\\\' && fmt.charAt(i + 1) == \"-\" && i < fmt.length - 2 && \"0#\".indexOf(fmt.charAt(i + 2)) > -1)) o += c;\n out[out.length] = {t: 'n', v: o};\n break;\n case '?':\n o = c;\n while (fmt.charAt(++i) === c) o += c;\n out[out.length] = {t: c, v: o};\n lst = c;\n break;\n case '*':\n ++i;\n if (fmt.charAt(i) === ' ' || fmt.charAt(i) === '*') ++i;\n break; // **\n case '(':\n case ')':\n out[out.length] = {t: (flen === 1 || (typeof v === 'number' && v < 0) ? 't' : c), v: c};\n ++i;\n break;\n case '1':\n case '2':\n case '3':\n case '4':\n case '5':\n case '6':\n case '7':\n case '8':\n case '9':\n o = c;\n while (i < fmt.length && \"0123456789\".indexOf(fmt.charAt(++i)) > -1) o += fmt.charAt(i);\n out[out.length] = {t: 'D', v: o};\n break;\n case ' ':\n out[out.length] = {t: c, v: c};\n ++i;\n break;\n default:\n if (\",$-+/():!^&'~{}<>=€acfijklopqrtuvwxzP\".indexOf(c) === -1) throw new Error('unrecognized character ' + c + ' in ' + fmt);\n out[out.length] = {t: 't', v: c};\n ++i;\n break;\n }\n }\n let bt = 0, ss0 = 0, ssm;\n for (i = out.length - 1, lst = 't'; i >= 0; --i) {\n switch (out[i].t) {\n case 'h':\n case 'H':\n out[i].t = hr;\n lst = 'h';\n if (bt < 1) bt = 1;\n break;\n case 's':\n if ((ssm = out[i].v.match(/\\.0+$/))) ss0 = Math.max(ss0, ssm[0].length - 1);\n if (bt < 3) bt = 3;\n /* falls through */\n case 'd':\n case 'y':\n case 'M':\n case 'e':\n lst = out[i].t;\n break;\n case 'm':\n if (lst === 's') {\n out[i].t = 'M';\n if (bt < 2) bt = 2;\n }\n break;\n case 'X': /*if(out[i].v === \"B2\");*/\n break;\n case 'Z':\n if (bt < 1 && out[i].v.match(/[Hh]/)) bt = 1;\n if (bt < 2 && out[i].v.match(/[Mm]/)) bt = 2;\n if (bt < 3 && out[i].v.match(/[Ss]/)) bt = 3;\n }\n }\n switch (bt) {\n case 0:\n break;\n case 1:\n if (dt.u >= 0.5) {\n dt.u = 0;\n ++dt.S;\n }\n if (dt.S >= 60) {\n dt.S = 0;\n ++dt.M;\n }\n if (dt.M >= 60) {\n dt.M = 0;\n ++dt.H;\n }\n break;\n case 2:\n if (dt.u >= 0.5) {\n dt.u = 0;\n ++dt.S;\n }\n if (dt.S >= 60) {\n dt.S = 0;\n ++dt.M;\n }\n break;\n }\n /* replace fields */\n let nstr = \"\", jj;\n for (i = 0; i < out.length; ++i) {\n switch (out[i].t) {\n case 't':\n case 'T':\n case ' ':\n case 'D':\n break;\n case 'X':\n out[i].v = \"\";\n out[i].t = \";\";\n break;\n case 'd':\n case 'm':\n case 'y':\n case 'h':\n case 'H':\n case 'M':\n case 's':\n case 'e':\n case 'b':\n case 'Z':\n out[i].v = write_date(out[i].t.charCodeAt(0), out[i].v, dt, ss0);\n out[i].t = 't';\n break;\n case 'n':\n case '(':\n case '?':\n jj = i + 1;\n while (out[jj] != null && (\n (c = out[jj].t) === \"?\" || c === \"D\" ||\n ((c === \" \" || c === \"t\") && out[jj + 1] != null && (out[jj + 1].t === '?' || out[jj + 1].t === \"t\" && out[jj + 1].v === '/')) ||\n (out[i].t === '(' && (c === ' ' || c === 'n' || c === ')')) ||\n (c === 't' && (out[jj].v === '/' || out[jj].v === ' ' && out[jj + 1] != null && out[jj + 1].t === '?'))\n )) {\n out[i].v += out[jj].v;\n out[jj] = {v: \"\", t: \";\"};\n ++jj;\n }\n nstr += out[i].v;\n i = jj - 1;\n break;\n case 'G':\n out[i].t = 't';\n out[i].v = general_fmt(v, opts);\n break;\n }\n }\n let vv = \"\", myv, ostr;\n if (nstr.length > 0) {\n if (nstr.charCodeAt(0) === 40) /* '(' */ {\n myv = (v < 0 && nstr.charCodeAt(0) === 45 ? -v : v);\n ostr = write_num('(', nstr, myv);\n } else {\n myv = (v < 0 && flen > 1 ? -v : v);\n ostr = write_num('n', nstr, myv);\n if (myv < 0 && out[0] && out[0].t === 't') {\n ostr = ostr.substr(1);\n out[0].v = \"-\" + out[0].v;\n }\n }\n jj = ostr.length - 1;\n let decpt = out.length;\n for (i = 0; i < out.length; ++i) if (out[i] != null && out[i].t !== 't' && out[i].v.indexOf(\".\") > -1) {\n decpt = i;\n break;\n }\n let lasti = out.length;\n if (decpt === out.length && ostr.indexOf(\"E\") === -1) {\n for (i = out.length - 1; i >= 0; --i) {\n if (out[i] == null || 'n?('.indexOf(out[i].t) === -1) continue;\n if (jj >= out[i].v.length - 1) {\n jj -= out[i].v.length;\n out[i].v = ostr.substr(jj + 1, out[i].v.length);\n } else if (jj < 0) out[i].v = \"\";\n else {\n out[i].v = ostr.substr(0, jj + 1);\n jj = -1;\n }\n out[i].t = 't';\n lasti = i;\n }\n if (jj >= 0 && lasti < out.length) out[lasti].v = ostr.substr(0, jj + 1) + out[lasti].v;\n } else if (decpt !== out.length && ostr.indexOf(\"E\") === -1) {\n jj = ostr.indexOf(\".\") - 1;\n for (i = decpt; i >= 0; --i) {\n if (out[i] == null || 'n?('.indexOf(out[i].t) === -1) continue;\n j = out[i].v.indexOf(\".\") > -1 && i === decpt ? out[i].v.indexOf(\".\") - 1 : out[i].v.length - 1;\n vv = out[i].v.substr(j + 1);\n for (; j >= 0; --j) {\n if (jj >= 0 && (out[i].v.charAt(j) === \"0\" || out[i].v.charAt(j) === \"#\")) vv = ostr.charAt(jj--) + vv;\n }\n out[i].v = vv;\n out[i].t = 't';\n lasti = i;\n }\n if (jj >= 0 && lasti < out.length) out[lasti].v = ostr.substr(0, jj + 1) + out[lasti].v;\n jj = ostr.indexOf(\".\") + 1;\n for (i = decpt; i < out.length; ++i) {\n if (out[i] == null || ('n?('.indexOf(out[i].t) === -1 && i !== decpt)) continue;\n j = out[i].v.indexOf(\".\") > -1 && i === decpt ? out[i].v.indexOf(\".\") + 1 : 0;\n vv = out[i].v.substr(0, j);\n for (; j < out[i].v.length; ++j) {\n if (jj < ostr.length) vv += ostr.charAt(jj++);\n }\n out[i].v = vv;\n out[i].t = 't';\n lasti = i;\n }\n }\n }\n for (i = 0; i < out.length; ++i) if (out[i] != null && 'n(?'.indexOf(out[i].t) > -1) {\n myv = (flen > 1 && v < 0 && i > 0 && out[i - 1].v === \"-\" ? -v : v);\n out[i].v = write_num(out[i].t, out[i].v, myv);\n out[i].t = 't';\n }\n let retval = \"\";\n for (i = 0; i !== out.length; ++i) if (out[i] != null) retval += out[i].v;\n return retval;\n}\n\nSSF._eval = eval_fmt;\nconst cfregex = /\\[[=<>]/;\nconst cfregex2 = /\\[([=<>]*)(-?\\d+\\.?\\d*)\\]/;\n\nfunction chkcond(v, rr) {\n if (rr == null) return false;\n const thresh = parseFloat(rr[2]);\n switch (rr[1]) {\n case \"=\":\n if (v === thresh) return true;\n break;\n case \">\":\n if (v > thresh) return true;\n break;\n case \"<\":\n if (v < thresh) return true;\n break;\n case \"<>\":\n if (v !== thresh) return true;\n break;\n case \">=\":\n if (v >= thresh) return true;\n break;\n case \"<=\":\n if (v <= thresh) return true;\n break;\n }\n return false;\n}\n\nfunction choose_fmt(f, v) {\n let fmt = split_fmt(f);\n let l = fmt.length, lat = fmt[l - 1].indexOf(\"@\");\n if (l < 4 && lat > -1) --l;\n if (fmt.length > 4) throw new Error(\"cannot find right format for |\" + fmt.join(\"|\") + \"|\");\n if (typeof v !== \"number\") return [4, fmt.length === 4 || lat > -1 ? fmt[fmt.length - 1] : \"@\"];\n switch (fmt.length) {\n case 1:\n fmt = lat > -1 ? [\"General\", \"General\", \"General\", fmt[0]] : [fmt[0], fmt[0], fmt[0], \"@\"];\n break;\n case 2:\n fmt = lat > -1 ? [fmt[0], fmt[0], fmt[0], fmt[1]] : [fmt[0], fmt[1], fmt[0], \"@\"];\n break;\n case 3:\n fmt = lat > -1 ? [fmt[0], fmt[1], fmt[0], fmt[2]] : [fmt[0], fmt[1], fmt[2], \"@\"];\n break;\n case 4:\n break;\n }\n const ff = v > 0 ? fmt[0] : v < 0 ? fmt[1] : fmt[2];\n if (fmt[0].indexOf(\"[\") === -1 && fmt[1].indexOf(\"[\") === -1) return [l, ff];\n if (fmt[0].match(cfregex) != null || fmt[1].match(cfregex) != null) {\n const m1 = fmt[0].match(cfregex2);\n const m2 = fmt[1].match(cfregex2);\n return chkcond(v, m1) ? [l, fmt[0]] : chkcond(v, m2) ? [l, fmt[1]] : [l, fmt[m1 != null && m2 != null ? 2 : 1]];\n }\n return [l, ff];\n}\n\nfunction format(fmt, v, o) {\n if (o == null) o = {};\n let sfmt = \"\";\n switch (typeof fmt) {\n case \"string\":\n if (fmt === \"m/d/yy\" && o.dateNF) sfmt = o.dateNF;\n else sfmt = fmt;\n break;\n case \"number\":\n if (fmt === 14 && o.dateNF) sfmt = o.dateNF;\n else sfmt = (o.table != null ? (o.table) : table_fmt)[fmt];\n break;\n }\n if (isgeneral(sfmt, 0)) return general_fmt(v, o);\n if (v instanceof Date) v = datenum_local(v, o.date1904);\n const f = choose_fmt(sfmt, v);\n if (isgeneral(f[1])) return general_fmt(v, o);\n if (v === true) v = \"TRUE\"; else if (v === false) v = \"FALSE\";\n else if (v === \"\" || v == null) return \"\";\n return eval_fmt(f[1], v, o, f[0]);\n}\n\nfunction load_entry(fmt, idx) {\n if (typeof idx !== 'number') {\n idx = +idx || -1;\n for (let i = 0; i < 0x0188; ++i) {\n if (table_fmt[i] === undefined) {\n if (idx < 0) idx = i;\n continue;\n }\n if (table_fmt[i] === fmt) {\n idx = i;\n break;\n }\n }\n if (idx < 0) idx = 0x187;\n }\n table_fmt[idx] = fmt;\n return idx;\n}\n\n/**\n * Load format string\n * @param fmt - format\n * @param [idx] - index\n * @returns {number}\n */\nSSF.load = load_entry;\n\n/**\n * The underlying object, mapping numeric keys to format strings.\n * return {{}}\n */\nSSF._table = table_fmt;\n\n/**\n * Gets the internal format table (number to format mapping).\n * @return {{}}\n */\nSSF.get_table = function get_table() {\n return table_fmt;\n};\nSSF.load_table = function load_table(tbl) {\n for (let i = 0; i !== 0x0188; ++i)\n if (tbl[i] !== undefined) load_entry(tbl[i], i);\n};\nSSF.init_table = init_table;\n\n/**\n * Render value using format string or code.\n * If fmt is a string, it will be parsed and evaluated. If fmt is a number, the actual format will be the\n * corresponding entry in the internal format table. For a raw numeric format like 000, the value should be\n * passed as a string.\n *\n * Date arguments are interpreted in the local time of the JS client.\n *\n * @param {string|number} fmt - format\n * @param {any} v - values\n * @param {{date1904: boolean}|undefined} [o] - options\n * @returns {string|*|string|undefined}\n */\nSSF.format = format;\n\nmodule.exports = SSF;\n","/*\nstep:\n1. validate\n2. sanitize\n3. split\n4. proceed\n5. grammar\n6. combine\n*/\n\nconst defaultResult = 'ศูนย์บาทถ้วน'\nconst singleUnitStrs = [\n '',\n 'หนึ่ง',\n 'สอง',\n 'สาม',\n 'สี่',\n 'ห้า',\n 'หก',\n 'เจ็ด',\n 'แปด',\n 'เก้า'\n]\nconst placeNameStrs = [\n '',\n 'สิบ',\n 'ร้อย',\n 'พัน',\n 'หมื่น',\n 'แสน',\n 'ล้าน'\n]\n\n/**\n * @param {number[]} nums\n * @returns {string}\n */\nfunction num2Word (nums) {\n let result = ''\n const len = nums.length\n const maxLen = 7\n\n if (len > maxLen) {\n // more than million\n const overflowIndex = len - maxLen + 1\n const overflowNums = nums.slice(0, overflowIndex)\n const remainingNumbs = nums.slice(overflowIndex)\n return num2Word(overflowNums) + 'ล้าน' + num2Word(remainingNumbs)\n } else {\n for (let i = 0; i < len; i++) {\n const digit = nums[i]\n if (digit > 0) {\n result += singleUnitStrs[digit] + placeNameStrs[len - i - 1]\n }\n }\n }\n\n return result\n}\n\n/**\n * @param {string} str\n * @returns {string}\n */\nfunction grammarFix (str) {\n let result = str\n\n // \"สิบ\"\n result = result.replace('หนึ่งสิบ', 'สิบ')\n // \"ยี่สิบ\"\n result = result.replace('สองสิบ', 'ยี่สิบ')\n // \"เอ็ด\"\n const neungLen = 5\n if (result.length > neungLen &&\n result.length - result.lastIndexOf('หนึ่ง') === neungLen) {\n result = result.substr(0, result.length - neungLen) + 'เอ็ด'\n }\n\n return result\n}\n\n/**\n * Combine baht and satang\n * and also adding unit\n *\n * @param {string} baht\n * @param {string} satang\n * @returns {string}\n */\nfunction combine (baht, satang) {\n let result = ''\n\n if (baht === '' && satang === '') {\n result = defaultResult\n } else if (baht !== '' && satang === '') {\n result = baht + 'บาท' + 'ถ้วน'\n } else if (baht === '' && satang !== '') {\n result = satang + 'สตางค์'\n } else {\n result = baht + 'บาท' + satang + 'สตางค์'\n }\n\n return result\n}\n\n/**\n * Change number to Thai pronunciation string\n *\n * @param {number} num\n * @returns {string}\n */\nfunction bahttext (num) {\n let result = defaultResult\n\n // 1. validate: invalid number\n if (isNaN(num)) return result\n // 1. validate: more than\n if (num >= Number.MAX_SAFE_INTEGER) return result\n\n // 2. sanitize: ????\n\n // 3. split: baht and satang\n // e.g. 432.21 >> 432, 21\n // @todo optimize\n /** @type {string} */\n const bahtStr = Math.floor(num).toString()\n /** @type {string} */\n const satangStr = Math.round(num % 1 * 100).toString()\n\n // 3. split: convert number array\n // @todo optimize it\n /** @type {number[]} */\n const bahtArr = Array.from(bahtStr).map(Number)\n /** @type {number[]} */\n const satangArr = Array.from(satangStr).map(Number)\n\n // 4. proceed\n let baht = num2Word(bahtArr)\n let satang = num2Word(satangArr)\n\n // 5. grammar\n baht = grammarFix(baht)\n satang = grammarFix(satang)\n\n // 6. combine\n result = combine(baht, satang)\n\n return result\n}\n\nif (typeof module !== 'undefined' &&\n module.exports != null) {\n module.exports = bahttext\n}\n","const FormulaError = require('../error');\r\nconst {FormulaHelpers, Types, WildCard} = require('../helpers');\r\nconst H = FormulaHelpers;\r\n\r\n// Spreadsheet number format\r\nconst ssf = require('../../ssf/ssf');\r\n\r\n// Change number to Thai pronunciation string\r\nconst bahttext = require('bahttext');\r\n\r\n// full-width and half-width converter\r\nconst charsets = {\r\n latin: {halfRE: /[!-~]/g, fullRE: /[!-~]/g, delta: 0xFEE0},\r\n hangul1: {halfRE: /[ᄀ-ᄒ]/g, fullRE: /[ᆨ-ᇂ]/g, delta: -0xEDF9},\r\n hangul2: {halfRE: /[ᅡ-ᅵ]/g, fullRE: /[ᅡ-ᅵ]/g, delta: -0xEE61},\r\n kana: {\r\n delta: 0,\r\n half: \"。「」、・ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゙゚\",\r\n full: \"。「」、・ヲァィゥェォャュョッーアイウエオカキクケコサシ\" +\r\n \"スセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゛゜\"\r\n },\r\n extras: {\r\n delta: 0,\r\n half: \"¢£¬¯¦¥₩\\u0020|←↑→↓■°\",\r\n full: \"¢£¬ ̄¦¥₩\\u3000│←↑→↓■○\"\r\n }\r\n};\r\nconst toFull = set => c => set.delta ?\r\n String.fromCharCode(c.charCodeAt(0) + set.delta) :\r\n [...set.full][[...set.half].indexOf(c)];\r\nconst toHalf = set => c => set.delta ?\r\n String.fromCharCode(c.charCodeAt(0) - set.delta) :\r\n [...set.half][[...set.full].indexOf(c)];\r\nconst re = (set, way) => set[way + \"RE\"] || new RegExp(\"[\" + set[way] + \"]\", \"g\");\r\nconst sets = Object.keys(charsets).map(i => charsets[i]);\r\nconst toFullWidth = str0 =>\r\n sets.reduce((str, set) => str.replace(re(set, \"half\"), toFull(set)), str0);\r\nconst toHalfWidth = str0 =>\r\n sets.reduce((str, set) => str.replace(re(set, \"full\"), toHalf(set)), str0);\r\n\r\nconst TextFunctions = {\r\n ASC: (text) => {\r\n text = H.accept(text, Types.STRING);\r\n return toHalfWidth(text);\r\n },\r\n\r\n BAHTTEXT: (number) => {\r\n number = H.accept(number, Types.NUMBER);\r\n try {\r\n return bahttext(number);\r\n } catch (e) {\r\n throw Error(`Error in https://github.com/jojoee/bahttext \\n${e.toString()}`)\r\n }\r\n },\r\n\r\n CHAR: (number) => {\r\n number = H.accept(number, Types.NUMBER);\r\n if (number > 255 || number < 1)\r\n throw FormulaError.VALUE;\r\n return String.fromCharCode(number);\r\n },\r\n\r\n CLEAN: (text) => {\r\n text = H.accept(text, Types.STRING);\r\n return text.replace(/[\\x00-\\x1F]/g, '');\r\n },\r\n\r\n CODE: (text) => {\r\n text = H.accept(text, Types.STRING);\r\n if (text.length === 0)\r\n throw FormulaError.VALUE;\r\n return text.charCodeAt(0);\r\n },\r\n\r\n CONCAT: (...params) => {\r\n let text = '';\r\n // does not allow union\r\n H.flattenParams(params, Types.STRING, false, item => {\r\n item = H.accept(item, Types.STRING);\r\n text += item;\r\n });\r\n return text\r\n },\r\n\r\n CONCATENATE: (...params) => {\r\n let text = '';\r\n if (params.length === 0)\r\n throw Error('CONCATENATE need at least one argument.');\r\n params.forEach(param => {\r\n // does not allow range reference, array, union\r\n param = H.accept(param, Types.STRING);\r\n text += param;\r\n });\r\n\r\n return text;\r\n },\r\n\r\n DBCS: (text) => {\r\n text = H.accept(text, Types.STRING);\r\n return toFullWidth(text);\r\n },\r\n\r\n DOLLAR: (number, decimals) => {\r\n number = H.accept(number, Types.NUMBER);\r\n decimals = H.accept(decimals, Types.NUMBER, 2);\r\n const decimalString = Array(decimals).fill('0').join('');\r\n // Note: does not support locales\r\n // TODO: change currency based on user locale or settings from this library\r\n return ssf.format(`$#,##0.${decimalString}_);($#,##0.${decimalString})`, number).trim();\r\n },\r\n\r\n EXACT: (text1, text2) => {\r\n text1 = H.accept(text1, [Types.STRING]);\r\n text2 = H.accept(text2, [Types.STRING]);\r\n\r\n return text1 === text2;\r\n },\r\n\r\n FIND: (findText, withinText, startNum) => {\r\n findText = H.accept(findText, Types.STRING);\r\n withinText = H.accept(withinText, Types.STRING);\r\n startNum = H.accept(startNum, Types.NUMBER, 1);\r\n if (startNum < 1 || startNum > withinText.length)\r\n throw FormulaError.VALUE;\r\n const res = withinText.indexOf(findText, startNum - 1);\r\n if (res === -1)\r\n throw FormulaError.VALUE;\r\n return res + 1;\r\n },\r\n\r\n FINDB: (...params) => {\r\n return TextFunctions.FIND(...params);\r\n },\r\n\r\n FIXED: (number, decimals, noCommas) => {\r\n number = H.accept(number, Types.NUMBER);\r\n decimals = H.accept(decimals, Types.NUMBER, 2);\r\n noCommas = H.accept(noCommas, Types.BOOLEAN, false);\r\n\r\n const decimalString = Array(decimals).fill('0').join('');\r\n const comma = noCommas ? '' : '#,';\r\n return ssf.format(`${comma}##0.${decimalString}_);(${comma}##0.${decimalString})`, number).trim();\r\n },\r\n\r\n LEFT: (text, numChars) => {\r\n text = H.accept(text, Types.STRING);\r\n numChars = H.accept(numChars, Types.NUMBER, 1);\r\n\r\n if (numChars < 0)\r\n throw FormulaError.VALUE;\r\n if (numChars > text.length)\r\n return text;\r\n return text.slice(0, numChars);\r\n },\r\n\r\n LEFTB: (...params) => {\r\n return TextFunctions.LEFT(...params);\r\n },\r\n\r\n LEN: (text) => {\r\n text = H.accept(text, Types.STRING);\r\n return text.length;\r\n },\r\n\r\n LENB: (...params) => {\r\n return TextFunctions.LEN(...params);\r\n },\r\n\r\n LOWER: (text) => {\r\n text = H.accept(text, Types.STRING);\r\n return text.toLowerCase();\r\n },\r\n\r\n MID: (text, startNum, numChars) => {\r\n text = H.accept(text, Types.STRING);\r\n startNum = H.accept(startNum, Types.NUMBER);\r\n numChars = H.accept(numChars, Types.NUMBER);\r\n if (startNum > text.length)\r\n return '';\r\n if (startNum < 1 || numChars < 1)\r\n throw FormulaError.VALUE;\r\n return text.slice(startNum - 1, startNum + numChars - 1);\r\n },\r\n\r\n MIDB: (...params) => {\r\n return TextFunctions.MID(...params);\r\n },\r\n\r\n NUMBERVALUE: (text, decimalSeparator, groupSeparator) => {\r\n text = H.accept(text, Types.STRING);\r\n // TODO: support reading system locale and set separators\r\n decimalSeparator = H.accept(decimalSeparator, Types.STRING, '.');\r\n groupSeparator = H.accept(groupSeparator, Types.STRING, ',');\r\n\r\n if (text.length === 0)\r\n return 0;\r\n if (decimalSeparator.length === 0 || groupSeparator.length === 0)\r\n throw FormulaError.VALUE;\r\n decimalSeparator = decimalSeparator[0];\r\n groupSeparator = groupSeparator[0];\r\n if (decimalSeparator === groupSeparator\r\n || text.indexOf(decimalSeparator) < text.lastIndexOf(groupSeparator))\r\n throw FormulaError.VALUE;\r\n\r\n const res = text.replace(groupSeparator, '')\r\n .replace(decimalSeparator, '.')\r\n // remove chars that not related to number\r\n .replace(/[^\\-0-9.%()]/g, '')\r\n .match(/([(-]*)([0-9]*[.]*[0-9]+)([)]?)([%]*)/);\r\n if (!res)\r\n throw FormulaError.VALUE;\r\n // [\"-123456.78%%\", \"(-\", \"123456.78\", \")\", \"%%\"]\r\n const leftParenOrMinus = res[1].length, rightParen = res[3].length, percent = res[4].length;\r\n let number = Number(res[2]);\r\n if (leftParenOrMinus > 1 || leftParenOrMinus && !rightParen\r\n || !leftParenOrMinus && rightParen || isNaN(number))\r\n throw FormulaError.VALUE;\r\n number = number / 100 ** percent;\r\n return leftParenOrMinus ? -number : number;\r\n },\r\n\r\n PHONETIC: () => {\r\n },\r\n\r\n PROPER: (text) => {\r\n text = H.accept(text, [Types.STRING]);\r\n text = text.toLowerCase();\r\n text = text.charAt(0).toUpperCase() + text.slice(1);\r\n return text.replace(/(?:[^a-zA-Z])([a-zA-Z])/g,\r\n letter => letter.toUpperCase());\r\n },\r\n\r\n REPLACE: (old_text, start_num, num_chars, new_text) => {\r\n old_text = H.accept(old_text, [Types.STRING]);\r\n start_num = H.accept(start_num, [Types.NUMBER]);\r\n num_chars = H.accept(num_chars, [Types.NUMBER]);\r\n new_text = H.accept(new_text, [Types.STRING]);\r\n\r\n let arr = old_text.split(\"\");\r\n arr.splice(start_num - 1, num_chars, new_text);\r\n\r\n return arr.join(\"\");\r\n },\r\n\r\n REPLACEB: (...params) => {\r\n return TextFunctions.REPLACE(...params)\r\n },\r\n\r\n REPT: (text, number_times) => {\r\n text = H.accept(text, Types.STRING);\r\n number_times = H.accept(number_times, Types.NUMBER);\r\n let str = \"\";\r\n\r\n for (let i = 0; i < number_times; i++) {\r\n str += text;\r\n }\r\n return str;\r\n },\r\n\r\n RIGHT: (text, numChars) => {\r\n text = H.accept(text, Types.STRING);\r\n numChars = H.accept(numChars, Types.NUMBER, 1);\r\n\r\n if (numChars < 0)\r\n throw FormulaError.VALUE;\r\n const len = text.length;\r\n if (numChars > len)\r\n return text;\r\n return text.slice(len - numChars);\r\n },\r\n\r\n RIGHTB: (...params) => {\r\n return TextFunctions.RIGHT(...params);\r\n },\r\n\r\n SEARCH: (findText, withinText, startNum) => {\r\n findText = H.accept(findText, Types.STRING);\r\n withinText = H.accept(withinText, Types.STRING);\r\n startNum = H.accept(startNum, Types.NUMBER, 1);\r\n if (startNum < 1 || startNum > withinText.length)\r\n throw FormulaError.VALUE;\r\n\r\n // transform to js regex expression\r\n let findTextRegex = WildCard.isWildCard(findText) ? WildCard.toRegex(findText, 'i') : findText;\r\n const res = withinText.slice(startNum - 1).search(findTextRegex);\r\n if (res === -1)\r\n throw FormulaError.VALUE;\r\n return res + startNum;\r\n },\r\n\r\n SEARCHB: (...params) => {\r\n return TextFunctions.SEARCH(...params)\r\n },\r\n\r\n SUBSTITUTE: (...params) => {\r\n\r\n },\r\n\r\n T: (value) => {\r\n // extract the real parameter\r\n value = H.accept(value);\r\n if (typeof value === \"string\")\r\n return value;\r\n return '';\r\n },\r\n\r\n TEXT: (value, formatText) => {\r\n value = H.accept(value, Types.NUMBER);\r\n formatText = H.accept(formatText, Types.STRING);\r\n // I know ssf contains bugs...\r\n try {\r\n return ssf.format(formatText, value);\r\n } catch (e) {\r\n console.error(e)\r\n throw FormulaError.VALUE;\r\n }\r\n },\r\n\r\n TEXTJOIN: (...params) => {\r\n\r\n },\r\n\r\n TRIM: (text) => {\r\n text = H.accept(text, [Types.STRING]);\r\n return text.replace(/^\\s+|\\s+$/g, '')\r\n },\r\n\r\n UNICHAR: (number) => {\r\n number = H.accept(number, [Types.NUMBER]);\r\n if (number <= 0)\r\n throw FormulaError.VALUE;\r\n return String.fromCharCode(number);\r\n },\r\n\r\n UNICODE: (text) => {\r\n return TextFunctions.CODE(text);\r\n },\r\n};\r\n\r\nmodule.exports = TextFunctions;\r\n","const FormulaError = require('../formulas/error');\r\nconst {FormulaHelpers} = require('../formulas/helpers');\r\n\r\nconst Prefix = {\r\n unaryOp: (prefixes, value, isArray) => {\r\n let sign = 1;\r\n prefixes.forEach(prefix => {\r\n if (prefix === '+') {\r\n } else if (prefix === '-') {\r\n sign = -sign;\r\n } else {\r\n throw new Error(`Unrecognized prefix: ${prefix}`);\r\n }\r\n });\r\n\r\n if (value == null) {\r\n value = 0;\r\n }\r\n // positive means no changes\r\n if (sign === 1) {\r\n return value;\r\n }\r\n // negative\r\n try {\r\n value = FormulaHelpers.acceptNumber(value, isArray);\r\n } catch (e) {\r\n if (e instanceof FormulaError) {\r\n // parse number fails\r\n if (Array.isArray(value))\r\n value = value[0][0]\r\n } else\r\n throw e;\r\n }\r\n\r\n if (typeof value === \"number\" && isNaN(value)) return FormulaError.VALUE;\r\n return -value;\r\n }\r\n};\r\n\r\nconst Postfix = {\r\n percentOp: (value, postfix, isArray) => {\r\n try {\r\n value = FormulaHelpers.acceptNumber(value, isArray);\r\n } catch (e) {\r\n if (e instanceof FormulaError)\r\n return e;\r\n throw e;\r\n }\r\n if (postfix === '%') {\r\n return value / 100;\r\n }\r\n throw new Error(`Unrecognized postfix: ${postfix}`);\r\n }\r\n};\r\n\r\nconst type2Number = {'boolean': 3, 'string': 2, 'number': 1};\r\n\r\nconst Infix = {\r\n compareOp: (value1, infix, value2, isArray1, isArray2) => {\r\n if (value1 == null) value1 = 0;\r\n if (value2 == null) value2 = 0;\r\n // for array: {1,2,3}, get the first element to compare\r\n if (isArray1) {\r\n value1 = value1[0][0];\r\n }\r\n if (isArray2) {\r\n value2 = value2[0][0];\r\n }\r\n\r\n const type1 = typeof value1, type2 = typeof value2;\r\n\r\n if (type1 === type2) {\r\n // same type comparison\r\n switch (infix) {\r\n case '=':\r\n return value1 === value2;\r\n case '>':\r\n return value1 > value2;\r\n case '<':\r\n return value1 < value2;\r\n case '<>':\r\n return value1 !== value2;\r\n case '<=':\r\n return value1 <= value2;\r\n case '>=':\r\n return value1 >= value2;\r\n }\r\n } else {\r\n switch (infix) {\r\n case '=':\r\n return false;\r\n case '>':\r\n return type2Number[type1] > type2Number[type2];\r\n case '<':\r\n return type2Number[type1] < type2Number[type2];\r\n case '<>':\r\n return true;\r\n case '<=':\r\n return type2Number[type1] <= type2Number[type2];\r\n case '>=':\r\n return type2Number[type1] >= type2Number[type2];\r\n }\r\n\r\n }\r\n throw Error('Infix.compareOp: Should not reach here.');\r\n },\r\n\r\n concatOp: (value1, infix, value2, isArray1, isArray2) => {\r\n if (value1 == null) value1 = '';\r\n if (value2 == null) value2 = '';\r\n // for array: {1,2,3}, get the first element to concat\r\n if (isArray1) {\r\n value1 = value1[0][0];\r\n }\r\n if (isArray2) {\r\n value2 = value2[0][0];\r\n }\r\n\r\n const type1 = typeof value1, type2 = typeof value2;\r\n // convert boolean to string\r\n if (type1 === 'boolean')\r\n value1 = value1 ? 'TRUE' : 'FALSE';\r\n if (type2 === 'boolean')\r\n value2 = value2 ? 'TRUE' : 'FALSE';\r\n return '' + value1 + value2;\r\n },\r\n\r\n mathOp: (value1, infix, value2, isArray1, isArray2) => {\r\n if (value1 == null) value1 = 0;\r\n if (value2 == null) value2 = 0;\r\n\r\n try {\r\n value1 = FormulaHelpers.acceptNumber(value1, isArray1);\r\n value2 = FormulaHelpers.acceptNumber(value2, isArray2);\r\n } catch (e) {\r\n if (e instanceof FormulaError)\r\n return e;\r\n throw e;\r\n }\r\n\r\n switch (infix) {\r\n case '+':\r\n return value1 + value2;\r\n case '-':\r\n return value1 - value2;\r\n case '*':\r\n return value1 * value2;\r\n case '/':\r\n if (value2 === 0)\r\n return FormulaError.DIV0;\r\n return value1 / value2;\r\n case '^':\r\n return value1 ** value2;\r\n }\r\n\r\n throw Error('Infix.mathOp: Should not reach here.');\r\n },\r\n\r\n};\r\n\r\nmodule.exports = {\r\n Prefix,\r\n Postfix,\r\n Infix,\r\n Operators: {\r\n compareOp: ['<', '>', '=', '<>', '<=', '>='],\r\n concatOp: ['&'],\r\n mathOp: ['+', '-', '*', '/', '^'],\r\n }\r\n};\r\n","const FormulaError = require('../error');\r\nconst {FormulaHelpers, Types, Factorials, Criteria} = require('../helpers');\r\nconst {Infix} = require('../operators');\r\nconst H = FormulaHelpers;\r\n\r\n// Max number in excel is 2^1024-1, same as javascript, thus I will not check if number is valid in some functions.\r\n\r\n// factorials\r\nconst f = [], fd = [];\r\n\r\nfunction factorial(n) {\r\n if (n <= 100)\r\n return Factorials[n];\r\n if (f[n] > 0)\r\n return f[n];\r\n return f[n] = factorial(n - 1) * n;\r\n}\r\n\r\nfunction factorialDouble(n) {\r\n if (n === 1 || n === 0)\r\n return 1;\r\n if (n === 2)\r\n return 2;\r\n if (fd[n] > 0)\r\n return fd[n];\r\n return fd[n] = factorialDouble(n - 2) * n;\r\n}\r\n\r\n// https://support.office.com/en-us/article/excel-functions-by-category-5f91f4e9-7b42-46d2-9bd1-63f26a86c0eb\r\nconst MathFunctions = {\r\n ABS: number => {\r\n number = H.accept(number, Types.NUMBER);\r\n return Math.abs(number);\r\n },\r\n\r\n AGGREGATE: (functionNum, options, ref1, ...refs) => {\r\n // functionNum = H.accept(functionNum, Types.NUMBER);\r\n // throw FormulaError.NOT_IMPLEMENTED('AGGREGATE');\r\n },\r\n\r\n ARABIC: text => {\r\n text = H.accept(text, Types.STRING).toUpperCase();\r\n // Credits: Rafa? Kukawski\r\n if (!/^M*(?:D?C{0,3}|C[MD])(?:L?X{0,3}|X[CL])(?:V?I{0,3}|I[XV])$/.test(text)) {\r\n throw new FormulaError('#VALUE!', 'Invalid roman numeral in ARABIC evaluation.');\r\n }\r\n let r = 0;\r\n text.replace(/[MDLV]|C[MD]?|X[CL]?|I[XV]?/g, function (i) {\r\n r += {\r\n M: 1000,\r\n CM: 900,\r\n D: 500,\r\n CD: 400,\r\n C: 100,\r\n XC: 90,\r\n L: 50,\r\n XL: 40,\r\n X: 10,\r\n IX: 9,\r\n V: 5,\r\n IV: 4,\r\n I: 1\r\n }[i];\r\n });\r\n return r;\r\n },\r\n\r\n BASE: (number, radix, minLength) => {\r\n number = H.accept(number, Types.NUMBER);\r\n if (number < 0 || number >= 2 ** 53)\r\n throw FormulaError.NUM;\r\n radix = H.accept(radix, Types.NUMBER);\r\n if (radix < 2 || radix > 36)\r\n throw FormulaError.NUM;\r\n minLength = H.accept(minLength, Types.NUMBER, 0);\r\n if (minLength < 0) {\r\n throw FormulaError.NUM;\r\n }\r\n\r\n const result = number.toString(radix).toUpperCase();\r\n return new Array(Math.max(minLength + 1 - result.length, 0)).join('0') + result;\r\n },\r\n\r\n CEILING: (number, significance) => {\r\n number = H.accept(number, Types.NUMBER);\r\n significance = H.accept(significance, Types.NUMBER);\r\n if (significance === 0)\r\n return 0;\r\n if (number / significance % 1 === 0)\r\n return number;\r\n const absSignificance = Math.abs(significance);\r\n const times = Math.floor(Math.abs(number) / absSignificance);\r\n if (number < 0) {\r\n // round down, away from zero\r\n const roundDown = significance < 0;\r\n return roundDown ? -absSignificance * (times + 1) : -absSignificance * (times);\r\n } else {\r\n return (times + 1) * absSignificance;\r\n }\r\n },\r\n\r\n 'CEILING.MATH': (number, significance, mode) => {\r\n number = H.accept(number, Types.NUMBER);\r\n significance = H.accept(significance, Types.NUMBER, number > 0 ? 1 : -1);\r\n // mode can be any number\r\n mode = H.accept(mode, Types.NUMBER, 0);\r\n // The Mode argument does not affect positive numbers.\r\n if (number >= 0) {\r\n return MathFunctions.CEILING(number, significance);\r\n }\r\n // if round down, away from zero, then significance\r\n const offset = mode ? significance : 0;\r\n return MathFunctions.CEILING(number, significance) - offset;\r\n },\r\n\r\n 'CEILING.PRECISE': (number, significance) => {\r\n number = H.accept(number, Types.NUMBER);\r\n significance = H.accept(significance, Types.NUMBER, 1);\r\n // always round up\r\n return MathFunctions.CEILING(number, Math.abs(significance));\r\n },\r\n\r\n COMBIN: (number, numberChosen) => {\r\n number = H.accept(number, Types.NUMBER);\r\n numberChosen = H.accept(numberChosen, Types.NUMBER);\r\n if (number < 0 || numberChosen < 0 || number < numberChosen)\r\n throw FormulaError.NUM;\r\n const nFactorial = MathFunctions.FACT(number), kFactorial = MathFunctions.FACT(numberChosen);\r\n return nFactorial / kFactorial / MathFunctions.FACT(number - numberChosen);\r\n },\r\n\r\n COMBINA: (number, numberChosen) => {\r\n number = H.accept(number, Types.NUMBER);\r\n numberChosen = H.accept(numberChosen, Types.NUMBER);\r\n // special case\r\n if ((number === 0 || number === 1) && numberChosen === 0)\r\n return 1;\r\n if (number < 0 || numberChosen < 0)\r\n throw FormulaError.NUM;\r\n return MathFunctions.COMBIN(number + numberChosen - 1, number - 1);\r\n },\r\n\r\n DECIMAL: (text, radix) => {\r\n text = H.accept(text, Types.STRING);\r\n radix = H.accept(radix, Types.NUMBER);\r\n radix = Math.trunc(radix);\r\n if (radix < 2 || radix > 36)\r\n throw FormulaError.NUM;\r\n const res = parseInt(text, radix);\r\n if (isNaN(res))\r\n throw FormulaError.NUM;\r\n return res;\r\n },\r\n\r\n DEGREES: (radians) => {\r\n radians = H.accept(radians, Types.NUMBER);\r\n return radians * (180 / Math.PI);\r\n },\r\n\r\n EVEN: (number) => {\r\n return MathFunctions.CEILING(number, -2);\r\n },\r\n\r\n EXP: (number) => {\r\n number = H.accept(number, Types.NUMBER);\r\n return Math.exp(number)\r\n },\r\n\r\n FACT: (number) => {\r\n number = H.accept(number, Types.NUMBER);\r\n number = Math.trunc(number);\r\n // max number = 170\r\n if (number > 170 || number < 0)\r\n throw FormulaError.NUM;\r\n if (number <= 100)\r\n return Factorials[number];\r\n return factorial(number);\r\n },\r\n\r\n FACTDOUBLE: (number) => {\r\n number = H.accept(number, Types.NUMBER);\r\n number = Math.trunc(number);\r\n // max number = 170\r\n if (number < -1)\r\n throw FormulaError.NUM;\r\n if (number === -1)\r\n return 1;\r\n return factorialDouble(number);\r\n },\r\n\r\n FLOOR: (number, significance) => {\r\n number = H.accept(number, Types.NUMBER);\r\n significance = H.accept(significance, Types.NUMBER);\r\n if (significance === 0)\r\n return 0;\r\n if (number > 0 && significance < 0)\r\n throw FormulaError.NUM;\r\n if (number / significance % 1 === 0)\r\n return number;\r\n const absSignificance = Math.abs(significance);\r\n const times = Math.floor(Math.abs(number) / absSignificance);\r\n if (number < 0) {\r\n // round down, away from zero\r\n const roundDown = significance < 0;\r\n return roundDown ? -absSignificance * times : -absSignificance * (times + 1);\r\n } else {\r\n // toward zero\r\n return times * absSignificance;\r\n }\r\n },\r\n\r\n 'FLOOR.MATH': (number, significance, mode) => {\r\n number = H.accept(number, Types.NUMBER);\r\n significance = H.accept(significance, Types.NUMBER, number > 0 ? 1 : -1);\r\n\r\n // mode can be 0 or any other number, 0 means away from zero\r\n // the official documentation seems wrong\r\n mode = H.accept(mode, Types.NUMBER, 0);\r\n // The Mode argument does not affect positive numbers.\r\n if (mode === 0 || number >= 0) {\r\n // away from zero\r\n return MathFunctions.FLOOR(number, Math.abs(significance));\r\n }\r\n // towards zero, add a significance\r\n return MathFunctions.FLOOR(number, significance) + significance;\r\n },\r\n\r\n 'FLOOR.PRECISE': (number, significance) => {\r\n number = H.accept(number, Types.NUMBER);\r\n significance = H.accept(significance, Types.NUMBER, 1);\r\n // always round up\r\n return MathFunctions.FLOOR(number, Math.abs(significance));\r\n },\r\n\r\n GCD: (...params) => {\r\n const arr = [];\r\n H.flattenParams(params, null, false,\r\n (param) => {\r\n // allow array, range ref\r\n param = typeof param === 'boolean' ? NaN : Number(param);\r\n if (!isNaN(param)) {\r\n if (param < 0 || param > 9007199254740990) // 2^53\r\n throw FormulaError.NUM;\r\n arr.push(Math.trunc(param))\r\n } else\r\n throw FormulaError.VALUE;\r\n }, 0);\r\n // http://rosettacode.org/wiki/Greatest_common_divisor#JavaScript\r\n let i, y,\r\n n = params.length,\r\n x = Math.abs(arr[0]);\r\n\r\n for (i = 1; i < n; i++) {\r\n y = Math.abs(arr[i]);\r\n\r\n while (x && y) {\r\n (x > y) ? x %= y : y %= x;\r\n }\r\n x += y;\r\n }\r\n return x;\r\n },\r\n\r\n INT: (number) => {\r\n number = H.accept(number, Types.NUMBER);\r\n return Math.floor(number);\r\n },\r\n\r\n 'ISO.CEILING': (...params) => {\r\n return MathFunctions['CEILING.PRECISE'](...params);\r\n },\r\n\r\n LCM: (...params) => {\r\n const arr = [];\r\n // always parse string to number if possible\r\n H.flattenParams(params, null, false,\r\n param => {\r\n param = typeof param === 'boolean' ? NaN : Number(param);\r\n if (!isNaN(param)) {\r\n if (param < 0 || param > 9007199254740990) // 2^53\r\n throw FormulaError.NUM;\r\n arr.push(Math.trunc(param))\r\n }\r\n // throw value error if can't parse to string\r\n else\r\n throw FormulaError.VALUE;\r\n }, 1);\r\n // http://rosettacode.org/wiki/Least_common_multiple#JavaScript\r\n let n = arr.length, a = Math.abs(arr[0]);\r\n for (let i = 1; i < n; i++) {\r\n let b = Math.abs(arr[i]), c = a;\r\n while (a && b) {\r\n a > b ? a %= b : b %= a;\r\n }\r\n a = Math.abs(c * arr[i]) / (a + b);\r\n }\r\n return a;\r\n },\r\n\r\n LN: number => {\r\n number = H.accept(number, Types.NUMBER);\r\n return Math.log(number);\r\n },\r\n\r\n LOG: (number, base) => {\r\n number = H.accept(number, Types.NUMBER);\r\n base = H.accept(base, Types.NUMBER, 10);\r\n\r\n return Math.log(number) / Math.log(base);\r\n },\r\n\r\n LOG10: number => {\r\n number = H.accept(number, Types.NUMBER);\r\n return Math.log10(number);\r\n },\r\n\r\n MDETERM: (array) => {\r\n array = H.accept(array, Types.ARRAY, undefined, false, true);\r\n if (array[0].length !== array.length)\r\n throw FormulaError.VALUE;\r\n // adopted from https://github.com/numbers/numbers.js/blob/master/lib/numbers/matrix.js#L261\r\n const numRow = array.length, numCol = array[0].length;\r\n let det = 0, diagLeft, diagRight;\r\n\r\n if (numRow === 1) {\r\n return array[0][0];\r\n } else if (numRow === 2) {\r\n return array[0][0] * array[1][1] - array[0][1] * array[1][0];\r\n }\r\n\r\n for (let col = 0; col < numCol; col++) {\r\n diagLeft = array[0][col];\r\n diagRight = array[0][col];\r\n\r\n for (let row = 1; row < numRow; row++) {\r\n diagRight *= array[row][(((col + row) % numCol) + numCol) % numCol];\r\n diagLeft *= array[row][(((col - row) % numCol) + numCol) % numCol];\r\n }\r\n\r\n det += diagRight - diagLeft;\r\n }\r\n\r\n return det;\r\n },\r\n\r\n MINVERSE: (array) => {\r\n // TODO\r\n // array = H.accept(array, Types.ARRAY, null, false);\r\n // if (array[0].length !== array.length)\r\n // throw FormulaError.VALUE;\r\n // throw FormulaError.NOT_IMPLEMENTED('MINVERSE');\r\n },\r\n\r\n MMULT: (array1, array2) => {\r\n array1 = H.accept(array1, Types.ARRAY, undefined, false, true);\r\n array2 = H.accept(array2, Types.ARRAY, undefined, false, true);\r\n\r\n const aNumRows = array1.length, aNumCols = array1[0].length,\r\n bNumRows = array2.length, bNumCols = array2[0].length,\r\n m = new Array(aNumRows); // initialize array of rows\r\n\r\n if (aNumCols !== bNumRows)\r\n throw FormulaError.VALUE;\r\n\r\n for (let r = 0; r < aNumRows; r++) {\r\n m[r] = new Array(bNumCols); // initialize the current row\r\n for (let c = 0; c < bNumCols; c++) {\r\n m[r][c] = 0; // initialize the current cell\r\n for (let i = 0; i < aNumCols; i++) {\r\n const v1 = array1[r][i], v2 = array2[i][c];\r\n if (typeof v1 !== \"number\" || typeof v2 !== \"number\") throw FormulaError.VALUE;\r\n m[r][c] += array1[r][i] * array2[i][c];\r\n }\r\n }\r\n }\r\n return m;\r\n },\r\n\r\n MOD: (number, divisor) => {\r\n number = H.accept(number, Types.NUMBER);\r\n divisor = H.accept(divisor, Types.NUMBER);\r\n if (divisor === 0)\r\n throw FormulaError.DIV0;\r\n return number - divisor * MathFunctions.INT(number / divisor);\r\n\r\n },\r\n\r\n MROUND: (number, multiple) => {\r\n number = H.accept(number, Types.NUMBER);\r\n multiple = H.accept(multiple, Types.NUMBER);\r\n if (multiple === 0)\r\n return 0;\r\n if (number > 0 && multiple < 0 || number < 0 && multiple > 0)\r\n throw FormulaError.NUM;\r\n if (number / multiple % 1 === 0)\r\n return number;\r\n return Math.round(number / multiple) * multiple;\r\n },\r\n\r\n MULTINOMIAL: (...numbers) => {\r\n let numerator = 0, denominator = 1;\r\n H.flattenParams(numbers, Types.NUMBER, false, number => {\r\n if (number < 0)\r\n throw FormulaError.NUM;\r\n numerator += number;\r\n denominator *= factorial(number);\r\n });\r\n return factorial(numerator) / denominator;\r\n },\r\n\r\n MUNIT: (dimension) => {\r\n dimension = H.accept(dimension, Types.NUMBER);\r\n const matrix = [];\r\n for (let row = 0; row < dimension; row++) {\r\n const rowArr = [];\r\n for (let col = 0; col < dimension; col++) {\r\n if (row === col)\r\n rowArr.push(1);\r\n else\r\n rowArr.push(0);\r\n }\r\n matrix.push(rowArr);\r\n }\r\n return matrix;\r\n },\r\n\r\n ODD: (number) => {\r\n number = H.accept(number, Types.NUMBER);\r\n if (number === 0)\r\n return 1;\r\n let temp = Math.ceil(Math.abs(number));\r\n temp = (temp & 1) ? temp : temp + 1;\r\n return (number > 0) ? temp : -temp;\r\n },\r\n\r\n PI: () => {\r\n return Math.PI;\r\n },\r\n\r\n POWER: (number, power) => {\r\n number = H.accept(number, Types.NUMBER);\r\n power = H.accept(power, Types.NUMBER);\r\n return number ** power;\r\n },\r\n\r\n PRODUCT: (...numbers) => {\r\n let product = 1;\r\n H.flattenParams(numbers, null, true, (number, info) => {\r\n const parsedNumber = Number(number);\r\n if (info.isLiteral && !isNaN(parsedNumber)) {\r\n product *= parsedNumber;\r\n } else {\r\n if (typeof number === \"number\")\r\n product *= number;\r\n }\r\n }, 1);\r\n return product;\r\n },\r\n\r\n QUOTIENT: (numerator, denominator) => {\r\n numerator = H.accept(numerator, Types.NUMBER);\r\n denominator = H.accept(denominator, Types.NUMBER);\r\n return Math.trunc(numerator / denominator);\r\n },\r\n\r\n RADIANS: (degrees) => {\r\n degrees = H.accept(degrees, Types.NUMBER);\r\n return degrees / 180 * Math.PI;\r\n },\r\n\r\n RAND: () => {\r\n return Math.random();\r\n },\r\n\r\n RANDBETWEEN: (bottom, top) => {\r\n bottom = H.accept(bottom, Types.NUMBER);\r\n top = H.accept(top, Types.NUMBER);\r\n return Math.floor(Math.random() * (top - bottom + 1) + bottom);\r\n },\r\n\r\n ROMAN: (number, form) => {\r\n number = H.accept(number, Types.NUMBER);\r\n form = H.accept(form, Types.NUMBER, 0);\r\n if (form !== 0)\r\n throw Error('ROMAN: only allows form=0 (classic form).');\r\n // The MIT License\r\n // Copyright (c) 2008 Steven Levithan\r\n const digits = String(number).split('');\r\n const key = ['', 'C', 'CC', 'CCC', 'CD', 'D', 'DC', 'DCC', 'DCCC', 'CM', '', 'X', 'XX', 'XXX', 'XL', 'L', 'LX', 'LXX', 'LXXX', 'XC', '', 'I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX'];\r\n let roman = '', i = 3;\r\n while (i--) {\r\n roman = (key[+digits.pop() + (i * 10)] || '') + roman;\r\n }\r\n return new Array(+digits.join('') + 1).join('M') + roman;\r\n },\r\n\r\n ROUND: (number, digits) => {\r\n number = H.accept(number, Types.NUMBER);\r\n digits = H.accept(digits, Types.NUMBER);\r\n\r\n const multiplier = Math.pow(10, Math.abs(digits));\r\n const sign = number > 0 ? 1 : -1;\r\n if (digits > 0) {\r\n return sign * Math.round(Math.abs(number) * multiplier) / multiplier;\r\n } else if (digits === 0) {\r\n return sign * Math.round(Math.abs(number));\r\n } else {\r\n return sign * Math.round(Math.abs(number) / multiplier) * multiplier;\r\n }\r\n },\r\n\r\n ROUNDDOWN: (number, digits) => {\r\n number = H.accept(number, Types.NUMBER);\r\n digits = H.accept(digits, Types.NUMBER);\r\n\r\n const multiplier = Math.pow(10, Math.abs(digits));\r\n const sign = number > 0 ? 1 : -1;\r\n if (digits > 0) {\r\n const offset = 1 / multiplier * 0.5;\r\n return sign * Math.round((Math.abs(number) - offset) * multiplier) / multiplier;\r\n } else if (digits === 0) {\r\n const offset = 0.5;\r\n return sign * Math.round((Math.abs(number) - offset));\r\n } else {\r\n const offset = multiplier * 0.5;\r\n return sign * Math.round((Math.abs(number) - offset) / multiplier) * multiplier;\r\n }\r\n },\r\n\r\n ROUNDUP: (number, digits) => {\r\n number = H.accept(number, Types.NUMBER);\r\n digits = H.accept(digits, Types.NUMBER);\r\n\r\n const multiplier = Math.pow(10, Math.abs(digits));\r\n const sign = number > 0 ? 1 : -1;\r\n if (digits > 0) {\r\n const offset = 1 / multiplier * 0.5;\r\n return sign * Math.round((Math.abs(number) + offset) * multiplier) / multiplier;\r\n } else if (digits === 0) {\r\n const offset = 0.5;\r\n return sign * Math.round((Math.abs(number) + offset));\r\n } else {\r\n const offset = multiplier * 0.5;\r\n return sign * Math.round((Math.abs(number) + offset) / multiplier) * multiplier;\r\n }\r\n },\r\n\r\n SERIESSUM: (x, n, m, coefficients) => {\r\n x = H.accept(x, Types.NUMBER);\r\n n = H.accept(n, Types.NUMBER);\r\n m = H.accept(m, Types.NUMBER);\r\n let i = 0, result;\r\n H.flattenParams([coefficients], Types.NUMBER, false, (coefficient) => {\r\n if (typeof coefficient !== \"number\") {\r\n throw FormulaError.VALUE;\r\n }\r\n if (i === 0) {\r\n result = coefficient * Math.pow(x, n);\r\n } else {\r\n result += coefficient * Math.pow(x, n + i * m);\r\n }\r\n i++;\r\n });\r\n return result;\r\n },\r\n\r\n SIGN: number => {\r\n number = H.accept(number, Types.NUMBER);\r\n return number > 0 ? 1 : number === 0 ? 0 : -1;\r\n },\r\n\r\n SQRT: number => {\r\n number = H.accept(number, Types.NUMBER);\r\n if (number < 0)\r\n throw FormulaError.NUM;\r\n return Math.sqrt(number);\r\n },\r\n\r\n SQRTPI: number => {\r\n number = H.accept(number, Types.NUMBER);\r\n if (number < 0)\r\n throw FormulaError.NUM;\r\n return Math.sqrt(number * Math.PI);\r\n },\r\n\r\n SUBTOTAL: () => {\r\n // TODO: Finish this after statistical functions are implemented.\r\n },\r\n\r\n SUM: (...params) => {\r\n // parse string to number only when it is a literal. (not a reference)\r\n let result = 0;\r\n H.flattenParams(params, Types.NUMBER, true,\r\n (item, info) => {\r\n // literal will be parsed to given type (Type.NUMBER)\r\n if (info.isLiteral) {\r\n result += item;\r\n } else {\r\n if (typeof item === \"number\")\r\n result += item;\r\n }\r\n });\r\n return result\r\n },\r\n\r\n /**\r\n * This functions requires instance of {@link FormulaParser}.\r\n */\r\n SUMIF: (context, range, criteria, sumRange) => {\r\n const ranges = H.retrieveRanges(context, range, sumRange);\r\n range = ranges[0];\r\n sumRange = ranges[1];\r\n\r\n criteria = H.retrieveArg(context, criteria);\r\n const isCriteriaArray = criteria.isArray;\r\n // parse criteria\r\n criteria = Criteria.parse(H.accept(criteria));\r\n let sum = 0;\r\n\r\n range.forEach((row, rowNum) => {\r\n row.forEach((value, colNum) => {\r\n const valueToAdd = sumRange[rowNum][colNum];\r\n if (typeof valueToAdd !== \"number\")\r\n return;\r\n // wildcard\r\n if (criteria.op === 'wc') {\r\n if (criteria.match === criteria.value.test(value)) {\r\n sum += valueToAdd;\r\n }\r\n\r\n } else if (Infix.compareOp(value, criteria.op, criteria.value, Array.isArray(value), isCriteriaArray)) {\r\n sum += valueToAdd;\r\n }\r\n })\r\n });\r\n return sum;\r\n },\r\n\r\n SUMIFS: () => {\r\n\r\n },\r\n\r\n SUMPRODUCT: (array1, ...arrays) => {\r\n array1 = H.accept(array1, Types.ARRAY, undefined, false, true);\r\n arrays.forEach(array => {\r\n array = H.accept(array, Types.ARRAY, undefined, false, true);\r\n if (array1[0].length !== array[0].length || array1.length !== array.length)\r\n throw FormulaError.VALUE;\r\n for (let i = 0; i < array1.length; i++) {\r\n for (let j = 0; j < array1[0].length; j++) {\r\n if (typeof array1[i][j] !== \"number\")\r\n array1[i][j] = 0;\r\n if (typeof array[i][j] !== \"number\")\r\n array[i][j] = 0;\r\n array1[i][j] *= array[i][j];\r\n }\r\n }\r\n });\r\n let result = 0;\r\n\r\n array1.forEach(row => {\r\n row.forEach(value => {\r\n result += value;\r\n })\r\n });\r\n\r\n return result;\r\n },\r\n\r\n SUMSQ: (...params) => {\r\n // parse string to number only when it is a literal. (not a reference)\r\n let result = 0;\r\n H.flattenParams(params, Types.NUMBER, true,\r\n (item, info) => {\r\n // literal will be parsed to given type (Type.NUMBER)\r\n if (info.isLiteral) {\r\n result += item ** 2;\r\n } else {\r\n if (typeof item === \"number\")\r\n result += item ** 2;\r\n }\r\n });\r\n return result\r\n },\r\n\r\n SUMX2MY2: (arrayX, arrayY) => {\r\n const x = [], y = [];\r\n let sum = 0;\r\n H.flattenParams([arrayX], null, false, (item, info) => {\r\n x.push(item);\r\n });\r\n H.flattenParams([arrayY], null, false, (item, info) => {\r\n y.push(item);\r\n });\r\n if (x.length !== y.length)\r\n throw FormulaError.NA;\r\n for (let i = 0; i < x.length; i++) {\r\n if (typeof x[i] === \"number\" && typeof y[i] === \"number\")\r\n sum += x[i] ** 2 - y[i] ** 2\r\n }\r\n return sum;\r\n },\r\n\r\n SUMX2PY2: (arrayX, arrayY) => {\r\n const x = [], y = [];\r\n let sum = 0;\r\n H.flattenParams([arrayX], null, false, (item, info) => {\r\n x.push(item);\r\n });\r\n H.flattenParams([arrayY], null, false, (item, info) => {\r\n y.push(item);\r\n });\r\n if (x.length !== y.length)\r\n throw FormulaError.NA;\r\n for (let i = 0; i < x.length; i++) {\r\n if (typeof x[i] === \"number\" && typeof y[i] === \"number\")\r\n sum += x[i] ** 2 + y[i] ** 2\r\n }\r\n return sum;\r\n },\r\n\r\n SUMXMY2: (arrayX, arrayY) => {\r\n const x = [], y = [];\r\n let sum = 0;\r\n H.flattenParams([arrayX], null, false, (item, info) => {\r\n x.push(item);\r\n });\r\n H.flattenParams([arrayY], null, false, (item, info) => {\r\n y.push(item);\r\n });\r\n if (x.length !== y.length)\r\n throw FormulaError.NA;\r\n for (let i = 0; i < x.length; i++) {\r\n if (typeof x[i] === \"number\" && typeof y[i] === \"number\")\r\n sum += (x[i] - y[i]) ** 2;\r\n }\r\n return sum;\r\n },\r\n\r\n TRUNC: (number) => {\r\n number = H.accept(number, Types.NUMBER);\r\n return Math.trunc(number);\r\n },\r\n};\r\n\r\n\r\nmodule.exports = MathFunctions;\r\n","const FormulaError = require('../error');\r\nconst {FormulaHelpers, Types} = require('../helpers');\r\nconst H = FormulaHelpers;\r\nconst MAX_NUMBER = 2 ** 27 - 1;\r\n\r\n// https://support.office.com/en-us/article/excel-functions-by-category-5f91f4e9-7b42-46d2-9bd1-63f26a86c0eb\r\nconst TrigFunctions = {\r\n ACOS: number => {\r\n number = H.accept(number, Types.NUMBER);\r\n if (number > 1 || number < -1)\r\n throw FormulaError.NUM;\r\n return Math.acos(number);\r\n },\r\n\r\n ACOSH: number => {\r\n number = H.accept(number, Types.NUMBER);\r\n if (number < 1)\r\n throw FormulaError.NUM;\r\n return Math.acosh(number);\r\n },\r\n\r\n ACOT: number => {\r\n number = H.accept(number, Types.NUMBER);\r\n return Math.PI / 2 - Math.atan(number);\r\n },\r\n\r\n ACOTH: number => {\r\n number = H.accept(number, Types.NUMBER);\r\n if (Math.abs(number) <= 1)\r\n throw FormulaError.NUM;\r\n return Math.atanh(1 / number);\r\n },\r\n\r\n ASIN: number => {\r\n number = H.accept(number, Types.NUMBER);\r\n if (number > 1 || number < -1)\r\n throw FormulaError.NUM;\r\n return Math.asin(number);\r\n },\r\n\r\n ASINH: number => {\r\n number = H.accept(number, Types.NUMBER);\r\n return Math.asinh(number);\r\n },\r\n\r\n ATAN: number => {\r\n number = H.accept(number, Types.NUMBER);\r\n return Math.atan(number);\r\n },\r\n\r\n ATAN2: (x, y) => {\r\n x = H.accept(x, Types.NUMBER);\r\n y = H.accept(y, Types.NUMBER);\r\n if (y === 0 && x === 0)\r\n throw FormulaError.DIV0;\r\n return Math.atan2(y, x);\r\n },\r\n\r\n ATANH: number => {\r\n number = H.accept(number, Types.NUMBER);\r\n if (Math.abs(number) > 1)\r\n throw FormulaError.NUM;\r\n return Math.atanh(number);\r\n },\r\n\r\n COS: number => {\r\n number = H.accept(number, Types.NUMBER);\r\n if (Math.abs(number) > MAX_NUMBER)\r\n throw FormulaError.NUM;\r\n return Math.cos(number);\r\n },\r\n\r\n COSH: number => {\r\n number = H.accept(number, Types.NUMBER);\r\n return Math.cosh(number);\r\n },\r\n\r\n COT: number => {\r\n number = H.accept(number, Types.NUMBER);\r\n if (Math.abs(number) > MAX_NUMBER)\r\n throw FormulaError.NUM;\r\n if (number === 0)\r\n throw FormulaError.DIV0;\r\n return 1 / Math.tan(number);\r\n },\r\n\r\n COTH: number => {\r\n number = H.accept(number, Types.NUMBER);\r\n if (number === 0)\r\n throw FormulaError.DIV0;\r\n return 1 / Math.tanh(number);\r\n },\r\n\r\n CSC: number => {\r\n number = H.accept(number, Types.NUMBER);\r\n if (Math.abs(number) > MAX_NUMBER)\r\n throw FormulaError.NUM;\r\n return 1 / Math.sin(number);\r\n },\r\n\r\n CSCH: number => {\r\n number = H.accept(number, Types.NUMBER);\r\n if (number === 0)\r\n throw FormulaError.DIV0;\r\n return 1 / Math.sinh(number);\r\n },\r\n\r\n SEC: number => {\r\n number = H.accept(number, Types.NUMBER);\r\n if (Math.abs(number) > MAX_NUMBER)\r\n throw FormulaError.NUM;\r\n return 1 / Math.cos(number);\r\n },\r\n\r\n SECH: number => {\r\n number = H.accept(number, Types.NUMBER);\r\n return 1 / Math.cosh(number);\r\n },\r\n\r\n SIN: number => {\r\n number = H.accept(number, Types.NUMBER);\r\n if (Math.abs(number) > MAX_NUMBER)\r\n throw FormulaError.NUM;\r\n return Math.sin(number);\r\n },\r\n\r\n SINH: number => {\r\n number = H.accept(number, Types.NUMBER);\r\n return Math.sinh(number);\r\n },\r\n\r\n TAN: number => {\r\n number = H.accept(number, Types.NUMBER);\r\n if (Math.abs(number) > MAX_NUMBER)\r\n throw FormulaError.NUM;\r\n return Math.tan(number);\r\n },\r\n\r\n TANH: number => {\r\n number = H.accept(number, Types.NUMBER);\r\n return Math.tanh(number);\r\n },\r\n};\r\n\r\nmodule.exports = TrigFunctions;\r\n","const FormulaError = require('../error');\r\nconst {FormulaHelpers, Types,} = require('../helpers');\r\nconst H = FormulaHelpers;\r\n\r\n/**\r\n * Get the number of values that evaluate to true and false.\r\n * Cast Number and \"TRUE\", \"FALSE\" to boolean.\r\n * Ignore unrelated values.\r\n * @ignore\r\n * @param {any[]} params\r\n * @return {number[]}\r\n */\r\nfunction getNumLogicalValue(params) {\r\n let numTrue = 0, numFalse = 0;\r\n H.flattenParams(params, null, true, val => {\r\n const type = typeof val;\r\n if (type === \"string\") {\r\n if (val === 'TRUE')\r\n val = true;\r\n else if (val === 'FALSE')\r\n val = false;\r\n } else if (type === \"number\")\r\n val = Boolean(val);\r\n\r\n if (typeof val === \"boolean\") {\r\n if (val === true)\r\n numTrue++;\r\n else\r\n numFalse++;\r\n }\r\n });\r\n return [numTrue, numFalse];\r\n}\r\n\r\nconst LogicalFunctions = {\r\n AND: (...params) => {\r\n const [numTrue, numFalse] = getNumLogicalValue(params);\r\n\r\n // OR returns #VALUE! if no logical values are found.\r\n if (numTrue === 0 && numFalse === 0)\r\n return FormulaError.VALUE;\r\n\r\n return numTrue > 0 && numFalse === 0;\r\n },\r\n\r\n FALSE: () => {\r\n return false;\r\n },\r\n\r\n // Special\r\n IF: (context, logicalTest, valueIfTrue, valueIfFalse) => {\r\n logicalTest = H.accept(logicalTest, Types.BOOLEAN);\r\n valueIfTrue = H.accept(valueIfTrue); // do not parse type\r\n valueIfFalse = H.accept(valueIfFalse, null, false); // do not parse type\r\n\r\n return logicalTest ? valueIfTrue : valueIfFalse;\r\n },\r\n\r\n IFERROR: (value, valueIfError) => {\r\n return value.value instanceof FormulaError ? H.accept(valueIfError) : H.accept(value);\r\n },\r\n\r\n IFNA: function (value, valueIfNa) {\r\n if (arguments.length > 2)\r\n throw FormulaError.TOO_MANY_ARGS('IFNA');\r\n return FormulaError.NA.equals(value.value) ? H.accept(valueIfNa) : H.accept(value);\r\n },\r\n\r\n IFS: (...params) => {\r\n if (params.length % 2 !== 0)\r\n return new FormulaError('#N/A', 'IFS expects all arguments after position 0 to be in pairs.');\r\n\r\n for (let i = 0; i < params.length / 2; i++) {\r\n const logicalTest = H.accept(params[i * 2], Types.BOOLEAN);\r\n const valueIfTrue = H.accept(params[i * 2 + 1]);\r\n if (logicalTest)\r\n return valueIfTrue;\r\n }\r\n\r\n return FormulaError.NA;\r\n },\r\n\r\n NOT: (logical) => {\r\n logical = H.accept(logical, Types.BOOLEAN);\r\n return !logical;\r\n },\r\n\r\n OR: (...params) => {\r\n const [numTrue, numFalse] = getNumLogicalValue(params);\r\n\r\n // OR returns #VALUE! if no logical values are found.\r\n if (numTrue === 0 && numFalse === 0)\r\n return FormulaError.VALUE;\r\n\r\n return numTrue > 0;\r\n },\r\n\r\n SWITCH: (...params) => {\r\n\r\n },\r\n\r\n TRUE: () => {\r\n return true;\r\n },\r\n\r\n XOR: (...params) => {\r\n const [numTrue, numFalse] = getNumLogicalValue(params);\r\n\r\n // XOR returns #VALUE! if no logical values are found.\r\n if (numTrue === 0 && numFalse === 0)\r\n return FormulaError.VALUE;\r\n\r\n return numTrue % 2 === 1;\r\n },\r\n};\r\n\r\nmodule.exports = LogicalFunctions;\r\n","/* bessel.js (C) 2013-present SheetJS -- http://sheetjs.com */\n/* vim: set ts=2: */\n/*exported BESSEL */\nvar BESSEL;\n(function (factory) {\n /*jshint ignore:start */\n if(typeof DO_NOT_EXPORT_BESSEL === 'undefined') {\n if('object' === typeof exports) {\n factory(exports);\n } else if ('function' === typeof define && define.amd) {\n define(function () {\n var module = {};\n factory(module);\n return module;\n });\n } else {\n factory(BESSEL = {});\n }\n } else {\n factory(BESSEL = {});\n }\n /*jshint ignore:end */\n}(function(BESSEL) {\nBESSEL.version = '1.0.2';\nvar M = Math;\n\nfunction _horner(arr, v) { for(var i = 0, z = 0; i < arr.length; ++i) z = v * z + arr[i]; return z; }\nfunction _bessel_iter(x, n, f0, f1, sign) {\n if(n === 0) return f0;\n if(n === 1) return f1;\n var tdx = 2 / x, f2 = f1;\n for(var o = 1; o < n; ++o) {\n f2 = f1 * o * tdx + sign * f0;\n f0 = f1; f1 = f2;\n }\n return f2;\n}\nfunction _bessel_wrap(bessel0, bessel1, name, nonzero, sign) {\n return function bessel(x,n) {\n if(nonzero) {\n if(x === 0) return (nonzero == 1 ? -Infinity : Infinity);\n else if(x < 0) return NaN;\n }\n if(n === 0) return bessel0(x);\n if(n === 1) return bessel1(x);\n if(n < 0) return NaN;\n n|=0;\n var b0 = bessel0(x), b1 = bessel1(x);\n return _bessel_iter(x, n, b0, b1, sign);\n };\n}\nvar besselj = (function() {\n var W = 0.636619772; // 2 / Math.PI\n\n var b0_a1a = [57568490574.0, -13362590354.0, 651619640.7, -11214424.18, 77392.33017, -184.9052456].reverse();\n var b0_a2a = [57568490411.0, 1029532985.0, 9494680.718, 59272.64853, 267.8532712, 1.0].reverse();\n var b0_a1b = [1.0, -0.1098628627e-2, 0.2734510407e-4, -0.2073370639e-5, 0.2093887211e-6].reverse();\n var b0_a2b = [-0.1562499995e-1, 0.1430488765e-3, -0.6911147651e-5, 0.7621095161e-6, -0.934935152e-7].reverse();\n\n function bessel0(x) {\n var a=0, a1=0, a2=0, y = x * x;\n if(x < 8) {\n a1 = _horner(b0_a1a, y);\n a2 = _horner(b0_a2a, y);\n a = a1 / a2;\n } else {\n var xx = x - 0.785398164;\n y = 64 / y;\n a1 = _horner(b0_a1b, y);\n a2 = _horner(b0_a2b, y);\n a = M.sqrt(W/x)*(M.cos(xx)*a1-M.sin(xx)*a2*8/x);\n }\n return a;\n }\n\n var b1_a1a = [72362614232.0, -7895059235.0, 242396853.1, -2972611.439, 15704.48260, -30.16036606].reverse();\n var b1_a2a = [144725228442.0, 2300535178.0, 18583304.74, 99447.43394, 376.9991397, 1.0].reverse();\n var b1_a1b = [1.0, 0.183105e-2, -0.3516396496e-4, 0.2457520174e-5, -0.240337019e-6].reverse();\n var b1_a2b = [0.04687499995, -0.2002690873e-3, 0.8449199096e-5, -0.88228987e-6, 0.105787412e-6].reverse();\n\n function bessel1(x) {\n var a=0, a1=0, a2=0, y = x*x, xx = M.abs(x) - 2.356194491;\n if(Math.abs(x)< 8) {\n a1 = x*_horner(b1_a1a, y);\n a2 = _horner(b1_a2a, y);\n a = a1 / a2;\n } else {\n y = 64 / y;\n a1=_horner(b1_a1b, y);\n a2=_horner(b1_a2b, y);\n a=M.sqrt(W/M.abs(x))*(M.cos(xx)*a1-M.sin(xx)*a2*8/M.abs(x));\n if(x < 0) a = -a;\n }\n return a;\n }\n\n return function besselj(x, n) {\n n = Math.round(n);\n if(!isFinite(x)) return isNaN(x) ? x : 0;\n if(n < 0) return ((n%2)?-1:1)*besselj(x, -n);\n if(x < 0) return ((n%2)?-1:1)*besselj(-x, n);\n if(n === 0) return bessel0(x);\n if(n === 1) return bessel1(x);\n if(x === 0) return 0;\n\n var ret=0.0;\n if(x > n) {\n ret = _bessel_iter(x, n, bessel0(x), bessel1(x),-1);\n } else {\n var m=2*M.floor((n+M.floor(M.sqrt(40*n)))/2);\n var jsum=false;\n var bjp=0.0, sum=0.0;\n var bj=1.0, bjm = 0.0;\n var tox = 2 / x;\n for (var j=m;j>0;j--) {\n bjm=j*tox*bj-bjp;\n bjp=bj;\n bj=bjm;\n if (M.abs(bj) > 1E10) {\n bj *= 1E-10;\n bjp *= 1E-10;\n ret *= 1E-10;\n sum *= 1E-10;\n }\n if (jsum) sum += bj;\n jsum=!jsum;\n if (j == n) ret=bjp;\n }\n sum=2.0*sum-bj;\n ret /= sum;\n }\n return ret;\n };\n})();\nvar bessely = (function() {\n var W = 0.636619772;\n\n var b0_a1a = [-2957821389.0, 7062834065.0, -512359803.6, 10879881.29, -86327.92757, 228.4622733].reverse();\n var b0_a2a = [40076544269.0, 745249964.8, 7189466.438, 47447.26470, 226.1030244, 1.0].reverse();\n var b0_a1b = [1.0, -0.1098628627e-2, 0.2734510407e-4, -0.2073370639e-5, 0.2093887211e-6].reverse();\n var b0_a2b = [-0.1562499995e-1, 0.1430488765e-3, -0.6911147651e-5, 0.7621095161e-6, -0.934945152e-7].reverse();\n\n function bessel0(x) {\n var a=0, a1=0, a2=0, y = x * x, xx = x - 0.785398164;\n if(x < 8) {\n a1 = _horner(b0_a1a, y);\n a2 = _horner(b0_a2a, y);\n a = a1/a2 + W * besselj(x,0) * M.log(x);\n } else {\n y = 64 / y;\n a1 = _horner(b0_a1b, y);\n a2 = _horner(b0_a2b, y);\n a = M.sqrt(W/x)*(M.sin(xx)*a1+M.cos(xx)*a2*8/x);\n }\n return a;\n }\n\n var b1_a1a = [-0.4900604943e13, 0.1275274390e13, -0.5153438139e11, 0.7349264551e9, -0.4237922726e7, 0.8511937935e4].reverse();\n var b1_a2a = [0.2499580570e14, 0.4244419664e12, 0.3733650367e10, 0.2245904002e8, 0.1020426050e6, 0.3549632885e3, 1].reverse();\n var b1_a1b = [1.0, 0.183105e-2, -0.3516396496e-4, 0.2457520174e-5, -0.240337019e-6].reverse();\n var b1_a2b = [0.04687499995, -0.2002690873e-3, 0.8449199096e-5, -0.88228987e-6, 0.105787412e-6].reverse();\n\n function bessel1(x) {\n var a=0, a1=0, a2=0, y = x*x, xx = x - 2.356194491;\n if(x < 8) {\n a1 = x*_horner(b1_a1a, y);\n a2 = _horner(b1_a2a, y);\n a = a1/a2 + W * (besselj(x,1) * M.log(x) - 1 / x);\n } else {\n y = 64 / y;\n a1=_horner(b1_a1b, y);\n a2=_horner(b1_a2b, y);\n a=M.sqrt(W/x)*(M.sin(xx)*a1+M.cos(xx)*a2*8/x);\n }\n return a;\n }\n\n return _bessel_wrap(bessel0, bessel1, 'BESSELY', 1, -1);\n})();\nvar besseli = (function() {\n var b0_a = [1.0, 3.5156229, 3.0899424, 1.2067492, 0.2659732, 0.360768e-1, 0.45813e-2].reverse();\n var b0_b = [0.39894228, 0.1328592e-1, 0.225319e-2, -0.157565e-2, 0.916281e-2, -0.2057706e-1, 0.2635537e-1, -0.1647633e-1, 0.392377e-2].reverse();\n\n function bessel0(x) {\n if(x <= 3.75) return _horner(b0_a, x*x/(3.75*3.75));\n return M.exp(M.abs(x))/M.sqrt(M.abs(x))*_horner(b0_b, 3.75/M.abs(x));\n }\n\n var b1_a = [0.5, 0.87890594, 0.51498869, 0.15084934, 0.2658733e-1, 0.301532e-2, 0.32411e-3].reverse();\n var b1_b = [0.39894228, -0.3988024e-1, -0.362018e-2, 0.163801e-2, -0.1031555e-1, 0.2282967e-1, -0.2895312e-1, 0.1787654e-1, -0.420059e-2].reverse();\n\n function bessel1(x) {\n if(x < 3.75) return x * _horner(b1_a, x*x/(3.75*3.75));\n return (x < 0 ? -1 : 1) * M.exp(M.abs(x))/M.sqrt(M.abs(x))*_horner(b1_b, 3.75/M.abs(x));\n }\n\n return function besseli(x, n) {\n n = Math.round(n);\n if(n === 0) return bessel0(x);\n if(n === 1) return bessel1(x);\n if(n < 0) return NaN;\n if(M.abs(x) === 0) return 0;\n if(x == Infinity) return Infinity;\n\n var ret = 0.0, j, tox = 2 / M.abs(x), bip = 0.0, bi=1.0, bim=0.0;\n var m=2*M.round((n+M.round(M.sqrt(40*n)))/2);\n for (j=m;j>0;j--) {\n bim=j*tox*bi + bip;\n bip=bi; bi=bim;\n if (M.abs(bi) > 1E10) {\n bi *= 1E-10;\n bip *= 1E-10;\n ret *= 1E-10;\n }\n if(j == n) ret = bip;\n }\n ret *= besseli(x, 0) / bi;\n return x < 0 && (n%2) ? -ret : ret;\n };\n\n})();\n\nvar besselk = (function() {\n var b0_a = [-0.57721566, 0.42278420, 0.23069756, 0.3488590e-1, 0.262698e-2, 0.10750e-3, 0.74e-5].reverse();\n var b0_b = [1.25331414, -0.7832358e-1, 0.2189568e-1, -0.1062446e-1, 0.587872e-2, -0.251540e-2, 0.53208e-3].reverse();\n\n function bessel0(x) {\n if(x <= 2) return -M.log(x/2) * besseli(x,0) + _horner(b0_a, x*x/4);\n return M.exp(-x) / M.sqrt(x) * _horner(b0_b, 2/x);\n }\n\n var b1_a = [1.0, 0.15443144, -0.67278579, -0.18156897, -0.1919402e-1, -0.110404e-2, -0.4686e-4].reverse();\n var b1_b = [1.25331414, 0.23498619, -0.3655620e-1, 0.1504268e-1, -0.780353e-2, 0.325614e-2, -0.68245e-3].reverse();\n\n function bessel1(x) {\n if(x <= 2) return M.log(x/2) * besseli(x,1) + (1/x) * _horner(b1_a, x*x/4);\n return M.exp(-x)/M.sqrt(x)*_horner(b1_b, 2/x);\n }\n\n return _bessel_wrap(bessel0, bessel1, 'BESSELK', 2, 1);\n})();\nBESSEL.besselj = besselj;\nBESSEL.bessely = bessely;\nBESSEL.besseli = besseli;\nBESSEL.besselk = besselk;\n}));\n","(function (window, factory) {\n if (typeof exports === 'object') {\n module.exports = factory();\n } else if (typeof define === 'function' && define.amd) {\n define(factory);\n } else {\n window.jStat = factory();\n }\n})(this, function () {\nvar jStat = (function(Math, undefined) {\n\n// For quick reference.\nvar concat = Array.prototype.concat;\nvar slice = Array.prototype.slice;\nvar toString = Object.prototype.toString;\n\n// Calculate correction for IEEE error\n// TODO: This calculation can be improved.\nfunction calcRdx(n, m) {\n var val = n > m ? n : m;\n return Math.pow(10,\n 17 - ~~(Math.log(((val > 0) ? val : -val)) * Math.LOG10E));\n}\n\n\nvar isArray = Array.isArray || function isArray(arg) {\n return toString.call(arg) === '[object Array]';\n};\n\n\nfunction isFunction(arg) {\n return toString.call(arg) === '[object Function]';\n}\n\n\nfunction isNumber(num) {\n return (typeof num === 'number') ? num - num === 0 : false;\n}\n\n\n// Converts the jStat matrix to vector.\nfunction toVector(arr) {\n return concat.apply([], arr);\n}\n\n\n// The one and only jStat constructor.\nfunction jStat() {\n return new jStat._init(arguments);\n}\n\n\n// TODO: Remove after all references in src files have been removed.\njStat.fn = jStat.prototype;\n\n\n// By separating the initializer from the constructor it's easier to handle\n// always returning a new instance whether \"new\" was used or not.\njStat._init = function _init(args) {\n // If first argument is an array, must be vector or matrix.\n if (isArray(args[0])) {\n // Check if matrix.\n if (isArray(args[0][0])) {\n // See if a mapping function was also passed.\n if (isFunction(args[1]))\n args[0] = jStat.map(args[0], args[1]);\n // Iterate over each is faster than this.push.apply(this, args[0].\n for (var i = 0; i < args[0].length; i++)\n this[i] = args[0][i];\n this.length = args[0].length;\n\n // Otherwise must be a vector.\n } else {\n this[0] = isFunction(args[1]) ? jStat.map(args[0], args[1]) : args[0];\n this.length = 1;\n }\n\n // If first argument is number, assume creation of sequence.\n } else if (isNumber(args[0])) {\n this[0] = jStat.seq.apply(null, args);\n this.length = 1;\n\n // Handle case when jStat object is passed to jStat.\n } else if (args[0] instanceof jStat) {\n // Duplicate the object and pass it back.\n return jStat(args[0].toArray());\n\n // Unexpected argument value, return empty jStat object.\n // TODO: This is strange behavior. Shouldn't this throw or some such to let\n // the user know they had bad arguments?\n } else {\n this[0] = [];\n this.length = 1;\n }\n\n return this;\n};\njStat._init.prototype = jStat.prototype;\njStat._init.constructor = jStat;\n\n\n// Utility functions.\n// TODO: for internal use only?\njStat.utils = {\n calcRdx: calcRdx,\n isArray: isArray,\n isFunction: isFunction,\n isNumber: isNumber,\n toVector: toVector\n};\n\n\njStat._random_fn = Math.random;\njStat.setRandom = function setRandom(fn) {\n if (typeof fn !== 'function')\n throw new TypeError('fn is not a function');\n jStat._random_fn = fn;\n};\n\n\n// Easily extend the jStat object.\n// TODO: is this seriously necessary?\njStat.extend = function extend(obj) {\n var i, j;\n\n if (arguments.length === 1) {\n for (j in obj)\n jStat[j] = obj[j];\n return this;\n }\n\n for (i = 1; i < arguments.length; i++) {\n for (j in arguments[i])\n obj[j] = arguments[i][j];\n }\n\n return obj;\n};\n\n\n// Returns the number of rows in the matrix.\njStat.rows = function rows(arr) {\n return arr.length || 1;\n};\n\n\n// Returns the number of columns in the matrix.\njStat.cols = function cols(arr) {\n return arr[0].length || 1;\n};\n\n\n// Returns the dimensions of the object { rows: i, cols: j }\njStat.dimensions = function dimensions(arr) {\n return {\n rows: jStat.rows(arr),\n cols: jStat.cols(arr)\n };\n};\n\n\n// Returns a specified row as a vector or return a sub matrix by pick some rows\njStat.row = function row(arr, index) {\n if (isArray(index)) {\n return index.map(function(i) {\n return jStat.row(arr, i);\n })\n }\n return arr[index];\n};\n\n\n// return row as array\n// rowa([[1,2],[3,4]],0) -> [1,2]\njStat.rowa = function rowa(arr, i) {\n return jStat.row(arr, i);\n};\n\n\n// Returns the specified column as a vector or return a sub matrix by pick some\n// columns\njStat.col = function col(arr, index) {\n if (isArray(index)) {\n var submat = jStat.arange(arr.length).map(function() {\n return new Array(index.length);\n });\n index.forEach(function(ind, i){\n jStat.arange(arr.length).forEach(function(j) {\n submat[j][i] = arr[j][ind];\n });\n });\n return submat;\n }\n var column = new Array(arr.length);\n for (var i = 0; i < arr.length; i++)\n column[i] = [arr[i][index]];\n return column;\n};\n\n\n// return column as array\n// cola([[1,2],[3,4]],0) -> [1,3]\njStat.cola = function cola(arr, i) {\n return jStat.col(arr, i).map(function(a){ return a[0] });\n};\n\n\n// Returns the diagonal of the matrix\njStat.diag = function diag(arr) {\n var nrow = jStat.rows(arr);\n var res = new Array(nrow);\n for (var row = 0; row < nrow; row++)\n res[row] = [arr[row][row]];\n return res;\n};\n\n\n// Returns the anti-diagonal of the matrix\njStat.antidiag = function antidiag(arr) {\n var nrow = jStat.rows(arr) - 1;\n var res = new Array(nrow);\n for (var i = 0; nrow >= 0; nrow--, i++)\n res[i] = [arr[i][nrow]];\n return res;\n};\n\n// Transpose a matrix or array.\njStat.transpose = function transpose(arr) {\n var obj = [];\n var objArr, rows, cols, j, i;\n\n // Make sure arr is in matrix format.\n if (!isArray(arr[0]))\n arr = [arr];\n\n rows = arr.length;\n cols = arr[0].length;\n\n for (i = 0; i < cols; i++) {\n objArr = new Array(rows);\n for (j = 0; j < rows; j++)\n objArr[j] = arr[j][i];\n obj.push(objArr);\n }\n\n // If obj is vector, return only single array.\n return obj.length === 1 ? obj[0] : obj;\n};\n\n\n// Map a function to an array or array of arrays.\n// \"toAlter\" is an internal variable.\njStat.map = function map(arr, func, toAlter) {\n var row, nrow, ncol, res, col;\n\n if (!isArray(arr[0]))\n arr = [arr];\n\n nrow = arr.length;\n ncol = arr[0].length;\n res = toAlter ? arr : new Array(nrow);\n\n for (row = 0; row < nrow; row++) {\n // if the row doesn't exist, create it\n if (!res[row])\n res[row] = new Array(ncol);\n for (col = 0; col < ncol; col++)\n res[row][col] = func(arr[row][col], row, col);\n }\n\n return res.length === 1 ? res[0] : res;\n};\n\n\n// Cumulatively combine the elements of an array or array of arrays using a function.\njStat.cumreduce = function cumreduce(arr, func, toAlter) {\n var row, nrow, ncol, res, col;\n\n if (!isArray(arr[0]))\n arr = [arr];\n\n nrow = arr.length;\n ncol = arr[0].length;\n res = toAlter ? arr : new Array(nrow);\n\n for (row = 0; row < nrow; row++) {\n // if the row doesn't exist, create it\n if (!res[row])\n res[row] = new Array(ncol);\n if (ncol > 0)\n res[row][0] = arr[row][0];\n for (col = 1; col < ncol; col++)\n res[row][col] = func(res[row][col-1], arr[row][col]);\n }\n return res.length === 1 ? res[0] : res;\n};\n\n\n// Destructively alter an array.\njStat.alter = function alter(arr, func) {\n return jStat.map(arr, func, true);\n};\n\n\n// Generate a rows x cols matrix according to the supplied function.\njStat.create = function create(rows, cols, func) {\n var res = new Array(rows);\n var i, j;\n\n if (isFunction(cols)) {\n func = cols;\n cols = rows;\n }\n\n for (i = 0; i < rows; i++) {\n res[i] = new Array(cols);\n for (j = 0; j < cols; j++)\n res[i][j] = func(i, j);\n }\n\n return res;\n};\n\n\nfunction retZero() { return 0; }\n\n\n// Generate a rows x cols matrix of zeros.\njStat.zeros = function zeros(rows, cols) {\n if (!isNumber(cols))\n cols = rows;\n return jStat.create(rows, cols, retZero);\n};\n\n\nfunction retOne() { return 1; }\n\n\n// Generate a rows x cols matrix of ones.\njStat.ones = function ones(rows, cols) {\n if (!isNumber(cols))\n cols = rows;\n return jStat.create(rows, cols, retOne);\n};\n\n\n// Generate a rows x cols matrix of uniformly random numbers.\njStat.rand = function rand(rows, cols) {\n if (!isNumber(cols))\n cols = rows;\n return jStat.create(rows, cols, jStat._random_fn);\n};\n\n\nfunction retIdent(i, j) { return i === j ? 1 : 0; }\n\n\n// Generate an identity matrix of size row x cols.\njStat.identity = function identity(rows, cols) {\n if (!isNumber(cols))\n cols = rows;\n return jStat.create(rows, cols, retIdent);\n};\n\n\n// Tests whether a matrix is symmetric\njStat.symmetric = function symmetric(arr) {\n var size = arr.length;\n var row, col;\n\n if (arr.length !== arr[0].length)\n return false;\n\n for (row = 0; row < size; row++) {\n for (col = 0; col < size; col++)\n if (arr[col][row] !== arr[row][col])\n return false;\n }\n\n return true;\n};\n\n\n// Set all values to zero.\njStat.clear = function clear(arr) {\n return jStat.alter(arr, retZero);\n};\n\n\n// Generate sequence.\njStat.seq = function seq(min, max, length, func) {\n if (!isFunction(func))\n func = false;\n\n var arr = [];\n var hival = calcRdx(min, max);\n var step = (max * hival - min * hival) / ((length - 1) * hival);\n var current = min;\n var cnt;\n\n // Current is assigned using a technique to compensate for IEEE error.\n // TODO: Needs better implementation.\n for (cnt = 0;\n current <= max && cnt < length;\n cnt++, current = (min * hival + step * hival * cnt) / hival) {\n arr.push((func ? func(current, cnt) : current));\n }\n\n return arr;\n};\n\n\n// arange(5) -> [0,1,2,3,4]\n// arange(1,5) -> [1,2,3,4]\n// arange(5,1,-1) -> [5,4,3,2]\njStat.arange = function arange(start, end, step) {\n var rl = [];\n var i;\n step = step || 1;\n if (end === undefined) {\n end = start;\n start = 0;\n }\n if (start === end || step === 0) {\n return [];\n }\n if (start < end && step < 0) {\n return [];\n }\n if (start > end && step > 0) {\n return [];\n }\n if (step > 0) {\n for (i = start; i < end; i += step) {\n rl.push(i);\n }\n } else {\n for (i = start; i > end; i += step) {\n rl.push(i);\n }\n }\n return rl;\n};\n\n\n// A=[[1,2,3],[4,5,6],[7,8,9]]\n// slice(A,{row:{end:2},col:{start:1}}) -> [[2,3],[5,6]]\n// slice(A,1,{start:1}) -> [5,6]\n// as numpy code A[:2,1:]\njStat.slice = (function(){\n function _slice(list, start, end, step) {\n // note it's not equal to range.map mode it's a bug\n var i;\n var rl = [];\n var length = list.length;\n if (start === undefined && end === undefined && step === undefined) {\n return jStat.copy(list);\n }\n\n start = start || 0;\n end = end || list.length;\n start = start >= 0 ? start : length + start;\n end = end >= 0 ? end : length + end;\n step = step || 1;\n if (start === end || step === 0) {\n return [];\n }\n if (start < end && step < 0) {\n return [];\n }\n if (start > end && step > 0) {\n return [];\n }\n if (step > 0) {\n for (i = start; i < end; i += step) {\n rl.push(list[i]);\n }\n } else {\n for (i = start; i > end;i += step) {\n rl.push(list[i]);\n }\n }\n return rl;\n }\n\n function slice(list, rcSlice) {\n var colSlice, rowSlice;\n rcSlice = rcSlice || {};\n if (isNumber(rcSlice.row)) {\n if (isNumber(rcSlice.col))\n return list[rcSlice.row][rcSlice.col];\n var row = jStat.rowa(list, rcSlice.row);\n colSlice = rcSlice.col || {};\n return _slice(row, colSlice.start, colSlice.end, colSlice.step);\n }\n\n if (isNumber(rcSlice.col)) {\n var col = jStat.cola(list, rcSlice.col);\n rowSlice = rcSlice.row || {};\n return _slice(col, rowSlice.start, rowSlice.end, rowSlice.step);\n }\n\n rowSlice = rcSlice.row || {};\n colSlice = rcSlice.col || {};\n var rows = _slice(list, rowSlice.start, rowSlice.end, rowSlice.step);\n return rows.map(function(row) {\n return _slice(row, colSlice.start, colSlice.end, colSlice.step);\n });\n }\n\n return slice;\n}());\n\n\n// A=[[1,2,3],[4,5,6],[7,8,9]]\n// sliceAssign(A,{row:{start:1},col:{start:1}},[[0,0],[0,0]])\n// A=[[1,2,3],[4,0,0],[7,0,0]]\njStat.sliceAssign = function sliceAssign(A, rcSlice, B) {\n var nl, ml;\n if (isNumber(rcSlice.row)) {\n if (isNumber(rcSlice.col))\n return A[rcSlice.row][rcSlice.col] = B;\n rcSlice.col = rcSlice.col || {};\n rcSlice.col.start = rcSlice.col.start || 0;\n rcSlice.col.end = rcSlice.col.end || A[0].length;\n rcSlice.col.step = rcSlice.col.step || 1;\n nl = jStat.arange(rcSlice.col.start,\n Math.min(A.length, rcSlice.col.end),\n rcSlice.col.step);\n var m = rcSlice.row;\n nl.forEach(function(n, i) {\n A[m][n] = B[i];\n });\n return A;\n }\n\n if (isNumber(rcSlice.col)) {\n rcSlice.row = rcSlice.row || {};\n rcSlice.row.start = rcSlice.row.start || 0;\n rcSlice.row.end = rcSlice.row.end || A.length;\n rcSlice.row.step = rcSlice.row.step || 1;\n ml = jStat.arange(rcSlice.row.start,\n Math.min(A[0].length, rcSlice.row.end),\n rcSlice.row.step);\n var n = rcSlice.col;\n ml.forEach(function(m, j) {\n A[m][n] = B[j];\n });\n return A;\n }\n\n if (B[0].length === undefined) {\n B = [B];\n }\n rcSlice.row.start = rcSlice.row.start || 0;\n rcSlice.row.end = rcSlice.row.end || A.length;\n rcSlice.row.step = rcSlice.row.step || 1;\n rcSlice.col.start = rcSlice.col.start || 0;\n rcSlice.col.end = rcSlice.col.end || A[0].length;\n rcSlice.col.step = rcSlice.col.step || 1;\n ml = jStat.arange(rcSlice.row.start,\n Math.min(A.length, rcSlice.row.end),\n rcSlice.row.step);\n nl = jStat.arange(rcSlice.col.start,\n Math.min(A[0].length, rcSlice.col.end),\n rcSlice.col.step);\n ml.forEach(function(m, i) {\n nl.forEach(function(n, j) {\n A[m][n] = B[i][j];\n });\n });\n return A;\n};\n\n\n// [1,2,3] ->\n// [[1,0,0],[0,2,0],[0,0,3]]\njStat.diagonal = function diagonal(diagArray) {\n var mat = jStat.zeros(diagArray.length, diagArray.length);\n diagArray.forEach(function(t, i) {\n mat[i][i] = t;\n });\n return mat;\n};\n\n\n// return copy of A\njStat.copy = function copy(A) {\n return A.map(function(row) {\n if (isNumber(row))\n return row;\n return row.map(function(t) {\n return t;\n });\n });\n};\n\n\n// TODO: Go over this entire implementation. Seems a tragic waste of resources\n// doing all this work. Instead, and while ugly, use new Function() to generate\n// a custom function for each static method.\n\n// Quick reference.\nvar jProto = jStat.prototype;\n\n// Default length.\njProto.length = 0;\n\n// For internal use only.\n// TODO: Check if they're actually used, and if they are then rename them\n// to _*\njProto.push = Array.prototype.push;\njProto.sort = Array.prototype.sort;\njProto.splice = Array.prototype.splice;\njProto.slice = Array.prototype.slice;\n\n\n// Return a clean array.\njProto.toArray = function toArray() {\n return this.length > 1 ? slice.call(this) : slice.call(this)[0];\n};\n\n\n// Map a function to a matrix or vector.\njProto.map = function map(func, toAlter) {\n return jStat(jStat.map(this, func, toAlter));\n};\n\n\n// Cumulatively combine the elements of a matrix or vector using a function.\njProto.cumreduce = function cumreduce(func, toAlter) {\n return jStat(jStat.cumreduce(this, func, toAlter));\n};\n\n\n// Destructively alter an array.\njProto.alter = function alter(func) {\n jStat.alter(this, func);\n return this;\n};\n\n\n// Extend prototype with methods that have no argument.\n(function(funcs) {\n for (var i = 0; i < funcs.length; i++) (function(passfunc) {\n jProto[passfunc] = function(func) {\n var self = this,\n results;\n // Check for callback.\n if (func) {\n setTimeout(function() {\n func.call(self, jProto[passfunc].call(self));\n });\n return this;\n }\n results = jStat[passfunc](this);\n return isArray(results) ? jStat(results) : results;\n };\n })(funcs[i]);\n})('transpose clear symmetric rows cols dimensions diag antidiag'.split(' '));\n\n\n// Extend prototype with methods that have one argument.\n(function(funcs) {\n for (var i = 0; i < funcs.length; i++) (function(passfunc) {\n jProto[passfunc] = function(index, func) {\n var self = this;\n // check for callback\n if (func) {\n setTimeout(function() {\n func.call(self, jProto[passfunc].call(self, index));\n });\n return this;\n }\n return jStat(jStat[passfunc](this, index));\n };\n })(funcs[i]);\n})('row col'.split(' '));\n\n\n// Extend prototype with simple shortcut methods.\n(function(funcs) {\n for (var i = 0; i < funcs.length; i++) (function(passfunc) {\n jProto[passfunc] = function() {\n return jStat(jStat[passfunc].apply(null, arguments));\n };\n })(funcs[i]);\n})('create zeros ones rand identity'.split(' '));\n\n\n// Exposing jStat.\nreturn jStat;\n\n}(Math));\n(function(jStat, Math) {\n\nvar isFunction = jStat.utils.isFunction;\n\n// Ascending functions for sort\nfunction ascNum(a, b) { return a - b; }\n\nfunction clip(arg, min, max) {\n return Math.max(min, Math.min(arg, max));\n}\n\n\n// sum of an array\njStat.sum = function sum(arr) {\n var sum = 0;\n var i = arr.length;\n while (--i >= 0)\n sum += arr[i];\n return sum;\n};\n\n\n// sum squared\njStat.sumsqrd = function sumsqrd(arr) {\n var sum = 0;\n var i = arr.length;\n while (--i >= 0)\n sum += arr[i] * arr[i];\n return sum;\n};\n\n\n// sum of squared errors of prediction (SSE)\njStat.sumsqerr = function sumsqerr(arr) {\n var mean = jStat.mean(arr);\n var sum = 0;\n var i = arr.length;\n var tmp;\n while (--i >= 0) {\n tmp = arr[i] - mean;\n sum += tmp * tmp;\n }\n return sum;\n};\n\n// sum of an array in each row\njStat.sumrow = function sumrow(arr) {\n var sum = 0;\n var i = arr.length;\n while (--i >= 0)\n sum += arr[i];\n return sum;\n};\n\n// product of an array\njStat.product = function product(arr) {\n var prod = 1;\n var i = arr.length;\n while (--i >= 0)\n prod *= arr[i];\n return prod;\n};\n\n\n// minimum value of an array\njStat.min = function min(arr) {\n var low = arr[0];\n var i = 0;\n while (++i < arr.length)\n if (arr[i] < low)\n low = arr[i];\n return low;\n};\n\n\n// maximum value of an array\njStat.max = function max(arr) {\n var high = arr[0];\n var i = 0;\n while (++i < arr.length)\n if (arr[i] > high)\n high = arr[i];\n return high;\n};\n\n\n// unique values of an array\njStat.unique = function unique(arr) {\n var hash = {}, _arr = [];\n for(var i = 0; i < arr.length; i++) {\n if (!hash[arr[i]]) {\n hash[arr[i]] = true;\n _arr.push(arr[i]);\n }\n }\n return _arr;\n};\n\n\n// mean value of an array\njStat.mean = function mean(arr) {\n return jStat.sum(arr) / arr.length;\n};\n\n\n// mean squared error (MSE)\njStat.meansqerr = function meansqerr(arr) {\n return jStat.sumsqerr(arr) / arr.length;\n};\n\n\n// geometric mean of an array\njStat.geomean = function geomean(arr) {\n var logs = arr.map(Math.log)\n var meanOfLogs = jStat.mean(logs)\n return Math.exp(meanOfLogs)\n};\n\n\n// median of an array\njStat.median = function median(arr) {\n var arrlen = arr.length;\n var _arr = arr.slice().sort(ascNum);\n // check if array is even or odd, then return the appropriate\n return !(arrlen & 1)\n ? (_arr[(arrlen / 2) - 1 ] + _arr[(arrlen / 2)]) / 2\n : _arr[(arrlen / 2) | 0 ];\n};\n\n\n// cumulative sum of an array\njStat.cumsum = function cumsum(arr) {\n return jStat.cumreduce(arr, function (a, b) { return a + b; });\n};\n\n\n// cumulative product of an array\njStat.cumprod = function cumprod(arr) {\n return jStat.cumreduce(arr, function (a, b) { return a * b; });\n};\n\n\n// successive differences of a sequence\njStat.diff = function diff(arr) {\n var diffs = [];\n var arrLen = arr.length;\n var i;\n for (i = 1; i < arrLen; i++)\n diffs.push(arr[i] - arr[i - 1]);\n return diffs;\n};\n\n\n// ranks of an array\njStat.rank = function (arr) {\n var i;\n var distinctNumbers = [];\n var numberCounts = {};\n for (i = 0; i < arr.length; i++) {\n var number = arr[i];\n if (numberCounts[number]) {\n numberCounts[number]++;\n } else {\n numberCounts[number] = 1;\n distinctNumbers.push(number);\n }\n }\n\n var sortedDistinctNumbers = distinctNumbers.sort(ascNum);\n var numberRanks = {};\n var currentRank = 1;\n for (i = 0; i < sortedDistinctNumbers.length; i++) {\n var number = sortedDistinctNumbers[i];\n var count = numberCounts[number];\n var first = currentRank;\n var last = currentRank + count - 1;\n var rank = (first + last) / 2;\n numberRanks[number] = rank;\n currentRank += count;\n }\n\n return arr.map(function (number) {\n return numberRanks[number];\n });\n};\n\n\n// mode of an array\n// if there are multiple modes of an array, return all of them\n// is this the appropriate way of handling it?\njStat.mode = function mode(arr) {\n var arrLen = arr.length;\n var _arr = arr.slice().sort(ascNum);\n var count = 1;\n var maxCount = 0;\n var numMaxCount = 0;\n var mode_arr = [];\n var i;\n\n for (i = 0; i < arrLen; i++) {\n if (_arr[i] === _arr[i + 1]) {\n count++;\n } else {\n if (count > maxCount) {\n mode_arr = [_arr[i]];\n maxCount = count;\n numMaxCount = 0;\n }\n // are there multiple max counts\n else if (count === maxCount) {\n mode_arr.push(_arr[i]);\n numMaxCount++;\n }\n // resetting count for new value in array\n count = 1;\n }\n }\n\n return numMaxCount === 0 ? mode_arr[0] : mode_arr;\n};\n\n\n// range of an array\njStat.range = function range(arr) {\n return jStat.max(arr) - jStat.min(arr);\n};\n\n// variance of an array\n// flag = true indicates sample instead of population\njStat.variance = function variance(arr, flag) {\n return jStat.sumsqerr(arr) / (arr.length - (flag ? 1 : 0));\n};\n\n// pooled variance of an array of arrays\njStat.pooledvariance = function pooledvariance(arr) {\n var sumsqerr = arr.reduce(function (a, samples) {return a + jStat.sumsqerr(samples);}, 0);\n var count = arr.reduce(function (a, samples) {return a + samples.length;}, 0);\n return sumsqerr / (count - arr.length);\n};\n\n// deviation of an array\njStat.deviation = function (arr) {\n var mean = jStat.mean(arr);\n var arrlen = arr.length;\n var dev = new Array(arrlen);\n for (var i = 0; i < arrlen; i++) {\n dev[i] = arr[i] - mean;\n }\n return dev;\n};\n\n// standard deviation of an array\n// flag = true indicates sample instead of population\njStat.stdev = function stdev(arr, flag) {\n return Math.sqrt(jStat.variance(arr, flag));\n};\n\n// pooled standard deviation of an array of arrays\njStat.pooledstdev = function pooledstdev(arr) {\n return Math.sqrt(jStat.pooledvariance(arr));\n};\n\n// mean deviation (mean absolute deviation) of an array\njStat.meandev = function meandev(arr) {\n var mean = jStat.mean(arr);\n var a = [];\n for (var i = arr.length - 1; i >= 0; i--) {\n a.push(Math.abs(arr[i] - mean));\n }\n return jStat.mean(a);\n};\n\n\n// median deviation (median absolute deviation) of an array\njStat.meddev = function meddev(arr) {\n var median = jStat.median(arr);\n var a = [];\n for (var i = arr.length - 1; i >= 0; i--) {\n a.push(Math.abs(arr[i] - median));\n }\n return jStat.median(a);\n};\n\n\n// coefficient of variation\njStat.coeffvar = function coeffvar(arr) {\n return jStat.stdev(arr) / jStat.mean(arr);\n};\n\n\n// quartiles of an array\njStat.quartiles = function quartiles(arr) {\n var arrlen = arr.length;\n var _arr = arr.slice().sort(ascNum);\n return [\n _arr[ Math.round((arrlen) / 4) - 1 ],\n _arr[ Math.round((arrlen) / 2) - 1 ],\n _arr[ Math.round((arrlen) * 3 / 4) - 1 ]\n ];\n};\n\n\n// Arbitary quantiles of an array. Direct port of the scipy.stats\n// implementation by Pierre GF Gerard-Marchant.\njStat.quantiles = function quantiles(arr, quantilesArray, alphap, betap) {\n var sortedArray = arr.slice().sort(ascNum);\n var quantileVals = [quantilesArray.length];\n var n = arr.length;\n var i, p, m, aleph, k, gamma;\n\n if (typeof alphap === 'undefined')\n alphap = 3 / 8;\n if (typeof betap === 'undefined')\n betap = 3 / 8;\n\n for (i = 0; i < quantilesArray.length; i++) {\n p = quantilesArray[i];\n m = alphap + p * (1 - alphap - betap);\n aleph = n * p + m;\n k = Math.floor(clip(aleph, 1, n - 1));\n gamma = clip(aleph - k, 0, 1);\n quantileVals[i] = (1 - gamma) * sortedArray[k - 1] + gamma * sortedArray[k];\n }\n\n return quantileVals;\n};\n\n// Return the k-th percentile of values in a range, where k is in the range 0..1, inclusive.\n// Passing true for the exclusive parameter excludes both endpoints of the range.\njStat.percentile = function percentile(arr, k, exclusive) {\n var _arr = arr.slice().sort(ascNum);\n var realIndex = k * (_arr.length + (exclusive ? 1 : -1)) + (exclusive ? 0 : 1);\n var index = parseInt(realIndex);\n var frac = realIndex - index;\n if (index + 1 < _arr.length) {\n return _arr[index - 1] + frac * (_arr[index] - _arr[index - 1]);\n } else {\n return _arr[index - 1];\n }\n}\n\n// The percentile rank of score in a given array. Returns the percentage\n// of all values in the input array that are less than (kind='strict') or\n// less or equal than (kind='weak') score. Default is weak.\njStat.percentileOfScore = function percentileOfScore(arr, score, kind) {\n var counter = 0;\n var len = arr.length;\n var strict = false;\n var value, i;\n\n if (kind === 'strict')\n strict = true;\n\n for (i = 0; i < len; i++) {\n value = arr[i];\n if ((strict && value < score) ||\n (!strict && value <= score)) {\n counter++;\n }\n }\n\n return counter / len;\n};\n\n\n// Histogram (bin count) data\njStat.histogram = function histogram(arr, binCnt) {\n binCnt = binCnt || 4;\n var first = jStat.min(arr);\n var binWidth = (jStat.max(arr) - first) / binCnt;\n var len = arr.length;\n var bins = [];\n var i;\n\n for (i = 0; i < binCnt; i++)\n bins[i] = 0;\n for (i = 0; i < len; i++)\n bins[Math.min(Math.floor(((arr[i] - first) / binWidth)), binCnt - 1)] += 1;\n\n return bins;\n};\n\n\n// covariance of two arrays\njStat.covariance = function covariance(arr1, arr2) {\n var u = jStat.mean(arr1);\n var v = jStat.mean(arr2);\n var arr1Len = arr1.length;\n var sq_dev = new Array(arr1Len);\n var i;\n\n for (i = 0; i < arr1Len; i++)\n sq_dev[i] = (arr1[i] - u) * (arr2[i] - v);\n\n return jStat.sum(sq_dev) / (arr1Len - 1);\n};\n\n\n// (pearson's) population correlation coefficient, rho\njStat.corrcoeff = function corrcoeff(arr1, arr2) {\n return jStat.covariance(arr1, arr2) /\n jStat.stdev(arr1, 1) /\n jStat.stdev(arr2, 1);\n};\n\n // (spearman's) rank correlation coefficient, sp\njStat.spearmancoeff = function (arr1, arr2) {\n arr1 = jStat.rank(arr1);\n arr2 = jStat.rank(arr2);\n //return pearson's correlation of the ranks:\n return jStat.corrcoeff(arr1, arr2);\n}\n\n\n// statistical standardized moments (general form of skew/kurt)\njStat.stanMoment = function stanMoment(arr, n) {\n var mu = jStat.mean(arr);\n var sigma = jStat.stdev(arr);\n var len = arr.length;\n var skewSum = 0;\n\n for (var i = 0; i < len; i++)\n skewSum += Math.pow((arr[i] - mu) / sigma, n);\n\n return skewSum / arr.length;\n};\n\n// (pearson's) moment coefficient of skewness\njStat.skewness = function skewness(arr) {\n return jStat.stanMoment(arr, 3);\n};\n\n// (pearson's) (excess) kurtosis\njStat.kurtosis = function kurtosis(arr) {\n return jStat.stanMoment(arr, 4) - 3;\n};\n\n\nvar jProto = jStat.prototype;\n\n\n// Extend jProto with method for calculating cumulative sums and products.\n// This differs from the similar extension below as cumsum and cumprod should\n// not be run again in the case fullbool === true.\n// If a matrix is passed, automatically assume operation should be done on the\n// columns.\n(function(funcs) {\n for (var i = 0; i < funcs.length; i++) (function(passfunc) {\n // If a matrix is passed, automatically assume operation should be done on\n // the columns.\n jProto[passfunc] = function(fullbool, func) {\n var arr = [];\n var i = 0;\n var tmpthis = this;\n // Assignment reassignation depending on how parameters were passed in.\n if (isFunction(fullbool)) {\n func = fullbool;\n fullbool = false;\n }\n // Check if a callback was passed with the function.\n if (func) {\n setTimeout(function() {\n func.call(tmpthis, jProto[passfunc].call(tmpthis, fullbool));\n });\n return this;\n }\n // Check if matrix and run calculations.\n if (this.length > 1) {\n tmpthis = fullbool === true ? this : this.transpose();\n for (; i < tmpthis.length; i++)\n arr[i] = jStat[passfunc](tmpthis[i]);\n return arr;\n }\n // Pass fullbool if only vector, not a matrix. for variance and stdev.\n return jStat[passfunc](this[0], fullbool);\n };\n })(funcs[i]);\n})(('cumsum cumprod').split(' '));\n\n\n// Extend jProto with methods which don't require arguments and work on columns.\n(function(funcs) {\n for (var i = 0; i < funcs.length; i++) (function(passfunc) {\n // If a matrix is passed, automatically assume operation should be done on\n // the columns.\n jProto[passfunc] = function(fullbool, func) {\n var arr = [];\n var i = 0;\n var tmpthis = this;\n // Assignment reassignation depending on how parameters were passed in.\n if (isFunction(fullbool)) {\n func = fullbool;\n fullbool = false;\n }\n // Check if a callback was passed with the function.\n if (func) {\n setTimeout(function() {\n func.call(tmpthis, jProto[passfunc].call(tmpthis, fullbool));\n });\n return this;\n }\n // Check if matrix and run calculations.\n if (this.length > 1) {\n if (passfunc !== 'sumrow')\n tmpthis = fullbool === true ? this : this.transpose();\n for (; i < tmpthis.length; i++)\n arr[i] = jStat[passfunc](tmpthis[i]);\n return fullbool === true\n ? jStat[passfunc](jStat.utils.toVector(arr))\n : arr;\n }\n // Pass fullbool if only vector, not a matrix. for variance and stdev.\n return jStat[passfunc](this[0], fullbool);\n };\n })(funcs[i]);\n})(('sum sumsqrd sumsqerr sumrow product min max unique mean meansqerr ' +\n 'geomean median diff rank mode range variance deviation stdev meandev ' +\n 'meddev coeffvar quartiles histogram skewness kurtosis').split(' '));\n\n\n// Extend jProto with functions that take arguments. Operations on matrices are\n// done on columns.\n(function(funcs) {\n for (var i = 0; i < funcs.length; i++) (function(passfunc) {\n jProto[passfunc] = function() {\n var arr = [];\n var i = 0;\n var tmpthis = this;\n var args = Array.prototype.slice.call(arguments);\n var callbackFunction;\n\n // If the last argument is a function, we assume it's a callback; we\n // strip the callback out and call the function again.\n if (isFunction(args[args.length - 1])) {\n callbackFunction = args[args.length - 1];\n var argsToPass = args.slice(0, args.length - 1);\n\n setTimeout(function() {\n callbackFunction.call(tmpthis,\n jProto[passfunc].apply(tmpthis, argsToPass));\n });\n return this;\n\n // Otherwise we curry the function args and call normally.\n } else {\n callbackFunction = undefined;\n var curriedFunction = function curriedFunction(vector) {\n return jStat[passfunc].apply(tmpthis, [vector].concat(args));\n }\n }\n\n // If this is a matrix, run column-by-column.\n if (this.length > 1) {\n tmpthis = tmpthis.transpose();\n for (; i < tmpthis.length; i++)\n arr[i] = curriedFunction(tmpthis[i]);\n return arr;\n }\n\n // Otherwise run on the vector.\n return curriedFunction(this[0]);\n };\n })(funcs[i]);\n})('quantiles percentileOfScore'.split(' '));\n\n}(jStat, Math));\n// Special functions //\n(function(jStat, Math) {\n\n// Log-gamma function\njStat.gammaln = function gammaln(x) {\n var j = 0;\n var cof = [\n 76.18009172947146, -86.50532032941677, 24.01409824083091,\n -1.231739572450155, 0.1208650973866179e-2, -0.5395239384953e-5\n ];\n var ser = 1.000000000190015;\n var xx, y, tmp;\n tmp = (y = xx = x) + 5.5;\n tmp -= (xx + 0.5) * Math.log(tmp);\n for (; j < 6; j++)\n ser += cof[j] / ++y;\n return Math.log(2.5066282746310005 * ser / xx) - tmp;\n};\n\n/*\n * log-gamma function to support poisson distribution sampling. The\n * algorithm comes from SPECFUN by Shanjie Zhang and Jianming Jin and their\n * book \"Computation of Special Functions\", 1996, John Wiley & Sons, Inc.\n */\njStat.loggam = function loggam(x) {\n var x0, x2, xp, gl, gl0;\n var k, n;\n\n var a = [8.333333333333333e-02, -2.777777777777778e-03,\n 7.936507936507937e-04, -5.952380952380952e-04,\n 8.417508417508418e-04, -1.917526917526918e-03,\n 6.410256410256410e-03, -2.955065359477124e-02,\n 1.796443723688307e-01, -1.39243221690590e+00];\n x0 = x;\n n = 0;\n if ((x == 1.0) || (x == 2.0)) {\n return 0.0;\n }\n if (x <= 7.0) {\n n = Math.floor(7 - x);\n x0 = x + n;\n }\n x2 = 1.0 / (x0 * x0);\n xp = 2 * Math.PI;\n gl0 = a[9];\n for (k = 8; k >= 0; k--) {\n gl0 *= x2;\n gl0 += a[k];\n }\n gl = gl0 / x0 + 0.5 * Math.log(xp) + (x0 - 0.5) * Math.log(x0) - x0;\n if (x <= 7.0) {\n for (k = 1; k <= n; k++) {\n gl -= Math.log(x0 - 1.0);\n x0 -= 1.0;\n }\n }\n return gl;\n}\n\n// gamma of x\njStat.gammafn = function gammafn(x) {\n var p = [-1.716185138865495, 24.76565080557592, -379.80425647094563,\n 629.3311553128184, 866.9662027904133, -31451.272968848367,\n -36144.413418691176, 66456.14382024054\n ];\n var q = [-30.8402300119739, 315.35062697960416, -1015.1563674902192,\n -3107.771671572311, 22538.118420980151, 4755.8462775278811,\n -134659.9598649693, -115132.2596755535];\n var fact = false;\n var n = 0;\n var xden = 0;\n var xnum = 0;\n var y = x;\n var i, z, yi, res;\n if (x > 171.6243769536076) {\n return Infinity;\n }\n if (y <= 0) {\n res = y % 1 + 3.6e-16;\n if (res) {\n fact = (!(y & 1) ? 1 : -1) * Math.PI / Math.sin(Math.PI * res);\n y = 1 - y;\n } else {\n return Infinity;\n }\n }\n yi = y;\n if (y < 1) {\n z = y++;\n } else {\n z = (y -= n = (y | 0) - 1) - 1;\n }\n for (i = 0; i < 8; ++i) {\n xnum = (xnum + p[i]) * z;\n xden = xden * z + q[i];\n }\n res = xnum / xden + 1;\n if (yi < y) {\n res /= yi;\n } else if (yi > y) {\n for (i = 0; i < n; ++i) {\n res *= y;\n y++;\n }\n }\n if (fact) {\n res = fact / res;\n }\n return res;\n};\n\n\n// lower incomplete gamma function, which is usually typeset with a\n// lower-case greek gamma as the function symbol\njStat.gammap = function gammap(a, x) {\n return jStat.lowRegGamma(a, x) * jStat.gammafn(a);\n};\n\n\n// The lower regularized incomplete gamma function, usually written P(a,x)\njStat.lowRegGamma = function lowRegGamma(a, x) {\n var aln = jStat.gammaln(a);\n var ap = a;\n var sum = 1 / a;\n var del = sum;\n var b = x + 1 - a;\n var c = 1 / 1.0e-30;\n var d = 1 / b;\n var h = d;\n var i = 1;\n // calculate maximum number of itterations required for a\n var ITMAX = -~(Math.log((a >= 1) ? a : 1 / a) * 8.5 + a * 0.4 + 17);\n var an;\n\n if (x < 0 || a <= 0) {\n return NaN;\n } else if (x < a + 1) {\n for (; i <= ITMAX; i++) {\n sum += del *= x / ++ap;\n }\n return (sum * Math.exp(-x + a * Math.log(x) - (aln)));\n }\n\n for (; i <= ITMAX; i++) {\n an = -i * (i - a);\n b += 2;\n d = an * d + b;\n c = b + an / c;\n d = 1 / d;\n h *= d * c;\n }\n\n return (1 - h * Math.exp(-x + a * Math.log(x) - (aln)));\n};\n\n// natural log factorial of n\njStat.factorialln = function factorialln(n) {\n return n < 0 ? NaN : jStat.gammaln(n + 1);\n};\n\n// factorial of n\njStat.factorial = function factorial(n) {\n return n < 0 ? NaN : jStat.gammafn(n + 1);\n};\n\n// combinations of n, m\njStat.combination = function combination(n, m) {\n // make sure n or m don't exceed the upper limit of usable values\n return (n > 170 || m > 170)\n ? Math.exp(jStat.combinationln(n, m))\n : (jStat.factorial(n) / jStat.factorial(m)) / jStat.factorial(n - m);\n};\n\n\njStat.combinationln = function combinationln(n, m){\n return jStat.factorialln(n) - jStat.factorialln(m) - jStat.factorialln(n - m);\n};\n\n\n// permutations of n, m\njStat.permutation = function permutation(n, m) {\n return jStat.factorial(n) / jStat.factorial(n - m);\n};\n\n\n// beta function\njStat.betafn = function betafn(x, y) {\n // ensure arguments are positive\n if (x <= 0 || y <= 0)\n return undefined;\n // make sure x + y doesn't exceed the upper limit of usable values\n return (x + y > 170)\n ? Math.exp(jStat.betaln(x, y))\n : jStat.gammafn(x) * jStat.gammafn(y) / jStat.gammafn(x + y);\n};\n\n\n// natural logarithm of beta function\njStat.betaln = function betaln(x, y) {\n return jStat.gammaln(x) + jStat.gammaln(y) - jStat.gammaln(x + y);\n};\n\n\n// Evaluates the continued fraction for incomplete beta function by modified\n// Lentz's method.\njStat.betacf = function betacf(x, a, b) {\n var fpmin = 1e-30;\n var m = 1;\n var qab = a + b;\n var qap = a + 1;\n var qam = a - 1;\n var c = 1;\n var d = 1 - qab * x / qap;\n var m2, aa, del, h;\n\n // These q's will be used in factors that occur in the coefficients\n if (Math.abs(d) < fpmin)\n d = fpmin;\n d = 1 / d;\n h = d;\n\n for (; m <= 100; m++) {\n m2 = 2 * m;\n aa = m * (b - m) * x / ((qam + m2) * (a + m2));\n // One step (the even one) of the recurrence\n d = 1 + aa * d;\n if (Math.abs(d) < fpmin)\n d = fpmin;\n c = 1 + aa / c;\n if (Math.abs(c) < fpmin)\n c = fpmin;\n d = 1 / d;\n h *= d * c;\n aa = -(a + m) * (qab + m) * x / ((a + m2) * (qap + m2));\n // Next step of the recurrence (the odd one)\n d = 1 + aa * d;\n if (Math.abs(d) < fpmin)\n d = fpmin;\n c = 1 + aa / c;\n if (Math.abs(c) < fpmin)\n c = fpmin;\n d = 1 / d;\n del = d * c;\n h *= del;\n if (Math.abs(del - 1.0) < 3e-7)\n break;\n }\n\n return h;\n};\n\n\n// Returns the inverse of the lower regularized inomplete gamma function\njStat.gammapinv = function gammapinv(p, a) {\n var j = 0;\n var a1 = a - 1;\n var EPS = 1e-8;\n var gln = jStat.gammaln(a);\n var x, err, t, u, pp, lna1, afac;\n\n if (p >= 1)\n return Math.max(100, a + 100 * Math.sqrt(a));\n if (p <= 0)\n return 0;\n if (a > 1) {\n lna1 = Math.log(a1);\n afac = Math.exp(a1 * (lna1 - 1) - gln);\n pp = (p < 0.5) ? p : 1 - p;\n t = Math.sqrt(-2 * Math.log(pp));\n x = (2.30753 + t * 0.27061) / (1 + t * (0.99229 + t * 0.04481)) - t;\n if (p < 0.5)\n x = -x;\n x = Math.max(1e-3,\n a * Math.pow(1 - 1 / (9 * a) - x / (3 * Math.sqrt(a)), 3));\n } else {\n t = 1 - a * (0.253 + a * 0.12);\n if (p < t)\n x = Math.pow(p / t, 1 / a);\n else\n x = 1 - Math.log(1 - (p - t) / (1 - t));\n }\n\n for(; j < 12; j++) {\n if (x <= 0)\n return 0;\n err = jStat.lowRegGamma(a, x) - p;\n if (a > 1)\n t = afac * Math.exp(-(x - a1) + a1 * (Math.log(x) - lna1));\n else\n t = Math.exp(-x + a1 * Math.log(x) - gln);\n u = err / t;\n x -= (t = u / (1 - 0.5 * Math.min(1, u * ((a - 1) / x - 1))));\n if (x <= 0)\n x = 0.5 * (x + t);\n if (Math.abs(t) < EPS * x)\n break;\n }\n\n return x;\n};\n\n\n// Returns the error function erf(x)\njStat.erf = function erf(x) {\n var cof = [-1.3026537197817094, 6.4196979235649026e-1, 1.9476473204185836e-2,\n -9.561514786808631e-3, -9.46595344482036e-4, 3.66839497852761e-4,\n 4.2523324806907e-5, -2.0278578112534e-5, -1.624290004647e-6,\n 1.303655835580e-6, 1.5626441722e-8, -8.5238095915e-8,\n 6.529054439e-9, 5.059343495e-9, -9.91364156e-10,\n -2.27365122e-10, 9.6467911e-11, 2.394038e-12,\n -6.886027e-12, 8.94487e-13, 3.13092e-13,\n -1.12708e-13, 3.81e-16, 7.106e-15,\n -1.523e-15, -9.4e-17, 1.21e-16,\n -2.8e-17];\n var j = cof.length - 1;\n var isneg = false;\n var d = 0;\n var dd = 0;\n var t, ty, tmp, res;\n\n if (x < 0) {\n x = -x;\n isneg = true;\n }\n\n t = 2 / (2 + x);\n ty = 4 * t - 2;\n\n for(; j > 0; j--) {\n tmp = d;\n d = ty * d - dd + cof[j];\n dd = tmp;\n }\n\n res = t * Math.exp(-x * x + 0.5 * (cof[0] + ty * d) - dd);\n return isneg ? res - 1 : 1 - res;\n};\n\n\n// Returns the complmentary error function erfc(x)\njStat.erfc = function erfc(x) {\n return 1 - jStat.erf(x);\n};\n\n\n// Returns the inverse of the complementary error function\njStat.erfcinv = function erfcinv(p) {\n var j = 0;\n var x, err, t, pp;\n if (p >= 2)\n return -100;\n if (p <= 0)\n return 100;\n pp = (p < 1) ? p : 2 - p;\n t = Math.sqrt(-2 * Math.log(pp / 2));\n x = -0.70711 * ((2.30753 + t * 0.27061) /\n (1 + t * (0.99229 + t * 0.04481)) - t);\n for (; j < 2; j++) {\n err = jStat.erfc(x) - pp;\n x += err / (1.12837916709551257 * Math.exp(-x * x) - x * err);\n }\n return (p < 1) ? x : -x;\n};\n\n\n// Returns the inverse of the incomplete beta function\njStat.ibetainv = function ibetainv(p, a, b) {\n var EPS = 1e-8;\n var a1 = a - 1;\n var b1 = b - 1;\n var j = 0;\n var lna, lnb, pp, t, u, err, x, al, h, w, afac;\n if (p <= 0)\n return 0;\n if (p >= 1)\n return 1;\n if (a >= 1 && b >= 1) {\n pp = (p < 0.5) ? p : 1 - p;\n t = Math.sqrt(-2 * Math.log(pp));\n x = (2.30753 + t * 0.27061) / (1 + t* (0.99229 + t * 0.04481)) - t;\n if (p < 0.5)\n x = -x;\n al = (x * x - 3) / 6;\n h = 2 / (1 / (2 * a - 1) + 1 / (2 * b - 1));\n w = (x * Math.sqrt(al + h) / h) - (1 / (2 * b - 1) - 1 / (2 * a - 1)) *\n (al + 5 / 6 - 2 / (3 * h));\n x = a / (a + b * Math.exp(2 * w));\n } else {\n lna = Math.log(a / (a + b));\n lnb = Math.log(b / (a + b));\n t = Math.exp(a * lna) / a;\n u = Math.exp(b * lnb) / b;\n w = t + u;\n if (p < t / w)\n x = Math.pow(a * w * p, 1 / a);\n else\n x = 1 - Math.pow(b * w * (1 - p), 1 / b);\n }\n afac = -jStat.gammaln(a) - jStat.gammaln(b) + jStat.gammaln(a + b);\n for(; j < 10; j++) {\n if (x === 0 || x === 1)\n return x;\n err = jStat.ibeta(x, a, b) - p;\n t = Math.exp(a1 * Math.log(x) + b1 * Math.log(1 - x) + afac);\n u = err / t;\n x -= (t = u / (1 - 0.5 * Math.min(1, u * (a1 / x - b1 / (1 - x)))));\n if (x <= 0)\n x = 0.5 * (x + t);\n if (x >= 1)\n x = 0.5 * (x + t + 1);\n if (Math.abs(t) < EPS * x && j > 0)\n break;\n }\n return x;\n};\n\n\n// Returns the incomplete beta function I_x(a,b)\njStat.ibeta = function ibeta(x, a, b) {\n // Factors in front of the continued fraction.\n var bt = (x === 0 || x === 1) ? 0 :\n Math.exp(jStat.gammaln(a + b) - jStat.gammaln(a) -\n jStat.gammaln(b) + a * Math.log(x) + b *\n Math.log(1 - x));\n if (x < 0 || x > 1)\n return false;\n if (x < (a + 1) / (a + b + 2))\n // Use continued fraction directly.\n return bt * jStat.betacf(x, a, b) / a;\n // else use continued fraction after making the symmetry transformation.\n return 1 - bt * jStat.betacf(1 - x, b, a) / b;\n};\n\n\n// Returns a normal deviate (mu=0, sigma=1).\n// If n and m are specified it returns a object of normal deviates.\njStat.randn = function randn(n, m) {\n var u, v, x, y, q;\n if (!m)\n m = n;\n if (n)\n return jStat.create(n, m, function() { return jStat.randn(); });\n do {\n u = jStat._random_fn();\n v = 1.7156 * (jStat._random_fn() - 0.5);\n x = u - 0.449871;\n y = Math.abs(v) + 0.386595;\n q = x * x + y * (0.19600 * y - 0.25472 * x);\n } while (q > 0.27597 && (q > 0.27846 || v * v > -4 * Math.log(u) * u * u));\n return v / u;\n};\n\n\n// Returns a gamma deviate by the method of Marsaglia and Tsang.\njStat.randg = function randg(shape, n, m) {\n var oalph = shape;\n var a1, a2, u, v, x, mat;\n if (!m)\n m = n;\n if (!shape)\n shape = 1;\n if (n) {\n mat = jStat.zeros(n,m);\n mat.alter(function() { return jStat.randg(shape); });\n return mat;\n }\n if (shape < 1)\n shape += 1;\n a1 = shape - 1 / 3;\n a2 = 1 / Math.sqrt(9 * a1);\n do {\n do {\n x = jStat.randn();\n v = 1 + a2 * x;\n } while(v <= 0);\n v = v * v * v;\n u = jStat._random_fn();\n } while(u > 1 - 0.331 * Math.pow(x, 4) &&\n Math.log(u) > 0.5 * x*x + a1 * (1 - v + Math.log(v)));\n // alpha > 1\n if (shape == oalph)\n return a1 * v;\n // alpha < 1\n do {\n u = jStat._random_fn();\n } while(u === 0);\n return Math.pow(u, 1 / oalph) * a1 * v;\n};\n\n\n// making use of static methods on the instance\n(function(funcs) {\n for (var i = 0; i < funcs.length; i++) (function(passfunc) {\n jStat.fn[passfunc] = function() {\n return jStat(\n jStat.map(this, function(value) { return jStat[passfunc](value); }));\n }\n })(funcs[i]);\n})('gammaln gammafn factorial factorialln'.split(' '));\n\n\n(function(funcs) {\n for (var i = 0; i < funcs.length; i++) (function(passfunc) {\n jStat.fn[passfunc] = function() {\n return jStat(jStat[passfunc].apply(null, arguments));\n };\n })(funcs[i]);\n})('randn'.split(' '));\n\n}(jStat, Math));\n(function(jStat, Math) {\n\n// generate all distribution instance methods\n(function(list) {\n for (var i = 0; i < list.length; i++) (function(func) {\n // distribution instance method\n jStat[func] = function f(a, b, c) {\n if (!(this instanceof f))\n return new f(a, b, c);\n this._a = a;\n this._b = b;\n this._c = c;\n return this;\n };\n // distribution method to be used on a jStat instance\n jStat.fn[func] = function(a, b, c) {\n var newthis = jStat[func](a, b, c);\n newthis.data = this;\n return newthis;\n };\n // sample instance method\n jStat[func].prototype.sample = function(arr) {\n var a = this._a;\n var b = this._b;\n var c = this._c;\n if (arr)\n return jStat.alter(arr, function() {\n return jStat[func].sample(a, b, c);\n });\n else\n return jStat[func].sample(a, b, c);\n };\n // generate the pdf, cdf and inv instance methods\n (function(vals) {\n for (var i = 0; i < vals.length; i++) (function(fnfunc) {\n jStat[func].prototype[fnfunc] = function(x) {\n var a = this._a;\n var b = this._b;\n var c = this._c;\n if (!x && x !== 0)\n x = this.data;\n if (typeof x !== 'number') {\n return jStat.fn.map.call(x, function(x) {\n return jStat[func][fnfunc](x, a, b, c);\n });\n }\n return jStat[func][fnfunc](x, a, b, c);\n };\n })(vals[i]);\n })('pdf cdf inv'.split(' '));\n // generate the mean, median, mode and variance instance methods\n (function(vals) {\n for (var i = 0; i < vals.length; i++) (function(fnfunc) {\n jStat[func].prototype[fnfunc] = function() {\n return jStat[func][fnfunc](this._a, this._b, this._c);\n };\n })(vals[i]);\n })('mean median mode variance'.split(' '));\n })(list[i]);\n})((\n 'beta centralF cauchy chisquare exponential gamma invgamma kumaraswamy ' +\n 'laplace lognormal noncentralt normal pareto studentt weibull uniform ' +\n 'binomial negbin hypgeom poisson triangular tukey arcsine'\n).split(' '));\n\n\n\n// extend beta function with static methods\njStat.extend(jStat.beta, {\n pdf: function pdf(x, alpha, beta) {\n // PDF is zero outside the support\n if (x > 1 || x < 0)\n return 0;\n // PDF is one for the uniform case\n if (alpha == 1 && beta == 1)\n return 1;\n\n if (alpha < 512 && beta < 512) {\n return (Math.pow(x, alpha - 1) * Math.pow(1 - x, beta - 1)) /\n jStat.betafn(alpha, beta);\n } else {\n return Math.exp((alpha - 1) * Math.log(x) +\n (beta - 1) * Math.log(1 - x) -\n jStat.betaln(alpha, beta));\n }\n },\n\n cdf: function cdf(x, alpha, beta) {\n return (x > 1 || x < 0) ? (x > 1) * 1 : jStat.ibeta(x, alpha, beta);\n },\n\n inv: function inv(x, alpha, beta) {\n return jStat.ibetainv(x, alpha, beta);\n },\n\n mean: function mean(alpha, beta) {\n return alpha / (alpha + beta);\n },\n\n median: function median(alpha, beta) {\n return jStat.ibetainv(0.5, alpha, beta);\n },\n\n mode: function mode(alpha, beta) {\n return (alpha - 1 ) / ( alpha + beta - 2);\n },\n\n // return a random sample\n sample: function sample(alpha, beta) {\n var u = jStat.randg(alpha);\n return u / (u + jStat.randg(beta));\n },\n\n variance: function variance(alpha, beta) {\n return (alpha * beta) / (Math.pow(alpha + beta, 2) * (alpha + beta + 1));\n }\n});\n\n// extend F function with static methods\njStat.extend(jStat.centralF, {\n // This implementation of the pdf function avoids float overflow\n // See the way that R calculates this value:\n // https://svn.r-project.org/R/trunk/src/nmath/df.c\n pdf: function pdf(x, df1, df2) {\n var p, q, f;\n\n if (x < 0)\n return 0;\n\n if (df1 <= 2) {\n if (x === 0 && df1 < 2) {\n return Infinity;\n }\n if (x === 0 && df1 === 2) {\n return 1;\n }\n return (1 / jStat.betafn(df1 / 2, df2 / 2)) *\n Math.pow(df1 / df2, df1 / 2) *\n Math.pow(x, (df1/2) - 1) *\n Math.pow((1 + (df1 / df2) * x), -(df1 + df2) / 2);\n }\n\n p = (df1 * x) / (df2 + x * df1);\n q = df2 / (df2 + x * df1);\n f = df1 * q / 2.0;\n return f * jStat.binomial.pdf((df1 - 2) / 2, (df1 + df2 - 2) / 2, p);\n },\n\n cdf: function cdf(x, df1, df2) {\n if (x < 0)\n return 0;\n return jStat.ibeta((df1 * x) / (df1 * x + df2), df1 / 2, df2 / 2);\n },\n\n inv: function inv(x, df1, df2) {\n return df2 / (df1 * (1 / jStat.ibetainv(x, df1 / 2, df2 / 2) - 1));\n },\n\n mean: function mean(df1, df2) {\n return (df2 > 2) ? df2 / (df2 - 2) : undefined;\n },\n\n mode: function mode(df1, df2) {\n return (df1 > 2) ? (df2 * (df1 - 2)) / (df1 * (df2 + 2)) : undefined;\n },\n\n // return a random sample\n sample: function sample(df1, df2) {\n var x1 = jStat.randg(df1 / 2) * 2;\n var x2 = jStat.randg(df2 / 2) * 2;\n return (x1 / df1) / (x2 / df2);\n },\n\n variance: function variance(df1, df2) {\n if (df2 <= 4)\n return undefined;\n return 2 * df2 * df2 * (df1 + df2 - 2) /\n (df1 * (df2 - 2) * (df2 - 2) * (df2 - 4));\n }\n});\n\n\n// extend cauchy function with static methods\njStat.extend(jStat.cauchy, {\n pdf: function pdf(x, local, scale) {\n if (scale < 0) { return 0; }\n\n return (scale / (Math.pow(x - local, 2) + Math.pow(scale, 2))) / Math.PI;\n },\n\n cdf: function cdf(x, local, scale) {\n return Math.atan((x - local) / scale) / Math.PI + 0.5;\n },\n\n inv: function(p, local, scale) {\n return local + scale * Math.tan(Math.PI * (p - 0.5));\n },\n\n median: function median(local/*, scale*/) {\n return local;\n },\n\n mode: function mode(local/*, scale*/) {\n return local;\n },\n\n sample: function sample(local, scale) {\n return jStat.randn() *\n Math.sqrt(1 / (2 * jStat.randg(0.5))) * scale + local;\n }\n});\n\n\n\n// extend chisquare function with static methods\njStat.extend(jStat.chisquare, {\n pdf: function pdf(x, dof) {\n if (x < 0)\n return 0;\n return (x === 0 && dof === 2) ? 0.5 :\n Math.exp((dof / 2 - 1) * Math.log(x) - x / 2 - (dof / 2) *\n Math.log(2) - jStat.gammaln(dof / 2));\n },\n\n cdf: function cdf(x, dof) {\n if (x < 0)\n return 0;\n return jStat.lowRegGamma(dof / 2, x / 2);\n },\n\n inv: function(p, dof) {\n return 2 * jStat.gammapinv(p, 0.5 * dof);\n },\n\n mean : function(dof) {\n return dof;\n },\n\n // TODO: this is an approximation (is there a better way?)\n median: function median(dof) {\n return dof * Math.pow(1 - (2 / (9 * dof)), 3);\n },\n\n mode: function mode(dof) {\n return (dof - 2 > 0) ? dof - 2 : 0;\n },\n\n sample: function sample(dof) {\n return jStat.randg(dof / 2) * 2;\n },\n\n variance: function variance(dof) {\n return 2 * dof;\n }\n});\n\n\n\n// extend exponential function with static methods\njStat.extend(jStat.exponential, {\n pdf: function pdf(x, rate) {\n return x < 0 ? 0 : rate * Math.exp(-rate * x);\n },\n\n cdf: function cdf(x, rate) {\n return x < 0 ? 0 : 1 - Math.exp(-rate * x);\n },\n\n inv: function(p, rate) {\n return -Math.log(1 - p) / rate;\n },\n\n mean : function(rate) {\n return 1 / rate;\n },\n\n median: function (rate) {\n return (1 / rate) * Math.log(2);\n },\n\n mode: function mode(/*rate*/) {\n return 0;\n },\n\n sample: function sample(rate) {\n return -1 / rate * Math.log(jStat._random_fn());\n },\n\n variance : function(rate) {\n return Math.pow(rate, -2);\n }\n});\n\n\n\n// extend gamma function with static methods\njStat.extend(jStat.gamma, {\n pdf: function pdf(x, shape, scale) {\n if (x < 0)\n return 0;\n return (x === 0 && shape === 1) ? 1 / scale :\n Math.exp((shape - 1) * Math.log(x) - x / scale -\n jStat.gammaln(shape) - shape * Math.log(scale));\n },\n\n cdf: function cdf(x, shape, scale) {\n if (x < 0)\n return 0;\n return jStat.lowRegGamma(shape, x / scale);\n },\n\n inv: function(p, shape, scale) {\n return jStat.gammapinv(p, shape) * scale;\n },\n\n mean : function(shape, scale) {\n return shape * scale;\n },\n\n mode: function mode(shape, scale) {\n if(shape > 1) return (shape - 1) * scale;\n return undefined;\n },\n\n sample: function sample(shape, scale) {\n return jStat.randg(shape) * scale;\n },\n\n variance: function variance(shape, scale) {\n return shape * scale * scale;\n }\n});\n\n// extend inverse gamma function with static methods\njStat.extend(jStat.invgamma, {\n pdf: function pdf(x, shape, scale) {\n if (x <= 0)\n return 0;\n return Math.exp(-(shape + 1) * Math.log(x) - scale / x -\n jStat.gammaln(shape) + shape * Math.log(scale));\n },\n\n cdf: function cdf(x, shape, scale) {\n if (x <= 0)\n return 0;\n return 1 - jStat.lowRegGamma(shape, scale / x);\n },\n\n inv: function(p, shape, scale) {\n return scale / jStat.gammapinv(1 - p, shape);\n },\n\n mean : function(shape, scale) {\n return (shape > 1) ? scale / (shape - 1) : undefined;\n },\n\n mode: function mode(shape, scale) {\n return scale / (shape + 1);\n },\n\n sample: function sample(shape, scale) {\n return scale / jStat.randg(shape);\n },\n\n variance: function variance(shape, scale) {\n if (shape <= 2)\n return undefined;\n return scale * scale / ((shape - 1) * (shape - 1) * (shape - 2));\n }\n});\n\n\n// extend kumaraswamy function with static methods\njStat.extend(jStat.kumaraswamy, {\n pdf: function pdf(x, alpha, beta) {\n if (x === 0 && alpha === 1)\n return beta;\n else if (x === 1 && beta === 1)\n return alpha;\n return Math.exp(Math.log(alpha) + Math.log(beta) + (alpha - 1) *\n Math.log(x) + (beta - 1) *\n Math.log(1 - Math.pow(x, alpha)));\n },\n\n cdf: function cdf(x, alpha, beta) {\n if (x < 0)\n return 0;\n else if (x > 1)\n return 1;\n return (1 - Math.pow(1 - Math.pow(x, alpha), beta));\n },\n\n inv: function inv(p, alpha, beta) {\n return Math.pow(1 - Math.pow(1 - p, 1 / beta), 1 / alpha);\n },\n\n mean : function(alpha, beta) {\n return (beta * jStat.gammafn(1 + 1 / alpha) *\n jStat.gammafn(beta)) / (jStat.gammafn(1 + 1 / alpha + beta));\n },\n\n median: function median(alpha, beta) {\n return Math.pow(1 - Math.pow(2, -1 / beta), 1 / alpha);\n },\n\n mode: function mode(alpha, beta) {\n if (!(alpha >= 1 && beta >= 1 && (alpha !== 1 && beta !== 1)))\n return undefined;\n return Math.pow((alpha - 1) / (alpha * beta - 1), 1 / alpha);\n },\n\n variance: function variance(/*alpha, beta*/) {\n throw new Error('variance not yet implemented');\n // TODO: complete this\n }\n});\n\n\n\n// extend lognormal function with static methods\njStat.extend(jStat.lognormal, {\n pdf: function pdf(x, mu, sigma) {\n if (x <= 0)\n return 0;\n return Math.exp(-Math.log(x) - 0.5 * Math.log(2 * Math.PI) -\n Math.log(sigma) - Math.pow(Math.log(x) - mu, 2) /\n (2 * sigma * sigma));\n },\n\n cdf: function cdf(x, mu, sigma) {\n if (x < 0)\n return 0;\n return 0.5 +\n (0.5 * jStat.erf((Math.log(x) - mu) / Math.sqrt(2 * sigma * sigma)));\n },\n\n inv: function(p, mu, sigma) {\n return Math.exp(-1.41421356237309505 * sigma * jStat.erfcinv(2 * p) + mu);\n },\n\n mean: function mean(mu, sigma) {\n return Math.exp(mu + sigma * sigma / 2);\n },\n\n median: function median(mu/*, sigma*/) {\n return Math.exp(mu);\n },\n\n mode: function mode(mu, sigma) {\n return Math.exp(mu - sigma * sigma);\n },\n\n sample: function sample(mu, sigma) {\n return Math.exp(jStat.randn() * sigma + mu);\n },\n\n variance: function variance(mu, sigma) {\n return (Math.exp(sigma * sigma) - 1) * Math.exp(2 * mu + sigma * sigma);\n }\n});\n\n\n\n// extend noncentralt function with static methods\njStat.extend(jStat.noncentralt, {\n pdf: function pdf(x, dof, ncp) {\n var tol = 1e-14;\n if (Math.abs(ncp) < tol) // ncp approx 0; use student-t\n return jStat.studentt.pdf(x, dof)\n\n if (Math.abs(x) < tol) { // different formula for x == 0\n return Math.exp(jStat.gammaln((dof + 1) / 2) - ncp * ncp / 2 -\n 0.5 * Math.log(Math.PI * dof) - jStat.gammaln(dof / 2));\n }\n\n // formula for x != 0\n return dof / x *\n (jStat.noncentralt.cdf(x * Math.sqrt(1 + 2 / dof), dof+2, ncp) -\n jStat.noncentralt.cdf(x, dof, ncp));\n },\n\n cdf: function cdf(x, dof, ncp) {\n var tol = 1e-14;\n var min_iterations = 200;\n\n if (Math.abs(ncp) < tol) // ncp approx 0; use student-t\n return jStat.studentt.cdf(x, dof);\n\n // turn negative x into positive and flip result afterwards\n var flip = false;\n if (x < 0) {\n flip = true;\n ncp = -ncp;\n }\n\n var prob = jStat.normal.cdf(-ncp, 0, 1);\n var value = tol + 1;\n // use value at last two steps to determine convergence\n var lastvalue = value;\n var y = x * x / (x * x + dof);\n var j = 0;\n var p = Math.exp(-ncp * ncp / 2);\n var q = Math.exp(-ncp * ncp / 2 - 0.5 * Math.log(2) -\n jStat.gammaln(3 / 2)) * ncp;\n while (j < min_iterations || lastvalue > tol || value > tol) {\n lastvalue = value;\n if (j > 0) {\n p *= (ncp * ncp) / (2 * j);\n q *= (ncp * ncp) / (2 * (j + 1 / 2));\n }\n value = p * jStat.beta.cdf(y, j + 0.5, dof / 2) +\n q * jStat.beta.cdf(y, j+1, dof/2);\n prob += 0.5 * value;\n j++;\n }\n\n return flip ? (1 - prob) : prob;\n }\n});\n\n\n// extend normal function with static methods\njStat.extend(jStat.normal, {\n pdf: function pdf(x, mean, std) {\n return Math.exp(-0.5 * Math.log(2 * Math.PI) -\n Math.log(std) - Math.pow(x - mean, 2) / (2 * std * std));\n },\n\n cdf: function cdf(x, mean, std) {\n return 0.5 * (1 + jStat.erf((x - mean) / Math.sqrt(2 * std * std)));\n },\n\n inv: function(p, mean, std) {\n return -1.41421356237309505 * std * jStat.erfcinv(2 * p) + mean;\n },\n\n mean : function(mean/*, std*/) {\n return mean;\n },\n\n median: function median(mean/*, std*/) {\n return mean;\n },\n\n mode: function (mean/*, std*/) {\n return mean;\n },\n\n sample: function sample(mean, std) {\n return jStat.randn() * std + mean;\n },\n\n variance : function(mean, std) {\n return std * std;\n }\n});\n\n\n\n// extend pareto function with static methods\njStat.extend(jStat.pareto, {\n pdf: function pdf(x, scale, shape) {\n if (x < scale)\n return 0;\n return (shape * Math.pow(scale, shape)) / Math.pow(x, shape + 1);\n },\n\n cdf: function cdf(x, scale, shape) {\n if (x < scale)\n return 0;\n return 1 - Math.pow(scale / x, shape);\n },\n\n inv: function inv(p, scale, shape) {\n return scale / Math.pow(1 - p, 1 / shape);\n },\n\n mean: function mean(scale, shape) {\n if (shape <= 1)\n return undefined;\n return (shape * Math.pow(scale, shape)) / (shape - 1);\n },\n\n median: function median(scale, shape) {\n return scale * (shape * Math.SQRT2);\n },\n\n mode: function mode(scale/*, shape*/) {\n return scale;\n },\n\n variance : function(scale, shape) {\n if (shape <= 2)\n return undefined;\n return (scale*scale * shape) / (Math.pow(shape - 1, 2) * (shape - 2));\n }\n});\n\n\n\n// extend studentt function with static methods\njStat.extend(jStat.studentt, {\n pdf: function pdf(x, dof) {\n dof = dof > 1e100 ? 1e100 : dof;\n return (1/(Math.sqrt(dof) * jStat.betafn(0.5, dof/2))) *\n Math.pow(1 + ((x * x) / dof), -((dof + 1) / 2));\n },\n\n cdf: function cdf(x, dof) {\n var dof2 = dof / 2;\n return jStat.ibeta((x + Math.sqrt(x * x + dof)) /\n (2 * Math.sqrt(x * x + dof)), dof2, dof2);\n },\n\n inv: function(p, dof) {\n var x = jStat.ibetainv(2 * Math.min(p, 1 - p), 0.5 * dof, 0.5);\n x = Math.sqrt(dof * (1 - x) / x);\n return (p > 0.5) ? x : -x;\n },\n\n mean: function mean(dof) {\n return (dof > 1) ? 0 : undefined;\n },\n\n median: function median(/*dof*/) {\n return 0;\n },\n\n mode: function mode(/*dof*/) {\n return 0;\n },\n\n sample: function sample(dof) {\n return jStat.randn() * Math.sqrt(dof / (2 * jStat.randg(dof / 2)));\n },\n\n variance: function variance(dof) {\n return (dof > 2) ? dof / (dof - 2) : (dof > 1) ? Infinity : undefined;\n }\n});\n\n\n\n// extend weibull function with static methods\njStat.extend(jStat.weibull, {\n pdf: function pdf(x, scale, shape) {\n if (x < 0 || scale < 0 || shape < 0)\n return 0;\n return (shape / scale) * Math.pow((x / scale), (shape - 1)) *\n Math.exp(-(Math.pow((x / scale), shape)));\n },\n\n cdf: function cdf(x, scale, shape) {\n return x < 0 ? 0 : 1 - Math.exp(-Math.pow((x / scale), shape));\n },\n\n inv: function(p, scale, shape) {\n return scale * Math.pow(-Math.log(1 - p), 1 / shape);\n },\n\n mean : function(scale, shape) {\n return scale * jStat.gammafn(1 + 1 / shape);\n },\n\n median: function median(scale, shape) {\n return scale * Math.pow(Math.log(2), 1 / shape);\n },\n\n mode: function mode(scale, shape) {\n if (shape <= 1)\n return 0;\n return scale * Math.pow((shape - 1) / shape, 1 / shape);\n },\n\n sample: function sample(scale, shape) {\n return scale * Math.pow(-Math.log(jStat._random_fn()), 1 / shape);\n },\n\n variance: function variance(scale, shape) {\n return scale * scale * jStat.gammafn(1 + 2 / shape) -\n Math.pow(jStat.weibull.mean(scale, shape), 2);\n }\n});\n\n\n\n// extend uniform function with static methods\njStat.extend(jStat.uniform, {\n pdf: function pdf(x, a, b) {\n return (x < a || x > b) ? 0 : 1 / (b - a);\n },\n\n cdf: function cdf(x, a, b) {\n if (x < a)\n return 0;\n else if (x < b)\n return (x - a) / (b - a);\n return 1;\n },\n\n inv: function(p, a, b) {\n return a + (p * (b - a));\n },\n\n mean: function mean(a, b) {\n return 0.5 * (a + b);\n },\n\n median: function median(a, b) {\n return jStat.mean(a, b);\n },\n\n mode: function mode(/*a, b*/) {\n throw new Error('mode is not yet implemented');\n },\n\n sample: function sample(a, b) {\n return (a / 2 + b / 2) + (b / 2 - a / 2) * (2 * jStat._random_fn() - 1);\n },\n\n variance: function variance(a, b) {\n return Math.pow(b - a, 2) / 12;\n }\n});\n\n\n// Got this from http://www.math.ucla.edu/~tom/distributions/binomial.html\nfunction betinc(x, a, b, eps) {\n var a0 = 0;\n var b0 = 1;\n var a1 = 1;\n var b1 = 1;\n var m9 = 0;\n var a2 = 0;\n var c9;\n\n while (Math.abs((a1 - a2) / a1) > eps) {\n a2 = a1;\n c9 = -(a + m9) * (a + b + m9) * x / (a + 2 * m9) / (a + 2 * m9 + 1);\n a0 = a1 + c9 * a0;\n b0 = b1 + c9 * b0;\n m9 = m9 + 1;\n c9 = m9 * (b - m9) * x / (a + 2 * m9 - 1) / (a + 2 * m9);\n a1 = a0 + c9 * a1;\n b1 = b0 + c9 * b1;\n a0 = a0 / b1;\n b0 = b0 / b1;\n a1 = a1 / b1;\n b1 = 1;\n }\n\n return a1 / a;\n}\n\n\n// extend uniform function with static methods\njStat.extend(jStat.binomial, {\n pdf: function pdf(k, n, p) {\n return (p === 0 || p === 1) ?\n ((n * p) === k ? 1 : 0) :\n jStat.combination(n, k) * Math.pow(p, k) * Math.pow(1 - p, n - k);\n },\n\n cdf: function cdf(x, n, p) {\n var betacdf;\n var eps = 1e-10;\n\n if (x < 0)\n return 0;\n if (x >= n)\n return 1;\n if (p < 0 || p > 1 || n <= 0)\n return NaN;\n\n x = Math.floor(x);\n var z = p;\n var a = x + 1;\n var b = n - x;\n var s = a + b;\n var bt = Math.exp(jStat.gammaln(s) - jStat.gammaln(b) -\n jStat.gammaln(a) + a * Math.log(z) + b * Math.log(1 - z));\n\n if (z < (a + 1) / (s + 2))\n betacdf = bt * betinc(z, a, b, eps);\n else\n betacdf = 1 - bt * betinc(1 - z, b, a, eps);\n\n return Math.round((1 - betacdf) * (1 / eps)) / (1 / eps);\n }\n});\n\n\n\n// extend uniform function with static methods\njStat.extend(jStat.negbin, {\n pdf: function pdf(k, r, p) {\n if (k !== k >>> 0)\n return false;\n if (k < 0)\n return 0;\n return jStat.combination(k + r - 1, r - 1) *\n Math.pow(1 - p, k) * Math.pow(p, r);\n },\n\n cdf: function cdf(x, r, p) {\n var sum = 0,\n k = 0;\n if (x < 0) return 0;\n for (; k <= x; k++) {\n sum += jStat.negbin.pdf(k, r, p);\n }\n return sum;\n }\n});\n\n\n\n// extend uniform function with static methods\njStat.extend(jStat.hypgeom, {\n pdf: function pdf(k, N, m, n) {\n // Hypergeometric PDF.\n\n // A simplification of the CDF algorithm below.\n\n // k = number of successes drawn\n // N = population size\n // m = number of successes in population\n // n = number of items drawn from population\n\n if(k !== k | 0) {\n return false;\n } else if(k < 0 || k < m - (N - n)) {\n // It's impossible to have this few successes drawn.\n return 0;\n } else if(k > n || k > m) {\n // It's impossible to have this many successes drawn.\n return 0;\n } else if (m * 2 > N) {\n // More than half the population is successes.\n\n if(n * 2 > N) {\n // More than half the population is sampled.\n\n return jStat.hypgeom.pdf(N - m - n + k, N, N - m, N - n)\n } else {\n // Half or less of the population is sampled.\n\n return jStat.hypgeom.pdf(n - k, N, N - m, n);\n }\n\n } else if(n * 2 > N) {\n // Half or less is successes.\n\n return jStat.hypgeom.pdf(m - k, N, m, N - n);\n\n } else if(m < n) {\n // We want to have the number of things sampled to be less than the\n // successes available. So swap the definitions of successful and sampled.\n return jStat.hypgeom.pdf(k, N, n, m);\n } else {\n // If we get here, half or less of the population was sampled, half or\n // less of it was successes, and we had fewer sampled things than\n // successes. Now we can do this complicated iterative algorithm in an\n // efficient way.\n\n // The basic premise of the algorithm is that we partially normalize our\n // intermediate product to keep it in a numerically good region, and then\n // finish the normalization at the end.\n\n // This variable holds the scaled probability of the current number of\n // successes.\n var scaledPDF = 1;\n\n // This keeps track of how much we have normalized.\n var samplesDone = 0;\n\n for(var i = 0; i < k; i++) {\n // For every possible number of successes up to that observed...\n\n while(scaledPDF > 1 && samplesDone < n) {\n // Intermediate result is growing too big. Apply some of the\n // normalization to shrink everything.\n\n scaledPDF *= 1 - (m / (N - samplesDone));\n\n // Say we've normalized by this sample already.\n samplesDone++;\n }\n\n // Work out the partially-normalized hypergeometric PDF for the next\n // number of successes\n scaledPDF *= (n - i) * (m - i) / ((i + 1) * (N - m - n + i + 1));\n }\n\n for(; samplesDone < n; samplesDone++) {\n // Apply all the rest of the normalization\n scaledPDF *= 1 - (m / (N - samplesDone));\n }\n\n // Bound answer sanely before returning.\n return Math.min(1, Math.max(0, scaledPDF));\n }\n },\n\n cdf: function cdf(x, N, m, n) {\n // Hypergeometric CDF.\n\n // This algorithm is due to Prof. Thomas S. Ferguson, ,\n // and comes from his hypergeometric test calculator at\n // .\n\n // x = number of successes drawn\n // N = population size\n // m = number of successes in population\n // n = number of items drawn from population\n\n if(x < 0 || x < m - (N - n)) {\n // It's impossible to have this few successes drawn or fewer.\n return 0;\n } else if(x >= n || x >= m) {\n // We will always have this many successes or fewer.\n return 1;\n } else if (m * 2 > N) {\n // More than half the population is successes.\n\n if(n * 2 > N) {\n // More than half the population is sampled.\n\n return jStat.hypgeom.cdf(N - m - n + x, N, N - m, N - n)\n } else {\n // Half or less of the population is sampled.\n\n return 1 - jStat.hypgeom.cdf(n - x - 1, N, N - m, n);\n }\n\n } else if(n * 2 > N) {\n // Half or less is successes.\n\n return 1 - jStat.hypgeom.cdf(m - x - 1, N, m, N - n);\n\n } else if(m < n) {\n // We want to have the number of things sampled to be less than the\n // successes available. So swap the definitions of successful and sampled.\n return jStat.hypgeom.cdf(x, N, n, m);\n } else {\n // If we get here, half or less of the population was sampled, half or\n // less of it was successes, and we had fewer sampled things than\n // successes. Now we can do this complicated iterative algorithm in an\n // efficient way.\n\n // The basic premise of the algorithm is that we partially normalize our\n // intermediate sum to keep it in a numerically good region, and then\n // finish the normalization at the end.\n\n // Holds the intermediate, scaled total CDF.\n var scaledCDF = 1;\n\n // This variable holds the scaled probability of the current number of\n // successes.\n var scaledPDF = 1;\n\n // This keeps track of how much we have normalized.\n var samplesDone = 0;\n\n for(var i = 0; i < x; i++) {\n // For every possible number of successes up to that observed...\n\n while(scaledCDF > 1 && samplesDone < n) {\n // Intermediate result is growing too big. Apply some of the\n // normalization to shrink everything.\n\n var factor = 1 - (m / (N - samplesDone));\n\n scaledPDF *= factor;\n scaledCDF *= factor;\n\n // Say we've normalized by this sample already.\n samplesDone++;\n }\n\n // Work out the partially-normalized hypergeometric PDF for the next\n // number of successes\n scaledPDF *= (n - i) * (m - i) / ((i + 1) * (N - m - n + i + 1));\n\n // Add to the CDF answer.\n scaledCDF += scaledPDF;\n }\n\n for(; samplesDone < n; samplesDone++) {\n // Apply all the rest of the normalization\n scaledCDF *= 1 - (m / (N - samplesDone));\n }\n\n // Bound answer sanely before returning.\n return Math.min(1, Math.max(0, scaledCDF));\n }\n }\n});\n\n\n\n// extend uniform function with static methods\njStat.extend(jStat.poisson, {\n pdf: function pdf(k, l) {\n if (l < 0 || (k % 1) !== 0 || k < 0) {\n return 0;\n }\n\n return Math.pow(l, k) * Math.exp(-l) / jStat.factorial(k);\n },\n\n cdf: function cdf(x, l) {\n var sumarr = [],\n k = 0;\n if (x < 0) return 0;\n for (; k <= x; k++) {\n sumarr.push(jStat.poisson.pdf(k, l));\n }\n return jStat.sum(sumarr);\n },\n\n mean : function(l) {\n return l;\n },\n\n variance : function(l) {\n return l;\n },\n\n sampleSmall: function sampleSmall(l) {\n var p = 1, k = 0, L = Math.exp(-l);\n do {\n k++;\n p *= jStat._random_fn();\n } while (p > L);\n return k - 1;\n },\n\n sampleLarge: function sampleLarge(l) {\n var lam = l;\n var k;\n var U, V, slam, loglam, a, b, invalpha, vr, us;\n\n slam = Math.sqrt(lam);\n loglam = Math.log(lam);\n b = 0.931 + 2.53 * slam;\n a = -0.059 + 0.02483 * b;\n invalpha = 1.1239 + 1.1328 / (b - 3.4);\n vr = 0.9277 - 3.6224 / (b - 2);\n\n while (1) {\n U = Math.random() - 0.5;\n V = Math.random();\n us = 0.5 - Math.abs(U);\n k = Math.floor((2 * a / us + b) * U + lam + 0.43);\n if ((us >= 0.07) && (V <= vr)) {\n return k;\n }\n if ((k < 0) || ((us < 0.013) && (V > us))) {\n continue;\n }\n /* log(V) == log(0.0) ok here */\n /* if U==0.0 so that us==0.0, log is ok since always returns */\n if ((Math.log(V) + Math.log(invalpha) - Math.log(a / (us * us) + b)) <= (-lam + k * loglam - jStat.loggam(k + 1))) {\n return k;\n }\n }\n },\n\n sample: function sample(l) {\n if (l < 10)\n return this.sampleSmall(l);\n else\n return this.sampleLarge(l);\n }\n});\n\n// extend triangular function with static methods\njStat.extend(jStat.triangular, {\n pdf: function pdf(x, a, b, c) {\n if (b <= a || c < a || c > b) {\n return NaN;\n } else {\n if (x < a || x > b) {\n return 0;\n } else if (x < c) {\n return (2 * (x - a)) / ((b - a) * (c - a));\n } else if (x === c) {\n return (2 / (b - a));\n } else { // x > c\n return (2 * (b - x)) / ((b - a) * (b - c));\n }\n }\n },\n\n cdf: function cdf(x, a, b, c) {\n if (b <= a || c < a || c > b)\n return NaN;\n if (x <= a)\n return 0;\n else if (x >= b)\n return 1;\n if (x <= c)\n return Math.pow(x - a, 2) / ((b - a) * (c - a));\n else // x > c\n return 1 - Math.pow(b - x, 2) / ((b - a) * (b - c));\n },\n\n inv: function inv(p, a, b, c) {\n if (b <= a || c < a || c > b) {\n return NaN;\n } else {\n if (p <= ((c - a) / (b - a))) {\n return a + (b - a) * Math.sqrt(p * ((c - a) / (b - a)));\n } else { // p > ((c - a) / (b - a))\n return a + (b - a) * (1 - Math.sqrt((1 - p) * (1 - ((c - a) / (b - a)))));\n }\n }\n },\n\n mean: function mean(a, b, c) {\n return (a + b + c) / 3;\n },\n\n median: function median(a, b, c) {\n if (c <= (a + b) / 2) {\n return b - Math.sqrt((b - a) * (b - c)) / Math.sqrt(2);\n } else if (c > (a + b) / 2) {\n return a + Math.sqrt((b - a) * (c - a)) / Math.sqrt(2);\n }\n },\n\n mode: function mode(a, b, c) {\n return c;\n },\n\n sample: function sample(a, b, c) {\n var u = jStat._random_fn();\n if (u < ((c - a) / (b - a)))\n return a + Math.sqrt(u * (b - a) * (c - a))\n return b - Math.sqrt((1 - u) * (b - a) * (b - c));\n },\n\n variance: function variance(a, b, c) {\n return (a * a + b * b + c * c - a * b - a * c - b * c) / 18;\n }\n});\n\n\n// extend arcsine function with static methods\njStat.extend(jStat.arcsine, {\n pdf: function pdf(x, a, b) {\n if (b <= a) return NaN;\n\n return (x <= a || x >= b) ? 0 :\n (2 / Math.PI) *\n Math.pow(Math.pow(b - a, 2) -\n Math.pow(2 * x - a - b, 2), -0.5);\n },\n\n cdf: function cdf(x, a, b) {\n if (x < a)\n return 0;\n else if (x < b)\n return (2 / Math.PI) * Math.asin(Math.sqrt((x - a)/(b - a)));\n return 1;\n },\n\n inv: function(p, a, b) {\n return a + (0.5 - 0.5 * Math.cos(Math.PI * p)) * (b - a);\n },\n\n mean: function mean(a, b) {\n if (b <= a) return NaN;\n return (a + b) / 2;\n },\n\n median: function median(a, b) {\n if (b <= a) return NaN;\n return (a + b) / 2;\n },\n\n mode: function mode(/*a, b*/) {\n throw new Error('mode is not yet implemented');\n },\n\n sample: function sample(a, b) {\n return ((a + b) / 2) + ((b - a) / 2) *\n Math.sin(2 * Math.PI * jStat.uniform.sample(0, 1));\n },\n\n variance: function variance(a, b) {\n if (b <= a) return NaN;\n return Math.pow(b - a, 2) / 8;\n }\n});\n\n\nfunction laplaceSign(x) { return x / Math.abs(x); }\n\njStat.extend(jStat.laplace, {\n pdf: function pdf(x, mu, b) {\n return (b <= 0) ? 0 : (Math.exp(-Math.abs(x - mu) / b)) / (2 * b);\n },\n\n cdf: function cdf(x, mu, b) {\n if (b <= 0) { return 0; }\n\n if(x < mu) {\n return 0.5 * Math.exp((x - mu) / b);\n } else {\n return 1 - 0.5 * Math.exp(- (x - mu) / b);\n }\n },\n\n mean: function(mu/*, b*/) {\n return mu;\n },\n\n median: function(mu/*, b*/) {\n return mu;\n },\n\n mode: function(mu/*, b*/) {\n return mu;\n },\n\n variance: function(mu, b) {\n return 2 * b * b;\n },\n\n sample: function sample(mu, b) {\n var u = jStat._random_fn() - 0.5;\n\n return mu - (b * laplaceSign(u) * Math.log(1 - (2 * Math.abs(u))));\n }\n});\n\nfunction tukeyWprob(w, rr, cc) {\n var nleg = 12;\n var ihalf = 6;\n\n var C1 = -30;\n var C2 = -50;\n var C3 = 60;\n var bb = 8;\n var wlar = 3;\n var wincr1 = 2;\n var wincr2 = 3;\n var xleg = [\n 0.981560634246719250690549090149,\n 0.904117256370474856678465866119,\n 0.769902674194304687036893833213,\n 0.587317954286617447296702418941,\n 0.367831498998180193752691536644,\n 0.125233408511468915472441369464\n ];\n var aleg = [\n 0.047175336386511827194615961485,\n 0.106939325995318430960254718194,\n 0.160078328543346226334652529543,\n 0.203167426723065921749064455810,\n 0.233492536538354808760849898925,\n 0.249147045813402785000562436043\n ];\n\n var qsqz = w * 0.5;\n\n // if w >= 16 then the integral lower bound (occurs for c=20)\n // is 0.99999999999995 so return a value of 1.\n\n if (qsqz >= bb)\n return 1.0;\n\n // find (f(w/2) - 1) ^ cc\n // (first term in integral of hartley's form).\n\n var pr_w = 2 * jStat.normal.cdf(qsqz, 0, 1, 1, 0) - 1; // erf(qsqz / M_SQRT2)\n // if pr_w ^ cc < 2e-22 then set pr_w = 0\n if (pr_w >= Math.exp(C2 / cc))\n pr_w = Math.pow(pr_w, cc);\n else\n pr_w = 0.0;\n\n // if w is large then the second component of the\n // integral is small, so fewer intervals are needed.\n\n var wincr;\n if (w > wlar)\n wincr = wincr1;\n else\n wincr = wincr2;\n\n // find the integral of second term of hartley's form\n // for the integral of the range for equal-length\n // intervals using legendre quadrature. limits of\n // integration are from (w/2, 8). two or three\n // equal-length intervals are used.\n\n // blb and bub are lower and upper limits of integration.\n\n var blb = qsqz;\n var binc = (bb - qsqz) / wincr;\n var bub = blb + binc;\n var einsum = 0.0;\n\n // integrate over each interval\n\n var cc1 = cc - 1.0;\n for (var wi = 1; wi <= wincr; wi++) {\n var elsum = 0.0;\n var a = 0.5 * (bub + blb);\n\n // legendre quadrature with order = nleg\n\n var b = 0.5 * (bub - blb);\n\n for (var jj = 1; jj <= nleg; jj++) {\n var j, xx;\n if (ihalf < jj) {\n j = (nleg - jj) + 1;\n xx = xleg[j-1];\n } else {\n j = jj;\n xx = -xleg[j-1];\n }\n var c = b * xx;\n var ac = a + c;\n\n // if exp(-qexpo/2) < 9e-14,\n // then doesn't contribute to integral\n\n var qexpo = ac * ac;\n if (qexpo > C3)\n break;\n\n var pplus = 2 * jStat.normal.cdf(ac, 0, 1, 1, 0);\n var pminus= 2 * jStat.normal.cdf(ac, w, 1, 1, 0);\n\n // if rinsum ^ (cc-1) < 9e-14,\n // then doesn't contribute to integral\n\n var rinsum = (pplus * 0.5) - (pminus * 0.5);\n if (rinsum >= Math.exp(C1 / cc1)) {\n rinsum = (aleg[j-1] * Math.exp(-(0.5 * qexpo))) * Math.pow(rinsum, cc1);\n elsum += rinsum;\n }\n }\n elsum *= (((2.0 * b) * cc) / Math.sqrt(2 * Math.PI));\n einsum += elsum;\n blb = bub;\n bub += binc;\n }\n\n // if pr_w ^ rr < 9e-14, then return 0\n pr_w += einsum;\n if (pr_w <= Math.exp(C1 / rr))\n return 0;\n\n pr_w = Math.pow(pr_w, rr);\n if (pr_w >= 1) // 1 was iMax was eps\n return 1;\n return pr_w;\n}\n\nfunction tukeyQinv(p, c, v) {\n var p0 = 0.322232421088;\n var q0 = 0.993484626060e-01;\n var p1 = -1.0;\n var q1 = 0.588581570495;\n var p2 = -0.342242088547;\n var q2 = 0.531103462366;\n var p3 = -0.204231210125;\n var q3 = 0.103537752850;\n var p4 = -0.453642210148e-04;\n var q4 = 0.38560700634e-02;\n var c1 = 0.8832;\n var c2 = 0.2368;\n var c3 = 1.214;\n var c4 = 1.208;\n var c5 = 1.4142;\n var vmax = 120.0;\n\n var ps = 0.5 - 0.5 * p;\n var yi = Math.sqrt(Math.log(1.0 / (ps * ps)));\n var t = yi + (((( yi * p4 + p3) * yi + p2) * yi + p1) * yi + p0)\n / (((( yi * q4 + q3) * yi + q2) * yi + q1) * yi + q0);\n if (v < vmax) t += (t * t * t + t) / v / 4.0;\n var q = c1 - c2 * t;\n if (v < vmax) q += -c3 / v + c4 * t / v;\n return t * (q * Math.log(c - 1.0) + c5);\n}\n\njStat.extend(jStat.tukey, {\n cdf: function cdf(q, nmeans, df) {\n // Identical implementation as the R ptukey() function as of commit 68947\n var rr = 1;\n var cc = nmeans;\n\n var nlegq = 16;\n var ihalfq = 8;\n\n var eps1 = -30.0;\n var eps2 = 1.0e-14;\n var dhaf = 100.0;\n var dquar = 800.0;\n var deigh = 5000.0;\n var dlarg = 25000.0;\n var ulen1 = 1.0;\n var ulen2 = 0.5;\n var ulen3 = 0.25;\n var ulen4 = 0.125;\n var xlegq = [\n 0.989400934991649932596154173450,\n 0.944575023073232576077988415535,\n 0.865631202387831743880467897712,\n 0.755404408355003033895101194847,\n 0.617876244402643748446671764049,\n 0.458016777657227386342419442984,\n 0.281603550779258913230460501460,\n 0.950125098376374401853193354250e-1\n ];\n var alegq = [\n 0.271524594117540948517805724560e-1,\n 0.622535239386478928628438369944e-1,\n 0.951585116824927848099251076022e-1,\n 0.124628971255533872052476282192,\n 0.149595988816576732081501730547,\n 0.169156519395002538189312079030,\n 0.182603415044923588866763667969,\n 0.189450610455068496285396723208\n ];\n\n if (q <= 0)\n return 0;\n\n // df must be > 1\n // there must be at least two values\n\n if (df < 2 || rr < 1 || cc < 2) return NaN;\n\n if (!Number.isFinite(q))\n return 1;\n\n if (df > dlarg)\n return tukeyWprob(q, rr, cc);\n\n // calculate leading constant\n\n var f2 = df * 0.5;\n var f2lf = ((f2 * Math.log(df)) - (df * Math.log(2))) - jStat.gammaln(f2);\n var f21 = f2 - 1.0;\n\n // integral is divided into unit, half-unit, quarter-unit, or\n // eighth-unit length intervals depending on the value of the\n // degrees of freedom.\n\n var ff4 = df * 0.25;\n var ulen;\n if (df <= dhaf) ulen = ulen1;\n else if (df <= dquar) ulen = ulen2;\n else if (df <= deigh) ulen = ulen3;\n else ulen = ulen4;\n\n f2lf += Math.log(ulen);\n\n // integrate over each subinterval\n\n var ans = 0.0;\n\n for (var i = 1; i <= 50; i++) {\n var otsum = 0.0;\n\n // legendre quadrature with order = nlegq\n // nodes (stored in xlegq) are symmetric around zero.\n\n var twa1 = (2 * i - 1) * ulen;\n\n for (var jj = 1; jj <= nlegq; jj++) {\n var j, t1;\n if (ihalfq < jj) {\n j = jj - ihalfq - 1;\n t1 = (f2lf + (f21 * Math.log(twa1 + (xlegq[j] * ulen))))\n - (((xlegq[j] * ulen) + twa1) * ff4);\n } else {\n j = jj - 1;\n t1 = (f2lf + (f21 * Math.log(twa1 - (xlegq[j] * ulen))))\n + (((xlegq[j] * ulen) - twa1) * ff4);\n }\n\n // if exp(t1) < 9e-14, then doesn't contribute to integral\n var qsqz;\n if (t1 >= eps1) {\n if (ihalfq < jj) {\n qsqz = q * Math.sqrt(((xlegq[j] * ulen) + twa1) * 0.5);\n } else {\n qsqz = q * Math.sqrt(((-(xlegq[j] * ulen)) + twa1) * 0.5);\n }\n\n // call wprob to find integral of range portion\n\n var wprb = tukeyWprob(qsqz, rr, cc);\n var rotsum = (wprb * alegq[j]) * Math.exp(t1);\n otsum += rotsum;\n }\n // end legendre integral for interval i\n // L200:\n }\n\n // if integral for interval i < 1e-14, then stop.\n // However, in order to avoid small area under left tail,\n // at least 1 / ulen intervals are calculated.\n if (i * ulen >= 1.0 && otsum <= eps2)\n break;\n\n // end of interval i\n // L330:\n\n ans += otsum;\n }\n\n if (otsum > eps2) { // not converged\n throw new Error('tukey.cdf failed to converge');\n }\n if (ans > 1)\n ans = 1;\n return ans;\n },\n\n inv: function(p, nmeans, df) {\n // Identical implementation as the R qtukey() function as of commit 68947\n var rr = 1;\n var cc = nmeans;\n\n var eps = 0.0001;\n var maxiter = 50;\n\n // df must be > 1 ; there must be at least two values\n if (df < 2 || rr < 1 || cc < 2) return NaN;\n\n if (p < 0 || p > 1) return NaN;\n if (p === 0) return 0;\n if (p === 1) return Infinity;\n\n // Initial value\n\n var x0 = tukeyQinv(p, cc, df);\n\n // Find prob(value < x0)\n\n var valx0 = jStat.tukey.cdf(x0, nmeans, df) - p;\n\n // Find the second iterate and prob(value < x1).\n // If the first iterate has probability value\n // exceeding p then second iterate is 1 less than\n // first iterate; otherwise it is 1 greater.\n\n var x1;\n if (valx0 > 0.0)\n x1 = Math.max(0.0, x0 - 1.0);\n else\n x1 = x0 + 1.0;\n var valx1 = jStat.tukey.cdf(x1, nmeans, df) - p;\n\n // Find new iterate\n\n var ans;\n for(var iter = 1; iter < maxiter; iter++) {\n ans = x1 - ((valx1 * (x1 - x0)) / (valx1 - valx0));\n valx0 = valx1;\n\n // New iterate must be >= 0\n\n x0 = x1;\n if (ans < 0.0) {\n ans = 0.0;\n valx1 = -p;\n }\n // Find prob(value < new iterate)\n\n valx1 = jStat.tukey.cdf(ans, nmeans, df) - p;\n x1 = ans;\n\n // If the difference between two successive\n // iterates is less than eps, stop\n\n var xabs = Math.abs(x1 - x0);\n if (xabs < eps)\n return ans;\n }\n\n throw new Error('tukey.inv failed to converge');\n }\n});\n\n}(jStat, Math));\n/* Provides functions for the solution of linear system of equations, integration, extrapolation,\n * interpolation, eigenvalue problems, differential equations and PCA analysis. */\n\n(function(jStat, Math) {\n\nvar push = Array.prototype.push;\nvar isArray = jStat.utils.isArray;\n\nfunction isUsable(arg) {\n return isArray(arg) || arg instanceof jStat;\n}\n\njStat.extend({\n\n // add a vector/matrix to a vector/matrix or scalar\n add: function add(arr, arg) {\n // check if arg is a vector or scalar\n if (isUsable(arg)) {\n if (!isUsable(arg[0])) arg = [ arg ];\n return jStat.map(arr, function(value, row, col) {\n return value + arg[row][col];\n });\n }\n return jStat.map(arr, function(value) { return value + arg; });\n },\n\n // subtract a vector or scalar from the vector\n subtract: function subtract(arr, arg) {\n // check if arg is a vector or scalar\n if (isUsable(arg)) {\n if (!isUsable(arg[0])) arg = [ arg ];\n return jStat.map(arr, function(value, row, col) {\n return value - arg[row][col] || 0;\n });\n }\n return jStat.map(arr, function(value) { return value - arg; });\n },\n\n // matrix division\n divide: function divide(arr, arg) {\n if (isUsable(arg)) {\n if (!isUsable(arg[0])) arg = [ arg ];\n return jStat.multiply(arr, jStat.inv(arg));\n }\n return jStat.map(arr, function(value) { return value / arg; });\n },\n\n // matrix multiplication\n multiply: function multiply(arr, arg) {\n var row, col, nrescols, sum, nrow, ncol, res, rescols;\n // eg: arr = 2 arg = 3 -> 6 for res[0][0] statement closure\n if (arr.length === undefined && arg.length === undefined) {\n return arr * arg;\n }\n nrow = arr.length,\n ncol = arr[0].length,\n res = jStat.zeros(nrow, nrescols = (isUsable(arg)) ? arg[0].length : ncol),\n rescols = 0;\n if (isUsable(arg)) {\n for (; rescols < nrescols; rescols++) {\n for (row = 0; row < nrow; row++) {\n sum = 0;\n for (col = 0; col < ncol; col++)\n sum += arr[row][col] * arg[col][rescols];\n res[row][rescols] = sum;\n }\n }\n return (nrow === 1 && rescols === 1) ? res[0][0] : res;\n }\n return jStat.map(arr, function(value) { return value * arg; });\n },\n\n // outer([1,2,3],[4,5,6])\n // ===\n // [[1],[2],[3]] times [[4,5,6]]\n // ->\n // [[4,5,6],[8,10,12],[12,15,18]]\n outer:function outer(A, B) {\n return jStat.multiply(A.map(function(t){ return [t] }), [B]);\n },\n\n\n // Returns the dot product of two matricies\n dot: function dot(arr, arg) {\n if (!isUsable(arr[0])) arr = [ arr ];\n if (!isUsable(arg[0])) arg = [ arg ];\n // convert column to row vector\n var left = (arr[0].length === 1 && arr.length !== 1) ? jStat.transpose(arr) : arr,\n right = (arg[0].length === 1 && arg.length !== 1) ? jStat.transpose(arg) : arg,\n res = [],\n row = 0,\n nrow = left.length,\n ncol = left[0].length,\n sum, col;\n for (; row < nrow; row++) {\n res[row] = [];\n sum = 0;\n for (col = 0; col < ncol; col++)\n sum += left[row][col] * right[row][col];\n res[row] = sum;\n }\n return (res.length === 1) ? res[0] : res;\n },\n\n // raise every element by a scalar\n pow: function pow(arr, arg) {\n return jStat.map(arr, function(value) { return Math.pow(value, arg); });\n },\n\n // exponentiate every element\n exp: function exp(arr) {\n return jStat.map(arr, function(value) { return Math.exp(value); });\n },\n\n // generate the natural log of every element\n log: function exp(arr) {\n return jStat.map(arr, function(value) { return Math.log(value); });\n },\n\n // generate the absolute values of the vector\n abs: function abs(arr) {\n return jStat.map(arr, function(value) { return Math.abs(value); });\n },\n\n // computes the p-norm of the vector\n // In the case that a matrix is passed, uses the first row as the vector\n norm: function norm(arr, p) {\n var nnorm = 0,\n i = 0;\n // check the p-value of the norm, and set for most common case\n if (isNaN(p)) p = 2;\n // check if multi-dimensional array, and make vector correction\n if (isUsable(arr[0])) arr = arr[0];\n // vector norm\n for (; i < arr.length; i++) {\n nnorm += Math.pow(Math.abs(arr[i]), p);\n }\n return Math.pow(nnorm, 1 / p);\n },\n\n // computes the angle between two vectors in rads\n // In case a matrix is passed, this uses the first row as the vector\n angle: function angle(arr, arg) {\n return Math.acos(jStat.dot(arr, arg) / (jStat.norm(arr) * jStat.norm(arg)));\n },\n\n // augment one matrix by another\n // Note: this function returns a matrix, not a jStat object\n aug: function aug(a, b) {\n var newarr = [];\n var i;\n for (i = 0; i < a.length; i++) {\n newarr.push(a[i].slice());\n }\n for (i = 0; i < newarr.length; i++) {\n push.apply(newarr[i], b[i]);\n }\n return newarr;\n },\n\n // The inv() function calculates the inverse of a matrix\n // Create the inverse by augmenting the matrix by the identity matrix of the\n // appropriate size, and then use G-J elimination on the augmented matrix.\n inv: function inv(a) {\n var rows = a.length;\n var cols = a[0].length;\n var b = jStat.identity(rows, cols);\n var c = jStat.gauss_jordan(a, b);\n var result = [];\n var i = 0;\n var j;\n\n //We need to copy the inverse portion to a new matrix to rid G-J artifacts\n for (; i < rows; i++) {\n result[i] = [];\n for (j = cols; j < c[0].length; j++)\n result[i][j - cols] = c[i][j];\n }\n return result;\n },\n\n // calculate the determinant of a matrix\n det: function det(a) {\n if (a.length === 2) {\n return a[0][0] * a[1][1] - a[0][1] * a[1][0];\n }\n\n var determinant = 0;\n for (var i = 0; i < a.length; i++) {\n // build a sub matrix without column `i`\n var submatrix = [];\n for (var row = 1; row < a.length; row++) {\n submatrix[row - 1] = [];\n for (var col = 0; col < a.length; col++) {\n if (col < i) {\n submatrix[row - 1][col] = a[row][col];\n } else if (col > i) {\n submatrix[row - 1][col - 1] = a[row][col];\n }\n }\n }\n\n // alternate between + and - between determinants\n var sign = i % 2 ? -1 : 1;\n determinant += det(submatrix) * a[0][i] * sign;\n }\n\n return determinant\n },\n\n gauss_elimination: function gauss_elimination(a, b) {\n var i = 0,\n j = 0,\n n = a.length,\n m = a[0].length,\n factor = 1,\n sum = 0,\n x = [],\n maug, pivot, temp, k;\n a = jStat.aug(a, b);\n maug = a[0].length;\n for(i = 0; i < n; i++) {\n pivot = a[i][i];\n j = i;\n for (k = i + 1; k < m; k++) {\n if (pivot < Math.abs(a[k][i])) {\n pivot = a[k][i];\n j = k;\n }\n }\n if (j != i) {\n for(k = 0; k < maug; k++) {\n temp = a[i][k];\n a[i][k] = a[j][k];\n a[j][k] = temp;\n }\n }\n for (j = i + 1; j < n; j++) {\n factor = a[j][i] / a[i][i];\n for(k = i; k < maug; k++) {\n a[j][k] = a[j][k] - factor * a[i][k];\n }\n }\n }\n for (i = n - 1; i >= 0; i--) {\n sum = 0;\n for (j = i + 1; j<= n - 1; j++) {\n sum = sum + x[j] * a[i][j];\n }\n x[i] =(a[i][maug - 1] - sum) / a[i][i];\n }\n return x;\n },\n\n gauss_jordan: function gauss_jordan(a, b) {\n var m = jStat.aug(a, b);\n var h = m.length;\n var w = m[0].length;\n var c = 0;\n var x, y, y2;\n // find max pivot\n for (y = 0; y < h; y++) {\n var maxrow = y;\n for (y2 = y+1; y2 < h; y2++) {\n if (Math.abs(m[y2][y]) > Math.abs(m[maxrow][y]))\n maxrow = y2;\n }\n var tmp = m[y];\n m[y] = m[maxrow];\n m[maxrow] = tmp\n for (y2 = y+1; y2 < h; y2++) {\n c = m[y2][y] / m[y][y];\n for (x = y; x < w; x++) {\n m[y2][x] -= m[y][x] * c;\n }\n }\n }\n // backsubstitute\n for (y = h-1; y >= 0; y--) {\n c = m[y][y];\n for (y2 = 0; y2 < y; y2++) {\n for (x = w-1; x > y-1; x--) {\n m[y2][x] -= m[y][x] * m[y2][y] / c;\n }\n }\n m[y][y] /= c;\n for (x = h; x < w; x++) {\n m[y][x] /= c;\n }\n }\n return m;\n },\n\n // solve equation\n // Ax=b\n // A is upper triangular matrix\n // A=[[1,2,3],[0,4,5],[0,6,7]]\n // b=[1,2,3]\n // triaUpSolve(A,b) // -> [2.666,0.1666,1.666]\n // if you use matrix style\n // A=[[1,2,3],[0,4,5],[0,6,7]]\n // b=[[1],[2],[3]]\n // will return [[2.666],[0.1666],[1.666]]\n triaUpSolve: function triaUpSolve(A, b) {\n var size = A[0].length;\n var x = jStat.zeros(1, size)[0];\n var parts;\n var matrix_mode = false;\n\n if (b[0].length != undefined) {\n b = b.map(function(i){ return i[0] });\n matrix_mode = true;\n }\n\n jStat.arange(size - 1, -1, -1).forEach(function(i) {\n parts = jStat.arange(i + 1, size).map(function(j) {\n return x[j] * A[i][j];\n });\n x[i] = (b[i] - jStat.sum(parts)) / A[i][i];\n });\n\n if (matrix_mode)\n return x.map(function(i){ return [i] });\n return x;\n },\n\n triaLowSolve: function triaLowSolve(A, b) {\n // like to triaUpSolve but A is lower triangular matrix\n var size = A[0].length;\n var x = jStat.zeros(1, size)[0];\n var parts;\n\n var matrix_mode=false;\n if (b[0].length != undefined) {\n b = b.map(function(i){ return i[0] });\n matrix_mode = true;\n }\n\n jStat.arange(size).forEach(function(i) {\n parts = jStat.arange(i).map(function(j) {\n return A[i][j] * x[j];\n });\n x[i] = (b[i] - jStat.sum(parts)) / A[i][i];\n })\n\n if (matrix_mode)\n return x.map(function(i){ return [i] });\n return x;\n },\n\n\n // A -> [L,U]\n // A=LU\n // L is lower triangular matrix\n // U is upper triangular matrix\n lu: function lu(A) {\n var size = A.length;\n //var L=jStat.diagonal(jStat.ones(1,size)[0]);\n var L = jStat.identity(size);\n var R = jStat.zeros(A.length, A[0].length);\n var parts;\n jStat.arange(size).forEach(function(t) {\n R[0][t] = A[0][t];\n });\n jStat.arange(1, size).forEach(function(l) {\n jStat.arange(l).forEach(function(i) {\n parts = jStat.arange(i).map(function(jj) {\n return L[l][jj] * R[jj][i];\n });\n L[l][i] = (A[l][i] - jStat.sum(parts)) / R[i][i];\n });\n jStat.arange(l, size).forEach(function(j) {\n parts = jStat.arange(l).map(function(jj) {\n return L[l][jj] * R[jj][j];\n });\n R[l][j] = A[parts.length][j] - jStat.sum(parts);\n });\n });\n return [L, R];\n },\n\n // A -> T\n // A=TT'\n // T is lower triangular matrix\n cholesky: function cholesky(A) {\n var size = A.length;\n var T = jStat.zeros(A.length, A[0].length);\n var parts;\n jStat.arange(size).forEach(function(i) {\n parts = jStat.arange(i).map(function(t) {\n return Math.pow(T[i][t],2);\n });\n T[i][i] = Math.sqrt(A[i][i] - jStat.sum(parts));\n jStat.arange(i + 1, size).forEach(function(j) {\n parts = jStat.arange(i).map(function(t) {\n return T[i][t] * T[j][t];\n });\n T[j][i] = (A[i][j] - jStat.sum(parts)) / T[i][i];\n });\n });\n return T;\n },\n\n\n gauss_jacobi: function gauss_jacobi(a, b, x, r) {\n var i = 0;\n var j = 0;\n var n = a.length;\n var l = [];\n var u = [];\n var d = [];\n var xv, c, h, xk;\n for (; i < n; i++) {\n l[i] = [];\n u[i] = [];\n d[i] = [];\n for (j = 0; j < n; j++) {\n if (i > j) {\n l[i][j] = a[i][j];\n u[i][j] = d[i][j] = 0;\n } else if (i < j) {\n u[i][j] = a[i][j];\n l[i][j] = d[i][j] = 0;\n } else {\n d[i][j] = a[i][j];\n l[i][j] = u[i][j] = 0;\n }\n }\n }\n h = jStat.multiply(jStat.multiply(jStat.inv(d), jStat.add(l, u)), -1);\n c = jStat.multiply(jStat.inv(d), b);\n xv = x;\n xk = jStat.add(jStat.multiply(h, x), c);\n i = 2;\n while (Math.abs(jStat.norm(jStat.subtract(xk,xv))) > r) {\n xv = xk;\n xk = jStat.add(jStat.multiply(h, xv), c);\n i++;\n }\n return xk;\n },\n\n gauss_seidel: function gauss_seidel(a, b, x, r) {\n var i = 0;\n var n = a.length;\n var l = [];\n var u = [];\n var d = [];\n var j, xv, c, h, xk;\n for (; i < n; i++) {\n l[i] = [];\n u[i] = [];\n d[i] = [];\n for (j = 0; j < n; j++) {\n if (i > j) {\n l[i][j] = a[i][j];\n u[i][j] = d[i][j] = 0;\n } else if (i < j) {\n u[i][j] = a[i][j];\n l[i][j] = d[i][j] = 0;\n } else {\n d[i][j] = a[i][j];\n l[i][j] = u[i][j] = 0;\n }\n }\n }\n h = jStat.multiply(jStat.multiply(jStat.inv(jStat.add(d, l)), u), -1);\n c = jStat.multiply(jStat.inv(jStat.add(d, l)), b);\n xv = x;\n xk = jStat.add(jStat.multiply(h, x), c);\n i = 2;\n while (Math.abs(jStat.norm(jStat.subtract(xk, xv))) > r) {\n xv = xk;\n xk = jStat.add(jStat.multiply(h, xv), c);\n i = i + 1;\n }\n return xk;\n },\n\n SOR: function SOR(a, b, x, r, w) {\n var i = 0;\n var n = a.length;\n var l = [];\n var u = [];\n var d = [];\n var j, xv, c, h, xk;\n for (; i < n; i++) {\n l[i] = [];\n u[i] = [];\n d[i] = [];\n for (j = 0; j < n; j++) {\n if (i > j) {\n l[i][j] = a[i][j];\n u[i][j] = d[i][j] = 0;\n } else if (i < j) {\n u[i][j] = a[i][j];\n l[i][j] = d[i][j] = 0;\n } else {\n d[i][j] = a[i][j];\n l[i][j] = u[i][j] = 0;\n }\n }\n }\n h = jStat.multiply(jStat.inv(jStat.add(d, jStat.multiply(l, w))),\n jStat.subtract(jStat.multiply(d, 1 - w),\n jStat.multiply(u, w)));\n c = jStat.multiply(jStat.multiply(jStat.inv(jStat.add(d,\n jStat.multiply(l, w))), b), w);\n xv = x;\n xk = jStat.add(jStat.multiply(h, x), c);\n i = 2;\n while (Math.abs(jStat.norm(jStat.subtract(xk, xv))) > r) {\n xv = xk;\n xk = jStat.add(jStat.multiply(h, xv), c);\n i++;\n }\n return xk;\n },\n\n householder: function householder(a) {\n var m = a.length;\n var n = a[0].length;\n var i = 0;\n var w = [];\n var p = [];\n var alpha, r, k, j, factor;\n for (; i < m - 1; i++) {\n alpha = 0;\n for (j = i + 1; j < n; j++)\n alpha += (a[j][i] * a[j][i]);\n factor = (a[i + 1][i] > 0) ? -1 : 1;\n alpha = factor * Math.sqrt(alpha);\n r = Math.sqrt((((alpha * alpha) - a[i + 1][i] * alpha) / 2));\n w = jStat.zeros(m, 1);\n w[i + 1][0] = (a[i + 1][i] - alpha) / (2 * r);\n for (k = i + 2; k < m; k++) w[k][0] = a[k][i] / (2 * r);\n p = jStat.subtract(jStat.identity(m, n),\n jStat.multiply(jStat.multiply(w, jStat.transpose(w)), 2));\n a = jStat.multiply(p, jStat.multiply(a, p));\n }\n return a;\n },\n\n // A -> [Q,R]\n // Q is orthogonal matrix\n // R is upper triangular\n QR: (function() {\n // x -> Q\n // find a orthogonal matrix Q st.\n // Qx=y\n // y is [||x||,0,0,...]\n\n // quick ref\n var sum = jStat.sum;\n var range = jStat.arange;\n\n function qr2(x) {\n // quick impletation\n // https://www.stat.wisc.edu/~larget/math496/qr.html\n\n var n = x.length;\n var p = x[0].length;\n\n var r = jStat.zeros(p, p);\n x = jStat.copy(x);\n\n var i,j,k;\n for(j = 0; j < p; j++){\n r[j][j] = Math.sqrt(sum(range(n).map(function(i){\n return x[i][j] * x[i][j];\n })));\n for(i = 0; i < n; i++){\n x[i][j] = x[i][j] / r[j][j];\n }\n for(k = j+1; k < p; k++){\n r[j][k] = sum(range(n).map(function(i){\n return x[i][j] * x[i][k];\n }));\n for(i = 0; i < n; i++){\n x[i][k] = x[i][k] - x[i][j]*r[j][k];\n }\n }\n }\n return [x, r];\n }\n\n return qr2;\n }()),\n\n lstsq: (function() {\n // solve least squard problem for Ax=b as QR decomposition way if b is\n // [[b1],[b2],[b3]] form will return [[x1],[x2],[x3]] array form solution\n // else b is [b1,b2,b3] form will return [x1,x2,x3] array form solution\n function R_I(A) {\n A = jStat.copy(A);\n var size = A.length;\n var I = jStat.identity(size);\n jStat.arange(size - 1, -1, -1).forEach(function(i) {\n jStat.sliceAssign(\n I, { row: i }, jStat.divide(jStat.slice(I, { row: i }), A[i][i]));\n jStat.sliceAssign(\n A, { row: i }, jStat.divide(jStat.slice(A, { row: i }), A[i][i]));\n jStat.arange(i).forEach(function(j) {\n var c = jStat.multiply(A[j][i], -1);\n var Aj = jStat.slice(A, { row: j });\n var cAi = jStat.multiply(jStat.slice(A, { row: i }), c);\n jStat.sliceAssign(A, { row: j }, jStat.add(Aj, cAi));\n var Ij = jStat.slice(I, { row: j });\n var cIi = jStat.multiply(jStat.slice(I, { row: i }), c);\n jStat.sliceAssign(I, { row: j }, jStat.add(Ij, cIi));\n })\n });\n return I;\n }\n\n function qr_solve(A, b){\n var array_mode = false;\n if (b[0].length === undefined) {\n // [c1,c2,c3] mode\n b = b.map(function(x){ return [x] });\n array_mode = true;\n }\n var QR = jStat.QR(A);\n var Q = QR[0];\n var R = QR[1];\n var attrs = A[0].length;\n var Q1 = jStat.slice(Q,{col:{end:attrs}});\n var R1 = jStat.slice(R,{row:{end:attrs}});\n var RI = R_I(R1);\n var Q2 = jStat.transpose(Q1);\n\n if(Q2[0].length === undefined){\n Q2 = [Q2]; // The confusing jStat.multifly implementation threat nature process again.\n }\n\n var x = jStat.multiply(jStat.multiply(RI, Q2), b);\n\n if(x.length === undefined){\n x = [[x]]; // The confusing jStat.multifly implementation threat nature process again.\n }\n\n\n if (array_mode)\n return x.map(function(i){ return i[0] });\n return x;\n }\n\n return qr_solve;\n }()),\n\n jacobi: function jacobi(a) {\n var condition = 1;\n var n = a.length;\n var e = jStat.identity(n, n);\n var ev = [];\n var b, i, j, p, q, maxim, theta, s;\n // condition === 1 only if tolerance is not reached\n while (condition === 1) {\n maxim = a[0][1];\n p = 0;\n q = 1;\n for (i = 0; i < n; i++) {\n for (j = 0; j < n; j++) {\n if (i != j) {\n if (maxim < Math.abs(a[i][j])) {\n maxim = Math.abs(a[i][j]);\n p = i;\n q = j;\n }\n }\n }\n }\n if (a[p][p] === a[q][q])\n theta = (a[p][q] > 0) ? Math.PI / 4 : -Math.PI / 4;\n else\n theta = Math.atan(2 * a[p][q] / (a[p][p] - a[q][q])) / 2;\n s = jStat.identity(n, n);\n s[p][p] = Math.cos(theta);\n s[p][q] = -Math.sin(theta);\n s[q][p] = Math.sin(theta);\n s[q][q] = Math.cos(theta);\n // eigen vector matrix\n e = jStat.multiply(e, s);\n b = jStat.multiply(jStat.multiply(jStat.inv(s), a), s);\n a = b;\n condition = 0;\n for (i = 1; i < n; i++) {\n for (j = 1; j < n; j++) {\n if (i != j && Math.abs(a[i][j]) > 0.001) {\n condition = 1;\n }\n }\n }\n }\n for (i = 0; i < n; i++) ev.push(a[i][i]);\n //returns both the eigenvalue and eigenmatrix\n return [e, ev];\n },\n\n rungekutta: function rungekutta(f, h, p, t_j, u_j, order) {\n var k1, k2, u_j1, k3, k4;\n if (order === 2) {\n while (t_j <= p) {\n k1 = h * f(t_j, u_j);\n k2 = h * f(t_j + h, u_j + k1);\n u_j1 = u_j + (k1 + k2) / 2;\n u_j = u_j1;\n t_j = t_j + h;\n }\n }\n if (order === 4) {\n while (t_j <= p) {\n k1 = h * f(t_j, u_j);\n k2 = h * f(t_j + h / 2, u_j + k1 / 2);\n k3 = h * f(t_j + h / 2, u_j + k2 / 2);\n k4 = h * f(t_j +h, u_j + k3);\n u_j1 = u_j + (k1 + 2 * k2 + 2 * k3 + k4) / 6;\n u_j = u_j1;\n t_j = t_j + h;\n }\n }\n return u_j;\n },\n\n romberg: function romberg(f, a, b, order) {\n var i = 0;\n var h = (b - a) / 2;\n var x = [];\n var h1 = [];\n var g = [];\n var m, a1, j, k, I;\n while (i < order / 2) {\n I = f(a);\n for (j = a, k = 0; j <= b; j = j + h, k++) x[k] = j;\n m = x.length;\n for (j = 1; j < m - 1; j++) {\n I += (((j % 2) !== 0) ? 4 : 2) * f(x[j]);\n }\n I = (h / 3) * (I + f(b));\n g[i] = I;\n h /= 2;\n i++;\n }\n a1 = g.length;\n m = 1;\n while (a1 !== 1) {\n for (j = 0; j < a1 - 1; j++)\n h1[j] = ((Math.pow(4, m)) * g[j + 1] - g[j]) / (Math.pow(4, m) - 1);\n a1 = h1.length;\n g = h1;\n h1 = [];\n m++;\n }\n return g;\n },\n\n richardson: function richardson(X, f, x, h) {\n function pos(X, x) {\n var i = 0;\n var n = X.length;\n var p;\n for (; i < n; i++)\n if (X[i] === x) p = i;\n return p;\n }\n var h_min = Math.abs(x - X[pos(X, x) + 1]);\n var i = 0;\n var g = [];\n var h1 = [];\n var y1, y2, m, a, j;\n while (h >= h_min) {\n y1 = pos(X, x + h);\n y2 = pos(X, x);\n g[i] = (f[y1] - 2 * f[y2] + f[2 * y2 - y1]) / (h * h);\n h /= 2;\n i++;\n }\n a = g.length;\n m = 1;\n while (a != 1) {\n for (j = 0; j < a - 1; j++)\n h1[j] = ((Math.pow(4, m)) * g[j + 1] - g[j]) / (Math.pow(4, m) - 1);\n a = h1.length;\n g = h1;\n h1 = [];\n m++;\n }\n return g;\n },\n\n simpson: function simpson(f, a, b, n) {\n var h = (b - a) / n;\n var I = f(a);\n var x = [];\n var j = a;\n var k = 0;\n var i = 1;\n var m;\n for (; j <= b; j = j + h, k++)\n x[k] = j;\n m = x.length;\n for (; i < m - 1; i++) {\n I += ((i % 2 !== 0) ? 4 : 2) * f(x[i]);\n }\n return (h / 3) * (I + f(b));\n },\n\n hermite: function hermite(X, F, dF, value) {\n var n = X.length;\n var p = 0;\n var i = 0;\n var l = [];\n var dl = [];\n var A = [];\n var B = [];\n var j;\n for (; i < n; i++) {\n l[i] = 1;\n for (j = 0; j < n; j++) {\n if (i != j) l[i] *= (value - X[j]) / (X[i] - X[j]);\n }\n dl[i] = 0;\n for (j = 0; j < n; j++) {\n if (i != j) dl[i] += 1 / (X [i] - X[j]);\n }\n A[i] = (1 - 2 * (value - X[i]) * dl[i]) * (l[i] * l[i]);\n B[i] = (value - X[i]) * (l[i] * l[i]);\n p += (A[i] * F[i] + B[i] * dF[i]);\n }\n return p;\n },\n\n lagrange: function lagrange(X, F, value) {\n var p = 0;\n var i = 0;\n var j, l;\n var n = X.length;\n for (; i < n; i++) {\n l = F[i];\n for (j = 0; j < n; j++) {\n // calculating the lagrange polynomial L_i\n if (i != j) l *= (value - X[j]) / (X[i] - X[j]);\n }\n // adding the lagrange polynomials found above\n p += l;\n }\n return p;\n },\n\n cubic_spline: function cubic_spline(X, F, value) {\n var n = X.length;\n var i = 0, j;\n var A = [];\n var B = [];\n var alpha = [];\n var c = [];\n var h = [];\n var b = [];\n var d = [];\n for (; i < n - 1; i++)\n h[i] = X[i + 1] - X[i];\n alpha[0] = 0;\n for (i = 1; i < n - 1; i++) {\n alpha[i] = (3 / h[i]) * (F[i + 1] - F[i]) -\n (3 / h[i-1]) * (F[i] - F[i-1]);\n }\n for (i = 1; i < n - 1; i++) {\n A[i] = [];\n B[i] = [];\n A[i][i-1] = h[i-1];\n A[i][i] = 2 * (h[i - 1] + h[i]);\n A[i][i+1] = h[i];\n B[i][0] = alpha[i];\n }\n c = jStat.multiply(jStat.inv(A), B);\n for (j = 0; j < n - 1; j++) {\n b[j] = (F[j + 1] - F[j]) / h[j] - h[j] * (c[j + 1][0] + 2 * c[j][0]) / 3;\n d[j] = (c[j + 1][0] - c[j][0]) / (3 * h[j]);\n }\n for (j = 0; j < n; j++) {\n if (X[j] > value) break;\n }\n j -= 1;\n return F[j] + (value - X[j]) * b[j] + jStat.sq(value-X[j]) *\n c[j] + (value - X[j]) * jStat.sq(value - X[j]) * d[j];\n },\n\n gauss_quadrature: function gauss_quadrature() {\n throw new Error('gauss_quadrature not yet implemented');\n },\n\n PCA: function PCA(X) {\n var m = X.length;\n var n = X[0].length;\n var i = 0;\n var j, temp1;\n var u = [];\n var D = [];\n var result = [];\n var temp2 = [];\n var Y = [];\n var Bt = [];\n var B = [];\n var C = [];\n var V = [];\n var Vt = [];\n for (i = 0; i < m; i++) {\n u[i] = jStat.sum(X[i]) / n;\n }\n for (i = 0; i < n; i++) {\n B[i] = [];\n for(j = 0; j < m; j++) {\n B[i][j] = X[j][i] - u[j];\n }\n }\n B = jStat.transpose(B);\n for (i = 0; i < m; i++) {\n C[i] = [];\n for (j = 0; j < m; j++) {\n C[i][j] = (jStat.dot([B[i]], [B[j]])) / (n - 1);\n }\n }\n result = jStat.jacobi(C);\n V = result[0];\n D = result[1];\n Vt = jStat.transpose(V);\n for (i = 0; i < D.length; i++) {\n for (j = i; j < D.length; j++) {\n if(D[i] < D[j]) {\n temp1 = D[i];\n D[i] = D[j];\n D[j] = temp1;\n temp2 = Vt[i];\n Vt[i] = Vt[j];\n Vt[j] = temp2;\n }\n }\n }\n Bt = jStat.transpose(B);\n for (i = 0; i < m; i++) {\n Y[i] = [];\n for (j = 0; j < Bt.length; j++) {\n Y[i][j] = jStat.dot([Vt[i]], [Bt[j]]);\n }\n }\n return [X, D, Vt, Y];\n }\n});\n\n// extend jStat.fn with methods that require one argument\n(function(funcs) {\n for (var i = 0; i < funcs.length; i++) (function(passfunc) {\n jStat.fn[passfunc] = function(arg, func) {\n var tmpthis = this;\n // check for callback\n if (func) {\n setTimeout(function() {\n func.call(tmpthis, jStat.fn[passfunc].call(tmpthis, arg));\n }, 15);\n return this;\n }\n if (typeof jStat[passfunc](this, arg) === 'number')\n return jStat[passfunc](this, arg);\n else\n return jStat(jStat[passfunc](this, arg));\n };\n }(funcs[i]));\n}('add divide multiply subtract dot pow exp log abs norm angle'.split(' ')));\n\n}(jStat, Math));\n(function(jStat, Math) {\n\nvar slice = [].slice;\nvar isNumber = jStat.utils.isNumber;\nvar isArray = jStat.utils.isArray;\n\n// flag==true denotes use of sample standard deviation\n// Z Statistics\njStat.extend({\n // 2 different parameter lists:\n // (value, mean, sd)\n // (value, array, flag)\n zscore: function zscore() {\n var args = slice.call(arguments);\n if (isNumber(args[1])) {\n return (args[0] - args[1]) / args[2];\n }\n return (args[0] - jStat.mean(args[1])) / jStat.stdev(args[1], args[2]);\n },\n\n // 3 different paramter lists:\n // (value, mean, sd, sides)\n // (zscore, sides)\n // (value, array, sides, flag)\n ztest: function ztest() {\n var args = slice.call(arguments);\n var z;\n if (isArray(args[1])) {\n // (value, array, sides, flag)\n z = jStat.zscore(args[0],args[1],args[3]);\n return (args[2] === 1) ?\n (jStat.normal.cdf(-Math.abs(z), 0, 1)) :\n (jStat.normal.cdf(-Math.abs(z), 0, 1)*2);\n } else {\n if (args.length > 2) {\n // (value, mean, sd, sides)\n z = jStat.zscore(args[0],args[1],args[2]);\n return (args[3] === 1) ?\n (jStat.normal.cdf(-Math.abs(z),0,1)) :\n (jStat.normal.cdf(-Math.abs(z),0,1)* 2);\n } else {\n // (zscore, sides)\n z = args[0];\n return (args[1] === 1) ?\n (jStat.normal.cdf(-Math.abs(z),0,1)) :\n (jStat.normal.cdf(-Math.abs(z),0,1)*2);\n }\n }\n }\n});\n\njStat.extend(jStat.fn, {\n zscore: function zscore(value, flag) {\n return (value - this.mean()) / this.stdev(flag);\n },\n\n ztest: function ztest(value, sides, flag) {\n var zscore = Math.abs(this.zscore(value, flag));\n return (sides === 1) ?\n (jStat.normal.cdf(-zscore, 0, 1)) :\n (jStat.normal.cdf(-zscore, 0, 1) * 2);\n }\n});\n\n// T Statistics\njStat.extend({\n // 2 parameter lists\n // (value, mean, sd, n)\n // (value, array)\n tscore: function tscore() {\n var args = slice.call(arguments);\n return (args.length === 4) ?\n ((args[0] - args[1]) / (args[2] / Math.sqrt(args[3]))) :\n ((args[0] - jStat.mean(args[1])) /\n (jStat.stdev(args[1], true) / Math.sqrt(args[1].length)));\n },\n\n // 3 different paramter lists:\n // (value, mean, sd, n, sides)\n // (tscore, n, sides)\n // (value, array, sides)\n ttest: function ttest() {\n var args = slice.call(arguments);\n var tscore;\n if (args.length === 5) {\n tscore = Math.abs(jStat.tscore(args[0], args[1], args[2], args[3]));\n return (args[4] === 1) ?\n (jStat.studentt.cdf(-tscore, args[3]-1)) :\n (jStat.studentt.cdf(-tscore, args[3]-1)*2);\n }\n if (isNumber(args[1])) {\n tscore = Math.abs(args[0])\n return (args[2] == 1) ?\n (jStat.studentt.cdf(-tscore, args[1]-1)) :\n (jStat.studentt.cdf(-tscore, args[1]-1) * 2);\n }\n tscore = Math.abs(jStat.tscore(args[0], args[1]))\n return (args[2] == 1) ?\n (jStat.studentt.cdf(-tscore, args[1].length-1)) :\n (jStat.studentt.cdf(-tscore, args[1].length-1) * 2);\n }\n});\n\njStat.extend(jStat.fn, {\n tscore: function tscore(value) {\n return (value - this.mean()) / (this.stdev(true) / Math.sqrt(this.cols()));\n },\n\n ttest: function ttest(value, sides) {\n return (sides === 1) ?\n (1 - jStat.studentt.cdf(Math.abs(this.tscore(value)), this.cols()-1)) :\n (jStat.studentt.cdf(-Math.abs(this.tscore(value)), this.cols()-1)*2);\n }\n});\n\n// F Statistics\njStat.extend({\n // Paramter list is as follows:\n // (array1, array2, array3, ...)\n // or it is an array of arrays\n // array of arrays conversion\n anovafscore: function anovafscore() {\n var args = slice.call(arguments),\n expVar, sample, sampMean, sampSampMean, tmpargs, unexpVar, i, j;\n if (args.length === 1) {\n tmpargs = new Array(args[0].length);\n for (i = 0; i < args[0].length; i++) {\n tmpargs[i] = args[0][i];\n }\n args = tmpargs;\n }\n // Builds sample array\n sample = new Array();\n for (i = 0; i < args.length; i++) {\n sample = sample.concat(args[i]);\n }\n sampMean = jStat.mean(sample);\n // Computes the explained variance\n expVar = 0;\n for (i = 0; i < args.length; i++) {\n expVar = expVar + args[i].length * Math.pow(jStat.mean(args[i]) - sampMean, 2);\n }\n expVar /= (args.length - 1);\n // Computes unexplained variance\n unexpVar = 0;\n for (i = 0; i < args.length; i++) {\n sampSampMean = jStat.mean(args[i]);\n for (j = 0; j < args[i].length; j++) {\n unexpVar += Math.pow(args[i][j] - sampSampMean, 2);\n }\n }\n unexpVar /= (sample.length - args.length);\n return expVar / unexpVar;\n },\n\n // 2 different paramter setups\n // (array1, array2, array3, ...)\n // (anovafscore, df1, df2)\n anovaftest: function anovaftest() {\n var args = slice.call(arguments),\n df1, df2, n, i;\n if (isNumber(args[0])) {\n return 1 - jStat.centralF.cdf(args[0], args[1], args[2]);\n }\n var anovafscore = jStat.anovafscore(args);\n df1 = args.length - 1;\n n = 0;\n for (i = 0; i < args.length; i++) {\n n = n + args[i].length;\n }\n df2 = n - df1 - 1;\n return 1 - jStat.centralF.cdf(anovafscore, df1, df2);\n },\n\n ftest: function ftest(fscore, df1, df2) {\n return 1 - jStat.centralF.cdf(fscore, df1, df2);\n }\n});\n\njStat.extend(jStat.fn, {\n anovafscore: function anovafscore() {\n return jStat.anovafscore(this.toArray());\n },\n\n anovaftes: function anovaftes() {\n var n = 0;\n var i;\n for (i = 0; i < this.length; i++) {\n n = n + this[i].length;\n }\n return jStat.ftest(this.anovafscore(), this.length - 1, n - this.length);\n }\n});\n\n// Tukey's range test\njStat.extend({\n // 2 parameter lists\n // (mean1, mean2, n1, n2, sd)\n // (array1, array2, sd)\n qscore: function qscore() {\n var args = slice.call(arguments);\n var mean1, mean2, n1, n2, sd;\n if (isNumber(args[0])) {\n mean1 = args[0];\n mean2 = args[1];\n n1 = args[2];\n n2 = args[3];\n sd = args[4];\n } else {\n mean1 = jStat.mean(args[0]);\n mean2 = jStat.mean(args[1]);\n n1 = args[0].length;\n n2 = args[1].length;\n sd = args[2];\n }\n return Math.abs(mean1 - mean2) / (sd * Math.sqrt((1 / n1 + 1 / n2) / 2));\n },\n\n // 3 different parameter lists:\n // (qscore, n, k)\n // (mean1, mean2, n1, n2, sd, n, k)\n // (array1, array2, sd, n, k)\n qtest: function qtest() {\n var args = slice.call(arguments);\n\n var qscore;\n if (args.length === 3) {\n qscore = args[0];\n args = args.slice(1);\n } else if (args.length === 7) {\n qscore = jStat.qscore(args[0], args[1], args[2], args[3], args[4]);\n args = args.slice(5);\n } else {\n qscore = jStat.qscore(args[0], args[1], args[2]);\n args = args.slice(3);\n }\n\n var n = args[0];\n var k = args[1];\n\n return 1 - jStat.tukey.cdf(qscore, k, n - k);\n },\n\n tukeyhsd: function tukeyhsd(arrays) {\n var sd = jStat.pooledstdev(arrays);\n var means = arrays.map(function (arr) {return jStat.mean(arr);});\n var n = arrays.reduce(function (n, arr) {return n + arr.length;}, 0);\n\n var results = [];\n for (var i = 0; i < arrays.length; ++i) {\n for (var j = i + 1; j < arrays.length; ++j) {\n var p = jStat.qtest(means[i], means[j], arrays[i].length, arrays[j].length, sd, n, arrays.length);\n results.push([[i, j], p]);\n }\n }\n\n return results;\n }\n});\n\n// Error Bounds\njStat.extend({\n // 2 different parameter setups\n // (value, alpha, sd, n)\n // (value, alpha, array)\n normalci: function normalci() {\n var args = slice.call(arguments),\n ans = new Array(2),\n change;\n if (args.length === 4) {\n change = Math.abs(jStat.normal.inv(args[1] / 2, 0, 1) *\n args[2] / Math.sqrt(args[3]));\n } else {\n change = Math.abs(jStat.normal.inv(args[1] / 2, 0, 1) *\n jStat.stdev(args[2]) / Math.sqrt(args[2].length));\n }\n ans[0] = args[0] - change;\n ans[1] = args[0] + change;\n return ans;\n },\n\n // 2 different parameter setups\n // (value, alpha, sd, n)\n // (value, alpha, array)\n tci: function tci() {\n var args = slice.call(arguments),\n ans = new Array(2),\n change;\n if (args.length === 4) {\n change = Math.abs(jStat.studentt.inv(args[1] / 2, args[3] - 1) *\n args[2] / Math.sqrt(args[3]));\n } else {\n change = Math.abs(jStat.studentt.inv(args[1] / 2, args[2].length - 1) *\n jStat.stdev(args[2], true) / Math.sqrt(args[2].length));\n }\n ans[0] = args[0] - change;\n ans[1] = args[0] + change;\n return ans;\n },\n\n significant: function significant(pvalue, alpha) {\n return pvalue < alpha;\n }\n});\n\njStat.extend(jStat.fn, {\n normalci: function normalci(value, alpha) {\n return jStat.normalci(value, alpha, this.toArray());\n },\n\n tci: function tci(value, alpha) {\n return jStat.tci(value, alpha, this.toArray());\n }\n});\n\n// internal method for calculating the z-score for a difference of proportions test\nfunction differenceOfProportions(p1, n1, p2, n2) {\n if (p1 > 1 || p2 > 1 || p1 <= 0 || p2 <= 0) {\n throw new Error(\"Proportions should be greater than 0 and less than 1\")\n }\n var pooled = (p1 * n1 + p2 * n2) / (n1 + n2);\n var se = Math.sqrt(pooled * (1 - pooled) * ((1/n1) + (1/n2)));\n return (p1 - p2) / se;\n}\n\n// Difference of Proportions\njStat.extend(jStat.fn, {\n oneSidedDifferenceOfProportions: function oneSidedDifferenceOfProportions(p1, n1, p2, n2) {\n var z = differenceOfProportions(p1, n1, p2, n2);\n return jStat.ztest(z, 1);\n },\n\n twoSidedDifferenceOfProportions: function twoSidedDifferenceOfProportions(p1, n1, p2, n2) {\n var z = differenceOfProportions(p1, n1, p2, n2);\n return jStat.ztest(z, 2);\n }\n});\n\n}(jStat, Math));\njStat.models = (function(){\n function sub_regress(exog) {\n var var_count = exog[0].length;\n var modelList = jStat.arange(var_count).map(function(endog_index) {\n var exog_index =\n jStat.arange(var_count).filter(function(i){return i!==endog_index});\n return ols(jStat.col(exog, endog_index).map(function(x){ return x[0] }),\n jStat.col(exog, exog_index))\n });\n return modelList;\n }\n\n // do OLS model regress\n // exog have include const columns ,it will not generate it .In fact, exog is\n // \"design matrix\" look at\n //https://en.wikipedia.org/wiki/Design_matrix\n function ols(endog, exog) {\n var nobs = endog.length;\n var df_model = exog[0].length - 1;\n var df_resid = nobs-df_model - 1;\n var coef = jStat.lstsq(exog, endog);\n var predict =\n jStat.multiply(exog, coef.map(function(x) { return [x] }))\n .map(function(p) { return p[0] });\n var resid = jStat.subtract(endog, predict);\n var ybar = jStat.mean(endog);\n // constant cause problem\n // var SST = jStat.sum(endog.map(function(y) {\n // return Math.pow(y-ybar,2);\n // }));\n var SSE = jStat.sum(predict.map(function(f) {\n return Math.pow(f - ybar, 2);\n }));\n var SSR = jStat.sum(endog.map(function(y, i) {\n return Math.pow(y - predict[i], 2);\n }));\n var SST = SSE + SSR;\n var R2 = (SSE / SST);\n return {\n exog:exog,\n endog:endog,\n nobs:nobs,\n df_model:df_model,\n df_resid:df_resid,\n coef:coef,\n predict:predict,\n resid:resid,\n ybar:ybar,\n SST:SST,\n SSE:SSE,\n SSR:SSR,\n R2:R2\n };\n }\n\n // H0: b_I=0\n // H1: b_I!=0\n function t_test(model) {\n var subModelList = sub_regress(model.exog);\n //var sigmaHat=jStat.stdev(model.resid);\n var sigmaHat = Math.sqrt(model.SSR / (model.df_resid));\n var seBetaHat = subModelList.map(function(mod) {\n var SST = mod.SST;\n var R2 = mod.R2;\n return sigmaHat / Math.sqrt(SST * (1 - R2));\n });\n var tStatistic = model.coef.map(function(coef, i) {\n return (coef - 0) / seBetaHat[i];\n });\n var pValue = tStatistic.map(function(t) {\n var leftppf = jStat.studentt.cdf(t, model.df_resid);\n return (leftppf > 0.5 ? 1 - leftppf : leftppf) * 2;\n });\n var c = jStat.studentt.inv(0.975, model.df_resid);\n var interval95 = model.coef.map(function(coef, i) {\n var d = c * seBetaHat[i];\n return [coef - d, coef + d];\n })\n return {\n se: seBetaHat,\n t: tStatistic,\n p: pValue,\n sigmaHat: sigmaHat,\n interval95: interval95\n };\n }\n\n function F_test(model) {\n var F_statistic =\n (model.R2 / model.df_model) / ((1 - model.R2) / model.df_resid);\n var fcdf = function(x, n1, n2) {\n return jStat.beta.cdf(x / (n2 / n1 + x), n1 / 2, n2 / 2)\n }\n var pvalue = 1 - fcdf(F_statistic, model.df_model, model.df_resid);\n return { F_statistic: F_statistic, pvalue: pvalue };\n }\n\n function ols_wrap(endog, exog) {\n var model = ols(endog,exog);\n var ttest = t_test(model);\n var ftest = F_test(model);\n // Provide the Wherry / Ezekiel / McNemar / Cohen Adjusted R^2\n // Which matches the 'adjusted R^2' provided by R's lm package\n var adjust_R2 =\n 1 - (1 - model.R2) * ((model.nobs - 1) / (model.df_resid));\n model.t = ttest;\n model.f = ftest;\n model.adjust_R2 = adjust_R2;\n return model;\n }\n\n return { ols: ols_wrap };\n})();\n//To regress, simply build X matrix\n//(append column of 1's) using\n//buildxmatrix and build the Y\n//matrix using buildymatrix\n//(simply the transpose)\n//and run regress.\n\n\n\n//Regressions\n\njStat.extend({\n buildxmatrix: function buildxmatrix(){\n //Parameters will be passed in as such\n //(array1,array2,array3,...)\n //as (x1,x2,x3,...)\n //needs to be (1,x1,x2,x3,...)\n var matrixRows = new Array(arguments.length);\n for(var i=0;i1){\n result = [];\n for (i = 0; i < A.rows(); i++) {\n result[i] = [];\n for (j = 0; j < B.cols(); j++) {\n sum = 0;\n for (k = 0; k < A.cols(); k++) {\n sum += A.toArray()[i][k] * B.toArray()[k][j];\n }\n result[i][j] = sum;\n }\n }\n return jStat(result);\n }\n result = [];\n for (i = 0; i < A.rows(); i++) {\n result[i] = [];\n for (j = 0; j < B.cols(); j++) {\n sum = 0;\n for (k = 0; k < A.cols(); k++) {\n sum += A.toArray()[i][k] * B.toArray()[j];\n }\n result[i][j] = sum;\n }\n }\n return jStat(result);\n }\n },\n\n //regress and regresst to be fixed\n\n regress: function regress(jMatX,jMatY){\n //print(\"regressin!\");\n //print(jMatX.toArray());\n var innerinv = jStat.xtranspxinv(jMatX);\n //print(innerinv);\n var xtransp = jMatX.transpose();\n var next = jStat.matrixmult(jStat(innerinv),xtransp);\n return jStat.matrixmult(next,jMatY);\n\n },\n\n regresst: function regresst(jMatX,jMatY,sides){\n var beta = jStat.regress(jMatX,jMatY);\n\n var compile = {};\n compile.anova = {};\n var jMatYBar = jStat.jMatYBar(jMatX, beta);\n compile.yBar = jMatYBar;\n var yAverage = jMatY.mean();\n compile.anova.residuals = jStat.residuals(jMatY, jMatYBar);\n\n compile.anova.ssr = jStat.ssr(jMatYBar, yAverage);\n compile.anova.msr = compile.anova.ssr / (jMatX[0].length - 1);\n\n compile.anova.sse = jStat.sse(jMatY, jMatYBar);\n compile.anova.mse =\n compile.anova.sse / (jMatY.length - (jMatX[0].length - 1) - 1);\n\n compile.anova.sst = jStat.sst(jMatY, yAverage);\n compile.anova.mst = compile.anova.sst / (jMatY.length - 1);\n\n compile.anova.r2 = 1 - (compile.anova.sse / compile.anova.sst);\n if (compile.anova.r2 < 0) compile.anova.r2 = 0;\n\n compile.anova.fratio = compile.anova.msr / compile.anova.mse;\n compile.anova.pvalue =\n jStat.anovaftest(compile.anova.fratio,\n jMatX[0].length - 1,\n jMatY.length - (jMatX[0].length - 1) - 1);\n\n compile.anova.rmse = Math.sqrt(compile.anova.mse);\n\n compile.anova.r2adj = 1 - (compile.anova.mse / compile.anova.mst);\n if (compile.anova.r2adj < 0) compile.anova.r2adj = 0;\n\n compile.stats = new Array(jMatX[0].length);\n var covar = jStat.xtranspxinv(jMatX);\n var sds, ts, ps;\n\n for(var i=0; i {\r\n x = H.accept(x, Types.NUMBER_NO_BOOLEAN);\r\n n = H.accept(n, Types.NUMBER_NO_BOOLEAN);\r\n // if n is not an integer, it is truncated.\r\n n = Math.trunc(n);\r\n if (n < 0) {\r\n throw FormulaError.NUM;\r\n }\r\n return bessel.besseli(x, n);\r\n },\r\n\r\n BESSELJ: (x, n) => {\r\n x = H.accept(x, Types.NUMBER_NO_BOOLEAN);\r\n n = H.accept(n, Types.NUMBER_NO_BOOLEAN);\r\n // if n is not an integer, it is truncated.\r\n n = Math.trunc(n);\r\n if (n < 0) {\r\n throw FormulaError.NUM;\r\n }\r\n return bessel.besselj(x, n);\r\n },\r\n\r\n BESSELK: (x, n) => {\r\n x = H.accept(x, Types.NUMBER_NO_BOOLEAN);\r\n n = H.accept(n, Types.NUMBER_NO_BOOLEAN);\r\n // if n is not an integer, it is truncated.\r\n n = Math.trunc(n);\r\n if (n < 0) {\r\n throw FormulaError.NUM;\r\n }\r\n\r\n return bessel.besselk(x, n);\r\n },\r\n\r\n BESSELY: (x, n) => {\r\n x = H.accept(x, Types.NUMBER_NO_BOOLEAN);\r\n n = H.accept(n, Types.NUMBER_NO_BOOLEAN);\r\n // if n is not an integer, it is truncated.\r\n n = Math.trunc(n);\r\n if (n < 0) {\r\n throw FormulaError.NUM;\r\n }\r\n\r\n return bessel.bessely(x, n);\r\n },\r\n\r\n BIN2DEC: (number) => {\r\n number = H.accept(number, Types.NUMBER_NO_BOOLEAN);\r\n let numberStr = number.toString();\r\n\r\n if (numberStr.length > 10) {\r\n throw FormulaError.NUM;\r\n }\r\n\r\n if (numberStr.length === 10 && numberStr.substring(0, 1) === '1') {\r\n return parseInt(numberStr.substring(1), 2) + MIN_BIN;\r\n } else {\r\n return parseInt(numberStr, 2);\r\n }\r\n },\r\n\r\n BIN2HEX: (number, places) => {\r\n number = H.accept(number, Types.NUMBER_NO_BOOLEAN);\r\n places = H.accept(places, Types.NUMBER_NO_BOOLEAN, null);\r\n\r\n const numberStr = number.toString();\r\n if (numberStr.length > 10) {\r\n throw FormulaError.NUM;\r\n }\r\n if (numberStr.length === 10 && numberStr.substring(0, 1) === '1') {\r\n return (parseInt(numberStr.substring(1), 2) + 1099511627264).toString(16).toUpperCase();\r\n }\r\n // convert BIN to HEX\r\n const result = parseInt(number, 2).toString(16);\r\n\r\n if (places == null) {\r\n return result.toUpperCase();\r\n } else {\r\n if (places < 0) {\r\n throw FormulaError.NUM;\r\n }\r\n // truncate places in case it is not an integer\r\n places = Math.trunc(places);\r\n if (places >= result.length) {\r\n return (TextFunctions.REPT('0', places - result.length) + result).toUpperCase();\r\n } else {\r\n throw FormulaError.NUM;\r\n }\r\n }\r\n },\r\n\r\n BIN2OCT: (number, places) => {\r\n number = H.accept(number, Types.NUMBER_NO_BOOLEAN);\r\n places = H.accept(places, Types.NUMBER, null);\r\n\r\n let numberStr = number.toString();\r\n if (numberStr.length > 10) {\r\n throw FormulaError.NUM;\r\n }\r\n if (numberStr.length === 10 && numberStr.substr(0, 1) === \"1\") {\r\n return (parseInt(numberStr.substr(1), 2) + 1073741312).toString(8);\r\n }\r\n\r\n let result = parseInt(number, 2).toString(8);\r\n if (places == null) {\r\n return result.toUpperCase();\r\n } else {\r\n if (places < 0) {\r\n throw FormulaError.NUM;\r\n }\r\n // truncate places in case it is not an integer\r\n places = Math.trunc(places);\r\n if (places >= result.length) {\r\n return (TextFunctions.REPT('0', places - result.length) + result);\r\n } else {\r\n throw FormulaError.NUM;\r\n }\r\n }\r\n },\r\n\r\n BITAND: (number1, number2) => {\r\n number1 = H.accept(number1, Types.NUMBER);\r\n number2 = H.accept(number2, Types.NUMBER);\r\n if (number1 < 0 || number2 < 0) {\r\n throw FormulaError.NUM;\r\n }\r\n // check if they are non-integer, if yes, return error\r\n if (Math.floor(number1) !== number1 || Math.floor(number2) !== number2) {\r\n throw FormulaError.NUM;\r\n }\r\n if (number1 > 281474976710655 || number2 > 281474976710655) {\r\n throw FormulaError.NUM;\r\n }\r\n\r\n return number1 & number2;\r\n },\r\n\r\n BITLSHIFT: (number, shiftAmount) => {\r\n number = H.accept(number, Types.NUMBER);\r\n shiftAmount = H.accept(shiftAmount, Types.NUMBER);\r\n shiftAmount = Math.trunc(shiftAmount);\r\n if (Math.abs(shiftAmount) > 53) {\r\n throw FormulaError.NUM;\r\n }\r\n\r\n if (number < 0 || Math.floor(number) !== number || number > 281474976710655) {\r\n throw FormulaError.NUM;\r\n }\r\n const result = (shiftAmount >= 0) ? number * 2 ** shiftAmount : Math.trunc(number / 2 ** -shiftAmount);\r\n if (result > 281474976710655)\r\n throw FormulaError.NUM;\r\n else\r\n return result;\r\n },\r\n\r\n BITOR: (number1, number2) => {\r\n number1 = H.accept(number1, Types.NUMBER);\r\n number2 = H.accept(number2, Types.NUMBER);\r\n if (number1 < 0 || number2 < 0) {\r\n throw FormulaError.NUM;\r\n }\r\n // check if they are non-integer, if yes, return error\r\n if (Math.floor(number1) !== number1 || Math.floor(number2) !== number2) {\r\n throw FormulaError.NUM;\r\n }\r\n if (number1 > 281474976710655 || number2 > 281474976710655) {\r\n throw FormulaError.NUM;\r\n }\r\n\r\n return number1 | number2;\r\n },\r\n\r\n BITRSHIFT: (number, shiftAmount) => {\r\n number = H.accept(number, Types.NUMBER);\r\n shiftAmount = H.accept(shiftAmount, Types.NUMBER);\r\n return EngineeringFunctions.BITLSHIFT(number, -shiftAmount);\r\n },\r\n\r\n BITXOR: (number1, number2) => {\r\n number1 = H.accept(number1, Types.NUMBER);\r\n number2 = H.accept(number2, Types.NUMBER);\r\n if (number1 < 0 || number1 > 281474976710655 || Math.floor(number1) !== number1) {\r\n throw FormulaError.NUM;\r\n }\r\n if (number2 < 0 || number2 > 281474976710655 || Math.floor(number2) !== number2) {\r\n throw FormulaError.NUM;\r\n }\r\n // // to check if the number is a non-integer\r\n // if (Math.abs(number1) !== number1 || Math.abs(number2) !== number2) {\r\n // throw FormulaError.NUM;\r\n // }\r\n\r\n return number1 ^ number2;\r\n },\r\n\r\n COMPLEX: (realNum, iNum, suffix) => {\r\n realNum = H.accept(realNum, Types.NUMBER_NO_BOOLEAN);\r\n iNum = H.accept(iNum, Types.NUMBER_NO_BOOLEAN);\r\n suffix = H.accept(suffix, Types.STRING, \"i\");\r\n if (suffix !== \"i\" && suffix !== \"j\") {\r\n throw FormulaError.VALUE;\r\n }\r\n if (realNum === 0 && iNum === 0) {\r\n return 0;\r\n } else if (realNum === 0) {\r\n if (iNum === 1) {\r\n return suffix;\r\n } else if (iNum === -1) {\r\n return \"-\" + suffix;\r\n } else {\r\n return iNum.toString() + suffix;\r\n }\r\n } else if (iNum === 0) {\r\n return realNum.toString()\r\n } else {\r\n let sign = (iNum > 0) ? \"+\" : \"\";\r\n if (iNum === 1) {\r\n return realNum.toString() + sign + suffix;\r\n } else if (iNum === -1) {\r\n return realNum.toString() + sign + \"-\" + suffix;\r\n } else {\r\n return realNum.toString() + sign + iNum.toString() + suffix;\r\n }\r\n }\r\n },\r\n\r\n DEC2BIN: (number, places) => {\r\n number = H.accept(number, Types.NUMBER);\r\n places = H.accept(places, Types.NUMBER, null);\r\n if (number < MIN_BIN || number > MAX_BIN) {\r\n throw FormulaError.NUM;\r\n }\r\n\r\n // if the number is negative, valid place values are ignored and it returns a 10-character binary number.\r\n if (number < 0) {\r\n return \"1\" + TextFunctions.REPT(\"0\", 9 - (512 + number).toString(2).length) + (512 + number).toString(2);\r\n }\r\n\r\n let result = parseInt(number, 10).toString(2);\r\n if (places == null) {\r\n return result;\r\n } else {\r\n // if places is not an integer, it is truncated\r\n places = Math.trunc(places);\r\n if (places <= 0) {\r\n throw FormulaError.NUM;\r\n }\r\n if (places < result.length)\r\n throw FormulaError.NUM;\r\n return TextFunctions.REPT(\"0\", places - result.length) + result;\r\n }\r\n },\r\n\r\n DEC2HEX: (number, places) => {\r\n number = H.accept(number, Types.NUMBER);\r\n places = H.accept(places, Types.NUMBER, null);\r\n if (number < -549755813888 || number > 549755813888) {\r\n throw FormulaError.NUM;\r\n }\r\n\r\n // if the number is negative, valid place values are ignored and it returns a 10-character binary number.\r\n if (number < 0) {\r\n return (1099511627776 + number).toString(16).toUpperCase();\r\n }\r\n\r\n let result = parseInt(number, 10).toString(16);\r\n\r\n if (places == null) {\r\n return result.toUpperCase();\r\n } else {\r\n // if places is not an integer, it is truncated\r\n places = Math.trunc(places);\r\n if (places <= 0) {\r\n throw FormulaError.NUM;\r\n }\r\n if (places < result.length)\r\n throw FormulaError.NUM;\r\n return TextFunctions.REPT(\"0\", places - result.length) + result.toUpperCase();\r\n }\r\n },\r\n\r\n DEC2OCT: (number, places) => {\r\n number = H.accept(number, Types.NUMBER);\r\n places = H.accept(places, Types.NUMBER, null);\r\n if (number < -536870912 || number > 536870912) {\r\n throw FormulaError.NUM;\r\n }\r\n\r\n // if the number is negative, valid place values are ignored and it returns a 10-character binary number.\r\n if (number < 0) {\r\n return (number + 1073741824).toString(8);\r\n }\r\n\r\n let result = parseInt(number, 10).toString(8);\r\n\r\n if (places == null) {\r\n return result.toUpperCase();\r\n } else {\r\n // if places is not an integer, it is truncated\r\n places = Math.trunc(places);\r\n if (places <= 0) {\r\n throw FormulaError.NUM;\r\n }\r\n if (places < result.length)\r\n throw FormulaError.NUM;\r\n return TextFunctions.REPT(\"0\", places - result.length) + result;\r\n }\r\n },\r\n\r\n DELTA: (number1, number2) => {\r\n number1 = H.accept(number1, Types.NUMBER_NO_BOOLEAN);\r\n number2 = H.accept(number2, Types.NUMBER_NO_BOOLEAN, 0);\r\n\r\n return number1 === number2 ? 1 : 0;\r\n },\r\n\r\n ERF: (lowerLimit, upperLimit) => {\r\n lowerLimit = H.accept(lowerLimit, Types.NUMBER_NO_BOOLEAN);\r\n upperLimit = H.accept(upperLimit, Types.NUMBER_NO_BOOLEAN, 0);\r\n return jStat.erf(lowerLimit);\r\n },\r\n\r\n ERFC: (x) => {\r\n x = H.accept(x, Types.NUMBER_NO_BOOLEAN);\r\n return jStat.erfc(x);\r\n },\r\n\r\n GESTEP: (number, step) => {\r\n number = H.accept(number, Types.NUMBER_NO_BOOLEAN);\r\n step = H.accept(step, Types.NUMBER_NO_BOOLEAN, 0);\r\n return number >= step ? 1 : 0;\r\n },\r\n\r\n HEX2BIN: (number, places) => {\r\n number = H.accept(number, Types.STRING);\r\n places = H.accept(places, Types.NUMBER, null);\r\n\r\n if (number.length > 10 || !/^[0-9a-fA-F]*$/.test(number)) {\r\n throw FormulaError.NUM;\r\n }\r\n // to check if the number is negative\r\n let ifNegative = (number.length === 10 && number.substr(0, 1).toLowerCase() === \"f\");\r\n // convert HEX to DEC\r\n let toDecimal = ifNegative ? parseInt(number, 16) - 1099511627776 : parseInt(number, 16);\r\n // if number is lower than -512 or grater than 511, return error\r\n if (toDecimal < MIN_BIN || toDecimal > MAX_BIN) {\r\n throw FormulaError.NUM;\r\n }\r\n // if the number is negative, valid place values are ignored and it returns a 10-character binary number.\r\n if (ifNegative) {\r\n return \"1\" + TextFunctions.REPT('0', 9 - (toDecimal + 512).toString(2).length) + (toDecimal + 512).toString(2)\r\n }\r\n // convert decimal to binary\r\n let toBinary = toDecimal.toString(2);\r\n\r\n if (places == null) {\r\n return toBinary;\r\n } else {\r\n // if places is not an integer, it is truncated\r\n places = Math.trunc(places);\r\n if (places <= 0 || places < toBinary.length) {\r\n throw FormulaError.NUM;\r\n }\r\n return TextFunctions.REPT(\"0\", places - toBinary.length) + toBinary;\r\n }\r\n },\r\n\r\n HEX2DEC: (number) => {\r\n number = H.accept(number, Types.STRING);\r\n if (number.length > 10 || !/^[0-9a-fA-F]*$/.test(number)) {\r\n throw FormulaError.NUM;\r\n }\r\n let result = parseInt(number, 16);\r\n //david: validate\r\n // If the places is larger than 10, or number is larger than, return #NUM!\r\n // If number is not a valid Hex number, returns the #NUM! error value.\r\n\r\n return (result >= 549755813888) ? result - 1099511627776 : result;\r\n },\r\n\r\n HEX2OCT: (number, places) => {\r\n number = H.accept(number, Types.STRING);\r\n if (number.length > 10 || !/^[0-9a-fA-F]*$/.test(number)) {\r\n throw FormulaError.NUM;\r\n }\r\n // convert HEX to DEC\r\n let toDecimal = EngineeringFunctions.HEX2DEC(number);\r\n if (toDecimal > MAX_OCT || toDecimal < MIN_OCT) {\r\n throw FormulaError.NUM;\r\n }\r\n return EngineeringFunctions.DEC2OCT(toDecimal, places);\r\n },\r\n\r\n IMABS: (iNumber) => {\r\n const {real, im} = parseIM(iNumber);\r\n return Math.sqrt(Math.pow(real, 2) + Math.pow(im, 2));\r\n },\r\n\r\n IMAGINARY: (iNumber) => {\r\n return parseIM(iNumber).im;\r\n },\r\n\r\n IMARGUMENT: (iNumber) => {\r\n const {real, im} = parseIM(iNumber);\r\n // x + yi => x cannot be 0, since theta = tan-1(y / x)\r\n if (real === 0 && im === 0) {\r\n throw FormulaError.DIV0;\r\n }\r\n // return PI/2 if x is equal to 0 and y is positive\r\n if (real === 0 && im > 0) {\r\n return Math.PI / 2;\r\n }\r\n // while return -PI/2 if x is equal to 0 and y is negative\r\n if (real === 0 && im < 0) {\r\n return -Math.PI / 2;\r\n }\r\n // return -PI if x is negative and y is equal to 0\r\n if (real < 0 && im === 0) {\r\n return Math.PI\r\n }\r\n // return 0 if x is positive and y is equal to 0\r\n if (real > 0 && im === 0) {\r\n return 0;\r\n }\r\n // return argument of iNumber\r\n if (real > 0) {\r\n return Math.atan(im / real);\r\n } else if (real < 0 && im > 0) {\r\n return Math.atan(im / real) + Math.PI;\r\n } else {\r\n return Math.atan(im / real) - Math.PI;\r\n }\r\n\r\n },\r\n\r\n IMCONJUGATE: (iNumber) => {\r\n const {real, im, unit} = parseIM(iNumber);\r\n return (im !== 0) ? EngineeringFunctions.COMPLEX(real, -im, unit) : '' + real;\r\n },\r\n\r\n IMCOS: (iNumber) => {\r\n const {real, im, unit} = parseIM(iNumber);\r\n let realInput = Math.cos(real) * (Math.exp(im) + Math.exp(-im)) / 2;\r\n let imaginaryInput = -Math.sin(real) * (Math.exp(im) - Math.exp(-im)) / 2;\r\n\r\n return EngineeringFunctions.COMPLEX(realInput, imaginaryInput, unit);\r\n },\r\n\r\n IMCOSH: (iNumber) => {\r\n const {real, im, unit} = parseIM(iNumber);\r\n let realInput = Math.cos(im) * (Math.exp(real) + Math.exp(-real)) / 2;\r\n let imaginaryInput = -Math.sin(im) * (Math.exp(real) - Math.exp(-real)) / 2;\r\n return EngineeringFunctions.COMPLEX(realInput, -imaginaryInput, unit);\r\n },\r\n\r\n IMCOT: (iNumber) => {\r\n iNumber = H.accept(iNumber);\r\n let real = EngineeringFunctions.IMCOS(iNumber);\r\n let imaginary = EngineeringFunctions.IMSIN(iNumber);\r\n return EngineeringFunctions.IMDIV(real, imaginary);\r\n },\r\n\r\n IMCSC: (iNumber) => {\r\n iNumber = H.accept(iNumber);\r\n return EngineeringFunctions.IMDIV('1', EngineeringFunctions.IMSIN(iNumber));\r\n },\r\n\r\n IMCSCH: (iNumber) => {\r\n iNumber = H.accept(iNumber);\r\n return EngineeringFunctions.IMDIV('1', EngineeringFunctions.IMSINH(iNumber));\r\n },\r\n\r\n IMDIV: (iNumber1, iNumber2) => {\r\n const res1 = parseIM(iNumber1);\r\n const a = res1.real, b = res1.im, unit1 = res1.unit;\r\n\r\n const res2 = parseIM(iNumber2);\r\n const c = res2.real, d = res2.im, unit2 = res2.unit;\r\n\r\n if (c === 0 && d === 0 || unit1 !== unit2) {\r\n throw FormulaError.NUM;\r\n }\r\n let unit = unit1;\r\n\r\n let denominator = Math.pow(c, 2) + Math.pow(d, 2);\r\n return EngineeringFunctions.COMPLEX((a * c + b * d) / denominator, (b * c - a * d) / denominator, unit);\r\n },\r\n\r\n IMEXP: (iNumber) => {\r\n const {real, im, unit} = parseIM(iNumber);\r\n // return exponential of complex number\r\n let e = Math.exp(real);\r\n return EngineeringFunctions.COMPLEX(e * Math.cos(im), e * Math.sin(im), unit)\r\n },\r\n\r\n IMLN: (iNumber) => {\r\n const {real, im, unit} = parseIM(iNumber);\r\n return EngineeringFunctions.COMPLEX(Math.log(Math.sqrt(Math.pow(real, 2) + Math.pow(im, 2))),\r\n Math.atan(im / real), unit);\r\n },\r\n\r\n IMLOG10: (iNumber) => {\r\n const {real, im, unit} = parseIM(iNumber);\r\n let realInput = Math.log(Math.sqrt(Math.pow(real, 2) + Math.pow(im, 2))) / Math.log(10);\r\n let imaginaryInput = Math.atan(im / real) / Math.log(10);\r\n return EngineeringFunctions.COMPLEX(realInput, imaginaryInput, unit);\r\n },\r\n\r\n IMLOG2: (iNumber) => {\r\n const {real, im, unit} = parseIM(iNumber);\r\n let realInput = Math.log(Math.sqrt(Math.pow(real, 2) + Math.pow(im, 2))) / Math.log(2);\r\n let imaginaryInput = Math.atan(im / real) / Math.log(2);\r\n return EngineeringFunctions.COMPLEX(realInput, imaginaryInput, unit);\r\n },\r\n\r\n IMPOWER: (iNumber, number) => {\r\n let {unit} = parseIM(iNumber);\r\n number = H.accept(number, Types.NUMBER_NO_BOOLEAN);\r\n\r\n // calculate power of modules\r\n let p = Math.pow(EngineeringFunctions.IMABS(iNumber), number);\r\n // calculate argument\r\n let t = EngineeringFunctions.IMARGUMENT(iNumber);\r\n\r\n let real = p * Math.cos(number * t);\r\n let imaginary = p * Math.sin(number * t);\r\n return EngineeringFunctions.COMPLEX(real, imaginary, unit);\r\n },\r\n\r\n IMPRODUCT: (...params) => {\r\n let result;\r\n let i = 0;\r\n H.flattenParams(params, null, false, (item) => {\r\n if (i === 0) {\r\n result = H.accept(item);\r\n parseIM(result);\r\n } else {\r\n const res1 = parseIM(result);\r\n const a = res1.real, b = res1.im, unit1 = res1.unit;\r\n const res2 = parseIM(item);\r\n const c = res2.real, d = res2.im, unit2 = res2.unit;\r\n if (unit1 !== unit2)\r\n throw FormulaError.VALUE;\r\n result = EngineeringFunctions.COMPLEX(a * c - b * d, a * d + b * c);\r\n }\r\n i++;\r\n }, 1);\r\n return result;\r\n },\r\n\r\n IMREAL: (iNumber) => {\r\n return parseIM(iNumber).real;\r\n },\r\n\r\n IMSEC: (iNumber) => {\r\n return EngineeringFunctions.IMDIV('1', EngineeringFunctions.IMCOS(iNumber));\r\n },\r\n\r\n IMSECH: (iNumber) => {\r\n return EngineeringFunctions.IMDIV('1', EngineeringFunctions.IMCOSH(iNumber));\r\n },\r\n\r\n IMSIN: (iNumber) => {\r\n const {real, im, unit} = parseIM(iNumber);\r\n\r\n let realInput = Math.sin(real) * (Math.exp(im) + Math.exp(-im)) / 2;\r\n let imaginaryInput = Math.cos(real) * (Math.exp(im) - Math.exp(-im)) / 2;\r\n return EngineeringFunctions.COMPLEX(realInput, imaginaryInput, unit);\r\n },\r\n\r\n IMSINH: (iNumber) => {\r\n const {real, im, unit} = parseIM(iNumber);\r\n let realInput = Math.cos(im) * (Math.exp(real) - Math.exp(-real)) / 2;\r\n let imaginaryInput = Math.sin(im) * (Math.exp(real) + Math.exp(-real)) / 2;\r\n return EngineeringFunctions.COMPLEX(realInput, imaginaryInput, unit);\r\n },\r\n\r\n IMSQRT: (iNumber) => {\r\n const {unit} = parseIM(iNumber);\r\n // calculate the power of modulus\r\n let power = Math.sqrt(EngineeringFunctions.IMABS(iNumber));\r\n // calculate argument\r\n let argument = EngineeringFunctions.IMARGUMENT(iNumber);\r\n return EngineeringFunctions.COMPLEX(power * Math.cos(argument / 2), power * Math.sin(argument / 2), unit);\r\n },\r\n\r\n IMSUB: (iNumber1, iNumber2) => {\r\n const res1 = parseIM(iNumber1);\r\n const a = res1.real, b = res1.im, unit1 = res1.unit;\r\n const res2 = parseIM(iNumber2);\r\n const c = res2.real, d = res2.im, unit2 = res2.unit;\r\n\r\n if (unit1 !== unit2) {\r\n throw FormulaError.VALUE;\r\n }\r\n return EngineeringFunctions.COMPLEX(a - c, b - d, unit1);\r\n },\r\n\r\n IMSUM: (...params) => {\r\n let realSum = 0, imSum = 0, prevUnit;\r\n H.flattenParams(params, null, false, (item) => {\r\n const {real, im, unit} = parseIM(item);\r\n if (!prevUnit) prevUnit = unit;\r\n if (prevUnit !== unit)\r\n throw FormulaError.VALUE;\r\n realSum += real;\r\n imSum += im;\r\n });\r\n return EngineeringFunctions.COMPLEX(realSum, imSum, prevUnit);\r\n },\r\n\r\n IMTAN: (iNumber) => {\r\n const {unit} = parseIM(iNumber);\r\n return EngineeringFunctions.IMDIV(EngineeringFunctions.IMSIN(iNumber), EngineeringFunctions.IMCOS(iNumber), unit);\r\n },\r\n\r\n // FIXME: need to check the test cases\r\n OCT2BIN: (number, places) => {\r\n // office: If number is not a valid octal number, OCT2BIN returns the #NUM! error value.\r\n // office: If places is nonnumeric, OCT2BIN returns the #VALUE! error value.\r\n number = H.accept(number, Types.STRING);\r\n places = H.accept(places, Types.NUMBER, null);\r\n\r\n // 1. If number's length larger than 10, returns #NUM!\r\n if (number.length > 10) {\r\n throw FormulaError.NUM\r\n }\r\n // In microsoft Excel, if places is larger than 10, it will return #NUM!\r\n if (places > 10) {\r\n throw FormulaError.NUM;\r\n }\r\n\r\n // 2. office: If places is negative, OCT2BIN returns the #NUM! error value.\r\n if (places !== null && places < 0) {\r\n throw FormulaError.NUM;\r\n }\r\n // if places is not an integer, it is truncated\r\n // office: If places is not an integer, it is truncated.\r\n places = Math.trunc(places);\r\n\r\n // to check if the Oct number is negative\r\n let isNegative = (number.length === 10 && number.substring(0, 1) === '7');\r\n // convert OCT to DEC\r\n let toDecimal = EngineeringFunctions.OCT2DEC(number);\r\n // 2.\r\n // office: If number is negative, it cannot be less than 7777777000, and if number is positive, it cannot be greater than 777.\r\n // MiN_BIN = -512, MAX_BIN = 511\r\n if (toDecimal < MIN_BIN || toDecimal > MAX_BIN) {\r\n return FormulaError.NUM;\r\n }\r\n // if number is negative, ignores places and return a 10-character binary number\r\n // office: If number is negative, OCT2BIN ignores places and returns a 10-character binary number.\r\n if (isNegative) {\r\n return '1' + TextFunctions.REPT('0', 9 - (512 + toDecimal).toString(2).length) + (512 + toDecimal).toString(2);\r\n }\r\n\r\n // convert DEC to BIN\r\n let result = toDecimal.toString(2);\r\n\r\n\r\n //if (places === null) {\r\n if (places === 0) {\r\n return result;\r\n }\r\n\r\n // office: If OCT2BIN requires more than places characters, it returns the #NUM! error value.\r\n if (places < result.length) {\r\n throw FormulaError.NUM;\r\n }\r\n\r\n return TextFunctions.REPT('0', places - result.length) + result;\r\n },\r\n\r\n OCT2DEC: (number) => {\r\n number = H.accept(number, Types.STRING);\r\n // In microsoft Excel, if number contains more than ten characters (10 digits), it will return #NUM!\r\n if (number.length > 10) {\r\n throw FormulaError.NUM;\r\n }\r\n\r\n // If number is not a valid octal number, OCT2DEC returns the #NUM! error value.\r\n for (const n of number) {\r\n if (n < '0' || n > '7') {\r\n throw FormulaError.NUM;\r\n }\r\n }\r\n // convert to DEC\r\n let result = parseInt(number, 8);\r\n return (result >= 536870912) ? result - 1073741824 : result;\r\n // 536870912(4000000000) : -536870912; 1073741823(7777777777) : -1\r\n },\r\n\r\n OCT2HEX: (number, places) => {\r\n number = H.accept(number, Types.STRING);\r\n places = H.accept(places, Types.NUMBER_NO_BOOLEAN, null);\r\n if (number.length > 10) {\r\n throw FormulaError.NUM\r\n }\r\n // office: If number is not a valid octal number, OCT2DEC returns the #NUM! error value.\r\n for (const n of number) {\r\n if (n < '0' || n > '7') {\r\n throw FormulaError.NUM;\r\n }\r\n }\r\n // if places is not an integer, it is truncated\r\n places = Math.trunc(places);\r\n // office: If places is negative, OCT2HEX returns the #NUM! error value.\r\n if (places < 0 || places > 10) {\r\n throw FormulaError.NUM;\r\n }\r\n\r\n // convert OCT to DEC\r\n let toDecimal = EngineeringFunctions.OCT2DEC(number);\r\n\r\n // convert DEC to HEX\r\n // let toHex = EngineeringFunctions.DEC2HEX(toDecimal, places);\r\n let toHex = EngineeringFunctions.DEC2HEX(toDecimal);\r\n //if (places === null) {\r\n if (places === 0) {\r\n return toHex;\r\n }\r\n if (places < toHex.length) {\r\n throw FormulaError.NUM;\r\n } else {\r\n return TextFunctions.REPT('0', places - toHex.length) + toHex;\r\n }\r\n },\r\n};\r\n\r\nmodule.exports = EngineeringFunctions;\r\n","const FormulaError = require('../error');\r\nconst {FormulaHelpers, Types, WildCard, Address} = require('../helpers');\r\nconst Collection = require('../../grammar/type/collection');\r\nconst H = FormulaHelpers;\r\n\r\nconst ReferenceFunctions = {\r\n\r\n ADDRESS: (rowNumber, columnNumber, absNum, a1, sheetText) => {\r\n rowNumber = H.accept(rowNumber, Types.NUMBER);\r\n columnNumber = H.accept(columnNumber, Types.NUMBER);\r\n absNum = H.accept(absNum, Types.NUMBER, 1);\r\n a1 = H.accept(a1, Types.BOOLEAN, true);\r\n sheetText = H.accept(sheetText, Types.STRING, '');\r\n\r\n if (rowNumber < 1 || columnNumber < 1 || absNum < 1 || absNum > 4)\r\n throw FormulaError.VALUE;\r\n\r\n let result = '';\r\n if (sheetText.length > 0) {\r\n if (/[^A-Za-z_.\\d\\u007F-\\uFFFF]/.test(sheetText)) {\r\n result += `'${sheetText}'!`;\r\n } else {\r\n result += sheetText + '!';\r\n }\r\n }\r\n if (a1) {\r\n // A1 style\r\n result += (absNum === 1 || absNum === 3) ? '$' : '';\r\n result += Address.columnNumberToName(columnNumber);\r\n result += (absNum === 1 || absNum === 2) ? '$' : '';\r\n result += rowNumber;\r\n } else {\r\n // R1C1 style\r\n result += 'R';\r\n result += (absNum === 4 || absNum === 3) ? `[${rowNumber}]` : rowNumber;\r\n result += 'C';\r\n result += (absNum === 4 || absNum === 2) ? `[${columnNumber}]` : columnNumber;\r\n }\r\n return result;\r\n },\r\n\r\n AREAS: refs => {\r\n refs = H.accept(refs);\r\n if (refs instanceof Collection) {\r\n return refs.length;\r\n }\r\n return 1;\r\n },\r\n\r\n CHOOSE: (indexNum, ...values) => {\r\n\r\n },\r\n\r\n // Special\r\n COLUMN: (context, obj) => {\r\n if (obj == null) {\r\n if (context.position.col != null)\r\n return context.position.col;\r\n else\r\n throw Error('FormulaParser.parse is called without position parameter.')\r\n } else {\r\n if (typeof obj !== 'object' || Array.isArray(obj))\r\n throw FormulaError.VALUE;\r\n if (H.isCellRef(obj)) {\r\n return obj.ref.col;\r\n } else if (H.isRangeRef(obj)) {\r\n return obj.ref.from.col;\r\n } else {\r\n throw Error('ReferenceFunctions.COLUMN should not reach here.')\r\n }\r\n }\r\n },\r\n\r\n // Special\r\n COLUMNS: (context, obj) => {\r\n if (obj == null) {\r\n throw Error('COLUMNS requires one argument');\r\n }\r\n if (typeof obj != 'object' || Array.isArray(obj))\r\n throw FormulaError.VALUE;\r\n if (H.isCellRef(obj)) {\r\n return 1;\r\n } else if (H.isRangeRef(obj)) {\r\n return Math.abs(obj.ref.from.col - obj.ref.to.col) + 1;\r\n } else {\r\n throw Error('ReferenceFunctions.COLUMNS should not reach here.')\r\n }\r\n },\r\n\r\n HLOOKUP: (lookupValue, tableArray, rowIndexNum, rangeLookup) => {\r\n // preserve type of lookupValue\r\n lookupValue = H.accept(lookupValue);\r\n try {\r\n tableArray = H.accept(tableArray, Types.ARRAY, undefined, false);\r\n } catch (e) {\r\n // catch #VALUE! and throw #N/A\r\n if (e instanceof FormulaError)\r\n throw FormulaError.NA;\r\n throw e;\r\n }\r\n rowIndexNum = H.accept(rowIndexNum, Types.NUMBER);\r\n rangeLookup = H.accept(rangeLookup, Types.BOOLEAN, true);\r\n\r\n // check if rowIndexNum out of bound\r\n if (rowIndexNum < 1)\r\n throw FormulaError.VALUE;\r\n if (tableArray[rowIndexNum - 1] === undefined)\r\n throw FormulaError.REF;\r\n\r\n const lookupType = typeof lookupValue; // 'number', 'string', 'boolean'\r\n\r\n // approximate lookup (assume the array is sorted)\r\n if (rangeLookup) {\r\n let prevValue = lookupType === typeof tableArray[0][0] ? tableArray[0][0] : null;\r\n for (let i = 1; i < tableArray[0].length; i++) {\r\n const currValue = tableArray[0][i];\r\n const type = typeof currValue;\r\n // skip the value if type does not match\r\n if (type !== lookupType)\r\n continue;\r\n // if the previous two values are greater than lookup value, throw #N/A\r\n if (prevValue > lookupValue && currValue > lookupValue) {\r\n throw FormulaError.NA;\r\n }\r\n if (currValue === lookupValue)\r\n return tableArray[rowIndexNum - 1][i];\r\n // if previous value <= lookup value and current value > lookup value\r\n if (prevValue != null && currValue > lookupValue && prevValue <= lookupValue) {\r\n return tableArray[rowIndexNum - 1][i - 1];\r\n }\r\n prevValue = currValue;\r\n }\r\n if (prevValue == null)\r\n throw FormulaError.NA;\r\n return prevValue;\r\n }\r\n // exact lookup with wildcard support\r\n else {\r\n let index = -1;\r\n if (WildCard.isWildCard(lookupValue)) {\r\n index = tableArray[0].findIndex(item => {\r\n return WildCard.toRegex(lookupValue, 'i').test(item);\r\n });\r\n } else {\r\n index = tableArray[0].findIndex(item => {\r\n return item === lookupValue;\r\n });\r\n }\r\n // the exact match is not found\r\n if (index === -1) throw FormulaError.NA;\r\n return tableArray[rowIndexNum - 1][index];\r\n }\r\n },\r\n\r\n // Special\r\n INDEX: (context, ranges, rowNum, colNum, areaNum) => {\r\n // retrieve values\r\n rowNum = context.utils.extractRefValue(rowNum);\r\n rowNum = {value: rowNum.val, isArray: rowNum.isArray};\r\n rowNum = H.accept(rowNum, Types.NUMBER);\r\n rowNum = Math.trunc(rowNum);\r\n\r\n if (colNum == null) {\r\n colNum = 1;\r\n } else {\r\n colNum = context.utils.extractRefValue(colNum);\r\n colNum = {value: colNum.val, isArray: colNum.isArray};\r\n colNum = H.accept(colNum, Types.NUMBER, 1);\r\n colNum = Math.trunc(colNum);\r\n }\r\n\r\n if (areaNum == null) {\r\n areaNum = 1;\r\n } else {\r\n areaNum = context.utils.extractRefValue(areaNum);\r\n areaNum = {value: areaNum.val, isArray: areaNum.isArray};\r\n areaNum = H.accept(areaNum, Types.NUMBER, 1);\r\n areaNum = Math.trunc(areaNum);\r\n }\r\n\r\n // get the range area that we want to index\r\n // ranges can be cell ref, range ref or array constant\r\n let range = ranges;\r\n // many ranges (Reference form)\r\n if (ranges instanceof Collection) {\r\n range = ranges.refs[areaNum - 1];\r\n } else if (areaNum > 1) {\r\n throw FormulaError.REF;\r\n }\r\n\r\n if (rowNum === 0 && colNum === 0) {\r\n return range;\r\n }\r\n\r\n // query the whole column\r\n if (rowNum === 0) {\r\n if (H.isRangeRef(range)) {\r\n if (range.ref.to.col - range.ref.from.col < colNum - 1)\r\n throw FormulaError.REF;\r\n range.ref.from.col += colNum - 1;\r\n range.ref.to.col = range.ref.from.col;\r\n return range;\r\n } else if (Array.isArray(range)) {\r\n const res = [];\r\n range.forEach(row => res.push([row[colNum - 1]]));\r\n return res;\r\n }\r\n }\r\n // query the whole row\r\n if (colNum === 0) {\r\n if (H.isRangeRef(range)) {\r\n if (range.ref.to.row - range.ref.from.row < rowNum - 1)\r\n throw FormulaError.REF;\r\n range.ref.from.row += rowNum - 1;\r\n range.ref.to.row = range.ref.from.row;\r\n return range;\r\n } else if (Array.isArray(range)) {\r\n return range[colNum - 1];\r\n }\r\n }\r\n // query single cell\r\n if (rowNum !== 0 && colNum !== 0) {\r\n // range reference\r\n if (H.isRangeRef(range)) {\r\n range = range.ref;\r\n if (range.to.row - range.from.row < rowNum - 1 || range.to.col - range.from.col < colNum - 1)\r\n throw FormulaError.REF;\r\n return {ref: {row: range.from.row + rowNum - 1, col: range.from.col + colNum - 1}};\r\n }\r\n // cell reference\r\n else if (H.isCellRef(range)) {\r\n range = range.ref;\r\n if (rowNum > 1 || colNum > 1)\r\n throw FormulaError.REF;\r\n return {ref: {row: range.row + rowNum - 1, col: range.col + colNum - 1}};\r\n }\r\n // array constant\r\n else if (Array.isArray(range)) {\r\n if (range.length < rowNum || range[0].length < colNum)\r\n throw FormulaError.REF;\r\n return range[rowNum - 1][colNum - 1];\r\n }\r\n }\r\n },\r\n\r\n MATCH: () => {\r\n\r\n },\r\n\r\n // Special\r\n ROW: (context, obj) => {\r\n if (obj == null) {\r\n if (context.position.row != null)\r\n return context.position.row;\r\n else\r\n throw Error('FormulaParser.parse is called without position parameter.')\r\n } else {\r\n if (typeof obj !== 'object' || Array.isArray(obj))\r\n throw FormulaError.VALUE;\r\n if (H.isCellRef(obj)) {\r\n return obj.ref.row;\r\n } else if (H.isRangeRef(obj)) {\r\n return obj.ref.from.row;\r\n } else {\r\n throw Error('ReferenceFunctions.ROW should not reach here.')\r\n }\r\n }\r\n },\r\n\r\n // Special\r\n ROWS: (context, obj) => {\r\n if (obj == null) {\r\n throw Error('ROWS requires one argument');\r\n }\r\n if (typeof obj != 'object' || Array.isArray(obj))\r\n throw FormulaError.VALUE;\r\n if (H.isCellRef(obj)) {\r\n return 1;\r\n } else if (H.isRangeRef(obj)) {\r\n return Math.abs(obj.ref.from.row - obj.ref.to.row) + 1;\r\n } else {\r\n throw Error('ReferenceFunctions.ROWS should not reach here.')\r\n }\r\n },\r\n\r\n TRANSPOSE: (array) => {\r\n array = H.accept(array, Types.ARRAY, undefined, false);\r\n // https://github.com/numbers/numbers.js/blob/master/lib/numbers/matrix.js#L171\r\n const result = [];\r\n\r\n for (let i = 0; i < array[0].length; i++) {\r\n result[i] = [];\r\n\r\n for (let j = 0; j < array.length; j++) {\r\n result[i][j] = array[j][i];\r\n }\r\n }\r\n\r\n return result;\r\n },\r\n\r\n VLOOKUP: (lookupValue, tableArray, colIndexNum, rangeLookup) => {\r\n // preserve type of lookupValue\r\n lookupValue = H.accept(lookupValue);\r\n try {\r\n tableArray = H.accept(tableArray, Types.ARRAY, undefined, false);\r\n } catch (e) {\r\n // catch #VALUE! and throw #N/A\r\n if (e instanceof FormulaError)\r\n throw FormulaError.NA;\r\n throw e;\r\n }\r\n colIndexNum = H.accept(colIndexNum, Types.NUMBER);\r\n rangeLookup = H.accept(rangeLookup, Types.BOOLEAN, true);\r\n\r\n // check if colIndexNum out of bound\r\n if (colIndexNum < 1)\r\n throw FormulaError.VALUE;\r\n if (tableArray[0][colIndexNum - 1] === undefined)\r\n throw FormulaError.REF;\r\n\r\n const lookupType = typeof lookupValue; // 'number', 'string', 'boolean'\r\n\r\n // approximate lookup (assume the array is sorted)\r\n if (rangeLookup) {\r\n let prevValue = lookupType === typeof tableArray[0][0] ? tableArray[0][0] : null;\r\n for (let i = 1; i < tableArray.length; i++) {\r\n const currRow = tableArray[i];\r\n const currValue = tableArray[i][0];\r\n const type = typeof currValue;\r\n // skip the value if type does not match\r\n if (type !== lookupType)\r\n continue;\r\n // if the previous two values are greater than lookup value, throw #N/A\r\n if (prevValue > lookupValue && currValue > lookupValue) {\r\n throw FormulaError.NA;\r\n }\r\n if (currValue === lookupValue)\r\n return currRow[colIndexNum - 1];\r\n // if previous value <= lookup value and current value > lookup value\r\n if (prevValue != null && currValue > lookupValue && prevValue <= lookupValue) {\r\n return tableArray[i - 1][colIndexNum - 1];\r\n }\r\n prevValue = currValue;\r\n }\r\n if (prevValue == null)\r\n throw FormulaError.NA;\r\n return prevValue;\r\n }\r\n // exact lookup with wildcard support\r\n else {\r\n let index = -1;\r\n if (WildCard.isWildCard(lookupValue)) {\r\n index = tableArray.findIndex(currRow => {\r\n return WildCard.toRegex(lookupValue, 'i').test(currRow[0]);\r\n });\r\n } else {\r\n index = tableArray.findIndex(currRow => {\r\n return currRow[0] === lookupValue;\r\n });\r\n }\r\n // the exact match is not found\r\n if (index === -1) throw FormulaError.NA;\r\n return tableArray[index][colIndexNum - 1];\r\n }\r\n },\r\n};\r\n\r\nmodule.exports = ReferenceFunctions;\r\n","const FormulaError = require('../error');\r\nconst {FormulaHelpers, Types} = require('../helpers');\r\nconst H = FormulaHelpers;\r\n\r\nconst error2Number = {\r\n '#NULL!': 1, '#DIV/0!': 2, '#VALUE!': 3, '#REF!': 4, '#NAME?': 5,\r\n '#NUM!': 6, '#N/A': 7\r\n};\r\n\r\nconst InfoFunctions = {\r\n\r\n CELL: (infoType, reference) => {\r\n // throw FormulaError.NOT_IMPLEMENTED('CELL');\r\n },\r\n\r\n 'ERROR.TYPE': (value) => {\r\n value = H.accept(value);\r\n if ( value instanceof FormulaError)\r\n return error2Number[value.toString()];\r\n throw FormulaError.NA;\r\n },\r\n\r\n INFO: () => {\r\n },\r\n\r\n ISBLANK: (value) => {\r\n if (!value.ref)\r\n return false;\r\n // null and undefined are also blank\r\n return value.value == null || value.value === '';\r\n },\r\n\r\n ISERR: (value) => {\r\n value = H.accept(value);\r\n return value instanceof FormulaError && value.toString() !== '#N/A';\r\n },\r\n\r\n ISERROR: (value) => {\r\n value = H.accept(value);\r\n return value instanceof FormulaError;\r\n },\r\n\r\n ISEVEN: number => {\r\n number = H.accept(number, Types.NUMBER);\r\n number = Math.trunc(number);\r\n return number % 2 === 0;\r\n },\r\n\r\n ISLOGICAL: (value) => {\r\n value = H.accept(value);\r\n return typeof value === 'boolean';\r\n },\r\n\r\n ISNA: (value) => {\r\n value = H.accept(value);\r\n return value instanceof FormulaError && value.toString() === '#N/A';\r\n },\r\n\r\n ISNONTEXT: (value) => {\r\n value = H.accept(value);\r\n return typeof value !== 'string';\r\n },\r\n\r\n ISNUMBER: (value) => {\r\n value = H.accept(value);\r\n return typeof value === \"number\";\r\n },\r\n\r\n ISREF: (value) => {\r\n if (!value.ref)\r\n return false;\r\n if (H.isCellRef(value) && (value.ref.row > 1048576 || value.ref.col > 16384)) {\r\n return false;\r\n }\r\n if (H.isRangeRef(value) && (value.ref.from.row > 1048576 || value.ref.from.col > 16384\r\n || value.ref.to.row > 1048576 || value.ref.to.col > 16384)) {\r\n return false;\r\n }\r\n value = H.accept(value);\r\n return !(value instanceof FormulaError && value.toString() === '#REF!');\r\n },\r\n\r\n ISTEXT: (value) => {\r\n value = H.accept(value);\r\n return typeof value === 'string';\r\n },\r\n\r\n N: value => {\r\n value = H.accept(value);\r\n const type = typeof value;\r\n if (type === 'number')\r\n return value;\r\n else if (type === \"boolean\")\r\n return Number(value);\r\n else if (value instanceof FormulaError)\r\n throw value;\r\n return 0;\r\n },\r\n\r\n NA: () => {\r\n throw FormulaError.NA;\r\n },\r\n\r\n TYPE: value => {\r\n // a reference\r\n if (value.ref) {\r\n if (H.isRangeRef(value)) {\r\n return 16;\r\n } else if (H.isCellRef(value)) {\r\n value = H.accept(value);\r\n // empty cell is number type\r\n if (typeof value === \"string\" && value.length === 0)\r\n return 1;\r\n }\r\n }\r\n value = H.accept(value);\r\n const type = typeof value;\r\n if (type === 'number')\r\n return 1;\r\n else if (type === \"string\")\r\n return 2;\r\n else if (type === \"boolean\")\r\n return 4;\r\n else if (value instanceof FormulaError)\r\n return 16;\r\n else if (Array.isArray(value))\r\n return 64;\r\n },\r\n};\r\n\r\n\r\nmodule.exports = InfoFunctions;\r\n","const FormulaError = require('../error');\r\nconst {FormulaHelpers, Types} = require('../helpers');\r\nconst H = FormulaHelpers;\r\nconst jStat = require(\"jstat\");\r\nconst MathFunctions = require('./math');\r\nconst SQRT2PI = 2.5066282746310002;\r\n\r\nconst DistributionFunctions = {\r\n 'BETA.DIST': (x, alpha, beta, cumulative, a, b) => {\r\n x = H.accept(x, Types.NUMBER);\r\n alpha = H.accept(alpha, Types.NUMBER);\r\n beta = H.accept(beta, Types.NUMBER);\r\n cumulative = H.accept(cumulative, Types.BOOLEAN);\r\n a = H.accept(a, Types.NUMBER, 0);\r\n b = H.accept(b, Types.NUMBER, 1);\r\n if (alpha <= 0 || beta <= 0 || x < a || x > b || a === b)\r\n throw FormulaError.NUM;\r\n\r\n x = (x - a) / (b - a);\r\n return cumulative ? jStat.beta.cdf(x, alpha, beta) : jStat.beta.pdf(x, alpha, beta) / (b - a);\r\n },\r\n\r\n 'BETA.INV': (probability, alpha, beta, a, b) => {\r\n probability = H.accept(probability, Types.NUMBER);\r\n alpha = H.accept(alpha, Types.NUMBER);\r\n beta = H.accept(beta, Types.NUMBER);\r\n a = H.accept(a, Types.NUMBER, 0);\r\n b = H.accept(b, Types.NUMBER, 1);\r\n if (alpha <= 0 || beta <= 0 || probability <= 0 || probability > 1)\r\n throw FormulaError.NUM;\r\n return jStat.beta.inv(probability, alpha, beta) * (b - a) + a;\r\n },\r\n\r\n 'BINOM.DIST': (numberS, trials, probabilityS, cumulative) => {\r\n numberS = H.accept(numberS, Types.NUMBER);\r\n trials = H.accept(trials, Types.NUMBER);\r\n probabilityS = H.accept(probabilityS, Types.NUMBER);\r\n cumulative = H.accept(cumulative, Types.BOOLEAN);\r\n if (trials < 0 || probabilityS < 0 || probabilityS > 1 || numberS < 0 || numberS > trials)\r\n throw FormulaError.NUM;\r\n\r\n return cumulative ? jStat.binomial.cdf(numberS, trials, probabilityS)\r\n : jStat.binomial.pdf(numberS, trials, probabilityS);\r\n },\r\n\r\n 'BINOM.DIST.RANGE': (trials, probabilityS, numberS, numberS2) => {\r\n trials = H.accept(trials, Types.NUMBER);\r\n probabilityS = H.accept(probabilityS, Types.NUMBER);\r\n numberS = H.accept(numberS, Types.NUMBER);\r\n numberS2 = H.accept(numberS2, Types.NUMBER, numberS);\r\n if (trials < 0 || probabilityS < 0 || probabilityS > 1 || numberS < 0 || numberS > trials || numberS2 < numberS || numberS2 > trials)\r\n throw FormulaError.NUM;\r\n\r\n let result = 0;\r\n for (let i = numberS; i <= numberS2; i++) {\r\n result += MathFunctions.COMBIN(trials, i) * Math.pow(probabilityS, i) * Math.pow(1 - probabilityS, trials - i);\r\n }\r\n return result;\r\n },\r\n\r\n 'BINOM.INV': (trials, probabilityS, alpha) => {\r\n trials = H.accept(trials, Types.NUMBER);\r\n probabilityS = H.accept(probabilityS, Types.NUMBER);\r\n alpha = H.accept(alpha, Types.NUMBER);\r\n if (trials < 0 || probabilityS < 0 || probabilityS > 1 || alpha < 0 || alpha > 1)\r\n throw FormulaError.NUM;\r\n\r\n let x = 0;\r\n while (x <= trials) {\r\n if (jStat.binomial.cdf(x, trials, probabilityS) >= alpha) {\r\n return x;\r\n }\r\n x++;\r\n }\r\n },\r\n\r\n 'CHISQ.DIST': (x, degFreedom, cumulative) => {\r\n x = H.accept(x, Types.NUMBER);\r\n degFreedom = H.accept(degFreedom, Types.NUMBER);\r\n cumulative = H.accept(cumulative, Types.NUMBER);\r\n degFreedom = Math.trunc(degFreedom);\r\n if (x < 0 || degFreedom < 1 || degFreedom > 10 ** 10)\r\n throw FormulaError.NUM;\r\n\r\n return cumulative ? jStat.chisquare.cdf(x, degFreedom) : jStat.chisquare.pdf(x, degFreedom);\r\n },\r\n\r\n 'CHISQ.DIST.RT': (x, degFreedom) => {\r\n x = H.accept(x, Types.NUMBER);\r\n degFreedom = H.accept(degFreedom, Types.NUMBER);\r\n degFreedom = Math.trunc(degFreedom);\r\n if (x < 0 || degFreedom < 1 || degFreedom > 10 ** 10)\r\n throw FormulaError.NUM;\r\n\r\n return 1 - jStat.chisquare.cdf(x, degFreedom);\r\n },\r\n\r\n 'CHISQ.INV': (probability, degFreedom) => {\r\n probability = H.accept(probability, Types.NUMBER);\r\n degFreedom = H.accept(degFreedom, Types.NUMBER);\r\n degFreedom = Math.trunc(degFreedom);\r\n if (probability < 0 || probability > 1 || degFreedom < 1 || degFreedom > 10 ** 10)\r\n throw FormulaError.NUM;\r\n\r\n return jStat.chisquare.inv(probability, degFreedom);\r\n },\r\n\r\n 'CHISQ.INV.RT': (probability, degFreedom) => {\r\n probability = H.accept(probability, Types.NUMBER);\r\n degFreedom = H.accept(degFreedom, Types.NUMBER);\r\n degFreedom = Math.trunc(degFreedom);\r\n if (probability < 0 || probability > 1 || degFreedom < 1 || degFreedom > 10 ** 10)\r\n throw FormulaError.NUM;\r\n\r\n return jStat.chisquare.inv(1 - probability, degFreedom);\r\n },\r\n\r\n 'CHISQ.TEST': (actualRange, expectedRange) => {\r\n const actual = H.accept(actualRange, Types.ARRAY, undefined, false, false);\r\n const expected = H.accept(expectedRange, Types.ARRAY, undefined, false, false);\r\n\r\n if (actual.length !== expected.length || actual[0].length !== expected[0].length\r\n || actual.length === 1 && actual[0].length === 1)\r\n throw FormulaError.NA;\r\n\r\n const row = actual.length;\r\n const col = actual[0].length;\r\n let dof = (row - 1) * (col - 1);\r\n if (row === 1)\r\n dof = col - 1;\r\n else\r\n dof = row - 1;\r\n let xsqr = 0;\r\n\r\n for (let i = 0; i < row; i++) {\r\n for (let j = 0; j < col; j++) {\r\n if (typeof actual[i][j] !== \"number\" || typeof expected[i][j] !== \"number\")\r\n continue;\r\n if (expected[i][j] === 0) throw FormulaError.DIV0;\r\n xsqr += Math.pow((actual[i][j] - expected[i][j]), 2) / expected[i][j];\r\n }\r\n }\r\n\r\n // Get independent by X square and its degree of freedom\r\n let p = Math.exp(-0.5 * xsqr);\r\n if ((dof % 2) === 1) {\r\n p = p * Math.sqrt(2 * xsqr / Math.PI);\r\n }\r\n let k = dof;\r\n while (k >= 2) {\r\n p = p * xsqr / k;\r\n k = k - 2;\r\n }\r\n let t = p, a = dof;\r\n while (t > 0.000000000000001 * p) {\r\n a = a + 2;\r\n t = t * xsqr / a;\r\n p = p + t;\r\n }\r\n return 1 - p;\r\n },\r\n\r\n 'CONFIDENCE.NORM': (alpha, std, size) => {\r\n alpha = H.accept(alpha, Types.NUMBER);\r\n std = H.accept(std, Types.NUMBER);\r\n size = H.accept(size, Types.NUMBER);\r\n size = Math.trunc(size);\r\n if (alpha <= 0 || alpha >= 1 || std <= 0 || size < 1)\r\n throw FormulaError.NUM;\r\n return jStat.normalci(1, alpha, std, size)[1] - 1;\r\n },\r\n\r\n 'CONFIDENCE.T': (alpha, std, size) => {\r\n alpha = H.accept(alpha, Types.NUMBER);\r\n std = H.accept(std, Types.NUMBER);\r\n size = H.accept(size, Types.NUMBER);\r\n size = Math.trunc(size);\r\n if (alpha <= 0 || alpha >= 1 || std <= 0 || size < 1)\r\n throw FormulaError.NUM;\r\n if (size === 1)\r\n throw FormulaError.DIV0;\r\n return jStat.tci(1, alpha, std, size)[1] - 1;\r\n },\r\n\r\n CORREL: (array1, array2) => {\r\n array1 = H.accept(array1, Types.ARRAY, undefined, true, true);\r\n array2 = H.accept(array2, Types.ARRAY, undefined, true, true);\r\n if (array1.length !== array2.length)\r\n throw FormulaError.NA;\r\n\r\n // filter out values that are not number\r\n const filterArr1 = [], filterArr2 = [];\r\n for (let i = 0; i < array1.length; i++) {\r\n if (typeof array1[i] !== \"number\" || typeof array2[i] !== \"number\")\r\n continue;\r\n filterArr1.push(array1[i]);\r\n filterArr2.push(array2[i]);\r\n }\r\n if (filterArr1.length <= 1)\r\n throw FormulaError.DIV0;\r\n\r\n return jStat.corrcoeff(filterArr1, filterArr2);\r\n },\r\n\r\n 'COVARIANCE.P': (array1, array2) => {\r\n array1 = H.accept(array1, Types.ARRAY, undefined, true, true);\r\n array2 = H.accept(array2, Types.ARRAY, undefined, true, true);\r\n if (array1.length !== array2.length)\r\n throw FormulaError.NA;\r\n\r\n // filter out values that are not number\r\n const filterArr1 = [], filterArr2 = [];\r\n for (let i = 0; i < array1.length; i++) {\r\n if (typeof array1[i] !== \"number\" || typeof array2[i] !== \"number\")\r\n continue;\r\n filterArr1.push(array1[i]);\r\n filterArr2.push(array2[i]);\r\n }\r\n const mean1 = jStat.mean(filterArr1), mean2 = jStat.mean(filterArr2);\r\n let result = 0;\r\n for (let i = 0; i < filterArr1.length; i++) {\r\n result += (filterArr1[i] - mean1) * (filterArr2[i] - mean2);\r\n }\r\n return result / filterArr1.length;\r\n },\r\n\r\n 'COVARIANCE.S': (array1, array2) => {\r\n array1 = H.accept(array1, Types.ARRAY, undefined, true, true);\r\n array2 = H.accept(array2, Types.ARRAY, undefined, true, true);\r\n if (array1.length !== array2.length)\r\n throw FormulaError.NA;\r\n\r\n // filter out values that are not number\r\n const filterArr1 = [], filterArr2 = [];\r\n for (let i = 0; i < array1.length; i++) {\r\n if (typeof array1[i] !== \"number\" || typeof array2[i] !== \"number\")\r\n continue;\r\n filterArr1.push(array1[i]);\r\n filterArr2.push(array2[i]);\r\n }\r\n\r\n if (filterArr1.length <= 1)\r\n throw FormulaError.DIV0;\r\n\r\n return jStat.covariance(filterArr1, filterArr2);\r\n },\r\n\r\n DEVSQ: (...numbers) => {\r\n let sum = 0, x = [];\r\n // parse number only if the input is literal\r\n H.flattenParams(numbers, Types.NUMBER, true, (item, info) => {\r\n if (typeof item === \"number\") {\r\n sum += item;\r\n x.push(item);\r\n }\r\n });\r\n const mean = sum / x.length;\r\n sum = 0;\r\n for (let i = 0; i < x.length; i++) {\r\n sum += (x[i] - mean) ** 2;\r\n }\r\n return sum;\r\n },\r\n\r\n 'EXPON.DIST': (x, lambda, cumulative) => {\r\n x = H.accept(x, Types.NUMBER);\r\n lambda = H.accept(lambda, Types.NUMBER);\r\n cumulative = H.accept(cumulative, Types.BOOLEAN);\r\n if (x < 0 || lambda <= 0)\r\n throw FormulaError.NUM;\r\n return cumulative ? jStat.exponential.cdf(x, lambda) : jStat.exponential.pdf(x, lambda);\r\n },\r\n\r\n 'F.DIST': (x, d1, d2, cumulative) => {\r\n x = H.accept(x, Types.NUMBER);\r\n d1 = H.accept(d1, Types.NUMBER);\r\n d2 = H.accept(d2, Types.NUMBER);\r\n cumulative = H.accept(cumulative, Types.BOOLEAN);\r\n\r\n // If x is negative, F.DIST returns the #NUM! error value.\r\n // If deg_freedom1 < 1, F.DIST returns the #NUM! error value.\r\n // If deg_freedom2 < 1, F.DIST returns the #NUM! error value.\r\n if (x < 0 || d1 < 1 || d2 < 1) {\r\n throw FormulaError.NUM;\r\n }\r\n\r\n // If deg_freedom1 or deg_freedom2 is not an integer, it is truncated.\r\n d1 = Math.trunc(d1);\r\n d2 = Math.trunc(d2);\r\n\r\n return cumulative ? jStat.centralF.cdf(x, d1, d2) : jStat.centralF.pdf(x, d1, d2);\r\n },\r\n\r\n 'F.DIST.RT': (x, d1, d2) => {\r\n // David\r\n x = H.accept(x, Types.NUMBER);\r\n d1 = H.accept(d1, Types.NUMBER);\r\n d2 = H.accept(d2, Types.NUMBER);\r\n // If deg_freedom1 < 1 F.DIST.RT returns the #NUM! error value.\r\n // If deg_freedom2 < 1 F.DIST.RT returns the #NUM! error value.\r\n // If x is negative, F.DIST.RT returns the #NUM! error value.\r\n if (x < 0 || d1 < 1 || d2 < 1) {\r\n throw FormulaError.NUM;\r\n }\r\n\r\n // If deg_freedom1 or deg_freedom2 is not an integer, it is truncated.\r\n d1 = Math.trunc(d1);\r\n d2 = Math.trunc(d2);\r\n\r\n return 1 - jStat.centralF.cdf(x, d1, d2);\r\n },\r\n\r\n 'F.INV': (probability, d1, d2) => {\r\n // David\r\n probability = H.accept(probability, Types.NUMBER);\r\n d1 = H.accept(d1, Types.NUMBER);\r\n d2 = H.accept(d2, Types.NUMBER);\r\n // If probability < 0 or probability > 1, F.INV returns the #NUM! error value.\r\n if (probability < 0.0 || probability > 1.0) {\r\n throw FormulaError.NUM;\r\n }\r\n // If deg_freedom1 < 1, or deg_freedom2 < 1, F.INV returns the #NUM! error value.\r\n if (d1 < 1.0 || d2 < 1.0) {\r\n throw FormulaError.NUM;\r\n }\r\n\r\n // If deg_freedom1 or deg_freedom2 is not an integer, it is truncated.\r\n d1 = Math.trunc(d1);\r\n d2 = Math.trunc(d2);\r\n\r\n return jStat.centralF.inv(probability, d1, d2);\r\n },\r\n\r\n 'F.INV.RT': (probability, d1, d2) => {\r\n // David\r\n probability = H.accept(probability, Types.NUMBER);\r\n d1 = H.accept(d1, Types.NUMBER);\r\n d2 = H.accept(d2, Types.NUMBER);\r\n // If Probability is < 0 or probability is > 1, F.INV.RT returns the #NUM! error value.\r\n if (probability < 0.0 || probability > 1.0) {\r\n throw FormulaError.NUM;\r\n }\r\n\r\n // If Deg_freedom1 is < 1, or Deg_freedom2 is < 1, F.INV.RT returns the #NUM! error value.\r\n if (d1 < 1.0 || d1 >= Math.pow(10, 10)) {\r\n throw FormulaError.NUM;\r\n }\r\n\r\n // If Deg_freedom2 is < 1 or Deg_freedom2 is ≥ 10^10, F.INV.RT returns the #NUM! error value.\r\n if (d2 < 1.0 || d2 >= Math.pow(10, 10)) {\r\n throw FormulaError.NUM;\r\n }\r\n // If Deg_freedom1 or Deg_freedom2 is not an integer, it is truncated.\r\n d1 = Math.trunc(d1);\r\n d2 = Math.trunc(d2);\r\n\r\n return jStat.centralF.inv(1.0 - probability, d1, d2);\r\n },\r\n\r\n /**\r\n * https://en.wikipedia.org/wiki/F-test_of_equality_of_variances\r\n */\r\n 'F.TEST': (array1, array2) => {\r\n array1 = H.accept(array1, Types.ARRAY, undefined, true, true);\r\n array2 = H.accept(array2, Types.ARRAY, undefined, true, true);\r\n\r\n // filter out values that are not number\r\n const x1 = [], x2 = [];\r\n let x1Mean = 0, x2Mean = 0;\r\n for (let i = 0; i < Math.max(array1.length, array2.length); i++) {\r\n if (typeof array1[i] === \"number\") {\r\n x1.push(array1[i]);\r\n x1Mean += array1[i];\r\n }\r\n if (typeof array2[i] === \"number\") {\r\n x2.push(array2[i]);\r\n x2Mean += array2[i];\r\n }\r\n }\r\n if (x1.length <= 1 || x2.length <= 1)\r\n throw FormulaError.DIV0;\r\n\r\n x1Mean /= x1.length;\r\n x2Mean /= x2.length;\r\n let s1 = 0, s2 = 0; // sample variance S^2\r\n for (let i = 0; i < x1.length; i++) {\r\n s1 += (x1Mean - x1[i]) ** 2\r\n }\r\n s1 /= x1.length - 1;\r\n for (let i = 0; i < x2.length; i++) {\r\n s2 += (x2Mean - x2[i]) ** 2\r\n }\r\n s2 /= x2.length - 1;\r\n // P(F<=f) one-tail * 2\r\n return jStat.centralF.cdf(s1 / s2, x1.length - 1, x2.length - 1) * 2;\r\n },\r\n\r\n FISHER: (x) => {\r\n // David\r\n x = H.accept(x, Types.NUMBER);\r\n // If x ≤ -1 or if x ≥ 1, FISHER returns the #NUM! error value.\r\n if (x <= -1 || x >= 1) {\r\n throw FormulaError.NUM;\r\n }\r\n return Math.log((1 + x) / (1 - x)) / 2;\r\n },\r\n\r\n FISHERINV: (x) => {\r\n // David\r\n x = H.accept(x, Types.NUMBER);\r\n let e2y = Math.exp(2 * x);\r\n return (e2y - 1) / (e2y + 1);\r\n },\r\n\r\n // FIXME\r\n FORECAST: (x, knownYs, knownXs) => {\r\n x = H.accept(x, Types.NUMBER);\r\n knownYs = H.accept(knownYs, Types.ARRAY, undefined, true, true);\r\n knownXs = H.accept(knownXs, Types.ARRAY, undefined, true, true);\r\n\r\n if (knownXs.length !== knownYs.length)\r\n throw FormulaError.NA;\r\n\r\n // filter out values that are not number\r\n const filteredY = [], filteredX = [];\r\n let xAllEqual = true;\r\n for (let i = 0; i < knownYs.length; i++) {\r\n if (typeof knownYs[i] !== \"number\" || typeof knownXs[i] !== \"number\")\r\n continue;\r\n filteredY.push(knownYs[i]);\r\n filteredX.push(knownXs[i]);\r\n if (knownXs[i] !== knownXs[0])\r\n xAllEqual = false;\r\n }\r\n if (xAllEqual)\r\n throw FormulaError.DIV0;\r\n const yMean = jStat.mean(filteredY);\r\n const xMean = jStat.mean(filteredX);\r\n let numerator = 0, denominator = 0;\r\n for (let i = 0; i < filteredY.length; i++) {\r\n numerator += (filteredX[i] - xMean) * (filteredY[i] - yMean);\r\n denominator += (filteredX[i] - xMean) ** 2;\r\n }\r\n const b = numerator / denominator;\r\n const a = yMean - b * xMean;\r\n return a + b * x;\r\n },\r\n\r\n 'FORECAST.ETS': () => {\r\n // skip, not yet possible to implement, may need tensorflow.js ?\r\n },\r\n\r\n 'FORECAST.ETS.CONFINT': () => {\r\n // skip\r\n },\r\n\r\n 'FORECAST.ETS.SEASONALITY': () => {\r\n // skip\r\n },\r\n\r\n 'FORECAST.ETS.STAT': () => {\r\n // skip\r\n },\r\n\r\n 'FORECAST.LINEAR': (...params) => {\r\n return DistributionFunctions.FORECAST(...params);\r\n },\r\n\r\n FREQUENCY: (dataArray, binsArray) => {\r\n dataArray = H.accept(dataArray, Types.ARRAY, undefined, true, true);\r\n binsArray = H.accept(binsArray, Types.ARRAY, undefined, true, true);\r\n\r\n const binsArrayFiltered = [];\r\n for (let i = 0; i < binsArray.length; i++) {\r\n if (typeof binsArray[i] !== \"number\")\r\n continue;\r\n binsArrayFiltered.push(binsArray[i]);\r\n }\r\n binsArrayFiltered.sort();\r\n binsArrayFiltered.push(Infinity);\r\n\r\n const result = [];\r\n for (let j = 0; j < binsArrayFiltered.length; j++) {\r\n result[j] = [];\r\n result[j][0] = 0;\r\n for (let i = 0; i < dataArray.length; i++) {\r\n if (typeof dataArray[i] !== \"number\") {\r\n continue;\r\n }\r\n const curr = dataArray[i];\r\n if (curr <= binsArrayFiltered[j]) {\r\n result[j][0]++;\r\n dataArray[i] = null;\r\n }\r\n }\r\n }\r\n // return a 2d array\r\n return result;\r\n },\r\n\r\n GAMMA: (x) => {\r\n // David\r\n\r\n // If Number contains characters that are not valid, GAMMA returns the #VALUE! error value.\r\n x = H.accept(x, Types.NUMBER);\r\n\r\n // If Number is a negative integer or 0, GAMMA returns the #NUM! error value.\r\n if (x === 0 || (x < 0 && x === Math.trunc(x))) {\r\n throw FormulaError.NUM;\r\n }\r\n\r\n return jStat.gammafn(x);\r\n },\r\n\r\n 'GAMMA.DIST': (x, alpha, beta, cumulative) => {\r\n // David\r\n // If x, alpha, or beta is nonnumeric, GAMMA.DIST returns the #VALUE! error value.\r\n x = H.accept(x, Types.NUMBER);\r\n alpha = H.accept(alpha, Types.NUMBER);\r\n beta = H.accept(beta, Types.NUMBER);\r\n cumulative = H.accept(cumulative, Types.BOOLEAN);\r\n\r\n // If x < 0, GAMMA.DIST returns the #NUM! error value.\r\n // If alpha ≤ 0 or if beta ≤ 0, GAMMA.DIST returns the #NUM! error value.\r\n if (x < 0 || alpha <= 0 || beta <= 0) {\r\n throw FormulaError.NUM;\r\n }\r\n\r\n return cumulative ? jStat.gamma.cdf(x, alpha, beta, true) : jStat.gamma.pdf(x, alpha, beta, false);\r\n },\r\n\r\n 'GAMMA.INV': (probability, alpha, beta) => {\r\n // David\r\n // If any argument is text, GAMMA.INV returns the #VALUE! error value.\r\n probability = H.accept(probability, Types.NUMBER);\r\n alpha = H.accept(alpha, Types.NUMBER);\r\n beta = H.accept(beta, Types.NUMBER);\r\n\r\n // If probability < 0 or probability > 1, GAMMA.INV returns the #NUM! error value.\r\n // If alpha ≤ 0 or if beta ≤ 0, GAMMA.INV returns the #NUM! error value.\r\n if (probability < 0 || probability > 1 || alpha <= 0 || beta <= 0) {\r\n throw FormulaError.NUM;\r\n }\r\n\r\n return jStat.gamma.inv(probability, alpha, beta);\r\n },\r\n\r\n GAMMALN: (x) => {\r\n // David\r\n\r\n x = H.accept(x, Types.NUMBER);\r\n // If x is nonnumeric, GAMMALN returns the #VALUE! error value.\r\n // If x ≤ 0, GAMMALN returns the #NUM! error value.\r\n if (x <= 0) {\r\n throw FormulaError.NUM;\r\n }\r\n\r\n return jStat.gammaln(x);\r\n },\r\n\r\n 'GAMMALN.PRECISE': (x) => {\r\n // David\r\n // return distribution.GAMMALN(x);\r\n x = H.accept(x, Types.NUMBER);\r\n // If x is nonnumeric, GAMMALN returns the #VALUE! error value.\r\n // If x ≤ 0, GAMMALN returns the #NUM! error value.\r\n if (x <= 0) {\r\n throw FormulaError.NUM;\r\n }\r\n\r\n return jStat.gammaln(x);\r\n },\r\n\r\n GAUSS: (z) => {\r\n // David\r\n // If z is not a valid number, GAUSS returns the #NUM! error value.\r\n // If z is not a valid data type, GAUSS returns the #VALUE! error value.\r\n z = H.accept(z, Types.NUMBER);\r\n\r\n return jStat.normal.cdf(z, 0, 1) - 0.5;\r\n },\r\n\r\n GEOMEAN: (...numbers) => {\r\n // David\r\n const filterArr = [];\r\n // parse number only if the input is literal\r\n H.flattenParams(numbers, Types.NUMBER, true, (item, info) => {\r\n if (typeof item === \"number\") {\r\n filterArr.push(item);\r\n }\r\n });\r\n return jStat.geomean(filterArr);\r\n },\r\n\r\n GROWTH: (knownY, knownX, newX, useConst) => {\r\n // Credits: Ilmari Karonen (http://stackoverflow.com/questions/14161990/how-to-implement-growth-function-in-javascript)\r\n knownY = H.accept(knownY, Types.ARRAY, undefined, true, true);\r\n for (let i = 0; i < knownY.length; i++) {\r\n if (typeof knownY[i] !== \"number\")\r\n throw FormulaError.VALUE;\r\n }\r\n\r\n knownX = H.accept(knownX, Types.ARRAY, null, true, true);\r\n const isKnownXOmitted = knownX == null;\r\n if (knownX == null) {\r\n knownX = [];\r\n for (let i = 1; i <= knownY.length; i++) {\r\n knownX.push(i);\r\n }\r\n } else {\r\n if (knownX.length !== knownY.length)\r\n throw FormulaError.REF;\r\n for (let i = 0; i < knownX.length; i++) {\r\n if (typeof knownX[i] !== \"number\")\r\n throw FormulaError.VALUE;\r\n }\r\n }\r\n\r\n newX = H.accept(newX, Types.ARRAY, null, false, true);\r\n if (newX == null && isKnownXOmitted) {\r\n newX = [];\r\n for (let i = 1; i <= knownY.length; i++) {\r\n newX.push(i);\r\n }\r\n newX = [newX];\r\n } else if (newX == null) {\r\n newX = Array.isArray(knownX[0]) ? knownX : [knownX];\r\n }\r\n useConst = H.accept(useConst, Types.BOOLEAN, true);\r\n\r\n // Calculate sums over the data:\r\n const n = knownY.length;\r\n let avg_x = 0, avg_y = 0, avg_xy = 0, avg_xx = 0;\r\n for (let i = 0; i < n; i++) {\r\n const x = knownX[i];\r\n const y = Math.log(knownY[i]);\r\n avg_x += x;\r\n avg_y += y;\r\n avg_xy += x * y;\r\n avg_xx += x * x;\r\n }\r\n avg_x /= n;\r\n avg_y /= n;\r\n avg_xy /= n;\r\n avg_xx /= n;\r\n\r\n // Compute linear regression coefficients:\r\n let beta;\r\n let alpha;\r\n if (useConst) {\r\n beta = (avg_xy - avg_x * avg_y) / (avg_xx - avg_x * avg_x);\r\n alpha = avg_y - beta * avg_x;\r\n } else {\r\n beta = avg_xy / avg_xx;\r\n alpha = 0;\r\n }\r\n\r\n // Compute and return result array:\r\n const new_y = [];\r\n for (let i = 0; i < newX.length; i++) {\r\n new_y[i] = [];\r\n for (let j = 0; j < newX[0].length; j++) {\r\n if (typeof newX[i][j] !== \"number\")\r\n throw FormulaError.VALUE;\r\n new_y[i][j] = Math.exp(alpha + beta * newX[i][j]);\r\n }\r\n }\r\n return new_y;\r\n },\r\n\r\n HARMEAN: (...numbers) => {\r\n let cnt = 0, denominator = 0;\r\n // parse number only if the input is literal\r\n H.flattenParams(numbers, Types.NUMBER, true, (item, info) => {\r\n if (typeof item === \"number\") {\r\n denominator += 1 / item;\r\n cnt++;\r\n }\r\n });\r\n return cnt / denominator;\r\n },\r\n\r\n 'HYPGEOM.DIST': (sample_s, number_sample, population_s, number_pop, cumulative) => {\r\n // num_successes, num_draws, successes_in_pop, pop_size\r\n // If any argument is nonnumeric, HYPGEOM.DIST returns the #VALUE! error value.\r\n sample_s = H.accept(sample_s, Types.NUMBER);\r\n number_sample = H.accept(number_sample, Types.NUMBER);\r\n population_s = H.accept(population_s, Types.NUMBER);\r\n number_pop = H.accept(number_pop, Types.NUMBER);\r\n cumulative = H.accept(cumulative, Types.BOOLEAN);\r\n\r\n // All arguments are truncated to integers.\r\n sample_s = Math.trunc(sample_s);\r\n number_sample = Math.trunc(number_sample);\r\n population_s = Math.trunc(population_s);\r\n number_pop = Math.trunc(number_pop);\r\n\r\n // // If number_pop ≤ 0, HYPGEOM.DIST returns the #NUM! error value.\r\n if (number_pop <= 0 || sample_s < 0 || number_sample <= 0 || population_s <= 0) {\r\n throw FormulaError.NUM;\r\n }\r\n\r\n // // If number_sample ≤ 0 or number_sample > number_population, HYPGEOM.DIST returns the #NUM! error value.\r\n if (number_sample > number_pop) {\r\n throw FormulaError.NUM;\r\n }\r\n // // If population_s ≤ 0 or population_s > number_population, HYPGEOM.DIST returns the #NUM! error value.\r\n if (population_s > number_pop) {\r\n throw FormulaError.NUM;\r\n }\r\n\r\n // If sample_s < 0 or sample_s is greater than the lesser of number_sample or population_s, HYPGEOM.DIST returns the #NUM! error value.\r\n // Google and Mircrosoft has different version on this funtion\r\n if (number_sample < sample_s || population_s < sample_s) {\r\n throw FormulaError.NUM;\r\n }\r\n // If sample_s is less than the larger of 0 or (number_sample - number_population + population_s), HYPGEOM.DIST returns the #NUM! error value.\r\n if (sample_s < (number_sample - number_pop + population_s)) {\r\n throw FormulaError.NUM;\r\n }\r\n\r\n function pdf(x, n, M, N) {\r\n return MathFunctions.COMBIN(M, x) * MathFunctions.COMBIN(N - M, n - x) / MathFunctions.COMBIN(N, n);\r\n }\r\n\r\n function cdf(x, n, M, N) {\r\n let result = 0;\r\n for (let i = 0; i <= x; i++) {\r\n result += pdf(i, n, M, N);\r\n }\r\n return result;\r\n }\r\n\r\n return cumulative ? cdf(sample_s, number_sample, population_s, number_pop) : pdf(sample_s, number_sample, population_s, number_pop);\r\n },\r\n\r\n INTERCEPT: (knownYs, knownXs) => {\r\n // similar to FORECAST\r\n knownYs = H.accept(knownYs, Types.ARRAY, undefined, true, true);\r\n knownXs = H.accept(knownXs, Types.ARRAY, undefined, true, true);\r\n\r\n if (knownXs.length !== knownYs.length)\r\n throw FormulaError.NA;\r\n\r\n // filter out values that are not number\r\n const filteredY = [], filteredX = [];\r\n for (let i = 0; i < knownYs.length; i++) {\r\n if (typeof knownYs[i] !== \"number\" || typeof knownXs[i] !== \"number\")\r\n continue;\r\n filteredY.push(knownYs[i]);\r\n filteredX.push(knownXs[i]);\r\n }\r\n if (filteredY.length <= 1)\r\n throw FormulaError.DIV0;\r\n const yMean = jStat.mean(filteredY);\r\n const xMean = jStat.mean(filteredX);\r\n let numerator = 0, denominator = 0;\r\n for (let i = 0; i < filteredY.length; i++) {\r\n numerator += (filteredX[i] - xMean) * (filteredY[i] - yMean);\r\n denominator += (filteredX[i] - xMean) ** 2;\r\n }\r\n const b = numerator / denominator;\r\n return yMean - b * xMean;\r\n },\r\n\r\n KURT: (...numbers) => {\r\n let mean = 0, range = [];\r\n // parse number only if the input is literal\r\n H.flattenParams(numbers, Types.NUMBER, true, (item, info) => {\r\n if (typeof item === \"number\") {\r\n mean += item;\r\n range.push(item);\r\n }\r\n });\r\n const n = range.length;\r\n mean /= n;\r\n let sigma = 0;\r\n for (let i = 0; i < n; i++) {\r\n sigma += Math.pow(range[i] - mean, 4);\r\n }\r\n sigma = sigma / Math.pow(jStat.stdev(range, true), 4);\r\n return ((n * (n + 1)) / ((n - 1) * (n - 2) * (n - 3))) * sigma - 3 * (n - 1) * (n - 1) / ((n - 2) * (n - 3));\r\n },\r\n\r\n LINEST: () => {\r\n\r\n },\r\n\r\n LOGEST: () => {\r\n\r\n },\r\n\r\n 'LOGNORM.DIST': (x, mean, standard_dev, cumulative) => {\r\n // if any argument is nonnumeric, LOGNORM.DIST returns the #VALUE! error value.\r\n x = H.accept(x, Types.NUMBER);\r\n mean = H.accept(mean, Types.NUMBER);\r\n standard_dev = H.accept(standard_dev, Types.NUMBER);\r\n cumulative = H.accept(cumulative, Types.BOOLEAN);\r\n // If x ≤ 0 or if standard_dev ≤ 0, LOGNORM.DIST returns the #NUM! error value.\r\n if (x <= 0 || standard_dev <= 0) {\r\n throw FormulaError.NUM;\r\n }\r\n\r\n return cumulative ? jStat.lognormal.cdf(x, mean, standard_dev) : jStat.lognormal.pdf(x, mean, standard_dev);\r\n },\r\n\r\n 'LOGNORM.INV': (probability, mean, standard_dev) => {\r\n // If any argument is nonnumeric, LOGNORM.INV returns the #VALUE! error value.\r\n probability = H.accept(probability, Types.NUMBER);\r\n mean = H.accept(mean, Types.NUMBER);\r\n standard_dev = H.accept(standard_dev, Types.NUMBER);\r\n // If probability <= 0 or probability >= 1, LOGNORM.INV returns the #NUM! error value.\r\n if (probability <= 0 || probability >= 1) {\r\n throw FormulaError.NUM;\r\n }\r\n // If standard_dev <= 0, LOGNORM.INV returns the #NUM! error value.\r\n if (standard_dev <= 0) {\r\n throw FormulaError.NUM;\r\n }\r\n\r\n return jStat.lognormal.inv(probability, mean, standard_dev);\r\n },\r\n\r\n 'MODE.MULT': () => {\r\n\r\n },\r\n\r\n 'MODE.SNGL': () => {\r\n\r\n },\r\n\r\n 'NEGBINOM.DIST': (number_f, number_s, probability_s, cumulative) => {\r\n // If any argument is nonnumeric, NEGBINOM.DIST returns the #VALUE! error value.\r\n number_f = H.accept(number_f, Types.NUMBER);\r\n number_s = H.accept(number_s, Types.NUMBER);\r\n probability_s = H.accept(probability_s, Types.NUMBER);\r\n cumulative = H.accept(cumulative, Types.BOOLEAN);\r\n // Number_f and number_s are truncated to integers.\r\n number_f = Math.trunc(number_f);\r\n number_s = Math.trunc(number_s);\r\n\r\n // If probability_s < 0 or if probability > 1, NEGBINOM.DIST returns the #NUM! error value.\r\n if (probability_s < 0 || probability_s > 1) {\r\n throw FormulaError.NUM;\r\n }\r\n // If number_f < 0 or number_s < 1, NEGBINOM.DIST returns the #NUM! error value.\r\n if (number_f < 0 || number_s < 1) {\r\n throw FormulaError.NUM;\r\n }\r\n\r\n return cumulative ? jStat.negbin.cdf(number_f, number_s, probability_s) : jStat.negbin.pdf(number_f, number_s, probability_s);\r\n },\r\n\r\n 'NORM.DIST': (x, mean, standard_dev, cumulative) => {\r\n // If mean or standard_dev is nonnumeric, NORM.DIST returns the #VALUE! error value.\r\n x = H.accept(x, Types.NUMBER);\r\n mean = H.accept(mean, Types.NUMBER);\r\n standard_dev = H.accept(standard_dev, Types.NUMBER);\r\n cumulative = H.accept(cumulative, Types.BOOLEAN);\r\n\r\n // If standard_dev ≤ 0, NORM.DIST returns the #NUM! error value.\r\n if (standard_dev <= 0) {\r\n throw FormulaError.NUM;\r\n }\r\n // If mean = 0, standard_dev = 1, and cumulative = TRUE, NORM.DIST returns the standard normal distribution, NORM.S.DIST.\r\n return cumulative ? jStat.normal.cdf(x, mean, standard_dev) : jStat.normal.pdf(x, mean, standard_dev);\r\n\r\n },\r\n\r\n 'NORM.INV': (probability, mean, standard_dev) => {\r\n // If any argument is nonnumeric, NORM.INV returns the #VALUE! error value.\r\n probability = H.accept(probability, Types.NUMBER);\r\n mean = H.accept(mean, Types.NUMBER);\r\n standard_dev = H.accept(standard_dev, Types.NUMBER);\r\n\r\n // If probability <= 0 or if probability >= 1, NORM.INV returns the #NUM! error value.\r\n if (probability <= 0 || probability >= 1) {\r\n throw FormulaError.NUM;\r\n }\r\n // If standard_dev ≤ 0, NORM.INV returns the #NUM! error value.\r\n if (standard_dev <= 0) {\r\n throw FormulaError.NUM;\r\n }\r\n // If mean = 0 and standard_dev = 1, NORM.INV uses the standard normal distribution (see NORMS.INV).\r\n // if(mean === 0 && standard_dev === 1){\r\n // }\r\n\r\n return jStat.normal.inv(probability, mean, standard_dev);\r\n\r\n },\r\n\r\n 'NORM.S.DIST': (z, cumulative) => {\r\n // If z is nonnumeric, NORM.S.DIST returns the #VALUE! error value.\r\n z = H.accept(z, Types.NUMBER);\r\n cumulative = H.accept(cumulative, Types.BOOLEAN);\r\n\r\n return (cumulative) ? jStat.normal.cdf(z, 0, 1) : jStat.normal.pdf(z, 0, 1);\r\n },\r\n\r\n 'NORM.S.INV': (probability) => {\r\n // If probability is nonnumeric, NORMS.INV returns the #VALUE! error value.\r\n probability = H.accept(probability, Types.NUMBER);\r\n // If probability <= 0 or if probability >= 1, NORMS.INV returns the #NUM! error value.\r\n if (probability <= 0 || probability >= 1) {\r\n throw FormulaError.NUM;\r\n }\r\n return jStat.normal.inv(probability, 0, 1);\r\n },\r\n\r\n PEARSON: () => {\r\n\r\n },\r\n\r\n 'PERCENTILE.EXC': () => {\r\n\r\n },\r\n\r\n 'PERCENTILE.INC': () => {\r\n\r\n },\r\n\r\n 'PERCENTRANK.EXC': () => {\r\n\r\n },\r\n\r\n 'PERCENTRANK.INC': () => {\r\n\r\n },\r\n\r\n PERMUTATIONA: () => {\r\n\r\n },\r\n\r\n PHI: (x) => {\r\n // If x is a numeric value that is not valid, PHI returns the #NUM! error value.\r\n x = H.accept(x, Types.NUMBER);\r\n\r\n return Math.exp(-0.5 * x * x) / SQRT2PI;\r\n },\r\n\r\n 'POISSON.DIST': (x, mean, cumulative) => {\r\n // If x or mean is nonnumeric, POISSON.DIST returns the #VALUE! error value.\r\n x = H.accept(x, Types.NUMBER);\r\n mean = H.accept(mean, Types.NUMBER);\r\n cumulative = H.accept(cumulative, Types.BOOLEAN);\r\n // If x < 0, POISSON.DIST returns the #NUM! error value.\r\n // If mean < 0, POISSON.DIST returns the #NUM! error value.\r\n if (x < 0 || mean < 0) {\r\n throw FormulaError.NUM;\r\n }\r\n // If x is not an integer, it is truncated.\r\n x = Math.trunc(x);\r\n\r\n return cumulative ? jStat.poisson.cdf(x, mean) : jStat.poisson.pdf(x, mean);\r\n },\r\n\r\n 'PROB': () => {\r\n\r\n },\r\n\r\n 'QUARTILE.EXC': () => {\r\n\r\n },\r\n\r\n 'QUARTILE.INC': () => {\r\n\r\n },\r\n\r\n 'RANK.AVG': () => {\r\n\r\n },\r\n\r\n 'RANK.EQ': () => {\r\n\r\n },\r\n\r\n RSQ: () => {\r\n\r\n },\r\n\r\n SKEW: () => {\r\n\r\n },\r\n\r\n 'SKEW.P': () => {\r\n\r\n },\r\n\r\n SLOPE: () => {\r\n\r\n },\r\n\r\n STANDARDIZE: (x, mean, standard_dev) => {\r\n x = H.accept(x, Types.NUMBER);\r\n mean = H.accept(mean, Types.NUMBER);\r\n standard_dev = H.accept(standard_dev, Types.NUMBER);\r\n // If standard_dev ≤ 0, STANDARDIZE returns the #NUM! error value.\r\n if (standard_dev <= 0) {\r\n throw FormulaError.NUM;\r\n }\r\n\r\n return (x - mean) / standard_dev;\r\n },\r\n\r\n 'STDEV.P': () => {\r\n\r\n },\r\n\r\n 'STDEV.S': () => {\r\n\r\n },\r\n\r\n STDEVA: () => {\r\n\r\n },\r\n\r\n STDEVPA: () => {\r\n\r\n },\r\n\r\n STEYX: () => {\r\n\r\n },\r\n\r\n 'T.DIST': (x, deg_freedom, cumulative) => {\r\n // If any argument is nonnumeric, T.DIST returns the #VALUE! error value.\r\n x = H.accept(x, Types.NUMBER);\r\n deg_freedom = H.accept(deg_freedom, Types.NUMBER);\r\n cumulative = H.accept(cumulative, Types.BOOLEAN);\r\n // If deg_freedom < 1, T.DIST returns an error value. Deg_freedom needs to be at least 1.\r\n if (deg_freedom < 1) {\r\n throw FormulaError.NUM;\r\n }\r\n\r\n return cumulative ? jStat.studentt.cdf(x, deg_freedom) : jStat.studentt.pdf(x, deg_freedom);\r\n },\r\n\r\n 'T.DIST.2T': (x, deg_freedom) => {\r\n // If any argument is nonnumeric, T.DIST.2T returns the #VALUE! error value.\r\n x = H.accept(x, Types.NUMBER);\r\n deg_freedom = H.accept(deg_freedom, Types.NUMBER);\r\n // If deg_freedom < 1, T.DIST.2T returns the #NUM! error value.\r\n // If x < 0, then T.DIST.2T returns the #NUM! error value.\r\n if (deg_freedom < 1 || x < 0) {\r\n throw FormulaError.NUM;\r\n }\r\n\r\n return (1 - jStat.studentt.cdf(x, deg_freedom)) * 2;\r\n },\r\n\r\n 'T.DIST.RT': (x, deg_freedom) => {\r\n // If any argument is nonnumeric, T.DIST.RT returns the #VALUE! error value.\r\n x = H.accept(x, Types.NUMBER);\r\n deg_freedom = H.accept(deg_freedom, Types.NUMBER);\r\n // If deg_freedom < 1, T.DIST.RT returns the #NUM! error value.\r\n if (deg_freedom < 1) {\r\n throw FormulaError.NUM;\r\n }\r\n\r\n return 1 - jStat.studentt.cdf(x, deg_freedom);\r\n },\r\n\r\n 'T.INV': (probability, deg_freedom) => {\r\n // If either argument is nonnumeric, T.INV returns the #VALUE! error value.\r\n probability = H.accept(probability, Types.NUMBER);\r\n deg_freedom = H.accept(deg_freedom, Types.NUMBER);\r\n // If probability <= 0 or if probability > 1, T.INV returns the #NUM! error value.\r\n // If deg_freedom < 1, T.INV returns the #NUM! error value.\r\n if (probability <= 0 || probability > 1 || deg_freedom < 1) {\r\n throw FormulaError.NUM;\r\n }\r\n\r\n // If deg_freedom is not an integer, it is truncated.\r\n deg_freedom = deg_freedom % 1 === 0 ? deg_freedom : Math.trunc(deg_freedom);\r\n\r\n return jStat.studentt.inv(probability, deg_freedom);\r\n },\r\n\r\n 'T.INV.2T': (probability, deg_freedom) => {\r\n // If either argument is nonnumeric, T.INV.2T returns the #VALUE! error value.\r\n probability = H.accept(probability, Types.NUMBER);\r\n deg_freedom = H.accept(deg_freedom, Types.NUMBER);\r\n // If probability <= 0 or if probability > 1, T.INV.2T returns the #NUM! error value.\r\n // If deg_freedom < 1, T.INV.2T returns the #NUM! error value.\r\n if (probability <= 0 || probability > 1 || deg_freedom < 1) {\r\n throw FormulaError.NUM;\r\n }\r\n // If deg_freedom is not an integer, it is truncated.\r\n deg_freedom = deg_freedom % 1 === 0 ? deg_freedom : Math.trunc(deg_freedom);\r\n\r\n return Math.abs(jStat.studentt.inv(probability / 2, deg_freedom));\r\n\r\n },\r\n\r\n 'T.TEST': () => {\r\n\r\n },\r\n\r\n TREND: () => {\r\n\r\n },\r\n\r\n TRIMMEAN: () => {\r\n\r\n },\r\n\r\n 'VAR.P': () => {\r\n\r\n },\r\n\r\n 'VAR.S': () => {\r\n\r\n },\r\n\r\n 'VARA': () => {\r\n\r\n },\r\n\r\n 'VARPA': () => {\r\n\r\n },\r\n\r\n 'WEIBULL.DIST': (x, alpha, beta, cumulative) => {\r\n // If x, alpha, or beta is nonnumeric, WEIBULL.DIST returns the #VALUE! error value.\r\n x = H.accept(x, Types.NUMBER);\r\n alpha = H.accept(alpha, Types.NUMBER);\r\n beta = H.accept(beta, Types.NUMBER);\r\n cumulative = H.accept(cumulative, Types.BOOLEAN);\r\n // If x < 0, WEIBULL.DIST returns the #NUM! error value.\r\n // If alpha ≤ 0 or if beta ≤ 0, WEIBULL.DIST returns the #NUM! error value.\r\n if (x < 0 || alpha <= 0 || beta <= 0) {\r\n throw FormulaError.NUM;\r\n }\r\n\r\n return cumulative\r\n ? 1 - Math.exp(-Math.pow(x / beta, alpha))\r\n : Math.pow(x, alpha - 1) * Math.exp(-Math.pow(x / beta, alpha)) * alpha / Math.pow(beta, alpha);\r\n },\r\n\r\n 'Z.TEST': () => {\r\n\r\n }\r\n};\r\n\r\n\r\nmodule.exports = {\r\n DistributionFunctions,\r\n};\r\n","const FormulaError = require('../error');\r\nconst {FormulaHelpers, Types, Criteria, Address} = require('../helpers');\r\nconst {Infix} = require('../operators');\r\nconst H = FormulaHelpers;\r\nconst {DistributionFunctions} = require('./distribution');\r\n\r\nconst StatisticalFunctions = {\r\n AVEDEV: (...numbers) => {\r\n let sum = 0;\r\n const arr = [];\r\n // parse number only if the input is literal\r\n H.flattenParams(numbers, Types.NUMBER, true, (item, info) => {\r\n if (typeof item === \"number\") {\r\n sum += item;\r\n arr.push(item);\r\n }\r\n });\r\n const avg = sum / arr.length;\r\n sum = 0;\r\n for (let i = 0; i < arr.length; i++) {\r\n sum += Math.abs(arr[i] - avg);\r\n }\r\n return sum / arr.length;\r\n },\r\n\r\n AVERAGE: (...numbers) => {\r\n let sum = 0, cnt = 0;\r\n // parse number only if the input is literal\r\n H.flattenParams(numbers, Types.NUMBER, true, (item, info) => {\r\n if (typeof item === \"number\") {\r\n sum += item;\r\n cnt++;\r\n }\r\n });\r\n return sum / cnt;\r\n },\r\n\r\n AVERAGEA: (...numbers) => {\r\n let sum = 0, cnt = 0;\r\n // parse number only if the input is literal\r\n H.flattenParams(numbers, Types.NUMBER, true, (item, info) => {\r\n const type = typeof item;\r\n if (type === \"number\") {\r\n sum += item;\r\n cnt++;\r\n } else if (type === \"string\") {\r\n cnt++;\r\n }\r\n });\r\n return sum / cnt;\r\n },\r\n\r\n // special\r\n AVERAGEIF: (context, range, criteria, averageRange) => {\r\n const ranges = H.retrieveRanges(context, range, averageRange);\r\n range = ranges[0];\r\n averageRange = ranges[1];\r\n\r\n criteria = H.retrieveArg(context, criteria);\r\n const isCriteriaArray = criteria.isArray;\r\n criteria = Criteria.parse(H.accept(criteria));\r\n\r\n let sum = 0, cnt = 0;\r\n range.forEach((row, rowNum) => {\r\n row.forEach((value, colNum) => {\r\n const valueToAdd = averageRange[rowNum][colNum];\r\n if (typeof valueToAdd !== \"number\")\r\n return;\r\n // wildcard\r\n if (criteria.op === 'wc') {\r\n if (criteria.match === criteria.value.test(value)) {\r\n sum += valueToAdd;\r\n cnt++;\r\n }\r\n } else if (Infix.compareOp(value, criteria.op, criteria.value, Array.isArray(value), isCriteriaArray)) {\r\n sum += valueToAdd;\r\n cnt++;\r\n }\r\n })\r\n });\r\n if (cnt === 0) throw FormulaError.DIV0;\r\n return sum / cnt;\r\n },\r\n\r\n AVERAGEIFS: () => {\r\n\r\n },\r\n\r\n COUNT: (...ranges) => {\r\n let cnt = 0;\r\n H.flattenParams(ranges, null, true,\r\n (item, info) => {\r\n // literal will be parsed to Type.NUMBER\r\n if (info.isLiteral && !isNaN(item)) {\r\n cnt++;\r\n } else {\r\n if (typeof item === \"number\")\r\n cnt++;\r\n }\r\n });\r\n return cnt;\r\n },\r\n\r\n COUNTIF: (range, criteria) => {\r\n // do not flatten the array\r\n range = H.accept(range, Types.ARRAY, undefined, false, true);\r\n const isCriteriaArray = criteria.isArray;\r\n criteria = H.accept(criteria);\r\n\r\n let cnt = 0;\r\n // parse criteria\r\n criteria = Criteria.parse(criteria);\r\n\r\n range.forEach(row => {\r\n row.forEach(value => {\r\n // wildcard\r\n if (criteria.op === 'wc') {\r\n if (criteria.match === criteria.value.test(value))\r\n cnt++;\r\n } else if (Infix.compareOp(value, criteria.op, criteria.value, Array.isArray(value), isCriteriaArray)) {\r\n cnt++;\r\n }\r\n })\r\n });\r\n return cnt;\r\n },\r\n\r\n LARGE: () => {\r\n\r\n },\r\n\r\n MAX: () => {\r\n\r\n },\r\n\r\n MAXA: () => {\r\n\r\n },\r\n\r\n MAXIFS: () => {\r\n\r\n },\r\n\r\n MEDIAN: () => {\r\n\r\n },\r\n\r\n MIN: () => {\r\n\r\n },\r\n\r\n MINA: () => {\r\n\r\n },\r\n\r\n MINIFS: () => {\r\n\r\n },\r\n\r\n PERMUT: () => {\r\n\r\n },\r\n\r\n PERMUTATIONA: () => {\r\n\r\n },\r\n\r\n SMALL: () => {\r\n\r\n },\r\n\r\n};\r\n\r\n\r\nmodule.exports = Object.assign(StatisticalFunctions, DistributionFunctions);\r\n","const FormulaError = require('../error');\r\nconst {FormulaHelpers, Types} = require('../helpers');\r\nconst H = FormulaHelpers;\r\n\r\nconst MS_PER_DAY = 1000 * 60 * 60 * 24;\r\nconst d1900 = new Date(Date.UTC(1900, 0, 1));\r\nconst WEEK_STARTS = [\r\n undefined, 0, 1, undefined, undefined, undefined, undefined, undefined, undefined,\r\n undefined, undefined, undefined, 1, 2, 3, 4, 5, 6, 0];\r\nconst WEEK_TYPES = [\r\n undefined,\r\n [1, 2, 3, 4, 5, 6, 7],\r\n [7, 1, 2, 3, 4, 5, 6],\r\n [6, 0, 1, 2, 3, 4, 5],\r\n undefined,\r\n undefined,\r\n undefined,\r\n undefined,\r\n undefined,\r\n undefined,\r\n undefined,\r\n [7, 1, 2, 3, 4, 5, 6],\r\n [6, 7, 1, 2, 3, 4, 5],\r\n [5, 6, 7, 1, 2, 3, 4],\r\n [4, 5, 6, 7, 1, 2, 3],\r\n [3, 4, 5, 6, 7, 1, 2],\r\n [2, 3, 4, 5, 6, 7, 1],\r\n [1, 2, 3, 4, 5, 6, 7]\r\n];\r\nconst WEEKEND_TYPES = [\r\n undefined,\r\n [6, 0],\r\n [0, 1],\r\n [1, 2],\r\n [2, 3],\r\n [3, 4],\r\n [4, 5],\r\n [5, 6],\r\n undefined,\r\n undefined,\r\n undefined,\r\n [0],\r\n [1],\r\n [2],\r\n [3],\r\n [4],\r\n [5],\r\n [6]\r\n];\r\n\r\n// Formats: h:mm:ss A, h:mm A, H:mm, H:mm:ss, H A\r\nconst timeRegex = /^\\s*(\\d\\d?)\\s*(:\\s*\\d\\d?)?\\s*(:\\s*\\d\\d?)?\\s*(pm|am)?\\s*$/i;\r\n// 12-3, 12/3\r\nconst dateRegex1 = /^\\s*((\\d\\d?)\\s*([-\\/])\\s*(\\d\\d?))([\\d:.apm\\s]*)$/i;\r\n// 3-Dec, 3/Dec\r\nconst dateRegex2 = /^\\s*((\\d\\d?)\\s*([-/])\\s*(jan\\w*|feb\\w*|mar\\w*|apr\\w*|may\\w*|jun\\w*|jul\\w*|aug\\w*|sep\\w*|oct\\w*|nov\\w*|dec\\w*))([\\d:.apm\\s]*)$/i;\r\n// Dec-3, Dec/3\r\nconst dateRegex3 = /^\\s*((jan\\w*|feb\\w*|mar\\w*|apr\\w*|may\\w*|jun\\w*|jul\\w*|aug\\w*|sep\\w*|oct\\w*|nov\\w*|dec\\w*)\\s*([-/])\\s*(\\d\\d?))([\\d:.apm\\s]*)$/i;\r\n\r\nfunction parseSimplifiedDate(text) {\r\n const fmt1 = text.match(dateRegex1);\r\n const fmt2 = text.match(dateRegex2);\r\n const fmt3 = text.match(dateRegex3);\r\n if (fmt1) {\r\n text = fmt1[1] + fmt1[3] + new Date().getFullYear() + fmt1[5];\r\n } else if (fmt2) {\r\n text = fmt2[1] + fmt2[3] + new Date().getFullYear() + fmt2[5];\r\n } else if (fmt3) {\r\n text = fmt3[1] + fmt3[3] + new Date().getFullYear() + fmt3[5];\r\n }\r\n return new Date(Date.parse(`${text} UTC`));\r\n}\r\n\r\n/**\r\n * Parse time string to date in UTC.\r\n * @param {string} text\r\n */\r\nfunction parseTime(text) {\r\n const res = text.match(timeRegex);\r\n if (!res) return;\r\n\r\n //  [\"4:50:55 pm\", \"4\", \":50\", \":55\", \"pm\", ...]\r\n const minutes = res[2] ? res[2] : ':00';\r\n const seconds = res[3] ? res[3] : ':00';\r\n const ampm = res[4] ? ' ' + res[4] : '';\r\n\r\n const date = new Date(Date.parse(`1/1/1900 ${res[1] + minutes + seconds + ampm} UTC`));\r\n let now = new Date();\r\n now = new Date(Date.UTC(now.getFullYear(), now.getMonth(), now.getDate(),\r\n now.getHours(), now.getMinutes(), now.getSeconds(), now.getMilliseconds()));\r\n\r\n return new Date(Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate(),\r\n date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds(), date.getUTCMilliseconds()));\r\n}\r\n\r\n/**\r\n * Parse a UTC date to excel serial number.\r\n * @param {Date|number} date - A UTC date.\r\n * @returns {number}\r\n */\r\nfunction toSerial(date) {\r\n const addOn = (date > -2203891200000) ? 2 : 1;\r\n return Math.floor((date - d1900) / 86400000) + addOn;\r\n}\r\n\r\n/**\r\n * Parse an excel serial number to UTC date.\r\n * @param serial\r\n * @returns {Date}\r\n */\r\nfunction toDate(serial) {\r\n if (serial < 0) {\r\n throw FormulaError.VALUE;\r\n }\r\n if (serial <= 60) {\r\n return new Date(d1900.getTime() + (serial - 1) * 86400000);\r\n }\r\n return new Date(d1900.getTime() + (serial - 2) * 86400000);\r\n}\r\n\r\nfunction parseDateWithExtra(serialOrString) {\r\n if (serialOrString instanceof Date) return {date: serialOrString};\r\n serialOrString = H.accept(serialOrString);\r\n let isDateGiven = true, date;\r\n if (!isNaN(serialOrString)) {\r\n serialOrString = Number(serialOrString);\r\n date = toDate(serialOrString);\r\n } else {\r\n // support time without date\r\n date = parseTime(serialOrString);\r\n\r\n if (!date) {\r\n date = parseSimplifiedDate(serialOrString);\r\n } else {\r\n isDateGiven = false;\r\n }\r\n }\r\n return {date, isDateGiven};\r\n}\r\n\r\nfunction parseDate(serialOrString) {\r\n return parseDateWithExtra(serialOrString).date;\r\n}\r\n\r\nfunction compareDateIgnoreTime(date1, date2) {\r\n return date1.getUTCFullYear() === date2.getUTCFullYear() &&\r\n date1.getUTCMonth() === date2.getUTCMonth() &&\r\n date1.getUTCDate() === date2.getUTCDate();\r\n}\r\n\r\nfunction isLeapYear(year) {\r\n if (year === 1900) {\r\n return true;\r\n }\r\n return new Date(year, 1, 29).getMonth() === 1;\r\n}\r\n\r\nconst DateFunctions = {\r\n DATE: (year, month, day) => {\r\n year = H.accept(year, Types.NUMBER);\r\n month = H.accept(month, Types.NUMBER);\r\n day = H.accept(day, Types.NUMBER);\r\n if (year < 0 || year >= 10000)\r\n throw FormulaError.NUM;\r\n\r\n // If year is between 0 (zero) and 1899 (inclusive), Excel adds that value to 1900 to calculate the year.\r\n if (year < 1900) {\r\n year += 1900;\r\n }\r\n\r\n return toSerial(Date.UTC(year, month - 1, day));\r\n },\r\n\r\n DATEDIF: (startDate, endDate, unit) => {\r\n startDate = parseDate(startDate);\r\n endDate = parseDate(endDate);\r\n unit = H.accept(unit, Types.STRING).toLowerCase();\r\n\r\n if (startDate > endDate)\r\n throw FormulaError.NUM;\r\n const yearDiff = endDate.getUTCFullYear() - startDate.getUTCFullYear();\r\n const monthDiff = endDate.getUTCMonth() - startDate.getUTCMonth();\r\n const dayDiff = endDate.getUTCDate() - startDate.getUTCDate();\r\n let offset;\r\n switch (unit) {\r\n case 'y':\r\n offset = monthDiff < 0 || monthDiff === 0 && dayDiff < 0 ? -1 : 0;\r\n return offset + yearDiff;\r\n case 'm':\r\n offset = dayDiff < 0 ? -1 : 0;\r\n return yearDiff * 12 + monthDiff + offset;\r\n case 'd':\r\n return Math.floor(endDate - startDate) / MS_PER_DAY;\r\n case 'md':\r\n // The months and years of the dates are ignored.\r\n startDate.setUTCFullYear(endDate.getUTCFullYear());\r\n if (dayDiff < 0) {\r\n startDate.setUTCMonth(endDate.getUTCMonth() - 1)\r\n } else {\r\n startDate.setUTCMonth(endDate.getUTCMonth())\r\n }\r\n return Math.floor(endDate - startDate) / MS_PER_DAY;\r\n case 'ym':\r\n // The days and years of the dates are ignored\r\n offset = dayDiff < 0 ? -1 : 0;\r\n return (offset + yearDiff * 12 + monthDiff) % 12;\r\n case 'yd':\r\n // The years of the dates are ignored.\r\n if (monthDiff < 0 || monthDiff === 0 && dayDiff < 0) {\r\n startDate.setUTCFullYear(endDate.getUTCFullYear() - 1);\r\n } else {\r\n startDate.setUTCFullYear(endDate.getUTCFullYear());\r\n }\r\n return Math.floor(endDate - startDate) / MS_PER_DAY;\r\n\r\n }\r\n },\r\n\r\n /**\r\n * Limitation: Year must be four digit, only support ISO 8016 date format.\r\n * Does not support date without year, i.e. \"5-JUL\".\r\n * @param {string} dateText\r\n */\r\n DATEVALUE: (dateText) => {\r\n dateText = H.accept(dateText, Types.STRING);\r\n const {date, isDateGiven} = parseDateWithExtra(dateText);\r\n if (!isDateGiven) return 0;\r\n const serial = toSerial(date);\r\n if (serial < 0 || serial > 2958465)\r\n throw FormulaError.VALUE;\r\n return serial;\r\n },\r\n\r\n DAY: serialOrString => {\r\n const date = parseDate(serialOrString);\r\n return date.getUTCDate();\r\n },\r\n\r\n DAYS: (endDate, startDate) => {\r\n endDate = parseDate(endDate);\r\n startDate = parseDate(startDate);\r\n let offset = 0;\r\n if (startDate < -2203891200000 && -2203891200000 < endDate) {\r\n offset = 1;\r\n }\r\n return Math.floor(endDate - startDate) / MS_PER_DAY + offset;\r\n },\r\n\r\n DAYS360: (startDate, endDate, method) => {\r\n startDate = parseDate(startDate);\r\n endDate = parseDate(endDate);\r\n // default is US method\r\n method = H.accept(method, Types.BOOLEAN, false);\r\n\r\n if (startDate.getUTCDate() === 31) {\r\n startDate.setUTCDate(30);\r\n }\r\n if (!method && startDate.getUTCDate() < 30 && endDate.getUTCDate() > 30) {\r\n endDate.setUTCMonth(endDate.getUTCMonth() + 1, 1);\r\n } else {\r\n // European method\r\n if (endDate.getUTCDate() === 31) {\r\n endDate.setUTCDate(30);\r\n }\r\n }\r\n\r\n const yearDiff = endDate.getUTCFullYear() - startDate.getUTCFullYear();\r\n const monthDiff = endDate.getUTCMonth() - startDate.getUTCMonth();\r\n const dayDiff = endDate.getUTCDate() - startDate.getUTCDate();\r\n\r\n return (monthDiff) * 30 + dayDiff + yearDiff * 12 * 30;\r\n },\r\n\r\n EDATE: (startDate, months) => {\r\n startDate = parseDate(startDate);\r\n months = H.accept(months, Types.NUMBER);\r\n startDate.setUTCMonth(startDate.getUTCMonth() + months);\r\n return toSerial(startDate);\r\n },\r\n\r\n EOMONTH: (startDate, months) => {\r\n startDate = parseDate(startDate);\r\n months = H.accept(months, Types.NUMBER);\r\n startDate.setUTCMonth(startDate.getUTCMonth() + months + 1, 0);\r\n return toSerial(startDate);\r\n },\r\n\r\n HOUR: serialOrString => {\r\n const date = parseDate(serialOrString);\r\n return date.getUTCHours();\r\n },\r\n\r\n ISOWEEKNUM: (serialOrString) => {\r\n const date = parseDate(serialOrString);\r\n\r\n // https://stackoverflow.com/questions/6117814/get-week-of-year-in-javascript-like-in-php\r\n const d = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));\r\n const dayNum = d.getUTCDay();\r\n d.setUTCDate(d.getUTCDate() + 4 - dayNum);\r\n const yearStart = new Date(Date.UTC(d.getUTCFullYear(), 0, 1));\r\n return Math.ceil((((d - yearStart) / 86400000) + 1) / 7)\r\n },\r\n\r\n MINUTE: serialOrString => {\r\n const date = parseDate(serialOrString);\r\n return date.getUTCMinutes();\r\n },\r\n\r\n MONTH: serialOrString => {\r\n const date = parseDate(serialOrString);\r\n return date.getUTCMonth() + 1;\r\n },\r\n\r\n NETWORKDAYS: (startDate, endDate, holidays) => {\r\n startDate = parseDate(startDate);\r\n endDate = parseDate(endDate);\r\n let sign = 1;\r\n if (startDate > endDate) {\r\n sign = -1;\r\n const temp = startDate;\r\n startDate = endDate;\r\n endDate = temp;\r\n }\r\n const holidaysArr = [];\r\n if (holidays != null) {\r\n H.flattenParams([holidays], Types.NUMBER, false, item => {\r\n holidaysArr.push(parseDate(item));\r\n });\r\n }\r\n let numWorkDays = 0;\r\n while (startDate <= endDate) {\r\n // Skips Sunday and Saturday\r\n if (startDate.getUTCDay() !== 0 && startDate.getUTCDay() !== 6) {\r\n let found = false;\r\n for (let i = 0; i < holidaysArr.length; i++) {\r\n if (compareDateIgnoreTime(startDate, holidaysArr[i])) {\r\n found = true;\r\n break;\r\n }\r\n }\r\n if (!found) numWorkDays++;\r\n }\r\n startDate.setUTCDate(startDate.getUTCDate() + 1);\r\n }\r\n return sign * numWorkDays;\r\n\r\n },\r\n\r\n 'NETWORKDAYS.INTL': (startDate, endDate, weekend, holidays) => {\r\n startDate = parseDate(startDate);\r\n endDate = parseDate(endDate);\r\n let sign = 1;\r\n if (startDate > endDate) {\r\n sign = -1;\r\n const temp = startDate;\r\n startDate = endDate;\r\n endDate = temp;\r\n }\r\n weekend = H.accept(weekend, null, 1);\r\n // Using 1111111 will always return 0.\r\n if (weekend === '1111111')\r\n return 0;\r\n\r\n // using weekend string, i.e, 0000011\r\n if (typeof weekend === \"string\" && Number(weekend).toString() !== weekend) {\r\n if (weekend.length !== 7) throw FormulaError.VALUE;\r\n weekend = weekend.charAt(6) + weekend.slice(0, 6);\r\n const weekendArr = [];\r\n for (let i = 0; i < weekend.length; i++) {\r\n if (weekend.charAt(i) === '1')\r\n weekendArr.push(i);\r\n }\r\n weekend = weekendArr;\r\n } else {\r\n // using weekend number\r\n if (typeof weekend !== \"number\")\r\n throw FormulaError.VALUE;\r\n weekend = WEEKEND_TYPES[weekend];\r\n }\r\n\r\n const holidaysArr = [];\r\n if (holidays != null) {\r\n H.flattenParams([holidays], Types.NUMBER, false, item => {\r\n holidaysArr.push(parseDate(item));\r\n });\r\n }\r\n let numWorkDays = 0;\r\n while (startDate <= endDate) {\r\n let skip = false;\r\n for (let i = 0; i < weekend.length; i++) {\r\n if (weekend[i] === startDate.getUTCDay()) {\r\n skip = true;\r\n break;\r\n }\r\n }\r\n\r\n if (!skip) {\r\n let found = false;\r\n for (let i = 0; i < holidaysArr.length; i++) {\r\n if (compareDateIgnoreTime(startDate, holidaysArr[i])) {\r\n found = true;\r\n break;\r\n }\r\n }\r\n if (!found) numWorkDays++;\r\n }\r\n startDate.setUTCDate(startDate.getUTCDate() + 1);\r\n }\r\n return sign * numWorkDays;\r\n\r\n },\r\n\r\n NOW: () => {\r\n const now = new Date();\r\n return toSerial(Date.UTC(now.getFullYear(), now.getMonth(), now.getDate(),\r\n now.getHours(), now.getMinutes(), now.getSeconds(), now.getMilliseconds()))\r\n + (3600 * now.getHours() + 60 * now.getMinutes() + now.getSeconds()) / 86400;\r\n },\r\n\r\n SECOND: (serialOrString) => {\r\n const date = parseDate(serialOrString);\r\n return date.getUTCSeconds();\r\n },\r\n\r\n TIME: (hour, minute, second) => {\r\n hour = H.accept(hour, Types.NUMBER);\r\n minute = H.accept(minute, Types.NUMBER);\r\n second = H.accept(second, Types.NUMBER);\r\n\r\n if (hour < 0 || hour > 32767 || minute < 0 || minute > 32767 || second < 0 || second > 32767)\r\n throw FormulaError.NUM;\r\n return (3600 * hour + 60 * minute + second) / 86400;\r\n },\r\n\r\n TIMEVALUE: (timeText) => {\r\n timeText = parseDate(timeText);\r\n return (3600 * timeText.getUTCHours() + 60 * timeText.getUTCMinutes() + timeText.getUTCSeconds()) / 86400;\r\n },\r\n\r\n TODAY: () => {\r\n const now = new Date();\r\n return toSerial(Date.UTC(now.getFullYear(), now.getMonth(), now.getDate()));\r\n },\r\n\r\n WEEKDAY: (serialOrString, returnType) => {\r\n const date = parseDate(serialOrString);\r\n returnType = H.accept(returnType, Types.NUMBER, 1);\r\n\r\n const day = date.getUTCDay();\r\n const weekTypes = WEEK_TYPES[returnType];\r\n if (!weekTypes)\r\n throw FormulaError.NUM;\r\n return weekTypes[day];\r\n\r\n },\r\n\r\n WEEKNUM: (serialOrString, returnType) => {\r\n const date = parseDate(serialOrString);\r\n returnType = H.accept(returnType, Types.NUMBER, 1);\r\n if (returnType === 21) {\r\n return DateFunctions.ISOWEEKNUM(serialOrString);\r\n }\r\n const weekStart = WEEK_STARTS[returnType];\r\n const yearStart = new Date(Date.UTC(date.getUTCFullYear(), 0, 1));\r\n const offset = yearStart.getUTCDay() < weekStart ? 1 : 0;\r\n return Math.ceil((((date - yearStart) / 86400000) + 1) / 7) + offset;\r\n },\r\n\r\n WORKDAY: (startDate, days, holidays) => {\r\n return DateFunctions[\"WORKDAY.INTL\"](startDate, days, 1, holidays);\r\n },\r\n\r\n 'WORKDAY.INTL': (startDate, days, weekend, holidays) => {\r\n startDate = parseDate(startDate);\r\n days = H.accept(days, Types.NUMBER);\r\n\r\n weekend = H.accept(weekend, null, 1);\r\n // Using 1111111 will always return value error.\r\n if (weekend === '1111111')\r\n throw FormulaError.VALUE;\r\n\r\n // using weekend string, i.e, 0000011\r\n if (typeof weekend === \"string\" && Number(weekend).toString() !== weekend) {\r\n if (weekend.length !== 7)\r\n throw FormulaError.VALUE;\r\n weekend = weekend.charAt(6) + weekend.slice(0, 6);\r\n const weekendArr = [];\r\n for (let i = 0; i < weekend.length; i++) {\r\n if (weekend.charAt(i) === '1')\r\n weekendArr.push(i);\r\n }\r\n weekend = weekendArr;\r\n } else {\r\n // using weekend number\r\n if (typeof weekend !== \"number\")\r\n throw FormulaError.VALUE;\r\n weekend = WEEKEND_TYPES[weekend];\r\n if (weekend == null)\r\n throw FormulaError.NUM;\r\n }\r\n\r\n const holidaysArr = [];\r\n if (holidays != null) {\r\n H.flattenParams([holidays], Types.NUMBER, false, item => {\r\n holidaysArr.push(parseDate(item));\r\n });\r\n }\r\n startDate.setUTCDate(startDate.getUTCDate() + 1);\r\n let cnt = 0;\r\n while (cnt < days) {\r\n let skip = false;\r\n for (let i = 0; i < weekend.length; i++) {\r\n if (weekend[i] === startDate.getUTCDay()) {\r\n skip = true;\r\n break;\r\n }\r\n }\r\n\r\n if (!skip) {\r\n let found = false;\r\n for (let i = 0; i < holidaysArr.length; i++) {\r\n if (compareDateIgnoreTime(startDate, holidaysArr[i])) {\r\n found = true;\r\n break;\r\n }\r\n }\r\n if (!found) cnt++;\r\n }\r\n startDate.setUTCDate(startDate.getUTCDate() + 1);\r\n }\r\n return toSerial(startDate) - 1;\r\n },\r\n\r\n YEAR: (serialOrString) => {\r\n const date = parseDate(serialOrString);\r\n return date.getUTCFullYear();\r\n },\r\n\r\n // Warning: may have bugs\r\n YEARFRAC: (startDate, endDate, basis) => {\r\n startDate = parseDate(startDate);\r\n endDate = parseDate(endDate);\r\n if (startDate > endDate) {\r\n const temp = startDate;\r\n startDate = endDate;\r\n endDate = temp;\r\n }\r\n basis = H.accept(basis, Types.NUMBER, 0);\r\n basis = Math.trunc(basis);\r\n\r\n if (basis < 0 || basis > 4)\r\n throw FormulaError.VALUE;\r\n\r\n // https://github.com/LesterLyu/formula.js/blob/develop/lib/date-time.js#L508\r\n let sd = startDate.getUTCDate();\r\n const sm = startDate.getUTCMonth() + 1;\r\n const sy = startDate.getUTCFullYear();\r\n let ed = endDate.getUTCDate();\r\n const em = endDate.getUTCMonth() + 1;\r\n const ey = endDate.getUTCFullYear();\r\n\r\n switch (basis) {\r\n case 0:\r\n // US (NASD) 30/360\r\n if (sd === 31 && ed === 31) {\r\n sd = 30;\r\n ed = 30;\r\n } else if (sd === 31) {\r\n sd = 30;\r\n } else if (sd === 30 && ed === 31) {\r\n ed = 30;\r\n }\r\n return Math.abs((ed + em * 30 + ey * 360) - (sd + sm * 30 + sy * 360)) / 360;\r\n case 1:\r\n // Actual/actual\r\n if (ey - sy < 2) {\r\n const yLength = isLeapYear(sy) && sy !== 1900 ? 366 : 365;\r\n const days = DateFunctions.DAYS(endDate, startDate);\r\n return days / yLength;\r\n } else {\r\n const years = (ey - sy) + 1;\r\n const days = (new Date(ey + 1, 0, 1) - new Date(sy, 0, 1)) / 1000 / 60 / 60 / 24;\r\n const average = days / years;\r\n return DateFunctions.DAYS(endDate, startDate) / average;\r\n }\r\n case 2:\r\n // Actual/360\r\n return Math.abs(DateFunctions.DAYS(endDate, startDate) / 360);\r\n case 3:\r\n // Actual/365\r\n return Math.abs(DateFunctions.DAYS(endDate, startDate) / 365);\r\n case 4:\r\n // European 30/360\r\n return Math.abs((ed + em * 30 + ey * 360) - (sd + sm * 30 + sy * 360)) / 360;\r\n }\r\n },\r\n};\r\n\r\nmodule.exports = DateFunctions;\r\n","const FormulaError = require('../error');\r\nconst {FormulaHelpers, Types} = require('../helpers');\r\nconst H = FormulaHelpers;\r\n\r\nconst WebFunctions = {\r\n ENCODEURL: text => {\r\n return encodeURIComponent(H.accept(text, Types.STRING));\r\n },\r\n\r\n FILTERXML: () => {\r\n // Not implemented due to extra dependency\r\n },\r\n\r\n WEBSERVICE: (context, url) => {\r\n throw FormulaError.ERROR('WEBSERVICE is not supported in sync mode.');\r\n if (typeof fetch === \"function\") {\r\n url = H.accept(url, Types.STRING);\r\n return fetch(url).then(res => res.text());\r\n } else {\r\n // Not implemented for Node.js due to extra dependency\r\n // Sample code for Node.js\r\n // const fetch = require('node-fetch');\r\n // url = H.accept(url, Types.STRING);\r\n // return fetch(url).then(res => res.text());\r\n throw FormulaError.ERROR('WEBSERVICE only available to browser with fetch.' +\r\n 'If you want to use WEBSERVICE in Node.js, please override this function: \\n' +\r\n 'new FormulaParser({\\n' +\r\n ' functionsNeedContext: {\\n' +\r\n ' WEBSERVICE: (context, url) => {...}}\\n' +\r\n '})');\r\n }\r\n }\r\n}\r\n\r\nmodule.exports = WebFunctions;\r\n","// needs a separate module as this is required inside chevrotain productive code\n// and also in the entry point for webpack(api.ts).\n// A separate file avoids cyclic dependencies and webpack errors.\nexport var VERSION = \"7.1.2\";\n//# sourceMappingURL=version.js.map","/*\n Utils using lodash style API. (not necessarily 100% compliant) for functional and other utils.\n These utils should replace usage of lodash in the production code base. not because they are any better...\n but for the purpose of being a dependency free library.\n\n The hotspots in the code are already written in imperative style for performance reasons.\n so writing several dozen utils which may be slower than the original lodash, does not matter as much\n considering they will not be invoked in hotspots...\n */\nexport function isEmpty(arr) {\n return arr && arr.length === 0;\n}\nexport function keys(obj) {\n if (obj === undefined || obj === null) {\n return [];\n }\n return Object.keys(obj);\n}\nexport function values(obj) {\n var vals = [];\n var keys = Object.keys(obj);\n for (var i = 0; i < keys.length; i++) {\n vals.push(obj[keys[i]]);\n }\n return vals;\n}\nexport function mapValues(obj, callback) {\n var result = [];\n var objKeys = keys(obj);\n for (var idx = 0; idx < objKeys.length; idx++) {\n var currKey = objKeys[idx];\n result.push(callback.call(null, obj[currKey], currKey));\n }\n return result;\n}\nexport function map(arr, callback) {\n var result = [];\n for (var idx = 0; idx < arr.length; idx++) {\n result.push(callback.call(null, arr[idx], idx));\n }\n return result;\n}\nexport function flatten(arr) {\n var result = [];\n for (var idx = 0; idx < arr.length; idx++) {\n var currItem = arr[idx];\n if (Array.isArray(currItem)) {\n result = result.concat(flatten(currItem));\n }\n else {\n result.push(currItem);\n }\n }\n return result;\n}\nexport function first(arr) {\n return isEmpty(arr) ? undefined : arr[0];\n}\nexport function last(arr) {\n var len = arr && arr.length;\n return len ? arr[len - 1] : undefined;\n}\nexport function forEach(collection, iteratorCallback) {\n /* istanbul ignore else */\n if (Array.isArray(collection)) {\n for (var i = 0; i < collection.length; i++) {\n iteratorCallback.call(null, collection[i], i);\n }\n }\n else if (isObject(collection)) {\n var colKeys = keys(collection);\n for (var i = 0; i < colKeys.length; i++) {\n var key = colKeys[i];\n var value = collection[key];\n iteratorCallback.call(null, value, key);\n }\n }\n else {\n throw Error(\"non exhaustive match\");\n }\n}\nexport function isString(item) {\n return typeof item === \"string\";\n}\nexport function isUndefined(item) {\n return item === undefined;\n}\nexport function isFunction(item) {\n return item instanceof Function;\n}\nexport function drop(arr, howMuch) {\n if (howMuch === void 0) { howMuch = 1; }\n return arr.slice(howMuch, arr.length);\n}\nexport function dropRight(arr, howMuch) {\n if (howMuch === void 0) { howMuch = 1; }\n return arr.slice(0, arr.length - howMuch);\n}\nexport function filter(arr, predicate) {\n var result = [];\n if (Array.isArray(arr)) {\n for (var i = 0; i < arr.length; i++) {\n var item = arr[i];\n if (predicate.call(null, item)) {\n result.push(item);\n }\n }\n }\n return result;\n}\nexport function reject(arr, predicate) {\n return filter(arr, function (item) { return !predicate(item); });\n}\nexport function pick(obj, predicate) {\n var keys = Object.keys(obj);\n var result = {};\n for (var i = 0; i < keys.length; i++) {\n var currKey = keys[i];\n var currItem = obj[currKey];\n if (predicate(currItem)) {\n result[currKey] = currItem;\n }\n }\n return result;\n}\nexport function has(obj, prop) {\n if (isObject(obj)) {\n return obj.hasOwnProperty(prop);\n }\n return false;\n}\nexport function contains(arr, item) {\n return find(arr, function (currItem) { return currItem === item; }) !== undefined ? true : false;\n}\n/**\n * shallow clone\n */\nexport function cloneArr(arr) {\n var newArr = [];\n for (var i = 0; i < arr.length; i++) {\n newArr.push(arr[i]);\n }\n return newArr;\n}\n/**\n * shallow clone\n */\nexport function cloneObj(obj) {\n var clonedObj = {};\n for (var key in obj) {\n /* istanbul ignore else */\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n clonedObj[key] = obj[key];\n }\n }\n return clonedObj;\n}\nexport function find(arr, predicate) {\n for (var i = 0; i < arr.length; i++) {\n var item = arr[i];\n if (predicate.call(null, item)) {\n return item;\n }\n }\n return undefined;\n}\nexport function findAll(arr, predicate) {\n var found = [];\n for (var i = 0; i < arr.length; i++) {\n var item = arr[i];\n if (predicate.call(null, item)) {\n found.push(item);\n }\n }\n return found;\n}\nexport function reduce(arrOrObj, iterator, initial) {\n var isArr = Array.isArray(arrOrObj);\n var vals = isArr ? arrOrObj : values(arrOrObj);\n var objKeys = isArr ? [] : keys(arrOrObj);\n var accumulator = initial;\n for (var i = 0; i < vals.length; i++) {\n accumulator = iterator.call(null, accumulator, vals[i], isArr ? i : objKeys[i]);\n }\n return accumulator;\n}\nexport function compact(arr) {\n return reject(arr, function (item) { return item === null || item === undefined; });\n}\nexport function uniq(arr, identity) {\n if (identity === void 0) { identity = function (item) { return item; }; }\n var identities = [];\n return reduce(arr, function (result, currItem) {\n var currIdentity = identity(currItem);\n if (contains(identities, currIdentity)) {\n return result;\n }\n else {\n identities.push(currIdentity);\n return result.concat(currItem);\n }\n }, []);\n}\nexport function partial(func) {\n var restArgs = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n restArgs[_i - 1] = arguments[_i];\n }\n var firstArg = [null];\n var allArgs = firstArg.concat(restArgs);\n return Function.bind.apply(func, allArgs);\n}\nexport function isArray(obj) {\n return Array.isArray(obj);\n}\nexport function isRegExp(obj) {\n return obj instanceof RegExp;\n}\nexport function isObject(obj) {\n return obj instanceof Object;\n}\nexport function every(arr, predicate) {\n for (var i = 0; i < arr.length; i++) {\n if (!predicate(arr[i], i)) {\n return false;\n }\n }\n return true;\n}\nexport function difference(arr, values) {\n return reject(arr, function (item) { return contains(values, item); });\n}\nexport function some(arr, predicate) {\n for (var i = 0; i < arr.length; i++) {\n if (predicate(arr[i])) {\n return true;\n }\n }\n return false;\n}\nexport function indexOf(arr, value) {\n for (var i = 0; i < arr.length; i++) {\n if (arr[i] === value) {\n return i;\n }\n }\n return -1;\n}\nexport function sortBy(arr, orderFunc) {\n var result = cloneArr(arr);\n result.sort(function (a, b) { return orderFunc(a) - orderFunc(b); });\n return result;\n}\nexport function zipObject(keys, values) {\n if (keys.length !== values.length) {\n throw Error(\"can't zipObject with different number of keys and values!\");\n }\n var result = {};\n for (var i = 0; i < keys.length; i++) {\n result[keys[i]] = values[i];\n }\n return result;\n}\n/**\n * mutates! (and returns) target\n */\nexport function assign(target) {\n var sources = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n sources[_i - 1] = arguments[_i];\n }\n for (var i = 0; i < sources.length; i++) {\n var curSource = sources[i];\n var currSourceKeys = keys(curSource);\n for (var j = 0; j < currSourceKeys.length; j++) {\n var currKey = currSourceKeys[j];\n target[currKey] = curSource[currKey];\n }\n }\n return target;\n}\n/**\n * mutates! (and returns) target\n */\nexport function assignNoOverwrite(target) {\n var sources = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n sources[_i - 1] = arguments[_i];\n }\n for (var i = 0; i < sources.length; i++) {\n var curSource = sources[i];\n var currSourceKeys = keys(curSource);\n for (var j = 0; j < currSourceKeys.length; j++) {\n var currKey = currSourceKeys[j];\n if (!has(target, currKey)) {\n target[currKey] = curSource[currKey];\n }\n }\n }\n return target;\n}\nexport function defaults() {\n var sources = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n sources[_i] = arguments[_i];\n }\n return assignNoOverwrite.apply(null, [{}].concat(sources));\n}\nexport function groupBy(arr, groupKeyFunc) {\n var result = {};\n forEach(arr, function (item) {\n var currGroupKey = groupKeyFunc(item);\n var currGroupArr = result[currGroupKey];\n if (currGroupArr) {\n currGroupArr.push(item);\n }\n else {\n result[currGroupKey] = [item];\n }\n });\n return result;\n}\n/**\n * Merge obj2 into obj1.\n * Will overwrite existing properties with the same name\n */\nexport function merge(obj1, obj2) {\n var result = cloneObj(obj1);\n var keys2 = keys(obj2);\n for (var i = 0; i < keys2.length; i++) {\n var key = keys2[i];\n var value = obj2[key];\n result[key] = value;\n }\n return result;\n}\nexport function NOOP() { }\nexport function IDENTITY(item) {\n return item;\n}\n/**\n * Will return a new packed array with same values.\n */\nexport function packArray(holeyArr) {\n var result = [];\n for (var i = 0; i < holeyArr.length; i++) {\n var orgValue = holeyArr[i];\n result.push(orgValue !== undefined ? orgValue : undefined);\n }\n return result;\n}\nexport function PRINT_ERROR(msg) {\n /* istanbul ignore else - can't override global.console in node.js */\n if (console && console.error) {\n console.error(\"Error: \" + msg);\n }\n}\nexport function PRINT_WARNING(msg) {\n /* istanbul ignore else - can't override global.console in node.js*/\n if (console && console.warn) {\n // TODO: modify docs accordingly\n console.warn(\"Warning: \" + msg);\n }\n}\nexport function isES2015MapSupported() {\n return typeof Map === \"function\";\n}\nexport function applyMixins(derivedCtor, baseCtors) {\n baseCtors.forEach(function (baseCtor) {\n var baseProto = baseCtor.prototype;\n Object.getOwnPropertyNames(baseProto).forEach(function (propName) {\n if (propName === \"constructor\") {\n return;\n }\n var basePropDescriptor = Object.getOwnPropertyDescriptor(baseProto, propName);\n // Handle Accessors\n if (basePropDescriptor &&\n (basePropDescriptor.get || basePropDescriptor.set)) {\n Object.defineProperty(derivedCtor.prototype, propName, basePropDescriptor);\n }\n else {\n derivedCtor.prototype[propName] = baseCtor.prototype[propName];\n }\n });\n });\n}\n// base on: https://github.com/petkaantonov/bluebird/blob/b97c0d2d487e8c5076e8bd897e0dcd4622d31846/src/util.js#L201-L216\nexport function toFastProperties(toBecomeFast) {\n function FakeConstructor() { }\n // If our object is used as a constructor it would receive\n FakeConstructor.prototype = toBecomeFast;\n var fakeInstance = new FakeConstructor();\n function fakeAccess() {\n return typeof fakeInstance.bar;\n }\n // help V8 understand this is a \"real\" prototype by actually using\n // the fake instance.\n fakeAccess();\n fakeAccess();\n return toBecomeFast;\n // Eval prevents optimization of this method (even though this is dead code)\n /* istanbul ignore next */\n // tslint:disable-next-line\n eval(toBecomeFast);\n}\nexport function peek(arr) {\n return arr[arr.length - 1];\n}\n/* istanbul ignore next - for performance tracing*/\nexport function timer(func) {\n var start = new Date().getTime();\n var val = func();\n var end = new Date().getTime();\n var total = end - start;\n return { time: total, value: val };\n}\n//# sourceMappingURL=utils.js.map",";(function(root, factory) {\n // istanbul ignore next\n if (typeof define === \"function\" && define.amd) {\n // istanbul ignore next\n define([], factory)\n } else if (typeof module === \"object\" && module.exports) {\n module.exports = factory()\n } else {\n // istanbul ignore next\n root.regexpToAst = factory()\n }\n})(\n typeof self !== \"undefined\"\n ? // istanbul ignore next\n self\n : this,\n function() {\n // references\n // https://hackernoon.com/the-madness-of-parsing-real-world-javascript-regexps-d9ee336df983\n // https://www.ecma-international.org/ecma-262/8.0/index.html#prod-Pattern\n function RegExpParser() {}\n\n RegExpParser.prototype.saveState = function() {\n return {\n idx: this.idx,\n input: this.input,\n groupIdx: this.groupIdx\n }\n }\n\n RegExpParser.prototype.restoreState = function(newState) {\n this.idx = newState.idx\n this.input = newState.input\n this.groupIdx = newState.groupIdx\n }\n\n RegExpParser.prototype.pattern = function(input) {\n // parser state\n this.idx = 0\n this.input = input\n this.groupIdx = 0\n\n this.consumeChar(\"/\")\n var value = this.disjunction()\n this.consumeChar(\"/\")\n\n var flags = {\n type: \"Flags\",\n loc: { begin: this.idx, end: input.length },\n global: false,\n ignoreCase: false,\n multiLine: false,\n unicode: false,\n sticky: false\n }\n\n while (this.isRegExpFlag()) {\n switch (this.popChar()) {\n case \"g\":\n addFlag(flags, \"global\")\n break\n case \"i\":\n addFlag(flags, \"ignoreCase\")\n break\n case \"m\":\n addFlag(flags, \"multiLine\")\n break\n case \"u\":\n addFlag(flags, \"unicode\")\n break\n case \"y\":\n addFlag(flags, \"sticky\")\n break\n }\n }\n\n if (this.idx !== this.input.length) {\n throw Error(\n \"Redundant input: \" + this.input.substring(this.idx)\n )\n }\n return {\n type: \"Pattern\",\n flags: flags,\n value: value,\n loc: this.loc(0)\n }\n }\n\n RegExpParser.prototype.disjunction = function() {\n var alts = []\n var begin = this.idx\n\n alts.push(this.alternative())\n\n while (this.peekChar() === \"|\") {\n this.consumeChar(\"|\")\n alts.push(this.alternative())\n }\n\n return { type: \"Disjunction\", value: alts, loc: this.loc(begin) }\n }\n\n RegExpParser.prototype.alternative = function() {\n var terms = []\n var begin = this.idx\n\n while (this.isTerm()) {\n terms.push(this.term())\n }\n\n return { type: \"Alternative\", value: terms, loc: this.loc(begin) }\n }\n\n RegExpParser.prototype.term = function() {\n if (this.isAssertion()) {\n return this.assertion()\n } else {\n return this.atom()\n }\n }\n\n RegExpParser.prototype.assertion = function() {\n var begin = this.idx\n switch (this.popChar()) {\n case \"^\":\n return {\n type: \"StartAnchor\",\n loc: this.loc(begin)\n }\n case \"$\":\n return { type: \"EndAnchor\", loc: this.loc(begin) }\n // '\\b' or '\\B'\n case \"\\\\\":\n switch (this.popChar()) {\n case \"b\":\n return {\n type: \"WordBoundary\",\n loc: this.loc(begin)\n }\n case \"B\":\n return {\n type: \"NonWordBoundary\",\n loc: this.loc(begin)\n }\n }\n // istanbul ignore next\n throw Error(\"Invalid Assertion Escape\")\n // '(?=' or '(?!'\n case \"(\":\n this.consumeChar(\"?\")\n\n var type\n switch (this.popChar()) {\n case \"=\":\n type = \"Lookahead\"\n break\n case \"!\":\n type = \"NegativeLookahead\"\n break\n }\n ASSERT_EXISTS(type)\n\n var disjunction = this.disjunction()\n\n this.consumeChar(\")\")\n\n return {\n type: type,\n value: disjunction,\n loc: this.loc(begin)\n }\n }\n // istanbul ignore next\n ASSERT_NEVER_REACH_HERE()\n }\n\n RegExpParser.prototype.quantifier = function(isBacktracking) {\n var range\n var begin = this.idx\n switch (this.popChar()) {\n case \"*\":\n range = {\n atLeast: 0,\n atMost: Infinity\n }\n break\n case \"+\":\n range = {\n atLeast: 1,\n atMost: Infinity\n }\n break\n case \"?\":\n range = {\n atLeast: 0,\n atMost: 1\n }\n break\n case \"{\":\n var atLeast = this.integerIncludingZero()\n switch (this.popChar()) {\n case \"}\":\n range = {\n atLeast: atLeast,\n atMost: atLeast\n }\n break\n case \",\":\n var atMost\n if (this.isDigit()) {\n atMost = this.integerIncludingZero()\n range = {\n atLeast: atLeast,\n atMost: atMost\n }\n } else {\n range = {\n atLeast: atLeast,\n atMost: Infinity\n }\n }\n this.consumeChar(\"}\")\n break\n }\n // throwing exceptions from \"ASSERT_EXISTS\" during backtracking\n // causes severe performance degradations\n if (isBacktracking === true && range === undefined) {\n return undefined\n }\n ASSERT_EXISTS(range)\n break\n }\n\n // throwing exceptions from \"ASSERT_EXISTS\" during backtracking\n // causes severe performance degradations\n if (isBacktracking === true && range === undefined) {\n return undefined\n }\n\n ASSERT_EXISTS(range)\n\n if (this.peekChar(0) === \"?\") {\n this.consumeChar(\"?\")\n range.greedy = false\n } else {\n range.greedy = true\n }\n\n range.type = \"Quantifier\"\n range.loc = this.loc(begin)\n return range\n }\n\n RegExpParser.prototype.atom = function() {\n var atom\n var begin = this.idx\n switch (this.peekChar()) {\n case \".\":\n atom = this.dotAll()\n break\n case \"\\\\\":\n atom = this.atomEscape()\n break\n case \"[\":\n atom = this.characterClass()\n break\n case \"(\":\n atom = this.group()\n break\n }\n\n if (atom === undefined && this.isPatternCharacter()) {\n atom = this.patternCharacter()\n }\n\n ASSERT_EXISTS(atom)\n\n atom.loc = this.loc(begin)\n\n if (this.isQuantifier()) {\n atom.quantifier = this.quantifier()\n }\n\n return atom\n }\n\n RegExpParser.prototype.dotAll = function() {\n this.consumeChar(\".\")\n return {\n type: \"Set\",\n complement: true,\n value: [cc(\"\\n\"), cc(\"\\r\"), cc(\"\\u2028\"), cc(\"\\u2029\")]\n }\n }\n\n RegExpParser.prototype.atomEscape = function() {\n this.consumeChar(\"\\\\\")\n\n switch (this.peekChar()) {\n case \"1\":\n case \"2\":\n case \"3\":\n case \"4\":\n case \"5\":\n case \"6\":\n case \"7\":\n case \"8\":\n case \"9\":\n return this.decimalEscapeAtom()\n case \"d\":\n case \"D\":\n case \"s\":\n case \"S\":\n case \"w\":\n case \"W\":\n return this.characterClassEscape()\n case \"f\":\n case \"n\":\n case \"r\":\n case \"t\":\n case \"v\":\n return this.controlEscapeAtom()\n case \"c\":\n return this.controlLetterEscapeAtom()\n case \"0\":\n return this.nulCharacterAtom()\n case \"x\":\n return this.hexEscapeSequenceAtom()\n case \"u\":\n return this.regExpUnicodeEscapeSequenceAtom()\n default:\n return this.identityEscapeAtom()\n }\n }\n\n RegExpParser.prototype.decimalEscapeAtom = function() {\n var value = this.positiveInteger()\n\n return { type: \"GroupBackReference\", value: value }\n }\n\n RegExpParser.prototype.characterClassEscape = function() {\n var set\n var complement = false\n switch (this.popChar()) {\n case \"d\":\n set = digitsCharCodes\n break\n case \"D\":\n set = digitsCharCodes\n complement = true\n break\n case \"s\":\n set = whitespaceCodes\n break\n case \"S\":\n set = whitespaceCodes\n complement = true\n break\n case \"w\":\n set = wordCharCodes\n break\n case \"W\":\n set = wordCharCodes\n complement = true\n break\n }\n\n ASSERT_EXISTS(set)\n\n return { type: \"Set\", value: set, complement: complement }\n }\n\n RegExpParser.prototype.controlEscapeAtom = function() {\n var escapeCode\n switch (this.popChar()) {\n case \"f\":\n escapeCode = cc(\"\\f\")\n break\n case \"n\":\n escapeCode = cc(\"\\n\")\n break\n case \"r\":\n escapeCode = cc(\"\\r\")\n break\n case \"t\":\n escapeCode = cc(\"\\t\")\n break\n case \"v\":\n escapeCode = cc(\"\\v\")\n break\n }\n ASSERT_EXISTS(escapeCode)\n\n return { type: \"Character\", value: escapeCode }\n }\n\n RegExpParser.prototype.controlLetterEscapeAtom = function() {\n this.consumeChar(\"c\")\n var letter = this.popChar()\n if (/[a-zA-Z]/.test(letter) === false) {\n throw Error(\"Invalid \")\n }\n\n var letterCode = letter.toUpperCase().charCodeAt(0) - 64\n return { type: \"Character\", value: letterCode }\n }\n\n RegExpParser.prototype.nulCharacterAtom = function() {\n // TODO implement '[lookahead ∉ DecimalDigit]'\n // TODO: for the deprecated octal escape sequence\n this.consumeChar(\"0\")\n return { type: \"Character\", value: cc(\"\\0\") }\n }\n\n RegExpParser.prototype.hexEscapeSequenceAtom = function() {\n this.consumeChar(\"x\")\n return this.parseHexDigits(2)\n }\n\n RegExpParser.prototype.regExpUnicodeEscapeSequenceAtom = function() {\n this.consumeChar(\"u\")\n return this.parseHexDigits(4)\n }\n\n RegExpParser.prototype.identityEscapeAtom = function() {\n // TODO: implement \"SourceCharacter but not UnicodeIDContinue\"\n // // http://unicode.org/reports/tr31/#Specific_Character_Adjustments\n var escapedChar = this.popChar()\n return { type: \"Character\", value: cc(escapedChar) }\n }\n\n RegExpParser.prototype.classPatternCharacterAtom = function() {\n switch (this.peekChar()) {\n // istanbul ignore next\n case \"\\n\":\n // istanbul ignore next\n case \"\\r\":\n // istanbul ignore next\n case \"\\u2028\":\n // istanbul ignore next\n case \"\\u2029\":\n // istanbul ignore next\n case \"\\\\\":\n // istanbul ignore next\n case \"]\":\n throw Error(\"TBD\")\n default:\n var nextChar = this.popChar()\n return { type: \"Character\", value: cc(nextChar) }\n }\n }\n\n RegExpParser.prototype.characterClass = function() {\n var set = []\n var complement = false\n this.consumeChar(\"[\")\n if (this.peekChar(0) === \"^\") {\n this.consumeChar(\"^\")\n complement = true\n }\n\n while (this.isClassAtom()) {\n var from = this.classAtom()\n var isFromSingleChar = from.type === \"Character\"\n if (isFromSingleChar && this.isRangeDash()) {\n this.consumeChar(\"-\")\n var to = this.classAtom()\n var isToSingleChar = to.type === \"Character\"\n\n // a range can only be used when both sides are single characters\n if (isToSingleChar) {\n if (to.value < from.value) {\n throw Error(\"Range out of order in character class\")\n }\n set.push({ from: from.value, to: to.value })\n } else {\n // literal dash\n insertToSet(from.value, set)\n set.push(cc(\"-\"))\n insertToSet(to.value, set)\n }\n } else {\n insertToSet(from.value, set)\n }\n }\n\n this.consumeChar(\"]\")\n\n return { type: \"Set\", complement: complement, value: set }\n }\n\n RegExpParser.prototype.classAtom = function() {\n switch (this.peekChar()) {\n // istanbul ignore next\n case \"]\":\n // istanbul ignore next\n case \"\\n\":\n // istanbul ignore next\n case \"\\r\":\n // istanbul ignore next\n case \"\\u2028\":\n // istanbul ignore next\n case \"\\u2029\":\n throw Error(\"TBD\")\n case \"\\\\\":\n return this.classEscape()\n default:\n return this.classPatternCharacterAtom()\n }\n }\n\n RegExpParser.prototype.classEscape = function() {\n this.consumeChar(\"\\\\\")\n switch (this.peekChar()) {\n // Matches a backspace.\n // (Not to be confused with \\b word boundary outside characterClass)\n case \"b\":\n this.consumeChar(\"b\")\n return { type: \"Character\", value: cc(\"\\u0008\") }\n case \"d\":\n case \"D\":\n case \"s\":\n case \"S\":\n case \"w\":\n case \"W\":\n return this.characterClassEscape()\n case \"f\":\n case \"n\":\n case \"r\":\n case \"t\":\n case \"v\":\n return this.controlEscapeAtom()\n case \"c\":\n return this.controlLetterEscapeAtom()\n case \"0\":\n return this.nulCharacterAtom()\n case \"x\":\n return this.hexEscapeSequenceAtom()\n case \"u\":\n return this.regExpUnicodeEscapeSequenceAtom()\n default:\n return this.identityEscapeAtom()\n }\n }\n\n RegExpParser.prototype.group = function() {\n var capturing = true\n this.consumeChar(\"(\")\n switch (this.peekChar(0)) {\n case \"?\":\n this.consumeChar(\"?\")\n this.consumeChar(\":\")\n capturing = false\n break\n default:\n this.groupIdx++\n break\n }\n var value = this.disjunction()\n this.consumeChar(\")\")\n\n var groupAst = {\n type: \"Group\",\n capturing: capturing,\n value: value\n }\n\n if (capturing) {\n groupAst.idx = this.groupIdx\n }\n\n return groupAst\n }\n\n RegExpParser.prototype.positiveInteger = function() {\n var number = this.popChar()\n\n // istanbul ignore next - can't ever get here due to previous lookahead checks\n // still implementing this error checking in case this ever changes.\n if (decimalPatternNoZero.test(number) === false) {\n throw Error(\"Expecting a positive integer\")\n }\n\n while (decimalPattern.test(this.peekChar(0))) {\n number += this.popChar()\n }\n\n return parseInt(number, 10)\n }\n\n RegExpParser.prototype.integerIncludingZero = function() {\n var number = this.popChar()\n if (decimalPattern.test(number) === false) {\n throw Error(\"Expecting an integer\")\n }\n\n while (decimalPattern.test(this.peekChar(0))) {\n number += this.popChar()\n }\n\n return parseInt(number, 10)\n }\n\n RegExpParser.prototype.patternCharacter = function() {\n var nextChar = this.popChar()\n switch (nextChar) {\n // istanbul ignore next\n case \"\\n\":\n // istanbul ignore next\n case \"\\r\":\n // istanbul ignore next\n case \"\\u2028\":\n // istanbul ignore next\n case \"\\u2029\":\n // istanbul ignore next\n case \"^\":\n // istanbul ignore next\n case \"$\":\n // istanbul ignore next\n case \"\\\\\":\n // istanbul ignore next\n case \".\":\n // istanbul ignore next\n case \"*\":\n // istanbul ignore next\n case \"+\":\n // istanbul ignore next\n case \"?\":\n // istanbul ignore next\n case \"(\":\n // istanbul ignore next\n case \")\":\n // istanbul ignore next\n case \"[\":\n // istanbul ignore next\n case \"|\":\n // istanbul ignore next\n throw Error(\"TBD\")\n default:\n return { type: \"Character\", value: cc(nextChar) }\n }\n }\n RegExpParser.prototype.isRegExpFlag = function() {\n switch (this.peekChar(0)) {\n case \"g\":\n case \"i\":\n case \"m\":\n case \"u\":\n case \"y\":\n return true\n default:\n return false\n }\n }\n\n RegExpParser.prototype.isRangeDash = function() {\n return this.peekChar() === \"-\" && this.isClassAtom(1)\n }\n\n RegExpParser.prototype.isDigit = function() {\n return decimalPattern.test(this.peekChar(0))\n }\n\n RegExpParser.prototype.isClassAtom = function(howMuch) {\n if (howMuch === undefined) {\n howMuch = 0\n }\n\n switch (this.peekChar(howMuch)) {\n case \"]\":\n case \"\\n\":\n case \"\\r\":\n case \"\\u2028\":\n case \"\\u2029\":\n return false\n default:\n return true\n }\n }\n\n RegExpParser.prototype.isTerm = function() {\n return this.isAtom() || this.isAssertion()\n }\n\n RegExpParser.prototype.isAtom = function() {\n if (this.isPatternCharacter()) {\n return true\n }\n\n switch (this.peekChar(0)) {\n case \".\":\n case \"\\\\\": // atomEscape\n case \"[\": // characterClass\n // TODO: isAtom must be called before isAssertion - disambiguate\n case \"(\": // group\n return true\n default:\n return false\n }\n }\n\n RegExpParser.prototype.isAssertion = function() {\n switch (this.peekChar(0)) {\n case \"^\":\n case \"$\":\n return true\n // '\\b' or '\\B'\n case \"\\\\\":\n switch (this.peekChar(1)) {\n case \"b\":\n case \"B\":\n return true\n default:\n return false\n }\n // '(?=' or '(?!'\n case \"(\":\n return (\n this.peekChar(1) === \"?\" &&\n (this.peekChar(2) === \"=\" || this.peekChar(2) === \"!\")\n )\n default:\n return false\n }\n }\n\n RegExpParser.prototype.isQuantifier = function() {\n var prevState = this.saveState()\n try {\n return this.quantifier(true) !== undefined\n } catch (e) {\n return false\n } finally {\n this.restoreState(prevState)\n }\n }\n\n RegExpParser.prototype.isPatternCharacter = function() {\n switch (this.peekChar()) {\n case \"^\":\n case \"$\":\n case \"\\\\\":\n case \".\":\n case \"*\":\n case \"+\":\n case \"?\":\n case \"(\":\n case \")\":\n case \"[\":\n case \"|\":\n case \"/\":\n case \"\\n\":\n case \"\\r\":\n case \"\\u2028\":\n case \"\\u2029\":\n return false\n default:\n return true\n }\n }\n\n RegExpParser.prototype.parseHexDigits = function(howMany) {\n var hexString = \"\"\n for (var i = 0; i < howMany; i++) {\n var hexChar = this.popChar()\n if (hexDigitPattern.test(hexChar) === false) {\n throw Error(\"Expecting a HexDecimal digits\")\n }\n hexString += hexChar\n }\n var charCode = parseInt(hexString, 16)\n return { type: \"Character\", value: charCode }\n }\n\n RegExpParser.prototype.peekChar = function(howMuch) {\n if (howMuch === undefined) {\n howMuch = 0\n }\n return this.input[this.idx + howMuch]\n }\n\n RegExpParser.prototype.popChar = function() {\n var nextChar = this.peekChar(0)\n this.consumeChar()\n return nextChar\n }\n\n RegExpParser.prototype.consumeChar = function(char) {\n if (char !== undefined && this.input[this.idx] !== char) {\n throw Error(\n \"Expected: '\" +\n char +\n \"' but found: '\" +\n this.input[this.idx] +\n \"' at offset: \" +\n this.idx\n )\n }\n\n if (this.idx >= this.input.length) {\n throw Error(\"Unexpected end of input\")\n }\n this.idx++\n }\n\n RegExpParser.prototype.loc = function(begin) {\n return { begin: begin, end: this.idx }\n }\n\n // consts and utilities\n var hexDigitPattern = /[0-9a-fA-F]/\n var decimalPattern = /[0-9]/\n var decimalPatternNoZero = /[1-9]/\n\n function cc(char) {\n return char.charCodeAt(0)\n }\n\n function insertToSet(item, set) {\n if (item.length !== undefined) {\n item.forEach(function(subItem) {\n set.push(subItem)\n })\n } else {\n set.push(item)\n }\n }\n\n function addFlag(flagObj, flagKey) {\n if (flagObj[flagKey] === true) {\n throw \"duplicate flag \" + flagKey\n }\n\n flagObj[flagKey] = true\n }\n\n function ASSERT_EXISTS(obj) {\n // istanbul ignore next\n if (obj === undefined) {\n throw Error(\"Internal Error - Should never get here!\")\n }\n }\n\n // istanbul ignore next\n function ASSERT_NEVER_REACH_HERE() {\n throw Error(\"Internal Error - Should never get here!\")\n }\n\n var i\n var digitsCharCodes = []\n for (i = cc(\"0\"); i <= cc(\"9\"); i++) {\n digitsCharCodes.push(i)\n }\n\n var wordCharCodes = [cc(\"_\")].concat(digitsCharCodes)\n for (i = cc(\"a\"); i <= cc(\"z\"); i++) {\n wordCharCodes.push(i)\n }\n\n for (i = cc(\"A\"); i <= cc(\"Z\"); i++) {\n wordCharCodes.push(i)\n }\n\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp#character-classes\n var whitespaceCodes = [\n cc(\" \"),\n cc(\"\\f\"),\n cc(\"\\n\"),\n cc(\"\\r\"),\n cc(\"\\t\"),\n cc(\"\\v\"),\n cc(\"\\t\"),\n cc(\"\\u00a0\"),\n cc(\"\\u1680\"),\n cc(\"\\u2000\"),\n cc(\"\\u2001\"),\n cc(\"\\u2002\"),\n cc(\"\\u2003\"),\n cc(\"\\u2004\"),\n cc(\"\\u2005\"),\n cc(\"\\u2006\"),\n cc(\"\\u2007\"),\n cc(\"\\u2008\"),\n cc(\"\\u2009\"),\n cc(\"\\u200a\"),\n cc(\"\\u2028\"),\n cc(\"\\u2029\"),\n cc(\"\\u202f\"),\n cc(\"\\u205f\"),\n cc(\"\\u3000\"),\n cc(\"\\ufeff\")\n ]\n\n function BaseRegExpVisitor() {}\n\n BaseRegExpVisitor.prototype.visitChildren = function(node) {\n for (var key in node) {\n var child = node[key]\n /* istanbul ignore else */\n if (node.hasOwnProperty(key)) {\n if (child.type !== undefined) {\n this.visit(child)\n } else if (Array.isArray(child)) {\n child.forEach(function(subChild) {\n this.visit(subChild)\n }, this)\n }\n }\n }\n }\n\n BaseRegExpVisitor.prototype.visit = function(node) {\n switch (node.type) {\n case \"Pattern\":\n this.visitPattern(node)\n break\n case \"Flags\":\n this.visitFlags(node)\n break\n case \"Disjunction\":\n this.visitDisjunction(node)\n break\n case \"Alternative\":\n this.visitAlternative(node)\n break\n case \"StartAnchor\":\n this.visitStartAnchor(node)\n break\n case \"EndAnchor\":\n this.visitEndAnchor(node)\n break\n case \"WordBoundary\":\n this.visitWordBoundary(node)\n break\n case \"NonWordBoundary\":\n this.visitNonWordBoundary(node)\n break\n case \"Lookahead\":\n this.visitLookahead(node)\n break\n case \"NegativeLookahead\":\n this.visitNegativeLookahead(node)\n break\n case \"Character\":\n this.visitCharacter(node)\n break\n case \"Set\":\n this.visitSet(node)\n break\n case \"Group\":\n this.visitGroup(node)\n break\n case \"GroupBackReference\":\n this.visitGroupBackReference(node)\n break\n case \"Quantifier\":\n this.visitQuantifier(node)\n break\n }\n\n this.visitChildren(node)\n }\n\n BaseRegExpVisitor.prototype.visitPattern = function(node) {}\n\n BaseRegExpVisitor.prototype.visitFlags = function(node) {}\n\n BaseRegExpVisitor.prototype.visitDisjunction = function(node) {}\n\n BaseRegExpVisitor.prototype.visitAlternative = function(node) {}\n\n // Assertion\n BaseRegExpVisitor.prototype.visitStartAnchor = function(node) {}\n\n BaseRegExpVisitor.prototype.visitEndAnchor = function(node) {}\n\n BaseRegExpVisitor.prototype.visitWordBoundary = function(node) {}\n\n BaseRegExpVisitor.prototype.visitNonWordBoundary = function(node) {}\n\n BaseRegExpVisitor.prototype.visitLookahead = function(node) {}\n\n BaseRegExpVisitor.prototype.visitNegativeLookahead = function(node) {}\n\n // atoms\n BaseRegExpVisitor.prototype.visitCharacter = function(node) {}\n\n BaseRegExpVisitor.prototype.visitSet = function(node) {}\n\n BaseRegExpVisitor.prototype.visitGroup = function(node) {}\n\n BaseRegExpVisitor.prototype.visitGroupBackReference = function(node) {}\n\n BaseRegExpVisitor.prototype.visitQuantifier = function(node) {}\n\n return {\n RegExpParser: RegExpParser,\n BaseRegExpVisitor: BaseRegExpVisitor,\n VERSION: \"0.5.0\"\n }\n }\n)\n","import { RegExpParser } from \"regexp-to-ast\";\nvar regExpAstCache = {};\nvar regExpParser = new RegExpParser();\nexport function getRegExpAst(regExp) {\n var regExpStr = regExp.toString();\n if (regExpAstCache.hasOwnProperty(regExpStr)) {\n return regExpAstCache[regExpStr];\n }\n else {\n var regExpAst = regExpParser.pattern(regExpStr);\n regExpAstCache[regExpStr] = regExpAst;\n return regExpAst;\n }\n}\nexport function clearRegExpParserCache() {\n regExpAstCache = {};\n}\n//# sourceMappingURL=reg_exp_parser.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { VERSION, BaseRegExpVisitor } from \"regexp-to-ast\";\nimport { forEach, contains, PRINT_ERROR, PRINT_WARNING, find, isArray, every, values } from \"../utils/utils\";\nimport { getRegExpAst } from \"./reg_exp_parser\";\nimport { charCodeToOptimizedIndex, minOptimizationVal } from \"./lexer\";\nvar complementErrorMessage = \"Complement Sets are not supported for first char optimization\";\nexport var failedOptimizationPrefixMsg = 'Unable to use \"first char\" lexer optimizations:\\n';\nexport function getOptimizedStartCodesIndices(regExp, ensureOptimizations) {\n if (ensureOptimizations === void 0) { ensureOptimizations = false; }\n try {\n var ast = getRegExpAst(regExp);\n var firstChars = firstCharOptimizedIndices(ast.value, {}, ast.flags.ignoreCase);\n return firstChars;\n }\n catch (e) {\n /* istanbul ignore next */\n // Testing this relies on the regexp-to-ast library having a bug... */\n // TODO: only the else branch needs to be ignored, try to fix with newer prettier / tsc\n if (e.message === complementErrorMessage) {\n if (ensureOptimizations) {\n PRINT_WARNING(\"\" + failedOptimizationPrefixMsg +\n (\"\\tUnable to optimize: < \" + regExp.toString() + \" >\\n\") +\n \"\\tComplement Sets cannot be automatically optimized.\\n\" +\n \"\\tThis will disable the lexer's first char optimizations.\\n\" +\n \"\\tSee: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#COMPLEMENT for details.\");\n }\n }\n else {\n var msgSuffix = \"\";\n if (ensureOptimizations) {\n msgSuffix =\n \"\\n\\tThis will disable the lexer's first char optimizations.\\n\" +\n \"\\tSee: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#REGEXP_PARSING for details.\";\n }\n PRINT_ERROR(failedOptimizationPrefixMsg + \"\\n\" +\n (\"\\tFailed parsing: < \" + regExp.toString() + \" >\\n\") +\n (\"\\tUsing the regexp-to-ast library version: \" + VERSION + \"\\n\") +\n \"\\tPlease open an issue at: https://github.com/bd82/regexp-to-ast/issues\" +\n msgSuffix);\n }\n }\n return [];\n}\nexport function firstCharOptimizedIndices(ast, result, ignoreCase) {\n switch (ast.type) {\n case \"Disjunction\":\n for (var i = 0; i < ast.value.length; i++) {\n firstCharOptimizedIndices(ast.value[i], result, ignoreCase);\n }\n break;\n case \"Alternative\":\n var terms = ast.value;\n for (var i = 0; i < terms.length; i++) {\n var term = terms[i];\n // skip terms that cannot effect the first char results\n switch (term.type) {\n case \"EndAnchor\":\n // A group back reference cannot affect potential starting char.\n // because if a back reference is the first production than automatically\n // the group being referenced has had to come BEFORE so its codes have already been added\n case \"GroupBackReference\":\n // assertions do not affect potential starting codes\n case \"Lookahead\":\n case \"NegativeLookahead\":\n case \"StartAnchor\":\n case \"WordBoundary\":\n case \"NonWordBoundary\":\n continue;\n }\n var atom = term;\n switch (atom.type) {\n case \"Character\":\n addOptimizedIdxToResult(atom.value, result, ignoreCase);\n break;\n case \"Set\":\n if (atom.complement === true) {\n throw Error(complementErrorMessage);\n }\n forEach(atom.value, function (code) {\n if (typeof code === \"number\") {\n addOptimizedIdxToResult(code, result, ignoreCase);\n }\n else {\n // range\n var range = code;\n // cannot optimize when ignoreCase is\n if (ignoreCase === true) {\n for (var rangeCode = range.from; rangeCode <= range.to; rangeCode++) {\n addOptimizedIdxToResult(rangeCode, result, ignoreCase);\n }\n }\n // Optimization (2 orders of magnitude less work for very large ranges)\n else {\n // handle unoptimized values\n for (var rangeCode = range.from; rangeCode <= range.to && rangeCode < minOptimizationVal; rangeCode++) {\n addOptimizedIdxToResult(rangeCode, result, ignoreCase);\n }\n // Less common charCode where we optimize for faster init time, by using larger \"buckets\"\n if (range.to >= minOptimizationVal) {\n var minUnOptVal = range.from >= minOptimizationVal\n ? range.from\n : minOptimizationVal;\n var maxUnOptVal = range.to;\n var minOptIdx = charCodeToOptimizedIndex(minUnOptVal);\n var maxOptIdx = charCodeToOptimizedIndex(maxUnOptVal);\n for (var currOptIdx = minOptIdx; currOptIdx <= maxOptIdx; currOptIdx++) {\n result[currOptIdx] = currOptIdx;\n }\n }\n }\n }\n });\n break;\n case \"Group\":\n firstCharOptimizedIndices(atom.value, result, ignoreCase);\n break;\n /* istanbul ignore next */\n default:\n throw Error(\"Non Exhaustive Match\");\n }\n // reached a mandatory production, no more **start** codes can be found on this alternative\n var isOptionalQuantifier = atom.quantifier !== undefined && atom.quantifier.atLeast === 0;\n if (\n // A group may be optional due to empty contents /(?:)/\n // or if everything inside it is optional /((a)?)/\n (atom.type === \"Group\" && isWholeOptional(atom) === false) ||\n // If this term is not a group it may only be optional if it has an optional quantifier\n (atom.type !== \"Group\" && isOptionalQuantifier === false)) {\n break;\n }\n }\n break;\n /* istanbul ignore next */\n default:\n throw Error(\"non exhaustive match!\");\n }\n // console.log(Object.keys(result).length)\n return values(result);\n}\nfunction addOptimizedIdxToResult(code, result, ignoreCase) {\n var optimizedCharIdx = charCodeToOptimizedIndex(code);\n result[optimizedCharIdx] = optimizedCharIdx;\n if (ignoreCase === true) {\n handleIgnoreCase(code, result);\n }\n}\nfunction handleIgnoreCase(code, result) {\n var char = String.fromCharCode(code);\n var upperChar = char.toUpperCase();\n /* istanbul ignore else */\n if (upperChar !== char) {\n var optimizedCharIdx = charCodeToOptimizedIndex(upperChar.charCodeAt(0));\n result[optimizedCharIdx] = optimizedCharIdx;\n }\n else {\n var lowerChar = char.toLowerCase();\n if (lowerChar !== char) {\n var optimizedCharIdx = charCodeToOptimizedIndex(lowerChar.charCodeAt(0));\n result[optimizedCharIdx] = optimizedCharIdx;\n }\n }\n}\nfunction findCode(setNode, targetCharCodes) {\n return find(setNode.value, function (codeOrRange) {\n if (typeof codeOrRange === \"number\") {\n return contains(targetCharCodes, codeOrRange);\n }\n else {\n // range\n var range_1 = codeOrRange;\n return (find(targetCharCodes, function (targetCode) { return range_1.from <= targetCode && targetCode <= range_1.to; }) !== undefined);\n }\n });\n}\nfunction isWholeOptional(ast) {\n if (ast.quantifier && ast.quantifier.atLeast === 0) {\n return true;\n }\n if (!ast.value) {\n return false;\n }\n return isArray(ast.value)\n ? every(ast.value, isWholeOptional)\n : isWholeOptional(ast.value);\n}\nvar CharCodeFinder = /** @class */ (function (_super) {\n __extends(CharCodeFinder, _super);\n function CharCodeFinder(targetCharCodes) {\n var _this = _super.call(this) || this;\n _this.targetCharCodes = targetCharCodes;\n _this.found = false;\n return _this;\n }\n CharCodeFinder.prototype.visitChildren = function (node) {\n // No need to keep looking...\n if (this.found === true) {\n return;\n }\n // switch lookaheads as they do not actually consume any characters thus\n // finding a charCode at lookahead context does not mean that regexp can actually contain it in a match.\n switch (node.type) {\n case \"Lookahead\":\n this.visitLookahead(node);\n return;\n case \"NegativeLookahead\":\n this.visitNegativeLookahead(node);\n return;\n }\n _super.prototype.visitChildren.call(this, node);\n };\n CharCodeFinder.prototype.visitCharacter = function (node) {\n if (contains(this.targetCharCodes, node.value)) {\n this.found = true;\n }\n };\n CharCodeFinder.prototype.visitSet = function (node) {\n if (node.complement) {\n if (findCode(node, this.targetCharCodes) === undefined) {\n this.found = true;\n }\n }\n else {\n if (findCode(node, this.targetCharCodes) !== undefined) {\n this.found = true;\n }\n }\n };\n return CharCodeFinder;\n}(BaseRegExpVisitor));\nexport function canMatchCharCode(charCodes, pattern) {\n if (pattern instanceof RegExp) {\n var ast = getRegExpAst(pattern);\n var charCodeFinder = new CharCodeFinder(charCodes);\n charCodeFinder.visit(ast);\n return charCodeFinder.found;\n }\n else {\n return (find(pattern, function (char) {\n return contains(charCodes, char.charCodeAt(0));\n }) !== undefined);\n }\n}\n//# sourceMappingURL=reg_exp.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { BaseRegExpVisitor } from \"regexp-to-ast\";\nimport { Lexer, LexerDefinitionErrorType } from \"./lexer_public\";\nimport { compact, contains, defaults, difference, filter, find, first, flatten, forEach, has, indexOf, isArray, isEmpty, isFunction, isRegExp, isString, isUndefined, keys, map, mapValues, packArray, PRINT_ERROR, reduce, reject } from \"../utils/utils\";\nimport { canMatchCharCode, failedOptimizationPrefixMsg, getOptimizedStartCodesIndices } from \"./reg_exp\";\nimport { getRegExpAst } from \"./reg_exp_parser\";\nvar PATTERN = \"PATTERN\";\nexport var DEFAULT_MODE = \"defaultMode\";\nexport var MODES = \"modes\";\nexport var SUPPORT_STICKY = typeof new RegExp(\"(?:)\").sticky === \"boolean\";\nexport function disableSticky() {\n SUPPORT_STICKY = false;\n}\nexport function enableSticky() {\n SUPPORT_STICKY = true;\n}\nexport function analyzeTokenTypes(tokenTypes, options) {\n options = defaults(options, {\n useSticky: SUPPORT_STICKY,\n debug: false,\n safeMode: false,\n positionTracking: \"full\",\n lineTerminatorCharacters: [\"\\r\", \"\\n\"],\n tracer: function (msg, action) { return action(); }\n });\n var tracer = options.tracer;\n tracer(\"initCharCodeToOptimizedIndexMap\", function () {\n initCharCodeToOptimizedIndexMap();\n });\n var onlyRelevantTypes;\n tracer(\"Reject Lexer.NA\", function () {\n onlyRelevantTypes = reject(tokenTypes, function (currType) {\n return currType[PATTERN] === Lexer.NA;\n });\n });\n var hasCustom = false;\n var allTransformedPatterns;\n tracer(\"Transform Patterns\", function () {\n hasCustom = false;\n allTransformedPatterns = map(onlyRelevantTypes, function (currType) {\n var currPattern = currType[PATTERN];\n /* istanbul ignore else */\n if (isRegExp(currPattern)) {\n var regExpSource = currPattern.source;\n if (regExpSource.length === 1 &&\n // only these regExp meta characters which can appear in a length one regExp\n regExpSource !== \"^\" &&\n regExpSource !== \"$\" &&\n regExpSource !== \".\" &&\n !currPattern.ignoreCase) {\n return regExpSource;\n }\n else if (regExpSource.length === 2 &&\n regExpSource[0] === \"\\\\\" &&\n // not a meta character\n !contains([\n \"d\",\n \"D\",\n \"s\",\n \"S\",\n \"t\",\n \"r\",\n \"n\",\n \"t\",\n \"0\",\n \"c\",\n \"b\",\n \"B\",\n \"f\",\n \"v\",\n \"w\",\n \"W\"\n ], regExpSource[1])) {\n // escaped meta Characters: /\\+/ /\\[/\n // or redundant escaping: /\\a/\n // without the escaping \"\\\"\n return regExpSource[1];\n }\n else {\n return options.useSticky\n ? addStickyFlag(currPattern)\n : addStartOfInput(currPattern);\n }\n }\n else if (isFunction(currPattern)) {\n hasCustom = true;\n // CustomPatternMatcherFunc - custom patterns do not require any transformations, only wrapping in a RegExp Like object\n return { exec: currPattern };\n }\n else if (has(currPattern, \"exec\")) {\n hasCustom = true;\n // ICustomPattern\n return currPattern;\n }\n else if (typeof currPattern === \"string\") {\n if (currPattern.length === 1) {\n return currPattern;\n }\n else {\n var escapedRegExpString = currPattern.replace(/[\\\\^$.*+?()[\\]{}|]/g, \"\\\\$&\");\n var wrappedRegExp = new RegExp(escapedRegExpString);\n return options.useSticky\n ? addStickyFlag(wrappedRegExp)\n : addStartOfInput(wrappedRegExp);\n }\n }\n else {\n throw Error(\"non exhaustive match\");\n }\n });\n });\n var patternIdxToType;\n var patternIdxToGroup;\n var patternIdxToLongerAltIdx;\n var patternIdxToPushMode;\n var patternIdxToPopMode;\n tracer(\"misc mapping\", function () {\n patternIdxToType = map(onlyRelevantTypes, function (currType) { return currType.tokenTypeIdx; });\n patternIdxToGroup = map(onlyRelevantTypes, function (clazz) {\n var groupName = clazz.GROUP;\n /* istanbul ignore next */\n if (groupName === Lexer.SKIPPED) {\n return undefined;\n }\n else if (isString(groupName)) {\n return groupName;\n }\n else if (isUndefined(groupName)) {\n return false;\n }\n else {\n throw Error(\"non exhaustive match\");\n }\n });\n patternIdxToLongerAltIdx = map(onlyRelevantTypes, function (clazz) {\n var longerAltType = clazz.LONGER_ALT;\n if (longerAltType) {\n var longerAltIdx = indexOf(onlyRelevantTypes, longerAltType);\n return longerAltIdx;\n }\n });\n patternIdxToPushMode = map(onlyRelevantTypes, function (clazz) { return clazz.PUSH_MODE; });\n patternIdxToPopMode = map(onlyRelevantTypes, function (clazz) {\n return has(clazz, \"POP_MODE\");\n });\n });\n var patternIdxToCanLineTerminator;\n tracer(\"Line Terminator Handling\", function () {\n var lineTerminatorCharCodes = getCharCodes(options.lineTerminatorCharacters);\n patternIdxToCanLineTerminator = map(onlyRelevantTypes, function (tokType) { return false; });\n if (options.positionTracking !== \"onlyOffset\") {\n patternIdxToCanLineTerminator = map(onlyRelevantTypes, function (tokType) {\n if (has(tokType, \"LINE_BREAKS\")) {\n return tokType.LINE_BREAKS;\n }\n else {\n if (checkLineBreaksIssues(tokType, lineTerminatorCharCodes) === false) {\n return canMatchCharCode(lineTerminatorCharCodes, tokType.PATTERN);\n }\n }\n });\n }\n });\n var patternIdxToIsCustom;\n var patternIdxToShort;\n var emptyGroups;\n var patternIdxToConfig;\n tracer(\"Misc Mapping #2\", function () {\n patternIdxToIsCustom = map(onlyRelevantTypes, isCustomPattern);\n patternIdxToShort = map(allTransformedPatterns, isShortPattern);\n emptyGroups = reduce(onlyRelevantTypes, function (acc, clazz) {\n var groupName = clazz.GROUP;\n if (isString(groupName) && !(groupName === Lexer.SKIPPED)) {\n acc[groupName] = [];\n }\n return acc;\n }, {});\n patternIdxToConfig = map(allTransformedPatterns, function (x, idx) {\n return {\n pattern: allTransformedPatterns[idx],\n longerAlt: patternIdxToLongerAltIdx[idx],\n canLineTerminator: patternIdxToCanLineTerminator[idx],\n isCustom: patternIdxToIsCustom[idx],\n short: patternIdxToShort[idx],\n group: patternIdxToGroup[idx],\n push: patternIdxToPushMode[idx],\n pop: patternIdxToPopMode[idx],\n tokenTypeIdx: patternIdxToType[idx],\n tokenType: onlyRelevantTypes[idx]\n };\n });\n });\n var canBeOptimized = true;\n var charCodeToPatternIdxToConfig = [];\n if (!options.safeMode) {\n tracer(\"First Char Optimization\", function () {\n charCodeToPatternIdxToConfig = reduce(onlyRelevantTypes, function (result, currTokType, idx) {\n if (typeof currTokType.PATTERN === \"string\") {\n var charCode = currTokType.PATTERN.charCodeAt(0);\n var optimizedIdx = charCodeToOptimizedIndex(charCode);\n addToMapOfArrays(result, optimizedIdx, patternIdxToConfig[idx]);\n }\n else if (isArray(currTokType.START_CHARS_HINT)) {\n var lastOptimizedIdx_1;\n forEach(currTokType.START_CHARS_HINT, function (charOrInt) {\n var charCode = typeof charOrInt === \"string\"\n ? charOrInt.charCodeAt(0)\n : charOrInt;\n var currOptimizedIdx = charCodeToOptimizedIndex(charCode);\n // Avoid adding the config multiple times\n /* istanbul ignore else */\n // - Difficult to check this scenario effects as it is only a performance\n // optimization that does not change correctness\n if (lastOptimizedIdx_1 !== currOptimizedIdx) {\n lastOptimizedIdx_1 = currOptimizedIdx;\n addToMapOfArrays(result, currOptimizedIdx, patternIdxToConfig[idx]);\n }\n });\n }\n else if (isRegExp(currTokType.PATTERN)) {\n if (currTokType.PATTERN.unicode) {\n canBeOptimized = false;\n if (options.ensureOptimizations) {\n PRINT_ERROR(\"\" + failedOptimizationPrefixMsg +\n (\"\\tUnable to analyze < \" + currTokType.PATTERN.toString() + \" > pattern.\\n\") +\n \"\\tThe regexp unicode flag is not currently supported by the regexp-to-ast library.\\n\" +\n \"\\tThis will disable the lexer's first char optimizations.\\n\" +\n \"\\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNICODE_OPTIMIZE\");\n }\n }\n else {\n var optimizedCodes = getOptimizedStartCodesIndices(currTokType.PATTERN, options.ensureOptimizations);\n /* istanbul ignore if */\n // start code will only be empty given an empty regExp or failure of regexp-to-ast library\n // the first should be a different validation and the second cannot be tested.\n if (isEmpty(optimizedCodes)) {\n // we cannot understand what codes may start possible matches\n // The optimization correctness requires knowing start codes for ALL patterns.\n // Not actually sure this is an error, no debug message\n canBeOptimized = false;\n }\n forEach(optimizedCodes, function (code) {\n addToMapOfArrays(result, code, patternIdxToConfig[idx]);\n });\n }\n }\n else {\n if (options.ensureOptimizations) {\n PRINT_ERROR(\"\" + failedOptimizationPrefixMsg +\n (\"\\tTokenType: <\" + currTokType.name + \"> is using a custom token pattern without providing parameter.\\n\") +\n \"\\tThis will disable the lexer's first char optimizations.\\n\" +\n \"\\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_OPTIMIZE\");\n }\n canBeOptimized = false;\n }\n return result;\n }, []);\n });\n }\n tracer(\"ArrayPacking\", function () {\n charCodeToPatternIdxToConfig = packArray(charCodeToPatternIdxToConfig);\n });\n return {\n emptyGroups: emptyGroups,\n patternIdxToConfig: patternIdxToConfig,\n charCodeToPatternIdxToConfig: charCodeToPatternIdxToConfig,\n hasCustom: hasCustom,\n canBeOptimized: canBeOptimized\n };\n}\nexport function validatePatterns(tokenTypes, validModesNames) {\n var errors = [];\n var missingResult = findMissingPatterns(tokenTypes);\n errors = errors.concat(missingResult.errors);\n var invalidResult = findInvalidPatterns(missingResult.valid);\n var validTokenTypes = invalidResult.valid;\n errors = errors.concat(invalidResult.errors);\n errors = errors.concat(validateRegExpPattern(validTokenTypes));\n errors = errors.concat(findInvalidGroupType(validTokenTypes));\n errors = errors.concat(findModesThatDoNotExist(validTokenTypes, validModesNames));\n errors = errors.concat(findUnreachablePatterns(validTokenTypes));\n return errors;\n}\nfunction validateRegExpPattern(tokenTypes) {\n var errors = [];\n var withRegExpPatterns = filter(tokenTypes, function (currTokType) {\n return isRegExp(currTokType[PATTERN]);\n });\n errors = errors.concat(findEndOfInputAnchor(withRegExpPatterns));\n errors = errors.concat(findStartOfInputAnchor(withRegExpPatterns));\n errors = errors.concat(findUnsupportedFlags(withRegExpPatterns));\n errors = errors.concat(findDuplicatePatterns(withRegExpPatterns));\n errors = errors.concat(findEmptyMatchRegExps(withRegExpPatterns));\n return errors;\n}\nexport function findMissingPatterns(tokenTypes) {\n var tokenTypesWithMissingPattern = filter(tokenTypes, function (currType) {\n return !has(currType, PATTERN);\n });\n var errors = map(tokenTypesWithMissingPattern, function (currType) {\n return {\n message: \"Token Type: ->\" +\n currType.name +\n \"<- missing static 'PATTERN' property\",\n type: LexerDefinitionErrorType.MISSING_PATTERN,\n tokenTypes: [currType]\n };\n });\n var valid = difference(tokenTypes, tokenTypesWithMissingPattern);\n return { errors: errors, valid: valid };\n}\nexport function findInvalidPatterns(tokenTypes) {\n var tokenTypesWithInvalidPattern = filter(tokenTypes, function (currType) {\n var pattern = currType[PATTERN];\n return (!isRegExp(pattern) &&\n !isFunction(pattern) &&\n !has(pattern, \"exec\") &&\n !isString(pattern));\n });\n var errors = map(tokenTypesWithInvalidPattern, function (currType) {\n return {\n message: \"Token Type: ->\" +\n currType.name +\n \"<- static 'PATTERN' can only be a RegExp, a\" +\n \" Function matching the {CustomPatternMatcherFunc} type or an Object matching the {ICustomPattern} interface.\",\n type: LexerDefinitionErrorType.INVALID_PATTERN,\n tokenTypes: [currType]\n };\n });\n var valid = difference(tokenTypes, tokenTypesWithInvalidPattern);\n return { errors: errors, valid: valid };\n}\nvar end_of_input = /[^\\\\][\\$]/;\nexport function findEndOfInputAnchor(tokenTypes) {\n var EndAnchorFinder = /** @class */ (function (_super) {\n __extends(EndAnchorFinder, _super);\n function EndAnchorFinder() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.found = false;\n return _this;\n }\n EndAnchorFinder.prototype.visitEndAnchor = function (node) {\n this.found = true;\n };\n return EndAnchorFinder;\n }(BaseRegExpVisitor));\n var invalidRegex = filter(tokenTypes, function (currType) {\n var pattern = currType[PATTERN];\n try {\n var regexpAst = getRegExpAst(pattern);\n var endAnchorVisitor = new EndAnchorFinder();\n endAnchorVisitor.visit(regexpAst);\n return endAnchorVisitor.found;\n }\n catch (e) {\n // old behavior in case of runtime exceptions with regexp-to-ast.\n /* istanbul ignore next - cannot ensure an error in regexp-to-ast*/\n return end_of_input.test(pattern.source);\n }\n });\n var errors = map(invalidRegex, function (currType) {\n return {\n message: \"Unexpected RegExp Anchor Error:\\n\" +\n \"\\tToken Type: ->\" +\n currType.name +\n \"<- static 'PATTERN' cannot contain end of input anchor '$'\\n\" +\n \"\\tSee chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS\" +\n \"\\tfor details.\",\n type: LexerDefinitionErrorType.EOI_ANCHOR_FOUND,\n tokenTypes: [currType]\n };\n });\n return errors;\n}\nexport function findEmptyMatchRegExps(tokenTypes) {\n var matchesEmptyString = filter(tokenTypes, function (currType) {\n var pattern = currType[PATTERN];\n return pattern.test(\"\");\n });\n var errors = map(matchesEmptyString, function (currType) {\n return {\n message: \"Token Type: ->\" +\n currType.name +\n \"<- static 'PATTERN' must not match an empty string\",\n type: LexerDefinitionErrorType.EMPTY_MATCH_PATTERN,\n tokenTypes: [currType]\n };\n });\n return errors;\n}\nvar start_of_input = /[^\\\\[][\\^]|^\\^/;\nexport function findStartOfInputAnchor(tokenTypes) {\n var StartAnchorFinder = /** @class */ (function (_super) {\n __extends(StartAnchorFinder, _super);\n function StartAnchorFinder() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.found = false;\n return _this;\n }\n StartAnchorFinder.prototype.visitStartAnchor = function (node) {\n this.found = true;\n };\n return StartAnchorFinder;\n }(BaseRegExpVisitor));\n var invalidRegex = filter(tokenTypes, function (currType) {\n var pattern = currType[PATTERN];\n try {\n var regexpAst = getRegExpAst(pattern);\n var startAnchorVisitor = new StartAnchorFinder();\n startAnchorVisitor.visit(regexpAst);\n return startAnchorVisitor.found;\n }\n catch (e) {\n // old behavior in case of runtime exceptions with regexp-to-ast.\n /* istanbul ignore next - cannot ensure an error in regexp-to-ast*/\n return start_of_input.test(pattern.source);\n }\n });\n var errors = map(invalidRegex, function (currType) {\n return {\n message: \"Unexpected RegExp Anchor Error:\\n\" +\n \"\\tToken Type: ->\" +\n currType.name +\n \"<- static 'PATTERN' cannot contain start of input anchor '^'\\n\" +\n \"\\tSee https://chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS\" +\n \"\\tfor details.\",\n type: LexerDefinitionErrorType.SOI_ANCHOR_FOUND,\n tokenTypes: [currType]\n };\n });\n return errors;\n}\nexport function findUnsupportedFlags(tokenTypes) {\n var invalidFlags = filter(tokenTypes, function (currType) {\n var pattern = currType[PATTERN];\n return pattern instanceof RegExp && (pattern.multiline || pattern.global);\n });\n var errors = map(invalidFlags, function (currType) {\n return {\n message: \"Token Type: ->\" +\n currType.name +\n \"<- static 'PATTERN' may NOT contain global('g') or multiline('m')\",\n type: LexerDefinitionErrorType.UNSUPPORTED_FLAGS_FOUND,\n tokenTypes: [currType]\n };\n });\n return errors;\n}\n// This can only test for identical duplicate RegExps, not semantically equivalent ones.\nexport function findDuplicatePatterns(tokenTypes) {\n var found = [];\n var identicalPatterns = map(tokenTypes, function (outerType) {\n return reduce(tokenTypes, function (result, innerType) {\n if (outerType.PATTERN.source === innerType.PATTERN.source &&\n !contains(found, innerType) &&\n innerType.PATTERN !== Lexer.NA) {\n // this avoids duplicates in the result, each Token Type may only appear in one \"set\"\n // in essence we are creating Equivalence classes on equality relation.\n found.push(innerType);\n result.push(innerType);\n return result;\n }\n return result;\n }, []);\n });\n identicalPatterns = compact(identicalPatterns);\n var duplicatePatterns = filter(identicalPatterns, function (currIdenticalSet) {\n return currIdenticalSet.length > 1;\n });\n var errors = map(duplicatePatterns, function (setOfIdentical) {\n var tokenTypeNames = map(setOfIdentical, function (currType) {\n return currType.name;\n });\n var dupPatternSrc = first(setOfIdentical).PATTERN;\n return {\n message: \"The same RegExp pattern ->\" + dupPatternSrc + \"<-\" +\n (\"has been used in all of the following Token Types: \" + tokenTypeNames.join(\", \") + \" <-\"),\n type: LexerDefinitionErrorType.DUPLICATE_PATTERNS_FOUND,\n tokenTypes: setOfIdentical\n };\n });\n return errors;\n}\nexport function findInvalidGroupType(tokenTypes) {\n var invalidTypes = filter(tokenTypes, function (clazz) {\n if (!has(clazz, \"GROUP\")) {\n return false;\n }\n var group = clazz.GROUP;\n return group !== Lexer.SKIPPED && group !== Lexer.NA && !isString(group);\n });\n var errors = map(invalidTypes, function (currType) {\n return {\n message: \"Token Type: ->\" +\n currType.name +\n \"<- static 'GROUP' can only be Lexer.SKIPPED/Lexer.NA/A String\",\n type: LexerDefinitionErrorType.INVALID_GROUP_TYPE_FOUND,\n tokenTypes: [currType]\n };\n });\n return errors;\n}\nexport function findModesThatDoNotExist(tokenTypes, validModes) {\n var invalidModes = filter(tokenTypes, function (clazz) {\n return (clazz.PUSH_MODE !== undefined && !contains(validModes, clazz.PUSH_MODE));\n });\n var errors = map(invalidModes, function (tokType) {\n var msg = \"Token Type: ->\" + tokType.name + \"<- static 'PUSH_MODE' value cannot refer to a Lexer Mode ->\" + tokType.PUSH_MODE + \"<-\" +\n \"which does not exist\";\n return {\n message: msg,\n type: LexerDefinitionErrorType.PUSH_MODE_DOES_NOT_EXIST,\n tokenTypes: [tokType]\n };\n });\n return errors;\n}\nexport function findUnreachablePatterns(tokenTypes) {\n var errors = [];\n var canBeTested = reduce(tokenTypes, function (result, tokType, idx) {\n var pattern = tokType.PATTERN;\n if (pattern === Lexer.NA) {\n return result;\n }\n // a more comprehensive validation for all forms of regExps would require\n // deeper regExp analysis capabilities\n if (isString(pattern)) {\n result.push({ str: pattern, idx: idx, tokenType: tokType });\n }\n else if (isRegExp(pattern) && noMetaChar(pattern)) {\n result.push({ str: pattern.source, idx: idx, tokenType: tokType });\n }\n return result;\n }, []);\n forEach(tokenTypes, function (tokType, testIdx) {\n forEach(canBeTested, function (_a) {\n var str = _a.str, idx = _a.idx, tokenType = _a.tokenType;\n if (testIdx < idx && testTokenType(str, tokType.PATTERN)) {\n var msg = \"Token: ->\" + tokenType.name + \"<- can never be matched.\\n\" +\n (\"Because it appears AFTER the Token Type ->\" + tokType.name + \"<-\") +\n \"in the lexer's definition.\\n\" +\n \"See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNREACHABLE\";\n errors.push({\n message: msg,\n type: LexerDefinitionErrorType.UNREACHABLE_PATTERN,\n tokenTypes: [tokType, tokenType]\n });\n }\n });\n });\n return errors;\n}\nfunction testTokenType(str, pattern) {\n /* istanbul ignore else */\n if (isRegExp(pattern)) {\n var regExpArray = pattern.exec(str);\n return regExpArray !== null && regExpArray.index === 0;\n }\n else if (isFunction(pattern)) {\n // maintain the API of custom patterns\n return pattern(str, 0, [], {});\n }\n else if (has(pattern, \"exec\")) {\n // maintain the API of custom patterns\n return pattern.exec(str, 0, [], {});\n }\n else if (typeof pattern === \"string\") {\n return pattern === str;\n }\n else {\n throw Error(\"non exhaustive match\");\n }\n}\nfunction noMetaChar(regExp) {\n //https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\n var metaChars = [\n \".\",\n \"\\\\\",\n \"[\",\n \"]\",\n \"|\",\n \"^\",\n \"$\",\n \"(\",\n \")\",\n \"?\",\n \"*\",\n \"+\",\n \"{\"\n ];\n return (find(metaChars, function (char) { return regExp.source.indexOf(char) !== -1; }) === undefined);\n}\nexport function addStartOfInput(pattern) {\n var flags = pattern.ignoreCase ? \"i\" : \"\";\n // always wrapping in a none capturing group preceded by '^' to make sure matching can only work on start of input.\n // duplicate/redundant start of input markers have no meaning (/^^^^A/ === /^A/)\n return new RegExp(\"^(?:\" + pattern.source + \")\", flags);\n}\nexport function addStickyFlag(pattern) {\n var flags = pattern.ignoreCase ? \"iy\" : \"y\";\n // always wrapping in a none capturing group preceded by '^' to make sure matching can only work on start of input.\n // duplicate/redundant start of input markers have no meaning (/^^^^A/ === /^A/)\n return new RegExp(\"\" + pattern.source, flags);\n}\nexport function performRuntimeChecks(lexerDefinition, trackLines, lineTerminatorCharacters) {\n var errors = [];\n // some run time checks to help the end users.\n if (!has(lexerDefinition, DEFAULT_MODE)) {\n errors.push({\n message: \"A MultiMode Lexer cannot be initialized without a <\" +\n DEFAULT_MODE +\n \"> property in its definition\\n\",\n type: LexerDefinitionErrorType.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE\n });\n }\n if (!has(lexerDefinition, MODES)) {\n errors.push({\n message: \"A MultiMode Lexer cannot be initialized without a <\" +\n MODES +\n \"> property in its definition\\n\",\n type: LexerDefinitionErrorType.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY\n });\n }\n if (has(lexerDefinition, MODES) &&\n has(lexerDefinition, DEFAULT_MODE) &&\n !has(lexerDefinition.modes, lexerDefinition.defaultMode)) {\n errors.push({\n message: \"A MultiMode Lexer cannot be initialized with a \" + DEFAULT_MODE + \": <\" + lexerDefinition.defaultMode + \">\" +\n \"which does not exist\\n\",\n type: LexerDefinitionErrorType.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST\n });\n }\n if (has(lexerDefinition, MODES)) {\n forEach(lexerDefinition.modes, function (currModeValue, currModeName) {\n forEach(currModeValue, function (currTokType, currIdx) {\n if (isUndefined(currTokType)) {\n errors.push({\n message: \"A Lexer cannot be initialized using an undefined Token Type. Mode:\" +\n (\"<\" + currModeName + \"> at index: <\" + currIdx + \">\\n\"),\n type: LexerDefinitionErrorType.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED\n });\n }\n });\n });\n }\n return errors;\n}\nexport function performWarningRuntimeChecks(lexerDefinition, trackLines, lineTerminatorCharacters) {\n var warnings = [];\n var hasAnyLineBreak = false;\n var allTokenTypes = compact(flatten(mapValues(lexerDefinition.modes, function (tokTypes) { return tokTypes; })));\n var concreteTokenTypes = reject(allTokenTypes, function (currType) { return currType[PATTERN] === Lexer.NA; });\n var terminatorCharCodes = getCharCodes(lineTerminatorCharacters);\n if (trackLines) {\n forEach(concreteTokenTypes, function (tokType) {\n var currIssue = checkLineBreaksIssues(tokType, terminatorCharCodes);\n if (currIssue !== false) {\n var message = buildLineBreakIssueMessage(tokType, currIssue);\n var warningDescriptor = {\n message: message,\n type: currIssue.issue,\n tokenType: tokType\n };\n warnings.push(warningDescriptor);\n }\n else {\n // we don't want to attempt to scan if the user explicitly specified the line_breaks option.\n if (has(tokType, \"LINE_BREAKS\")) {\n if (tokType.LINE_BREAKS === true) {\n hasAnyLineBreak = true;\n }\n }\n else {\n if (canMatchCharCode(terminatorCharCodes, tokType.PATTERN)) {\n hasAnyLineBreak = true;\n }\n }\n }\n });\n }\n if (trackLines && !hasAnyLineBreak) {\n warnings.push({\n message: \"Warning: No LINE_BREAKS Found.\\n\" +\n \"\\tThis Lexer has been defined to track line and column information,\\n\" +\n \"\\tBut none of the Token Types can be identified as matching a line terminator.\\n\" +\n \"\\tSee https://chevrotain.io/docs/guide/resolving_lexer_errors.html#LINE_BREAKS \\n\" +\n \"\\tfor details.\",\n type: LexerDefinitionErrorType.NO_LINE_BREAKS_FLAGS\n });\n }\n return warnings;\n}\nexport function cloneEmptyGroups(emptyGroups) {\n var clonedResult = {};\n var groupKeys = keys(emptyGroups);\n forEach(groupKeys, function (currKey) {\n var currGroupValue = emptyGroups[currKey];\n /* istanbul ignore else */\n if (isArray(currGroupValue)) {\n clonedResult[currKey] = [];\n }\n else {\n throw Error(\"non exhaustive match\");\n }\n });\n return clonedResult;\n}\n// TODO: refactor to avoid duplication\nexport function isCustomPattern(tokenType) {\n var pattern = tokenType.PATTERN;\n /* istanbul ignore else */\n if (isRegExp(pattern)) {\n return false;\n }\n else if (isFunction(pattern)) {\n // CustomPatternMatcherFunc - custom patterns do not require any transformations, only wrapping in a RegExp Like object\n return true;\n }\n else if (has(pattern, \"exec\")) {\n // ICustomPattern\n return true;\n }\n else if (isString(pattern)) {\n return false;\n }\n else {\n throw Error(\"non exhaustive match\");\n }\n}\nexport function isShortPattern(pattern) {\n if (isString(pattern) && pattern.length === 1) {\n return pattern.charCodeAt(0);\n }\n else {\n return false;\n }\n}\n/**\n * Faster than using a RegExp for default newline detection during lexing.\n */\nexport var LineTerminatorOptimizedTester = {\n // implements /\\n|\\r\\n?/g.test\n test: function (text) {\n var len = text.length;\n for (var i = this.lastIndex; i < len; i++) {\n var c = text.charCodeAt(i);\n if (c === 10) {\n this.lastIndex = i + 1;\n return true;\n }\n else if (c === 13) {\n if (text.charCodeAt(i + 1) === 10) {\n this.lastIndex = i + 2;\n }\n else {\n this.lastIndex = i + 1;\n }\n return true;\n }\n }\n return false;\n },\n lastIndex: 0\n};\nfunction checkLineBreaksIssues(tokType, lineTerminatorCharCodes) {\n if (has(tokType, \"LINE_BREAKS\")) {\n // if the user explicitly declared the line_breaks option we will respect their choice\n // and assume it is correct.\n return false;\n }\n else {\n /* istanbul ignore else */\n if (isRegExp(tokType.PATTERN)) {\n try {\n canMatchCharCode(lineTerminatorCharCodes, tokType.PATTERN);\n }\n catch (e) {\n /* istanbul ignore next - to test this we would have to mock to throw an error */\n return {\n issue: LexerDefinitionErrorType.IDENTIFY_TERMINATOR,\n errMsg: e.message\n };\n }\n return false;\n }\n else if (isString(tokType.PATTERN)) {\n // string literal patterns can always be analyzed to detect line terminator usage\n return false;\n }\n else if (isCustomPattern(tokType)) {\n // custom token types\n return { issue: LexerDefinitionErrorType.CUSTOM_LINE_BREAK };\n }\n else {\n throw Error(\"non exhaustive match\");\n }\n }\n}\nexport function buildLineBreakIssueMessage(tokType, details) {\n /* istanbul ignore else */\n if (details.issue === LexerDefinitionErrorType.IDENTIFY_TERMINATOR) {\n return (\"Warning: unable to identify line terminator usage in pattern.\\n\" +\n (\"\\tThe problem is in the <\" + tokType.name + \"> Token Type\\n\") +\n (\"\\t Root cause: \" + details.errMsg + \".\\n\") +\n \"\\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#IDENTIFY_TERMINATOR\");\n }\n else if (details.issue === LexerDefinitionErrorType.CUSTOM_LINE_BREAK) {\n return (\"Warning: A Custom Token Pattern should specify the option.\\n\" +\n (\"\\tThe problem is in the <\" + tokType.name + \"> Token Type\\n\") +\n \"\\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_LINE_BREAK\");\n }\n else {\n throw Error(\"non exhaustive match\");\n }\n}\nfunction getCharCodes(charsOrCodes) {\n var charCodes = map(charsOrCodes, function (numOrString) {\n if (isString(numOrString) && numOrString.length > 0) {\n return numOrString.charCodeAt(0);\n }\n else {\n return numOrString;\n }\n });\n return charCodes;\n}\nfunction addToMapOfArrays(map, key, value) {\n if (map[key] === undefined) {\n map[key] = [value];\n }\n else {\n map[key].push(value);\n }\n}\nexport var minOptimizationVal = 256;\n/**\n * We ae mapping charCode above ASCI (256) into buckets each in the size of 256.\n * This is because ASCI are the most common start chars so each one of those will get its own\n * possible token configs vector.\n *\n * Tokens starting with charCodes \"above\" ASCI are uncommon, so we can \"afford\"\n * to place these into buckets of possible token configs, What we gain from\n * this is avoiding the case of creating an optimization 'charCodeToPatternIdxToConfig'\n * which would contain 10,000+ arrays of small size (e.g unicode Identifiers scenario).\n * Our 'charCodeToPatternIdxToConfig' max size will now be:\n * 256 + (2^16 / 2^8) - 1 === 511\n *\n * note the hack for fast division integer part extraction\n * See: https://stackoverflow.com/a/4228528\n */\nexport function charCodeToOptimizedIndex(charCode) {\n return charCode < minOptimizationVal\n ? charCode\n : charCodeToOptimizedIdxMap[charCode];\n}\n/**\n * This is a compromise between cold start / hot running performance\n * Creating this array takes ~3ms on a modern machine,\n * But if we perform the computation at runtime as needed the CSS Lexer benchmark\n * performance degrades by ~10%\n *\n * TODO: Perhaps it should be lazy initialized only if a charCode > 255 is used.\n */\nvar charCodeToOptimizedIdxMap = [];\nfunction initCharCodeToOptimizedIndexMap() {\n if (isEmpty(charCodeToOptimizedIdxMap)) {\n charCodeToOptimizedIdxMap = new Array(65536);\n for (var i = 0; i < 65536; i++) {\n /* tslint:disable */\n charCodeToOptimizedIdxMap[i] = i > 255 ? 255 + ~~(i / 255) : i;\n /* tslint:enable */\n }\n }\n}\n//# sourceMappingURL=lexer.js.map","import { cloneArr, compact, contains, difference, flatten, forEach, has, isArray, isEmpty, map } from \"../utils/utils\";\nexport function tokenStructuredMatcher(tokInstance, tokConstructor) {\n var instanceType = tokInstance.tokenTypeIdx;\n if (instanceType === tokConstructor.tokenTypeIdx) {\n return true;\n }\n else {\n return (tokConstructor.isParent === true &&\n tokConstructor.categoryMatchesMap[instanceType] === true);\n }\n}\n// Optimized tokenMatcher in case our grammar does not use token categories\n// Being so tiny it is much more likely to be in-lined and this avoid the function call overhead\nexport function tokenStructuredMatcherNoCategories(token, tokType) {\n return token.tokenTypeIdx === tokType.tokenTypeIdx;\n}\nexport var tokenShortNameIdx = 1;\nexport var tokenIdxToClass = {};\nexport function augmentTokenTypes(tokenTypes) {\n // collect the parent Token Types as well.\n var tokenTypesAndParents = expandCategories(tokenTypes);\n // add required tokenType and categoryMatches properties\n assignTokenDefaultProps(tokenTypesAndParents);\n // fill up the categoryMatches\n assignCategoriesMapProp(tokenTypesAndParents);\n assignCategoriesTokensProp(tokenTypesAndParents);\n forEach(tokenTypesAndParents, function (tokType) {\n tokType.isParent = tokType.categoryMatches.length > 0;\n });\n}\nexport function expandCategories(tokenTypes) {\n var result = cloneArr(tokenTypes);\n var categories = tokenTypes;\n var searching = true;\n while (searching) {\n categories = compact(flatten(map(categories, function (currTokType) { return currTokType.CATEGORIES; })));\n var newCategories = difference(categories, result);\n result = result.concat(newCategories);\n if (isEmpty(newCategories)) {\n searching = false;\n }\n else {\n categories = newCategories;\n }\n }\n return result;\n}\nexport function assignTokenDefaultProps(tokenTypes) {\n forEach(tokenTypes, function (currTokType) {\n if (!hasShortKeyProperty(currTokType)) {\n tokenIdxToClass[tokenShortNameIdx] = currTokType;\n currTokType.tokenTypeIdx = tokenShortNameIdx++;\n }\n // CATEGORIES? : TokenType | TokenType[]\n if (hasCategoriesProperty(currTokType) &&\n !isArray(currTokType.CATEGORIES)\n // &&\n // !isUndefined(currTokType.CATEGORIES.PATTERN)\n ) {\n currTokType.CATEGORIES = [currTokType.CATEGORIES];\n }\n if (!hasCategoriesProperty(currTokType)) {\n currTokType.CATEGORIES = [];\n }\n if (!hasExtendingTokensTypesProperty(currTokType)) {\n currTokType.categoryMatches = [];\n }\n if (!hasExtendingTokensTypesMapProperty(currTokType)) {\n currTokType.categoryMatchesMap = {};\n }\n });\n}\nexport function assignCategoriesTokensProp(tokenTypes) {\n forEach(tokenTypes, function (currTokType) {\n // avoid duplications\n currTokType.categoryMatches = [];\n forEach(currTokType.categoryMatchesMap, function (val, key) {\n currTokType.categoryMatches.push(tokenIdxToClass[key].tokenTypeIdx);\n });\n });\n}\nexport function assignCategoriesMapProp(tokenTypes) {\n forEach(tokenTypes, function (currTokType) {\n singleAssignCategoriesToksMap([], currTokType);\n });\n}\nexport function singleAssignCategoriesToksMap(path, nextNode) {\n forEach(path, function (pathNode) {\n nextNode.categoryMatchesMap[pathNode.tokenTypeIdx] = true;\n });\n forEach(nextNode.CATEGORIES, function (nextCategory) {\n var newPath = path.concat(nextNode);\n // avoids infinite loops due to cyclic categories.\n if (!contains(newPath, nextCategory)) {\n singleAssignCategoriesToksMap(newPath, nextCategory);\n }\n });\n}\nexport function hasShortKeyProperty(tokType) {\n return has(tokType, \"tokenTypeIdx\");\n}\nexport function hasCategoriesProperty(tokType) {\n return has(tokType, \"CATEGORIES\");\n}\nexport function hasExtendingTokensTypesProperty(tokType) {\n return has(tokType, \"categoryMatches\");\n}\nexport function hasExtendingTokensTypesMapProperty(tokType) {\n return has(tokType, \"categoryMatchesMap\");\n}\nexport function isTokenType(tokType) {\n return has(tokType, \"tokenTypeIdx\");\n}\n//# sourceMappingURL=tokens.js.map","export var defaultLexerErrorProvider = {\n buildUnableToPopLexerModeMessage: function (token) {\n return \"Unable to pop Lexer Mode after encountering Token ->\" + token.image + \"<- The Mode Stack is empty\";\n },\n buildUnexpectedCharactersMessage: function (fullText, startOffset, length, line, column) {\n return (\"unexpected character: ->\" + fullText.charAt(startOffset) + \"<- at offset: \" + startOffset + \",\" + (\" skipped \" + length + \" characters.\"));\n }\n};\n//# sourceMappingURL=lexer_errors_public.js.map","import { analyzeTokenTypes, charCodeToOptimizedIndex, cloneEmptyGroups, DEFAULT_MODE, LineTerminatorOptimizedTester, performRuntimeChecks, performWarningRuntimeChecks, SUPPORT_STICKY, validatePatterns } from \"./lexer\";\nimport { cloneArr, cloneObj, forEach, IDENTITY, isArray, isEmpty, isUndefined, keys, last, map, merge, NOOP, PRINT_WARNING, reduce, reject, timer, toFastProperties } from \"../utils/utils\";\nimport { augmentTokenTypes } from \"./tokens\";\nimport { defaultLexerErrorProvider } from \"../scan/lexer_errors_public\";\nimport { clearRegExpParserCache } from \"./reg_exp_parser\";\nexport var LexerDefinitionErrorType;\n(function (LexerDefinitionErrorType) {\n LexerDefinitionErrorType[LexerDefinitionErrorType[\"MISSING_PATTERN\"] = 0] = \"MISSING_PATTERN\";\n LexerDefinitionErrorType[LexerDefinitionErrorType[\"INVALID_PATTERN\"] = 1] = \"INVALID_PATTERN\";\n LexerDefinitionErrorType[LexerDefinitionErrorType[\"EOI_ANCHOR_FOUND\"] = 2] = \"EOI_ANCHOR_FOUND\";\n LexerDefinitionErrorType[LexerDefinitionErrorType[\"UNSUPPORTED_FLAGS_FOUND\"] = 3] = \"UNSUPPORTED_FLAGS_FOUND\";\n LexerDefinitionErrorType[LexerDefinitionErrorType[\"DUPLICATE_PATTERNS_FOUND\"] = 4] = \"DUPLICATE_PATTERNS_FOUND\";\n LexerDefinitionErrorType[LexerDefinitionErrorType[\"INVALID_GROUP_TYPE_FOUND\"] = 5] = \"INVALID_GROUP_TYPE_FOUND\";\n LexerDefinitionErrorType[LexerDefinitionErrorType[\"PUSH_MODE_DOES_NOT_EXIST\"] = 6] = \"PUSH_MODE_DOES_NOT_EXIST\";\n LexerDefinitionErrorType[LexerDefinitionErrorType[\"MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE\"] = 7] = \"MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE\";\n LexerDefinitionErrorType[LexerDefinitionErrorType[\"MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY\"] = 8] = \"MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY\";\n LexerDefinitionErrorType[LexerDefinitionErrorType[\"MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST\"] = 9] = \"MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST\";\n LexerDefinitionErrorType[LexerDefinitionErrorType[\"LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED\"] = 10] = \"LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED\";\n LexerDefinitionErrorType[LexerDefinitionErrorType[\"SOI_ANCHOR_FOUND\"] = 11] = \"SOI_ANCHOR_FOUND\";\n LexerDefinitionErrorType[LexerDefinitionErrorType[\"EMPTY_MATCH_PATTERN\"] = 12] = \"EMPTY_MATCH_PATTERN\";\n LexerDefinitionErrorType[LexerDefinitionErrorType[\"NO_LINE_BREAKS_FLAGS\"] = 13] = \"NO_LINE_BREAKS_FLAGS\";\n LexerDefinitionErrorType[LexerDefinitionErrorType[\"UNREACHABLE_PATTERN\"] = 14] = \"UNREACHABLE_PATTERN\";\n LexerDefinitionErrorType[LexerDefinitionErrorType[\"IDENTIFY_TERMINATOR\"] = 15] = \"IDENTIFY_TERMINATOR\";\n LexerDefinitionErrorType[LexerDefinitionErrorType[\"CUSTOM_LINE_BREAK\"] = 16] = \"CUSTOM_LINE_BREAK\";\n})(LexerDefinitionErrorType || (LexerDefinitionErrorType = {}));\nvar DEFAULT_LEXER_CONFIG = {\n deferDefinitionErrorsHandling: false,\n positionTracking: \"full\",\n lineTerminatorsPattern: /\\n|\\r\\n?/g,\n lineTerminatorCharacters: [\"\\n\", \"\\r\"],\n ensureOptimizations: false,\n safeMode: false,\n errorMessageProvider: defaultLexerErrorProvider,\n traceInitPerf: false,\n skipValidations: false\n};\nObject.freeze(DEFAULT_LEXER_CONFIG);\nvar Lexer = /** @class */ (function () {\n function Lexer(lexerDefinition, config) {\n var _this = this;\n if (config === void 0) { config = DEFAULT_LEXER_CONFIG; }\n this.lexerDefinition = lexerDefinition;\n this.lexerDefinitionErrors = [];\n this.lexerDefinitionWarning = [];\n this.patternIdxToConfig = {};\n this.charCodeToPatternIdxToConfig = {};\n this.modes = [];\n this.emptyGroups = {};\n this.config = undefined;\n this.trackStartLines = true;\n this.trackEndLines = true;\n this.hasCustom = false;\n this.canModeBeOptimized = {};\n if (typeof config === \"boolean\") {\n throw Error(\"The second argument to the Lexer constructor is now an ILexerConfig Object.\\n\" +\n \"a boolean 2nd argument is no longer supported\");\n }\n // todo: defaults func?\n this.config = merge(DEFAULT_LEXER_CONFIG, config);\n var traceInitVal = this.config.traceInitPerf;\n if (traceInitVal === true) {\n this.traceInitMaxIdent = Infinity;\n this.traceInitPerf = true;\n }\n else if (typeof traceInitVal === \"number\") {\n this.traceInitMaxIdent = traceInitVal;\n this.traceInitPerf = true;\n }\n this.traceInitIndent = -1;\n this.TRACE_INIT(\"Lexer Constructor\", function () {\n var actualDefinition;\n var hasOnlySingleMode = true;\n _this.TRACE_INIT(\"Lexer Config handling\", function () {\n if (_this.config.lineTerminatorsPattern ===\n DEFAULT_LEXER_CONFIG.lineTerminatorsPattern) {\n // optimized built-in implementation for the defaults definition of lineTerminators\n _this.config.lineTerminatorsPattern = LineTerminatorOptimizedTester;\n }\n else {\n if (_this.config.lineTerminatorCharacters ===\n DEFAULT_LEXER_CONFIG.lineTerminatorCharacters) {\n throw Error(\"Error: Missing property on the Lexer config.\\n\" +\n \"\\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#MISSING_LINE_TERM_CHARS\");\n }\n }\n if (config.safeMode && config.ensureOptimizations) {\n throw Error('\"safeMode\" and \"ensureOptimizations\" flags are mutually exclusive.');\n }\n _this.trackStartLines = /full|onlyStart/i.test(_this.config.positionTracking);\n _this.trackEndLines = /full/i.test(_this.config.positionTracking);\n // Convert SingleModeLexerDefinition into a IMultiModeLexerDefinition.\n if (isArray(lexerDefinition)) {\n actualDefinition = { modes: {} };\n actualDefinition.modes[DEFAULT_MODE] = cloneArr(lexerDefinition);\n actualDefinition[DEFAULT_MODE] = DEFAULT_MODE;\n }\n else {\n // no conversion needed, input should already be a IMultiModeLexerDefinition\n hasOnlySingleMode = false;\n actualDefinition = cloneObj(lexerDefinition);\n }\n });\n if (_this.config.skipValidations === false) {\n _this.TRACE_INIT(\"performRuntimeChecks\", function () {\n _this.lexerDefinitionErrors = _this.lexerDefinitionErrors.concat(performRuntimeChecks(actualDefinition, _this.trackStartLines, _this.config.lineTerminatorCharacters));\n });\n _this.TRACE_INIT(\"performWarningRuntimeChecks\", function () {\n _this.lexerDefinitionWarning = _this.lexerDefinitionWarning.concat(performWarningRuntimeChecks(actualDefinition, _this.trackStartLines, _this.config.lineTerminatorCharacters));\n });\n }\n // for extra robustness to avoid throwing an none informative error message\n actualDefinition.modes = actualDefinition.modes\n ? actualDefinition.modes\n : {};\n // an error of undefined TokenTypes will be detected in \"performRuntimeChecks\" above.\n // this transformation is to increase robustness in the case of partially invalid lexer definition.\n forEach(actualDefinition.modes, function (currModeValue, currModeName) {\n actualDefinition.modes[currModeName] = reject(currModeValue, function (currTokType) { return isUndefined(currTokType); });\n });\n var allModeNames = keys(actualDefinition.modes);\n forEach(actualDefinition.modes, function (currModDef, currModName) {\n _this.TRACE_INIT(\"Mode: <\" + currModName + \"> processing\", function () {\n _this.modes.push(currModName);\n if (_this.config.skipValidations === false) {\n _this.TRACE_INIT(\"validatePatterns\", function () {\n _this.lexerDefinitionErrors = _this.lexerDefinitionErrors.concat(validatePatterns(currModDef, allModeNames));\n });\n }\n // If definition errors were encountered, the analysis phase may fail unexpectedly/\n // Considering a lexer with definition errors may never be used, there is no point\n // to performing the analysis anyhow...\n if (isEmpty(_this.lexerDefinitionErrors)) {\n augmentTokenTypes(currModDef);\n var currAnalyzeResult_1;\n _this.TRACE_INIT(\"analyzeTokenTypes\", function () {\n currAnalyzeResult_1 = analyzeTokenTypes(currModDef, {\n lineTerminatorCharacters: _this.config\n .lineTerminatorCharacters,\n positionTracking: config.positionTracking,\n ensureOptimizations: config.ensureOptimizations,\n safeMode: config.safeMode,\n tracer: _this.TRACE_INIT.bind(_this)\n });\n });\n _this.patternIdxToConfig[currModName] =\n currAnalyzeResult_1.patternIdxToConfig;\n _this.charCodeToPatternIdxToConfig[currModName] =\n currAnalyzeResult_1.charCodeToPatternIdxToConfig;\n _this.emptyGroups = merge(_this.emptyGroups, currAnalyzeResult_1.emptyGroups);\n _this.hasCustom = currAnalyzeResult_1.hasCustom || _this.hasCustom;\n _this.canModeBeOptimized[currModName] =\n currAnalyzeResult_1.canBeOptimized;\n }\n });\n });\n _this.defaultMode = actualDefinition.defaultMode;\n if (!isEmpty(_this.lexerDefinitionErrors) &&\n !_this.config.deferDefinitionErrorsHandling) {\n var allErrMessages = map(_this.lexerDefinitionErrors, function (error) {\n return error.message;\n });\n var allErrMessagesString = allErrMessages.join(\"-----------------------\\n\");\n throw new Error(\"Errors detected in definition of Lexer:\\n\" + allErrMessagesString);\n }\n // Only print warning if there are no errors, This will avoid pl\n forEach(_this.lexerDefinitionWarning, function (warningDescriptor) {\n PRINT_WARNING(warningDescriptor.message);\n });\n _this.TRACE_INIT(\"Choosing sub-methods implementations\", function () {\n // Choose the relevant internal implementations for this specific parser.\n // These implementations should be in-lined by the JavaScript engine\n // to provide optimal performance in each scenario.\n if (SUPPORT_STICKY) {\n _this.chopInput = IDENTITY;\n _this.match = _this.matchWithTest;\n }\n else {\n _this.updateLastIndex = NOOP;\n _this.match = _this.matchWithExec;\n }\n if (hasOnlySingleMode) {\n _this.handleModes = NOOP;\n }\n if (_this.trackStartLines === false) {\n _this.computeNewColumn = IDENTITY;\n }\n if (_this.trackEndLines === false) {\n _this.updateTokenEndLineColumnLocation = NOOP;\n }\n if (/full/i.test(_this.config.positionTracking)) {\n _this.createTokenInstance = _this.createFullToken;\n }\n else if (/onlyStart/i.test(_this.config.positionTracking)) {\n _this.createTokenInstance = _this.createStartOnlyToken;\n }\n else if (/onlyOffset/i.test(_this.config.positionTracking)) {\n _this.createTokenInstance = _this.createOffsetOnlyToken;\n }\n else {\n throw Error(\"Invalid config option: \\\"\" + _this.config.positionTracking + \"\\\"\");\n }\n if (_this.hasCustom) {\n _this.addToken = _this.addTokenUsingPush;\n _this.handlePayload = _this.handlePayloadWithCustom;\n }\n else {\n _this.addToken = _this.addTokenUsingMemberAccess;\n _this.handlePayload = _this.handlePayloadNoCustom;\n }\n });\n _this.TRACE_INIT(\"Failed Optimization Warnings\", function () {\n var unOptimizedModes = reduce(_this.canModeBeOptimized, function (cannotBeOptimized, canBeOptimized, modeName) {\n if (canBeOptimized === false) {\n cannotBeOptimized.push(modeName);\n }\n return cannotBeOptimized;\n }, []);\n if (config.ensureOptimizations && !isEmpty(unOptimizedModes)) {\n throw Error(\"Lexer Modes: < \" + unOptimizedModes.join(\", \") + \" > cannot be optimized.\\n\" +\n '\\t Disable the \"ensureOptimizations\" lexer config flag to silently ignore this and run the lexer in an un-optimized mode.\\n' +\n \"\\t Or inspect the console log for details on how to resolve these issues.\");\n }\n });\n _this.TRACE_INIT(\"clearRegExpParserCache\", function () {\n clearRegExpParserCache();\n });\n _this.TRACE_INIT(\"toFastProperties\", function () {\n toFastProperties(_this);\n });\n });\n }\n Lexer.prototype.tokenize = function (text, initialMode) {\n if (initialMode === void 0) { initialMode = this.defaultMode; }\n if (!isEmpty(this.lexerDefinitionErrors)) {\n var allErrMessages = map(this.lexerDefinitionErrors, function (error) {\n return error.message;\n });\n var allErrMessagesString = allErrMessages.join(\"-----------------------\\n\");\n throw new Error(\"Unable to Tokenize because Errors detected in definition of Lexer:\\n\" +\n allErrMessagesString);\n }\n var lexResult = this.tokenizeInternal(text, initialMode);\n return lexResult;\n };\n // There is quite a bit of duplication between this and \"tokenizeInternalLazy\"\n // This is intentional due to performance considerations.\n Lexer.prototype.tokenizeInternal = function (text, initialMode) {\n var _this = this;\n var i, j, matchAltImage, longerAltIdx, matchedImage, payload, altPayload, imageLength, group, tokType, newToken, errLength, droppedChar, msg, match;\n var orgText = text;\n var orgLength = orgText.length;\n var offset = 0;\n var matchedTokensIndex = 0;\n // initializing the tokensArray to the \"guessed\" size.\n // guessing too little will still reduce the number of array re-sizes on pushes.\n // guessing too large (Tested by guessing x4 too large) may cost a bit more of memory\n // but would still have a faster runtime by avoiding (All but one) array resizing.\n var guessedNumberOfTokens = this.hasCustom\n ? 0 // will break custom token pattern APIs the matchedTokens array will contain undefined elements.\n : Math.floor(text.length / 10);\n var matchedTokens = new Array(guessedNumberOfTokens);\n var errors = [];\n var line = this.trackStartLines ? 1 : undefined;\n var column = this.trackStartLines ? 1 : undefined;\n var groups = cloneEmptyGroups(this.emptyGroups);\n var trackLines = this.trackStartLines;\n var lineTerminatorPattern = this.config.lineTerminatorsPattern;\n var currModePatternsLength = 0;\n var patternIdxToConfig = [];\n var currCharCodeToPatternIdxToConfig = [];\n var modeStack = [];\n var emptyArray = [];\n Object.freeze(emptyArray);\n var getPossiblePatterns = undefined;\n function getPossiblePatternsSlow() {\n return patternIdxToConfig;\n }\n function getPossiblePatternsOptimized(charCode) {\n var optimizedCharIdx = charCodeToOptimizedIndex(charCode);\n var possiblePatterns = currCharCodeToPatternIdxToConfig[optimizedCharIdx];\n if (possiblePatterns === undefined) {\n return emptyArray;\n }\n else {\n return possiblePatterns;\n }\n }\n var pop_mode = function (popToken) {\n // TODO: perhaps avoid this error in the edge case there is no more input?\n if (modeStack.length === 1 &&\n // if we have both a POP_MODE and a PUSH_MODE this is in-fact a \"transition\"\n // So no error should occur.\n popToken.tokenType.PUSH_MODE === undefined) {\n // if we try to pop the last mode there lexer will no longer have ANY mode.\n // thus the pop is ignored, an error will be created and the lexer will continue parsing in the previous mode.\n var msg_1 = _this.config.errorMessageProvider.buildUnableToPopLexerModeMessage(popToken);\n errors.push({\n offset: popToken.startOffset,\n line: popToken.startLine !== undefined ? popToken.startLine : undefined,\n column: popToken.startColumn !== undefined\n ? popToken.startColumn\n : undefined,\n length: popToken.image.length,\n message: msg_1\n });\n }\n else {\n modeStack.pop();\n var newMode = last(modeStack);\n patternIdxToConfig = _this.patternIdxToConfig[newMode];\n currCharCodeToPatternIdxToConfig = _this.charCodeToPatternIdxToConfig[newMode];\n currModePatternsLength = patternIdxToConfig.length;\n var modeCanBeOptimized = _this.canModeBeOptimized[newMode] && _this.config.safeMode === false;\n if (currCharCodeToPatternIdxToConfig && modeCanBeOptimized) {\n getPossiblePatterns = getPossiblePatternsOptimized;\n }\n else {\n getPossiblePatterns = getPossiblePatternsSlow;\n }\n }\n };\n function push_mode(newMode) {\n modeStack.push(newMode);\n currCharCodeToPatternIdxToConfig = this.charCodeToPatternIdxToConfig[newMode];\n patternIdxToConfig = this.patternIdxToConfig[newMode];\n currModePatternsLength = patternIdxToConfig.length;\n currModePatternsLength = patternIdxToConfig.length;\n var modeCanBeOptimized = this.canModeBeOptimized[newMode] && this.config.safeMode === false;\n if (currCharCodeToPatternIdxToConfig && modeCanBeOptimized) {\n getPossiblePatterns = getPossiblePatternsOptimized;\n }\n else {\n getPossiblePatterns = getPossiblePatternsSlow;\n }\n }\n // this pattern seems to avoid a V8 de-optimization, although that de-optimization does not\n // seem to matter performance wise.\n push_mode.call(this, initialMode);\n var currConfig;\n while (offset < orgLength) {\n matchedImage = null;\n var nextCharCode = orgText.charCodeAt(offset);\n var chosenPatternIdxToConfig = getPossiblePatterns(nextCharCode);\n var chosenPatternsLength = chosenPatternIdxToConfig.length;\n for (i = 0; i < chosenPatternsLength; i++) {\n currConfig = chosenPatternIdxToConfig[i];\n var currPattern = currConfig.pattern;\n payload = null;\n // manually in-lined because > 600 chars won't be in-lined in V8\n var singleCharCode = currConfig.short;\n if (singleCharCode !== false) {\n if (nextCharCode === singleCharCode) {\n // single character string\n matchedImage = currPattern;\n }\n }\n else if (currConfig.isCustom === true) {\n match = currPattern.exec(orgText, offset, matchedTokens, groups);\n if (match !== null) {\n matchedImage = match[0];\n if (match.payload !== undefined) {\n payload = match.payload;\n }\n }\n else {\n matchedImage = null;\n }\n }\n else {\n this.updateLastIndex(currPattern, offset);\n matchedImage = this.match(currPattern, text, offset);\n }\n if (matchedImage !== null) {\n // even though this pattern matched we must try a another longer alternative.\n // this can be used to prioritize keywords over identifiers\n longerAltIdx = currConfig.longerAlt;\n if (longerAltIdx !== undefined) {\n // TODO: micro optimize, avoid extra prop access\n // by saving/linking longerAlt on the original config?\n var longerAltConfig = patternIdxToConfig[longerAltIdx];\n var longerAltPattern = longerAltConfig.pattern;\n altPayload = null;\n // single Char can never be a longer alt so no need to test it.\n // manually in-lined because > 600 chars won't be in-lined in V8\n if (longerAltConfig.isCustom === true) {\n match = longerAltPattern.exec(orgText, offset, matchedTokens, groups);\n if (match !== null) {\n matchAltImage = match[0];\n if (match.payload !== undefined) {\n altPayload = match.payload;\n }\n }\n else {\n matchAltImage = null;\n }\n }\n else {\n this.updateLastIndex(longerAltPattern, offset);\n matchAltImage = this.match(longerAltPattern, text, offset);\n }\n if (matchAltImage && matchAltImage.length > matchedImage.length) {\n matchedImage = matchAltImage;\n payload = altPayload;\n currConfig = longerAltConfig;\n }\n }\n break;\n }\n }\n // successful match\n if (matchedImage !== null) {\n imageLength = matchedImage.length;\n group = currConfig.group;\n if (group !== undefined) {\n tokType = currConfig.tokenTypeIdx;\n // TODO: \"offset + imageLength\" and the new column may be computed twice in case of \"full\" location information inside\n // createFullToken method\n newToken = this.createTokenInstance(matchedImage, offset, tokType, currConfig.tokenType, line, column, imageLength);\n this.handlePayload(newToken, payload);\n // TODO: optimize NOOP in case there are no special groups?\n if (group === false) {\n matchedTokensIndex = this.addToken(matchedTokens, matchedTokensIndex, newToken);\n }\n else {\n groups[group].push(newToken);\n }\n }\n text = this.chopInput(text, imageLength);\n offset = offset + imageLength;\n // TODO: with newlines the column may be assigned twice\n column = this.computeNewColumn(column, imageLength);\n if (trackLines === true && currConfig.canLineTerminator === true) {\n var numOfLTsInMatch = 0;\n var foundTerminator = void 0;\n var lastLTEndOffset = void 0;\n lineTerminatorPattern.lastIndex = 0;\n do {\n foundTerminator = lineTerminatorPattern.test(matchedImage);\n if (foundTerminator === true) {\n lastLTEndOffset = lineTerminatorPattern.lastIndex - 1;\n numOfLTsInMatch++;\n }\n } while (foundTerminator === true);\n if (numOfLTsInMatch !== 0) {\n line = line + numOfLTsInMatch;\n column = imageLength - lastLTEndOffset;\n this.updateTokenEndLineColumnLocation(newToken, group, lastLTEndOffset, numOfLTsInMatch, line, column, imageLength);\n }\n }\n // will be NOOP if no modes present\n this.handleModes(currConfig, pop_mode, push_mode, newToken);\n }\n else {\n // error recovery, drop characters until we identify a valid token's start point\n var errorStartOffset = offset;\n var errorLine = line;\n var errorColumn = column;\n var foundResyncPoint = false;\n while (!foundResyncPoint && offset < orgLength) {\n // drop chars until we succeed in matching something\n droppedChar = orgText.charCodeAt(offset);\n // Identity Func (when sticky flag is enabled)\n text = this.chopInput(text, 1);\n offset++;\n for (j = 0; j < currModePatternsLength; j++) {\n var currConfig_1 = patternIdxToConfig[j];\n var currPattern = currConfig_1.pattern;\n // manually in-lined because > 600 chars won't be in-lined in V8\n var singleCharCode = currConfig_1.short;\n if (singleCharCode !== false) {\n if (orgText.charCodeAt(offset) === singleCharCode) {\n // single character string\n foundResyncPoint = true;\n }\n }\n else if (currConfig_1.isCustom === true) {\n foundResyncPoint =\n currPattern.exec(orgText, offset, matchedTokens, groups) !==\n null;\n }\n else {\n this.updateLastIndex(currPattern, offset);\n foundResyncPoint = currPattern.exec(text) !== null;\n }\n if (foundResyncPoint === true) {\n break;\n }\n }\n }\n errLength = offset - errorStartOffset;\n // at this point we either re-synced or reached the end of the input text\n msg = this.config.errorMessageProvider.buildUnexpectedCharactersMessage(orgText, errorStartOffset, errLength, errorLine, errorColumn);\n errors.push({\n offset: errorStartOffset,\n line: errorLine,\n column: errorColumn,\n length: errLength,\n message: msg\n });\n }\n }\n // if we do have custom patterns which push directly into the\n // TODO: custom tokens should not push directly??\n if (!this.hasCustom) {\n // if we guessed a too large size for the tokens array this will shrink it to the right size.\n matchedTokens.length = matchedTokensIndex;\n }\n return {\n tokens: matchedTokens,\n groups: groups,\n errors: errors\n };\n };\n Lexer.prototype.handleModes = function (config, pop_mode, push_mode, newToken) {\n if (config.pop === true) {\n // need to save the PUSH_MODE property as if the mode is popped\n // patternIdxToPopMode is updated to reflect the new mode after popping the stack\n var pushMode = config.push;\n pop_mode(newToken);\n if (pushMode !== undefined) {\n push_mode.call(this, pushMode);\n }\n }\n else if (config.push !== undefined) {\n push_mode.call(this, config.push);\n }\n };\n Lexer.prototype.chopInput = function (text, length) {\n return text.substring(length);\n };\n Lexer.prototype.updateLastIndex = function (regExp, newLastIndex) {\n regExp.lastIndex = newLastIndex;\n };\n // TODO: decrease this under 600 characters? inspect stripping comments option in TSC compiler\n Lexer.prototype.updateTokenEndLineColumnLocation = function (newToken, group, lastLTIdx, numOfLTsInMatch, line, column, imageLength) {\n var lastCharIsLT, fixForEndingInLT;\n if (group !== undefined) {\n // a none skipped multi line Token, need to update endLine/endColumn\n lastCharIsLT = lastLTIdx === imageLength - 1;\n fixForEndingInLT = lastCharIsLT ? -1 : 0;\n if (!(numOfLTsInMatch === 1 && lastCharIsLT === true)) {\n // if a token ends in a LT that last LT only affects the line numbering of following Tokens\n newToken.endLine = line + fixForEndingInLT;\n // the last LT in a token does not affect the endColumn either as the [columnStart ... columnEnd)\n // inclusive to exclusive range.\n newToken.endColumn = column - 1 + -fixForEndingInLT;\n }\n // else single LT in the last character of a token, no need to modify the endLine/EndColumn\n }\n };\n Lexer.prototype.computeNewColumn = function (oldColumn, imageLength) {\n return oldColumn + imageLength;\n };\n // Place holder, will be replaced by the correct variant according to the locationTracking option at runtime.\n /* istanbul ignore next - place holder */\n Lexer.prototype.createTokenInstance = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return null;\n };\n Lexer.prototype.createOffsetOnlyToken = function (image, startOffset, tokenTypeIdx, tokenType) {\n return {\n image: image,\n startOffset: startOffset,\n tokenTypeIdx: tokenTypeIdx,\n tokenType: tokenType\n };\n };\n Lexer.prototype.createStartOnlyToken = function (image, startOffset, tokenTypeIdx, tokenType, startLine, startColumn) {\n return {\n image: image,\n startOffset: startOffset,\n startLine: startLine,\n startColumn: startColumn,\n tokenTypeIdx: tokenTypeIdx,\n tokenType: tokenType\n };\n };\n Lexer.prototype.createFullToken = function (image, startOffset, tokenTypeIdx, tokenType, startLine, startColumn, imageLength) {\n return {\n image: image,\n startOffset: startOffset,\n endOffset: startOffset + imageLength - 1,\n startLine: startLine,\n endLine: startLine,\n startColumn: startColumn,\n endColumn: startColumn + imageLength - 1,\n tokenTypeIdx: tokenTypeIdx,\n tokenType: tokenType\n };\n };\n // Place holder, will be replaced by the correct variant according to the locationTracking option at runtime.\n /* istanbul ignore next - place holder */\n Lexer.prototype.addToken = function (tokenVector, index, tokenToAdd) {\n return 666;\n };\n Lexer.prototype.addTokenUsingPush = function (tokenVector, index, tokenToAdd) {\n tokenVector.push(tokenToAdd);\n return index;\n };\n Lexer.prototype.addTokenUsingMemberAccess = function (tokenVector, index, tokenToAdd) {\n tokenVector[index] = tokenToAdd;\n index++;\n return index;\n };\n // Place holder, will be replaced by the correct variant according to the hasCustom flag option at runtime.\n /* istanbul ignore next - place holder */\n Lexer.prototype.handlePayload = function (token, payload) { };\n Lexer.prototype.handlePayloadNoCustom = function (token, payload) { };\n Lexer.prototype.handlePayloadWithCustom = function (token, payload) {\n if (payload !== null) {\n token.payload = payload;\n }\n };\n /* istanbul ignore next - place holder to be replaced with chosen alternative at runtime */\n Lexer.prototype.match = function (pattern, text, offset) {\n return null;\n };\n Lexer.prototype.matchWithTest = function (pattern, text, offset) {\n var found = pattern.test(text);\n if (found === true) {\n return text.substring(offset, pattern.lastIndex);\n }\n return null;\n };\n Lexer.prototype.matchWithExec = function (pattern, text) {\n var regExpArray = pattern.exec(text);\n return regExpArray !== null ? regExpArray[0] : regExpArray;\n };\n // Duplicated from the parser's perf trace trait to allow future extraction\n // of the lexer to a separate package.\n Lexer.prototype.TRACE_INIT = function (phaseDesc, phaseImpl) {\n // No need to optimize this using NOOP pattern because\n // It is not called in a hot spot...\n if (this.traceInitPerf === true) {\n this.traceInitIndent++;\n var indent = new Array(this.traceInitIndent + 1).join(\"\\t\");\n if (this.traceInitIndent < this.traceInitMaxIdent) {\n console.log(indent + \"--> <\" + phaseDesc + \">\");\n }\n var _a = timer(phaseImpl), time = _a.time, value = _a.value;\n /* istanbul ignore next - Difficult to reproduce specific performance behavior (>10ms) in tests */\n var traceMethod = time > 10 ? console.warn : console.log;\n if (this.traceInitIndent < this.traceInitMaxIdent) {\n traceMethod(indent + \"<-- <\" + phaseDesc + \"> time: \" + time + \"ms\");\n }\n this.traceInitIndent--;\n return value;\n }\n else {\n return phaseImpl();\n }\n };\n Lexer.SKIPPED = \"This marks a skipped Token pattern, this means each token identified by it will\" +\n \"be consumed and then thrown into oblivion, this can be used to for example to completely ignore whitespace.\";\n Lexer.NA = /NOT_APPLICABLE/;\n return Lexer;\n}());\nexport { Lexer };\n//# sourceMappingURL=lexer_public.js.map","import { has, isString, isUndefined } from \"../utils/utils\";\nimport { Lexer } from \"./lexer_public\";\nimport { augmentTokenTypes, tokenStructuredMatcher } from \"./tokens\";\nexport function tokenLabel(tokType) {\n if (hasTokenLabel(tokType)) {\n return tokType.LABEL;\n }\n else {\n return tokType.name;\n }\n}\nexport function tokenName(tokType) {\n return tokType.name;\n}\nexport function hasTokenLabel(obj) {\n return isString(obj.LABEL) && obj.LABEL !== \"\";\n}\nvar PARENT = \"parent\";\nvar CATEGORIES = \"categories\";\nvar LABEL = \"label\";\nvar GROUP = \"group\";\nvar PUSH_MODE = \"push_mode\";\nvar POP_MODE = \"pop_mode\";\nvar LONGER_ALT = \"longer_alt\";\nvar LINE_BREAKS = \"line_breaks\";\nvar START_CHARS_HINT = \"start_chars_hint\";\nexport function createToken(config) {\n return createTokenInternal(config);\n}\nfunction createTokenInternal(config) {\n var pattern = config.pattern;\n var tokenType = {};\n tokenType.name = config.name;\n if (!isUndefined(pattern)) {\n tokenType.PATTERN = pattern;\n }\n if (has(config, PARENT)) {\n throw (\"The parent property is no longer supported.\\n\" +\n \"See: https://github.com/chevrotain/chevrotain/issues/564#issuecomment-349062346 for details.\");\n }\n if (has(config, CATEGORIES)) {\n // casting to ANY as this will be fixed inside `augmentTokenTypes``\n tokenType.CATEGORIES = config[CATEGORIES];\n }\n augmentTokenTypes([tokenType]);\n if (has(config, LABEL)) {\n tokenType.LABEL = config[LABEL];\n }\n if (has(config, GROUP)) {\n tokenType.GROUP = config[GROUP];\n }\n if (has(config, POP_MODE)) {\n tokenType.POP_MODE = config[POP_MODE];\n }\n if (has(config, PUSH_MODE)) {\n tokenType.PUSH_MODE = config[PUSH_MODE];\n }\n if (has(config, LONGER_ALT)) {\n tokenType.LONGER_ALT = config[LONGER_ALT];\n }\n if (has(config, LINE_BREAKS)) {\n tokenType.LINE_BREAKS = config[LINE_BREAKS];\n }\n if (has(config, START_CHARS_HINT)) {\n tokenType.START_CHARS_HINT = config[START_CHARS_HINT];\n }\n return tokenType;\n}\nexport var EOF = createToken({ name: \"EOF\", pattern: Lexer.NA });\naugmentTokenTypes([EOF]);\nexport function createTokenInstance(tokType, image, startOffset, endOffset, startLine, endLine, startColumn, endColumn) {\n return {\n image: image,\n startOffset: startOffset,\n endOffset: endOffset,\n startLine: startLine,\n endLine: endLine,\n startColumn: startColumn,\n endColumn: endColumn,\n tokenTypeIdx: tokType.tokenTypeIdx,\n tokenType: tokType\n };\n}\nexport function tokenMatcher(token, tokType) {\n return tokenStructuredMatcher(token, tokType);\n}\n//# sourceMappingURL=tokens_public.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { assign, forEach, isRegExp, map, pick } from \"../../../utils/utils\";\nimport { tokenLabel } from \"../../../scan/tokens_public\";\nvar AbstractProduction = /** @class */ (function () {\n function AbstractProduction(_definition) {\n this._definition = _definition;\n }\n Object.defineProperty(AbstractProduction.prototype, \"definition\", {\n get: function () {\n return this._definition;\n },\n set: function (value) {\n this._definition = value;\n },\n enumerable: false,\n configurable: true\n });\n AbstractProduction.prototype.accept = function (visitor) {\n visitor.visit(this);\n forEach(this.definition, function (prod) {\n prod.accept(visitor);\n });\n };\n return AbstractProduction;\n}());\nexport { AbstractProduction };\nvar NonTerminal = /** @class */ (function (_super) {\n __extends(NonTerminal, _super);\n function NonTerminal(options) {\n var _this = _super.call(this, []) || this;\n _this.idx = 1;\n assign(_this, pick(options, function (v) { return v !== undefined; }));\n return _this;\n }\n Object.defineProperty(NonTerminal.prototype, \"definition\", {\n get: function () {\n if (this.referencedRule !== undefined) {\n return this.referencedRule.definition;\n }\n return [];\n },\n set: function (definition) {\n // immutable\n },\n enumerable: false,\n configurable: true\n });\n NonTerminal.prototype.accept = function (visitor) {\n visitor.visit(this);\n // don't visit children of a reference, we will get cyclic infinite loops if we do so\n };\n return NonTerminal;\n}(AbstractProduction));\nexport { NonTerminal };\nvar Rule = /** @class */ (function (_super) {\n __extends(Rule, _super);\n function Rule(options) {\n var _this = _super.call(this, options.definition) || this;\n _this.orgText = \"\";\n assign(_this, pick(options, function (v) { return v !== undefined; }));\n return _this;\n }\n return Rule;\n}(AbstractProduction));\nexport { Rule };\nvar Alternative = /** @class */ (function (_super) {\n __extends(Alternative, _super);\n function Alternative(options) {\n var _this = _super.call(this, options.definition) || this;\n _this.ignoreAmbiguities = false;\n assign(_this, pick(options, function (v) { return v !== undefined; }));\n return _this;\n }\n return Alternative;\n}(AbstractProduction));\nexport { Alternative };\nvar Option = /** @class */ (function (_super) {\n __extends(Option, _super);\n function Option(options) {\n var _this = _super.call(this, options.definition) || this;\n _this.idx = 1;\n assign(_this, pick(options, function (v) { return v !== undefined; }));\n return _this;\n }\n return Option;\n}(AbstractProduction));\nexport { Option };\nvar RepetitionMandatory = /** @class */ (function (_super) {\n __extends(RepetitionMandatory, _super);\n function RepetitionMandatory(options) {\n var _this = _super.call(this, options.definition) || this;\n _this.idx = 1;\n assign(_this, pick(options, function (v) { return v !== undefined; }));\n return _this;\n }\n return RepetitionMandatory;\n}(AbstractProduction));\nexport { RepetitionMandatory };\nvar RepetitionMandatoryWithSeparator = /** @class */ (function (_super) {\n __extends(RepetitionMandatoryWithSeparator, _super);\n function RepetitionMandatoryWithSeparator(options) {\n var _this = _super.call(this, options.definition) || this;\n _this.idx = 1;\n assign(_this, pick(options, function (v) { return v !== undefined; }));\n return _this;\n }\n return RepetitionMandatoryWithSeparator;\n}(AbstractProduction));\nexport { RepetitionMandatoryWithSeparator };\nvar Repetition = /** @class */ (function (_super) {\n __extends(Repetition, _super);\n function Repetition(options) {\n var _this = _super.call(this, options.definition) || this;\n _this.idx = 1;\n assign(_this, pick(options, function (v) { return v !== undefined; }));\n return _this;\n }\n return Repetition;\n}(AbstractProduction));\nexport { Repetition };\nvar RepetitionWithSeparator = /** @class */ (function (_super) {\n __extends(RepetitionWithSeparator, _super);\n function RepetitionWithSeparator(options) {\n var _this = _super.call(this, options.definition) || this;\n _this.idx = 1;\n assign(_this, pick(options, function (v) { return v !== undefined; }));\n return _this;\n }\n return RepetitionWithSeparator;\n}(AbstractProduction));\nexport { RepetitionWithSeparator };\nvar Alternation = /** @class */ (function (_super) {\n __extends(Alternation, _super);\n function Alternation(options) {\n var _this = _super.call(this, options.definition) || this;\n _this.idx = 1;\n _this.ignoreAmbiguities = false;\n _this.hasPredicates = false;\n assign(_this, pick(options, function (v) { return v !== undefined; }));\n return _this;\n }\n Object.defineProperty(Alternation.prototype, \"definition\", {\n get: function () {\n return this._definition;\n },\n set: function (value) {\n this._definition = value;\n },\n enumerable: false,\n configurable: true\n });\n return Alternation;\n}(AbstractProduction));\nexport { Alternation };\nvar Terminal = /** @class */ (function () {\n function Terminal(options) {\n this.idx = 1;\n assign(this, pick(options, function (v) { return v !== undefined; }));\n }\n Terminal.prototype.accept = function (visitor) {\n visitor.visit(this);\n };\n return Terminal;\n}());\nexport { Terminal };\nexport function serializeGrammar(topRules) {\n return map(topRules, serializeProduction);\n}\nexport function serializeProduction(node) {\n function convertDefinition(definition) {\n return map(definition, serializeProduction);\n }\n /* istanbul ignore else */\n if (node instanceof NonTerminal) {\n return {\n type: \"NonTerminal\",\n name: node.nonTerminalName,\n idx: node.idx\n };\n }\n else if (node instanceof Alternative) {\n return {\n type: \"Alternative\",\n definition: convertDefinition(node.definition)\n };\n }\n else if (node instanceof Option) {\n return {\n type: \"Option\",\n idx: node.idx,\n definition: convertDefinition(node.definition)\n };\n }\n else if (node instanceof RepetitionMandatory) {\n return {\n type: \"RepetitionMandatory\",\n idx: node.idx,\n definition: convertDefinition(node.definition)\n };\n }\n else if (node instanceof RepetitionMandatoryWithSeparator) {\n return {\n type: \"RepetitionMandatoryWithSeparator\",\n idx: node.idx,\n separator: (serializeProduction(new Terminal({ terminalType: node.separator }))),\n definition: convertDefinition(node.definition)\n };\n }\n else if (node instanceof RepetitionWithSeparator) {\n return {\n type: \"RepetitionWithSeparator\",\n idx: node.idx,\n separator: (serializeProduction(new Terminal({ terminalType: node.separator }))),\n definition: convertDefinition(node.definition)\n };\n }\n else if (node instanceof Repetition) {\n return {\n type: \"Repetition\",\n idx: node.idx,\n definition: convertDefinition(node.definition)\n };\n }\n else if (node instanceof Alternation) {\n return {\n type: \"Alternation\",\n idx: node.idx,\n definition: convertDefinition(node.definition)\n };\n }\n else if (node instanceof Terminal) {\n var serializedTerminal = {\n type: \"Terminal\",\n name: node.terminalType.name,\n label: tokenLabel(node.terminalType),\n idx: node.idx\n };\n var pattern = node.terminalType.PATTERN;\n if (node.terminalType.PATTERN) {\n serializedTerminal.pattern = isRegExp(pattern)\n ? pattern.source\n : pattern;\n }\n return serializedTerminal;\n }\n else if (node instanceof Rule) {\n return {\n type: \"Rule\",\n name: node.name,\n orgText: node.orgText,\n definition: convertDefinition(node.definition)\n };\n }\n else {\n throw Error(\"non exhaustive match\");\n }\n}\n//# sourceMappingURL=gast_public.js.map","import { drop, forEach } from \"../../utils/utils\";\nimport { Alternation, Alternative, NonTerminal, Option, Repetition, RepetitionMandatory, RepetitionMandatoryWithSeparator, RepetitionWithSeparator, Terminal } from \"./gast/gast_public\";\n/**\n * A Grammar Walker that computes the \"remaining\" grammar \"after\" a productions in the grammar.\n */\nvar RestWalker = /** @class */ (function () {\n function RestWalker() {\n }\n RestWalker.prototype.walk = function (prod, prevRest) {\n var _this = this;\n if (prevRest === void 0) { prevRest = []; }\n forEach(prod.definition, function (subProd, index) {\n var currRest = drop(prod.definition, index + 1);\n /* istanbul ignore else */\n if (subProd instanceof NonTerminal) {\n _this.walkProdRef(subProd, currRest, prevRest);\n }\n else if (subProd instanceof Terminal) {\n _this.walkTerminal(subProd, currRest, prevRest);\n }\n else if (subProd instanceof Alternative) {\n _this.walkFlat(subProd, currRest, prevRest);\n }\n else if (subProd instanceof Option) {\n _this.walkOption(subProd, currRest, prevRest);\n }\n else if (subProd instanceof RepetitionMandatory) {\n _this.walkAtLeastOne(subProd, currRest, prevRest);\n }\n else if (subProd instanceof RepetitionMandatoryWithSeparator) {\n _this.walkAtLeastOneSep(subProd, currRest, prevRest);\n }\n else if (subProd instanceof RepetitionWithSeparator) {\n _this.walkManySep(subProd, currRest, prevRest);\n }\n else if (subProd instanceof Repetition) {\n _this.walkMany(subProd, currRest, prevRest);\n }\n else if (subProd instanceof Alternation) {\n _this.walkOr(subProd, currRest, prevRest);\n }\n else {\n throw Error(\"non exhaustive match\");\n }\n });\n };\n RestWalker.prototype.walkTerminal = function (terminal, currRest, prevRest) { };\n RestWalker.prototype.walkProdRef = function (refProd, currRest, prevRest) { };\n RestWalker.prototype.walkFlat = function (flatProd, currRest, prevRest) {\n // ABCDEF => after the D the rest is EF\n var fullOrRest = currRest.concat(prevRest);\n this.walk(flatProd, fullOrRest);\n };\n RestWalker.prototype.walkOption = function (optionProd, currRest, prevRest) {\n // ABC(DE)?F => after the (DE)? the rest is F\n var fullOrRest = currRest.concat(prevRest);\n this.walk(optionProd, fullOrRest);\n };\n RestWalker.prototype.walkAtLeastOne = function (atLeastOneProd, currRest, prevRest) {\n // ABC(DE)+F => after the (DE)+ the rest is (DE)?F\n var fullAtLeastOneRest = [\n new Option({ definition: atLeastOneProd.definition })\n ].concat(currRest, prevRest);\n this.walk(atLeastOneProd, fullAtLeastOneRest);\n };\n RestWalker.prototype.walkAtLeastOneSep = function (atLeastOneSepProd, currRest, prevRest) {\n // ABC DE(,DE)* F => after the (,DE)+ the rest is (,DE)?F\n var fullAtLeastOneSepRest = restForRepetitionWithSeparator(atLeastOneSepProd, currRest, prevRest);\n this.walk(atLeastOneSepProd, fullAtLeastOneSepRest);\n };\n RestWalker.prototype.walkMany = function (manyProd, currRest, prevRest) {\n // ABC(DE)*F => after the (DE)* the rest is (DE)?F\n var fullManyRest = [\n new Option({ definition: manyProd.definition })\n ].concat(currRest, prevRest);\n this.walk(manyProd, fullManyRest);\n };\n RestWalker.prototype.walkManySep = function (manySepProd, currRest, prevRest) {\n // ABC (DE(,DE)*)? F => after the (,DE)* the rest is (,DE)?F\n var fullManySepRest = restForRepetitionWithSeparator(manySepProd, currRest, prevRest);\n this.walk(manySepProd, fullManySepRest);\n };\n RestWalker.prototype.walkOr = function (orProd, currRest, prevRest) {\n var _this = this;\n // ABC(D|E|F)G => when finding the (D|E|F) the rest is G\n var fullOrRest = currRest.concat(prevRest);\n // walk all different alternatives\n forEach(orProd.definition, function (alt) {\n // wrapping each alternative in a single definition wrapper\n // to avoid errors in computing the rest of that alternative in the invocation to computeInProdFollows\n // (otherwise for OR([alt1,alt2]) alt2 will be considered in 'rest' of alt1\n var prodWrapper = new Alternative({ definition: [alt] });\n _this.walk(prodWrapper, fullOrRest);\n });\n };\n return RestWalker;\n}());\nexport { RestWalker };\nfunction restForRepetitionWithSeparator(repSepProd, currRest, prevRest) {\n var repSepRest = [\n new Option({\n definition: [new Terminal({ terminalType: repSepProd.separator })].concat(repSepProd.definition)\n })\n ];\n var fullRepSepRest = repSepRest.concat(currRest, prevRest);\n return fullRepSepRest;\n}\n//# sourceMappingURL=rest.js.map","import { Alternation, Alternative, NonTerminal, Option, Repetition, RepetitionMandatory, RepetitionMandatoryWithSeparator, RepetitionWithSeparator, Rule, Terminal } from \"./gast_public\";\nvar GAstVisitor = /** @class */ (function () {\n function GAstVisitor() {\n }\n GAstVisitor.prototype.visit = function (node) {\n var nodeAny = node;\n switch (nodeAny.constructor) {\n case NonTerminal:\n return this.visitNonTerminal(nodeAny);\n case Alternative:\n return this.visitAlternative(nodeAny);\n case Option:\n return this.visitOption(nodeAny);\n case RepetitionMandatory:\n return this.visitRepetitionMandatory(nodeAny);\n case RepetitionMandatoryWithSeparator:\n return this.visitRepetitionMandatoryWithSeparator(nodeAny);\n case RepetitionWithSeparator:\n return this.visitRepetitionWithSeparator(nodeAny);\n case Repetition:\n return this.visitRepetition(nodeAny);\n case Alternation:\n return this.visitAlternation(nodeAny);\n case Terminal:\n return this.visitTerminal(nodeAny);\n case Rule:\n return this.visitRule(nodeAny);\n /* istanbul ignore next */\n default:\n throw Error(\"non exhaustive match\");\n }\n };\n GAstVisitor.prototype.visitNonTerminal = function (node) { };\n GAstVisitor.prototype.visitAlternative = function (node) { };\n GAstVisitor.prototype.visitOption = function (node) { };\n GAstVisitor.prototype.visitRepetition = function (node) { };\n GAstVisitor.prototype.visitRepetitionMandatory = function (node) { };\n GAstVisitor.prototype.visitRepetitionMandatoryWithSeparator = function (node) { };\n GAstVisitor.prototype.visitRepetitionWithSeparator = function (node) { };\n GAstVisitor.prototype.visitAlternation = function (node) { };\n GAstVisitor.prototype.visitTerminal = function (node) { };\n GAstVisitor.prototype.visitRule = function (node) { };\n return GAstVisitor;\n}());\nexport { GAstVisitor };\n//# sourceMappingURL=gast_visitor_public.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { contains, every, has, some } from \"../../../utils/utils\";\nimport { AbstractProduction, Alternation, Alternative, NonTerminal, Option, Repetition, RepetitionMandatory, RepetitionMandatoryWithSeparator, RepetitionWithSeparator, Rule, Terminal } from \"./gast_public\";\nimport { GAstVisitor } from \"./gast_visitor_public\";\nexport function isSequenceProd(prod) {\n return (prod instanceof Alternative ||\n prod instanceof Option ||\n prod instanceof Repetition ||\n prod instanceof RepetitionMandatory ||\n prod instanceof RepetitionMandatoryWithSeparator ||\n prod instanceof RepetitionWithSeparator ||\n prod instanceof Terminal ||\n prod instanceof Rule);\n}\nexport function isOptionalProd(prod, alreadyVisited) {\n if (alreadyVisited === void 0) { alreadyVisited = []; }\n var isDirectlyOptional = prod instanceof Option ||\n prod instanceof Repetition ||\n prod instanceof RepetitionWithSeparator;\n if (isDirectlyOptional) {\n return true;\n }\n // note that this can cause infinite loop if one optional empty TOP production has a cyclic dependency with another\n // empty optional top rule\n // may be indirectly optional ((A?B?C?) | (D?E?F?))\n if (prod instanceof Alternation) {\n // for OR its enough for just one of the alternatives to be optional\n return some(prod.definition, function (subProd) {\n return isOptionalProd(subProd, alreadyVisited);\n });\n }\n else if (prod instanceof NonTerminal && contains(alreadyVisited, prod)) {\n // avoiding stack overflow due to infinite recursion\n return false;\n }\n else if (prod instanceof AbstractProduction) {\n if (prod instanceof NonTerminal) {\n alreadyVisited.push(prod);\n }\n return every(prod.definition, function (subProd) {\n return isOptionalProd(subProd, alreadyVisited);\n });\n }\n else {\n return false;\n }\n}\nexport function isBranchingProd(prod) {\n return prod instanceof Alternation;\n}\nexport function getProductionDslName(prod) {\n /* istanbul ignore else */\n if (prod instanceof NonTerminal) {\n return \"SUBRULE\";\n }\n else if (prod instanceof Option) {\n return \"OPTION\";\n }\n else if (prod instanceof Alternation) {\n return \"OR\";\n }\n else if (prod instanceof RepetitionMandatory) {\n return \"AT_LEAST_ONE\";\n }\n else if (prod instanceof RepetitionMandatoryWithSeparator) {\n return \"AT_LEAST_ONE_SEP\";\n }\n else if (prod instanceof RepetitionWithSeparator) {\n return \"MANY_SEP\";\n }\n else if (prod instanceof Repetition) {\n return \"MANY\";\n }\n else if (prod instanceof Terminal) {\n return \"CONSUME\";\n }\n else {\n throw Error(\"non exhaustive match\");\n }\n}\nvar DslMethodsCollectorVisitor = /** @class */ (function (_super) {\n __extends(DslMethodsCollectorVisitor, _super);\n function DslMethodsCollectorVisitor() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n // A minus is never valid in an identifier name\n _this.separator = \"-\";\n _this.dslMethods = {\n option: [],\n alternation: [],\n repetition: [],\n repetitionWithSeparator: [],\n repetitionMandatory: [],\n repetitionMandatoryWithSeparator: []\n };\n return _this;\n }\n DslMethodsCollectorVisitor.prototype.reset = function () {\n this.dslMethods = {\n option: [],\n alternation: [],\n repetition: [],\n repetitionWithSeparator: [],\n repetitionMandatory: [],\n repetitionMandatoryWithSeparator: []\n };\n };\n DslMethodsCollectorVisitor.prototype.visitTerminal = function (terminal) {\n var key = terminal.terminalType.name + this.separator + \"Terminal\";\n if (!has(this.dslMethods, key)) {\n this.dslMethods[key] = [];\n }\n this.dslMethods[key].push(terminal);\n };\n DslMethodsCollectorVisitor.prototype.visitNonTerminal = function (subrule) {\n var key = subrule.nonTerminalName + this.separator + \"Terminal\";\n if (!has(this.dslMethods, key)) {\n this.dslMethods[key] = [];\n }\n this.dslMethods[key].push(subrule);\n };\n DslMethodsCollectorVisitor.prototype.visitOption = function (option) {\n this.dslMethods.option.push(option);\n };\n DslMethodsCollectorVisitor.prototype.visitRepetitionWithSeparator = function (manySep) {\n this.dslMethods.repetitionWithSeparator.push(manySep);\n };\n DslMethodsCollectorVisitor.prototype.visitRepetitionMandatory = function (atLeastOne) {\n this.dslMethods.repetitionMandatory.push(atLeastOne);\n };\n DslMethodsCollectorVisitor.prototype.visitRepetitionMandatoryWithSeparator = function (atLeastOneSep) {\n this.dslMethods.repetitionMandatoryWithSeparator.push(atLeastOneSep);\n };\n DslMethodsCollectorVisitor.prototype.visitRepetition = function (many) {\n this.dslMethods.repetition.push(many);\n };\n DslMethodsCollectorVisitor.prototype.visitAlternation = function (or) {\n this.dslMethods.alternation.push(or);\n };\n return DslMethodsCollectorVisitor;\n}(GAstVisitor));\nexport { DslMethodsCollectorVisitor };\nvar collectorVisitor = new DslMethodsCollectorVisitor();\nexport function collectMethods(rule) {\n collectorVisitor.reset();\n rule.accept(collectorVisitor);\n var dslMethods = collectorVisitor.dslMethods;\n // avoid uncleaned references\n collectorVisitor.reset();\n return dslMethods;\n}\n//# sourceMappingURL=gast.js.map","import { uniq, map, flatten } from \"../../utils/utils\";\nimport { NonTerminal, Terminal } from \"./gast/gast_public\";\nimport { isBranchingProd, isOptionalProd, isSequenceProd } from \"./gast/gast\";\nexport function first(prod) {\n /* istanbul ignore else */\n if (prod instanceof NonTerminal) {\n // this could in theory cause infinite loops if\n // (1) prod A refs prod B.\n // (2) prod B refs prod A\n // (3) AB can match the empty set\n // in other words a cycle where everything is optional so the first will keep\n // looking ahead for the next optional part and will never exit\n // currently there is no safeguard for this unique edge case because\n // (1) not sure a grammar in which this can happen is useful for anything (productive)\n return first(prod.referencedRule);\n }\n else if (prod instanceof Terminal) {\n return firstForTerminal(prod);\n }\n else if (isSequenceProd(prod)) {\n return firstForSequence(prod);\n }\n else if (isBranchingProd(prod)) {\n return firstForBranching(prod);\n }\n else {\n throw Error(\"non exhaustive match\");\n }\n}\nexport function firstForSequence(prod) {\n var firstSet = [];\n var seq = prod.definition;\n var nextSubProdIdx = 0;\n var hasInnerProdsRemaining = seq.length > nextSubProdIdx;\n var currSubProd;\n // so we enter the loop at least once (if the definition is not empty\n var isLastInnerProdOptional = true;\n // scan a sequence until it's end or until we have found a NONE optional production in it\n while (hasInnerProdsRemaining && isLastInnerProdOptional) {\n currSubProd = seq[nextSubProdIdx];\n isLastInnerProdOptional = isOptionalProd(currSubProd);\n firstSet = firstSet.concat(first(currSubProd));\n nextSubProdIdx = nextSubProdIdx + 1;\n hasInnerProdsRemaining = seq.length > nextSubProdIdx;\n }\n return uniq(firstSet);\n}\nexport function firstForBranching(prod) {\n var allAlternativesFirsts = map(prod.definition, function (innerProd) {\n return first(innerProd);\n });\n return uniq(flatten(allAlternativesFirsts));\n}\nexport function firstForTerminal(terminal) {\n return [terminal.terminalType];\n}\n//# sourceMappingURL=first.js.map","// TODO: can this be removed? where is it used?\nexport var IN = \"_~IN~_\";\n//# sourceMappingURL=constants.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { RestWalker } from \"./rest\";\nimport { first } from \"./first\";\nimport { assign, forEach } from \"../../utils/utils\";\nimport { IN } from \"../constants\";\nimport { Alternative } from \"./gast/gast_public\";\n// This ResyncFollowsWalker computes all of the follows required for RESYNC\n// (skipping reference production).\nvar ResyncFollowsWalker = /** @class */ (function (_super) {\n __extends(ResyncFollowsWalker, _super);\n function ResyncFollowsWalker(topProd) {\n var _this = _super.call(this) || this;\n _this.topProd = topProd;\n _this.follows = {};\n return _this;\n }\n ResyncFollowsWalker.prototype.startWalking = function () {\n this.walk(this.topProd);\n return this.follows;\n };\n ResyncFollowsWalker.prototype.walkTerminal = function (terminal, currRest, prevRest) {\n // do nothing! just like in the public sector after 13:00\n };\n ResyncFollowsWalker.prototype.walkProdRef = function (refProd, currRest, prevRest) {\n var followName = buildBetweenProdsFollowPrefix(refProd.referencedRule, refProd.idx) +\n this.topProd.name;\n var fullRest = currRest.concat(prevRest);\n var restProd = new Alternative({ definition: fullRest });\n var t_in_topProd_follows = first(restProd);\n this.follows[followName] = t_in_topProd_follows;\n };\n return ResyncFollowsWalker;\n}(RestWalker));\nexport { ResyncFollowsWalker };\nexport function computeAllProdsFollows(topProductions) {\n var reSyncFollows = {};\n forEach(topProductions, function (topProd) {\n var currRefsFollow = new ResyncFollowsWalker(topProd).startWalking();\n assign(reSyncFollows, currRefsFollow);\n });\n return reSyncFollows;\n}\nexport function buildBetweenProdsFollowPrefix(inner, occurenceInParent) {\n return inner.name + occurenceInParent + IN;\n}\nexport function buildInProdFollowPrefix(terminal) {\n var terminalName = terminal.terminalType.name;\n return terminalName + terminal.idx + IN;\n}\n//# sourceMappingURL=follow.js.map","import { hasTokenLabel, tokenLabel } from \"../scan/tokens_public\";\nimport * as utils from \"../utils/utils\";\nimport { first, map, reduce } from \"../utils/utils\";\nimport { NonTerminal, Rule, Terminal } from \"./grammar/gast/gast_public\";\nimport { getProductionDslName } from \"./grammar/gast/gast\";\nexport var defaultParserErrorProvider = {\n buildMismatchTokenMessage: function (_a) {\n var expected = _a.expected, actual = _a.actual, previous = _a.previous, ruleName = _a.ruleName;\n var hasLabel = hasTokenLabel(expected);\n var expectedMsg = hasLabel\n ? \"--> \" + tokenLabel(expected) + \" <--\"\n : \"token of type --> \" + expected.name + \" <--\";\n var msg = \"Expecting \" + expectedMsg + \" but found --> '\" + actual.image + \"' <--\";\n return msg;\n },\n buildNotAllInputParsedMessage: function (_a) {\n var firstRedundant = _a.firstRedundant, ruleName = _a.ruleName;\n return \"Redundant input, expecting EOF but found: \" + firstRedundant.image;\n },\n buildNoViableAltMessage: function (_a) {\n var expectedPathsPerAlt = _a.expectedPathsPerAlt, actual = _a.actual, previous = _a.previous, customUserDescription = _a.customUserDescription, ruleName = _a.ruleName;\n var errPrefix = \"Expecting: \";\n // TODO: issue: No Viable Alternative Error may have incomplete details. #502\n var actualText = first(actual).image;\n var errSuffix = \"\\nbut found: '\" + actualText + \"'\";\n if (customUserDescription) {\n return errPrefix + customUserDescription + errSuffix;\n }\n else {\n var allLookAheadPaths = reduce(expectedPathsPerAlt, function (result, currAltPaths) { return result.concat(currAltPaths); }, []);\n var nextValidTokenSequences = map(allLookAheadPaths, function (currPath) {\n return \"[\" + map(currPath, function (currTokenType) { return tokenLabel(currTokenType); }).join(\", \") + \"]\";\n });\n var nextValidSequenceItems = map(nextValidTokenSequences, function (itemMsg, idx) { return \" \" + (idx + 1) + \". \" + itemMsg; });\n var calculatedDescription = \"one of these possible Token sequences:\\n\" + nextValidSequenceItems.join(\"\\n\");\n return errPrefix + calculatedDescription + errSuffix;\n }\n },\n buildEarlyExitMessage: function (_a) {\n var expectedIterationPaths = _a.expectedIterationPaths, actual = _a.actual, customUserDescription = _a.customUserDescription, ruleName = _a.ruleName;\n var errPrefix = \"Expecting: \";\n // TODO: issue: No Viable Alternative Error may have incomplete details. #502\n var actualText = first(actual).image;\n var errSuffix = \"\\nbut found: '\" + actualText + \"'\";\n if (customUserDescription) {\n return errPrefix + customUserDescription + errSuffix;\n }\n else {\n var nextValidTokenSequences = map(expectedIterationPaths, function (currPath) {\n return \"[\" + map(currPath, function (currTokenType) { return tokenLabel(currTokenType); }).join(\",\") + \"]\";\n });\n var calculatedDescription = \"expecting at least one iteration which starts with one of these possible Token sequences::\\n \" +\n (\"<\" + nextValidTokenSequences.join(\" ,\") + \">\");\n return errPrefix + calculatedDescription + errSuffix;\n }\n }\n};\nObject.freeze(defaultParserErrorProvider);\nexport var defaultGrammarResolverErrorProvider = {\n buildRuleNotFoundError: function (topLevelRule, undefinedRule) {\n var msg = \"Invalid grammar, reference to a rule which is not defined: ->\" +\n undefinedRule.nonTerminalName +\n \"<-\\n\" +\n \"inside top level rule: ->\" +\n topLevelRule.name +\n \"<-\";\n return msg;\n }\n};\nexport var defaultGrammarValidatorErrorProvider = {\n buildDuplicateFoundError: function (topLevelRule, duplicateProds) {\n function getExtraProductionArgument(prod) {\n if (prod instanceof Terminal) {\n return prod.terminalType.name;\n }\n else if (prod instanceof NonTerminal) {\n return prod.nonTerminalName;\n }\n else {\n return \"\";\n }\n }\n var topLevelName = topLevelRule.name;\n var duplicateProd = first(duplicateProds);\n var index = duplicateProd.idx;\n var dslName = getProductionDslName(duplicateProd);\n var extraArgument = getExtraProductionArgument(duplicateProd);\n var hasExplicitIndex = index > 0;\n var msg = \"->\" + dslName + (hasExplicitIndex ? index : \"\") + \"<- \" + (extraArgument ? \"with argument: ->\" + extraArgument + \"<-\" : \"\") + \"\\n appears more than once (\" + duplicateProds.length + \" times) in the top level rule: ->\" + topLevelName + \"<-. \\n For further details see: https://chevrotain.io/docs/FAQ.html#NUMERICAL_SUFFIXES \\n \";\n // white space trimming time! better to trim afterwards as it allows to use WELL formatted multi line template strings...\n msg = msg.replace(/[ \\t]+/g, \" \");\n msg = msg.replace(/\\s\\s+/g, \"\\n\");\n return msg;\n },\n buildNamespaceConflictError: function (rule) {\n var errMsg = \"Namespace conflict found in grammar.\\n\" +\n (\"The grammar has both a Terminal(Token) and a Non-Terminal(Rule) named: <\" + rule.name + \">.\\n\") +\n \"To resolve this make sure each Terminal and Non-Terminal names are unique\\n\" +\n \"This is easy to accomplish by using the convention that Terminal names start with an uppercase letter\\n\" +\n \"and Non-Terminal names start with a lower case letter.\";\n return errMsg;\n },\n buildAlternationPrefixAmbiguityError: function (options) {\n var pathMsg = map(options.prefixPath, function (currTok) {\n return tokenLabel(currTok);\n }).join(\", \");\n var occurrence = options.alternation.idx === 0 ? \"\" : options.alternation.idx;\n var errMsg = \"Ambiguous alternatives: <\" + options.ambiguityIndices.join(\" ,\") + \"> due to common lookahead prefix\\n\" +\n (\"in inside <\" + options.topLevelRule.name + \"> Rule,\\n\") +\n (\"<\" + pathMsg + \"> may appears as a prefix path in all these alternatives.\\n\") +\n \"See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#COMMON_PREFIX\\n\" +\n \"For Further details.\";\n return errMsg;\n },\n buildAlternationAmbiguityError: function (options) {\n var pathMsg = map(options.prefixPath, function (currtok) {\n return tokenLabel(currtok);\n }).join(\", \");\n var occurrence = options.alternation.idx === 0 ? \"\" : options.alternation.idx;\n var currMessage = \"Ambiguous Alternatives Detected: <\" + options.ambiguityIndices.join(\" ,\") + \"> in \" +\n (\" inside <\" + options.topLevelRule.name + \"> Rule,\\n\") +\n (\"<\" + pathMsg + \"> may appears as a prefix path in all these alternatives.\\n\");\n currMessage =\n currMessage +\n \"See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#AMBIGUOUS_ALTERNATIVES\\n\" +\n \"For Further details.\";\n return currMessage;\n },\n buildEmptyRepetitionError: function (options) {\n var dslName = getProductionDslName(options.repetition);\n if (options.repetition.idx !== 0) {\n dslName += options.repetition.idx;\n }\n var errMsg = \"The repetition <\" + dslName + \"> within Rule <\" + options.topLevelRule.name + \"> can never consume any tokens.\\n\" +\n \"This could lead to an infinite loop.\";\n return errMsg;\n },\n // TODO: remove - `errors_public` from nyc.config.js exclude\n // once this method is fully removed from this file\n buildTokenNameError: function (options) {\n /* istanbul ignore next */\n return \"deprecated\";\n },\n buildEmptyAlternationError: function (options) {\n var errMsg = \"Ambiguous empty alternative: <\" + (options.emptyChoiceIdx + 1) + \">\" +\n (\" in inside <\" + options.topLevelRule.name + \"> Rule.\\n\") +\n \"Only the last alternative may be an empty alternative.\";\n return errMsg;\n },\n buildTooManyAlternativesError: function (options) {\n var errMsg = \"An Alternation cannot have more than 256 alternatives:\\n\" +\n (\" inside <\" + options.topLevelRule.name + \"> Rule.\\n has \" + (options.alternation.definition.length + 1) + \" alternatives.\");\n return errMsg;\n },\n buildLeftRecursionError: function (options) {\n var ruleName = options.topLevelRule.name;\n var pathNames = utils.map(options.leftRecursionPath, function (currRule) { return currRule.name; });\n var leftRecursivePath = ruleName + \" --> \" + pathNames\n .concat([ruleName])\n .join(\" --> \");\n var errMsg = \"Left Recursion found in grammar.\\n\" +\n (\"rule: <\" + ruleName + \"> can be invoked from itself (directly or indirectly)\\n\") +\n (\"without consuming any Tokens. The grammar path that causes this is: \\n \" + leftRecursivePath + \"\\n\") +\n \" To fix this refactor your grammar to remove the left recursion.\\n\" +\n \"see: https://en.wikipedia.org/wiki/LL_parser#Left_Factoring.\";\n return errMsg;\n },\n // TODO: remove - `errors_public` from nyc.config.js exclude\n // once this method is fully removed from this file\n buildInvalidRuleNameError: function (options) {\n /* istanbul ignore next */\n return \"deprecated\";\n },\n buildDuplicateRuleNameError: function (options) {\n var ruleName;\n if (options.topLevelRule instanceof Rule) {\n ruleName = options.topLevelRule.name;\n }\n else {\n ruleName = options.topLevelRule;\n }\n var errMsg = \"Duplicate definition, rule: ->\" + ruleName + \"<- is already defined in the grammar: ->\" + options.grammarName + \"<-\";\n return errMsg;\n }\n};\n//# sourceMappingURL=errors_public.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { ParserDefinitionErrorType } from \"../parser/parser\";\nimport { forEach, values } from \"../../utils/utils\";\nimport { GAstVisitor } from \"./gast/gast_visitor_public\";\nexport function resolveGrammar(topLevels, errMsgProvider) {\n var refResolver = new GastRefResolverVisitor(topLevels, errMsgProvider);\n refResolver.resolveRefs();\n return refResolver.errors;\n}\nvar GastRefResolverVisitor = /** @class */ (function (_super) {\n __extends(GastRefResolverVisitor, _super);\n function GastRefResolverVisitor(nameToTopRule, errMsgProvider) {\n var _this = _super.call(this) || this;\n _this.nameToTopRule = nameToTopRule;\n _this.errMsgProvider = errMsgProvider;\n _this.errors = [];\n return _this;\n }\n GastRefResolverVisitor.prototype.resolveRefs = function () {\n var _this = this;\n forEach(values(this.nameToTopRule), function (prod) {\n _this.currTopLevel = prod;\n prod.accept(_this);\n });\n };\n GastRefResolverVisitor.prototype.visitNonTerminal = function (node) {\n var ref = this.nameToTopRule[node.nonTerminalName];\n if (!ref) {\n var msg = this.errMsgProvider.buildRuleNotFoundError(this.currTopLevel, node);\n this.errors.push({\n message: msg,\n type: ParserDefinitionErrorType.UNRESOLVED_SUBRULE_REF,\n ruleName: this.currTopLevel.name,\n unresolvedRefName: node.nonTerminalName\n });\n }\n else {\n node.referencedRule = ref;\n }\n };\n return GastRefResolverVisitor;\n}(GAstVisitor));\nexport { GastRefResolverVisitor };\n//# sourceMappingURL=resolver.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { RestWalker } from \"./rest\";\nimport { cloneArr, drop, dropRight, first as _first, forEach, isEmpty, last } from \"../../utils/utils\";\nimport { first } from \"./first\";\nimport { Alternation, Alternative, NonTerminal, Option, Repetition, RepetitionMandatory, RepetitionMandatoryWithSeparator, RepetitionWithSeparator, Rule, Terminal } from \"./gast/gast_public\";\nvar AbstractNextPossibleTokensWalker = /** @class */ (function (_super) {\n __extends(AbstractNextPossibleTokensWalker, _super);\n function AbstractNextPossibleTokensWalker(topProd, path) {\n var _this = _super.call(this) || this;\n _this.topProd = topProd;\n _this.path = path;\n _this.possibleTokTypes = [];\n _this.nextProductionName = \"\";\n _this.nextProductionOccurrence = 0;\n _this.found = false;\n _this.isAtEndOfPath = false;\n return _this;\n }\n AbstractNextPossibleTokensWalker.prototype.startWalking = function () {\n this.found = false;\n if (this.path.ruleStack[0] !== this.topProd.name) {\n throw Error(\"The path does not start with the walker's top Rule!\");\n }\n // immutable for the win\n this.ruleStack = cloneArr(this.path.ruleStack).reverse(); // intelij bug requires assertion\n this.occurrenceStack = cloneArr(this.path.occurrenceStack).reverse(); // intelij bug requires assertion\n // already verified that the first production is valid, we now seek the 2nd production\n this.ruleStack.pop();\n this.occurrenceStack.pop();\n this.updateExpectedNext();\n this.walk(this.topProd);\n return this.possibleTokTypes;\n };\n AbstractNextPossibleTokensWalker.prototype.walk = function (prod, prevRest) {\n if (prevRest === void 0) { prevRest = []; }\n // stop scanning once we found the path\n if (!this.found) {\n _super.prototype.walk.call(this, prod, prevRest);\n }\n };\n AbstractNextPossibleTokensWalker.prototype.walkProdRef = function (refProd, currRest, prevRest) {\n // found the next production, need to keep walking in it\n if (refProd.referencedRule.name === this.nextProductionName &&\n refProd.idx === this.nextProductionOccurrence) {\n var fullRest = currRest.concat(prevRest);\n this.updateExpectedNext();\n this.walk(refProd.referencedRule, fullRest);\n }\n };\n AbstractNextPossibleTokensWalker.prototype.updateExpectedNext = function () {\n // need to consume the Terminal\n if (isEmpty(this.ruleStack)) {\n // must reset nextProductionXXX to avoid walking down another Top Level production while what we are\n // really seeking is the last Terminal...\n this.nextProductionName = \"\";\n this.nextProductionOccurrence = 0;\n this.isAtEndOfPath = true;\n }\n else {\n this.nextProductionName = this.ruleStack.pop();\n this.nextProductionOccurrence = this.occurrenceStack.pop();\n }\n };\n return AbstractNextPossibleTokensWalker;\n}(RestWalker));\nexport { AbstractNextPossibleTokensWalker };\nvar NextAfterTokenWalker = /** @class */ (function (_super) {\n __extends(NextAfterTokenWalker, _super);\n function NextAfterTokenWalker(topProd, path) {\n var _this = _super.call(this, topProd, path) || this;\n _this.path = path;\n _this.nextTerminalName = \"\";\n _this.nextTerminalOccurrence = 0;\n _this.nextTerminalName = _this.path.lastTok.name;\n _this.nextTerminalOccurrence = _this.path.lastTokOccurrence;\n return _this;\n }\n NextAfterTokenWalker.prototype.walkTerminal = function (terminal, currRest, prevRest) {\n if (this.isAtEndOfPath &&\n terminal.terminalType.name === this.nextTerminalName &&\n terminal.idx === this.nextTerminalOccurrence &&\n !this.found) {\n var fullRest = currRest.concat(prevRest);\n var restProd = new Alternative({ definition: fullRest });\n this.possibleTokTypes = first(restProd);\n this.found = true;\n }\n };\n return NextAfterTokenWalker;\n}(AbstractNextPossibleTokensWalker));\nexport { NextAfterTokenWalker };\n/**\n * This walker only \"walks\" a single \"TOP\" level in the Grammar Ast, this means\n * it never \"follows\" production refs\n */\nvar AbstractNextTerminalAfterProductionWalker = /** @class */ (function (_super) {\n __extends(AbstractNextTerminalAfterProductionWalker, _super);\n function AbstractNextTerminalAfterProductionWalker(topRule, occurrence) {\n var _this = _super.call(this) || this;\n _this.topRule = topRule;\n _this.occurrence = occurrence;\n _this.result = {\n token: undefined,\n occurrence: undefined,\n isEndOfRule: undefined\n };\n return _this;\n }\n AbstractNextTerminalAfterProductionWalker.prototype.startWalking = function () {\n this.walk(this.topRule);\n return this.result;\n };\n return AbstractNextTerminalAfterProductionWalker;\n}(RestWalker));\nexport { AbstractNextTerminalAfterProductionWalker };\nvar NextTerminalAfterManyWalker = /** @class */ (function (_super) {\n __extends(NextTerminalAfterManyWalker, _super);\n function NextTerminalAfterManyWalker() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n NextTerminalAfterManyWalker.prototype.walkMany = function (manyProd, currRest, prevRest) {\n if (manyProd.idx === this.occurrence) {\n var firstAfterMany = _first(currRest.concat(prevRest));\n this.result.isEndOfRule = firstAfterMany === undefined;\n if (firstAfterMany instanceof Terminal) {\n this.result.token = firstAfterMany.terminalType;\n this.result.occurrence = firstAfterMany.idx;\n }\n }\n else {\n _super.prototype.walkMany.call(this, manyProd, currRest, prevRest);\n }\n };\n return NextTerminalAfterManyWalker;\n}(AbstractNextTerminalAfterProductionWalker));\nexport { NextTerminalAfterManyWalker };\nvar NextTerminalAfterManySepWalker = /** @class */ (function (_super) {\n __extends(NextTerminalAfterManySepWalker, _super);\n function NextTerminalAfterManySepWalker() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n NextTerminalAfterManySepWalker.prototype.walkManySep = function (manySepProd, currRest, prevRest) {\n if (manySepProd.idx === this.occurrence) {\n var firstAfterManySep = _first(currRest.concat(prevRest));\n this.result.isEndOfRule = firstAfterManySep === undefined;\n if (firstAfterManySep instanceof Terminal) {\n this.result.token = firstAfterManySep.terminalType;\n this.result.occurrence = firstAfterManySep.idx;\n }\n }\n else {\n _super.prototype.walkManySep.call(this, manySepProd, currRest, prevRest);\n }\n };\n return NextTerminalAfterManySepWalker;\n}(AbstractNextTerminalAfterProductionWalker));\nexport { NextTerminalAfterManySepWalker };\nvar NextTerminalAfterAtLeastOneWalker = /** @class */ (function (_super) {\n __extends(NextTerminalAfterAtLeastOneWalker, _super);\n function NextTerminalAfterAtLeastOneWalker() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n NextTerminalAfterAtLeastOneWalker.prototype.walkAtLeastOne = function (atLeastOneProd, currRest, prevRest) {\n if (atLeastOneProd.idx === this.occurrence) {\n var firstAfterAtLeastOne = _first(currRest.concat(prevRest));\n this.result.isEndOfRule = firstAfterAtLeastOne === undefined;\n if (firstAfterAtLeastOne instanceof Terminal) {\n this.result.token = firstAfterAtLeastOne.terminalType;\n this.result.occurrence = firstAfterAtLeastOne.idx;\n }\n }\n else {\n _super.prototype.walkAtLeastOne.call(this, atLeastOneProd, currRest, prevRest);\n }\n };\n return NextTerminalAfterAtLeastOneWalker;\n}(AbstractNextTerminalAfterProductionWalker));\nexport { NextTerminalAfterAtLeastOneWalker };\n// TODO: reduce code duplication in the AfterWalkers\nvar NextTerminalAfterAtLeastOneSepWalker = /** @class */ (function (_super) {\n __extends(NextTerminalAfterAtLeastOneSepWalker, _super);\n function NextTerminalAfterAtLeastOneSepWalker() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n NextTerminalAfterAtLeastOneSepWalker.prototype.walkAtLeastOneSep = function (atleastOneSepProd, currRest, prevRest) {\n if (atleastOneSepProd.idx === this.occurrence) {\n var firstAfterfirstAfterAtLeastOneSep = _first(currRest.concat(prevRest));\n this.result.isEndOfRule = firstAfterfirstAfterAtLeastOneSep === undefined;\n if (firstAfterfirstAfterAtLeastOneSep instanceof Terminal) {\n this.result.token = firstAfterfirstAfterAtLeastOneSep.terminalType;\n this.result.occurrence = firstAfterfirstAfterAtLeastOneSep.idx;\n }\n }\n else {\n _super.prototype.walkAtLeastOneSep.call(this, atleastOneSepProd, currRest, prevRest);\n }\n };\n return NextTerminalAfterAtLeastOneSepWalker;\n}(AbstractNextTerminalAfterProductionWalker));\nexport { NextTerminalAfterAtLeastOneSepWalker };\nexport function possiblePathsFrom(targetDef, maxLength, currPath) {\n if (currPath === void 0) { currPath = []; }\n // avoid side effects\n currPath = cloneArr(currPath);\n var result = [];\n var i = 0;\n // TODO: avoid inner funcs\n function remainingPathWith(nextDef) {\n return nextDef.concat(drop(targetDef, i + 1));\n }\n // TODO: avoid inner funcs\n function getAlternativesForProd(definition) {\n var alternatives = possiblePathsFrom(remainingPathWith(definition), maxLength, currPath);\n return result.concat(alternatives);\n }\n /**\n * Mandatory productions will halt the loop as the paths computed from their recursive calls will already contain the\n * following (rest) of the targetDef.\n *\n * For optional productions (Option/Repetition/...) the loop will continue to represent the paths that do not include the\n * the optional production.\n */\n while (currPath.length < maxLength && i < targetDef.length) {\n var prod = targetDef[i];\n /* istanbul ignore else */\n if (prod instanceof Alternative) {\n return getAlternativesForProd(prod.definition);\n }\n else if (prod instanceof NonTerminal) {\n return getAlternativesForProd(prod.definition);\n }\n else if (prod instanceof Option) {\n result = getAlternativesForProd(prod.definition);\n }\n else if (prod instanceof RepetitionMandatory) {\n var newDef = prod.definition.concat([\n new Repetition({\n definition: prod.definition\n })\n ]);\n return getAlternativesForProd(newDef);\n }\n else if (prod instanceof RepetitionMandatoryWithSeparator) {\n var newDef = [\n new Alternative({ definition: prod.definition }),\n new Repetition({\n definition: [new Terminal({ terminalType: prod.separator })].concat(prod.definition)\n })\n ];\n return getAlternativesForProd(newDef);\n }\n else if (prod instanceof RepetitionWithSeparator) {\n var newDef = prod.definition.concat([\n new Repetition({\n definition: [new Terminal({ terminalType: prod.separator })].concat(prod.definition)\n })\n ]);\n result = getAlternativesForProd(newDef);\n }\n else if (prod instanceof Repetition) {\n var newDef = prod.definition.concat([\n new Repetition({\n definition: prod.definition\n })\n ]);\n result = getAlternativesForProd(newDef);\n }\n else if (prod instanceof Alternation) {\n forEach(prod.definition, function (currAlt) {\n // TODO: this is a limited check for empty alternatives\n // It would prevent a common case of infinite loops during parser initialization.\n // However **in-directly** empty alternatives may still cause issues.\n if (isEmpty(currAlt.definition) === false) {\n result = getAlternativesForProd(currAlt.definition);\n }\n });\n return result;\n }\n else if (prod instanceof Terminal) {\n currPath.push(prod.terminalType);\n }\n else {\n throw Error(\"non exhaustive match\");\n }\n i++;\n }\n result.push({\n partialPath: currPath,\n suffixDef: drop(targetDef, i)\n });\n return result;\n}\nexport function nextPossibleTokensAfter(initialDef, tokenVector, tokMatcher, maxLookAhead) {\n var EXIT_NON_TERMINAL = \"EXIT_NONE_TERMINAL\";\n // to avoid creating a new Array each time.\n var EXIT_NON_TERMINAL_ARR = [EXIT_NON_TERMINAL];\n var EXIT_ALTERNATIVE = \"EXIT_ALTERNATIVE\";\n var foundCompletePath = false;\n var tokenVectorLength = tokenVector.length;\n var minimalAlternativesIndex = tokenVectorLength - maxLookAhead - 1;\n var result = [];\n var possiblePaths = [];\n possiblePaths.push({\n idx: -1,\n def: initialDef,\n ruleStack: [],\n occurrenceStack: []\n });\n while (!isEmpty(possiblePaths)) {\n var currPath = possiblePaths.pop();\n // skip alternatives if no more results can be found (assuming deterministic grammar with fixed lookahead)\n if (currPath === EXIT_ALTERNATIVE) {\n if (foundCompletePath &&\n last(possiblePaths).idx <= minimalAlternativesIndex) {\n // remove irrelevant alternative\n possiblePaths.pop();\n }\n continue;\n }\n var currDef = currPath.def;\n var currIdx = currPath.idx;\n var currRuleStack = currPath.ruleStack;\n var currOccurrenceStack = currPath.occurrenceStack;\n // For Example: an empty path could exist in a valid grammar in the case of an EMPTY_ALT\n if (isEmpty(currDef)) {\n continue;\n }\n var prod = currDef[0];\n /* istanbul ignore else */\n if (prod === EXIT_NON_TERMINAL) {\n var nextPath = {\n idx: currIdx,\n def: drop(currDef),\n ruleStack: dropRight(currRuleStack),\n occurrenceStack: dropRight(currOccurrenceStack)\n };\n possiblePaths.push(nextPath);\n }\n else if (prod instanceof Terminal) {\n /* istanbul ignore else */\n if (currIdx < tokenVectorLength - 1) {\n var nextIdx = currIdx + 1;\n var actualToken = tokenVector[nextIdx];\n if (tokMatcher(actualToken, prod.terminalType)) {\n var nextPath = {\n idx: nextIdx,\n def: drop(currDef),\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack\n };\n possiblePaths.push(nextPath);\n }\n // end of the line\n }\n else if (currIdx === tokenVectorLength - 1) {\n // IGNORE ABOVE ELSE\n result.push({\n nextTokenType: prod.terminalType,\n nextTokenOccurrence: prod.idx,\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack\n });\n foundCompletePath = true;\n }\n else {\n throw Error(\"non exhaustive match\");\n }\n }\n else if (prod instanceof NonTerminal) {\n var newRuleStack = cloneArr(currRuleStack);\n newRuleStack.push(prod.nonTerminalName);\n var newOccurrenceStack = cloneArr(currOccurrenceStack);\n newOccurrenceStack.push(prod.idx);\n var nextPath = {\n idx: currIdx,\n def: prod.definition.concat(EXIT_NON_TERMINAL_ARR, drop(currDef)),\n ruleStack: newRuleStack,\n occurrenceStack: newOccurrenceStack\n };\n possiblePaths.push(nextPath);\n }\n else if (prod instanceof Option) {\n // the order of alternatives is meaningful, FILO (Last path will be traversed first).\n var nextPathWithout = {\n idx: currIdx,\n def: drop(currDef),\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack\n };\n possiblePaths.push(nextPathWithout);\n // required marker to avoid backtracking paths whose higher priority alternatives already matched\n possiblePaths.push(EXIT_ALTERNATIVE);\n var nextPathWith = {\n idx: currIdx,\n def: prod.definition.concat(drop(currDef)),\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack\n };\n possiblePaths.push(nextPathWith);\n }\n else if (prod instanceof RepetitionMandatory) {\n // TODO:(THE NEW operators here take a while...) (convert once?)\n var secondIteration = new Repetition({\n definition: prod.definition,\n idx: prod.idx\n });\n var nextDef = prod.definition.concat([secondIteration], drop(currDef));\n var nextPath = {\n idx: currIdx,\n def: nextDef,\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack\n };\n possiblePaths.push(nextPath);\n }\n else if (prod instanceof RepetitionMandatoryWithSeparator) {\n // TODO:(THE NEW operators here take a while...) (convert once?)\n var separatorGast = new Terminal({\n terminalType: prod.separator\n });\n var secondIteration = new Repetition({\n definition: [separatorGast].concat(prod.definition),\n idx: prod.idx\n });\n var nextDef = prod.definition.concat([secondIteration], drop(currDef));\n var nextPath = {\n idx: currIdx,\n def: nextDef,\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack\n };\n possiblePaths.push(nextPath);\n }\n else if (prod instanceof RepetitionWithSeparator) {\n // the order of alternatives is meaningful, FILO (Last path will be traversed first).\n var nextPathWithout = {\n idx: currIdx,\n def: drop(currDef),\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack\n };\n possiblePaths.push(nextPathWithout);\n // required marker to avoid backtracking paths whose higher priority alternatives already matched\n possiblePaths.push(EXIT_ALTERNATIVE);\n var separatorGast = new Terminal({\n terminalType: prod.separator\n });\n var nthRepetition = new Repetition({\n definition: [separatorGast].concat(prod.definition),\n idx: prod.idx\n });\n var nextDef = prod.definition.concat([nthRepetition], drop(currDef));\n var nextPathWith = {\n idx: currIdx,\n def: nextDef,\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack\n };\n possiblePaths.push(nextPathWith);\n }\n else if (prod instanceof Repetition) {\n // the order of alternatives is meaningful, FILO (Last path will be traversed first).\n var nextPathWithout = {\n idx: currIdx,\n def: drop(currDef),\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack\n };\n possiblePaths.push(nextPathWithout);\n // required marker to avoid backtracking paths whose higher priority alternatives already matched\n possiblePaths.push(EXIT_ALTERNATIVE);\n // TODO: an empty repetition will cause infinite loops here, will the parser detect this in selfAnalysis?\n var nthRepetition = new Repetition({\n definition: prod.definition,\n idx: prod.idx\n });\n var nextDef = prod.definition.concat([nthRepetition], drop(currDef));\n var nextPathWith = {\n idx: currIdx,\n def: nextDef,\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack\n };\n possiblePaths.push(nextPathWith);\n }\n else if (prod instanceof Alternation) {\n // the order of alternatives is meaningful, FILO (Last path will be traversed first).\n for (var i = prod.definition.length - 1; i >= 0; i--) {\n var currAlt = prod.definition[i];\n var currAltPath = {\n idx: currIdx,\n def: currAlt.definition.concat(drop(currDef)),\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack\n };\n possiblePaths.push(currAltPath);\n possiblePaths.push(EXIT_ALTERNATIVE);\n }\n }\n else if (prod instanceof Alternative) {\n possiblePaths.push({\n idx: currIdx,\n def: prod.definition.concat(drop(currDef)),\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack\n });\n }\n else if (prod instanceof Rule) {\n // last because we should only encounter at most a single one of these per invocation.\n possiblePaths.push(expandTopLevelRule(prod, currIdx, currRuleStack, currOccurrenceStack));\n }\n else {\n throw Error(\"non exhaustive match\");\n }\n }\n return result;\n}\nfunction expandTopLevelRule(topRule, currIdx, currRuleStack, currOccurrenceStack) {\n var newRuleStack = cloneArr(currRuleStack);\n newRuleStack.push(topRule.name);\n var newCurrOccurrenceStack = cloneArr(currOccurrenceStack);\n // top rule is always assumed to have been called with occurrence index 1\n newCurrOccurrenceStack.push(1);\n return {\n idx: currIdx,\n def: topRule.definition,\n ruleStack: newRuleStack,\n occurrenceStack: newCurrOccurrenceStack\n };\n}\n//# sourceMappingURL=interpreter.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { map, reduce, every, isEmpty, flatten, forEach, has } from \"../../utils/utils\";\nimport { possiblePathsFrom } from \"./interpreter\";\nimport { RestWalker } from \"./rest\";\nimport { tokenStructuredMatcher, tokenStructuredMatcherNoCategories } from \"../../scan/tokens\";\nimport { Alternation, Alternative as AlternativeGAST, Option, Repetition, RepetitionMandatory, RepetitionMandatoryWithSeparator, RepetitionWithSeparator } from \"./gast/gast_public\";\nimport { GAstVisitor } from \"./gast/gast_visitor_public\";\nexport var PROD_TYPE;\n(function (PROD_TYPE) {\n PROD_TYPE[PROD_TYPE[\"OPTION\"] = 0] = \"OPTION\";\n PROD_TYPE[PROD_TYPE[\"REPETITION\"] = 1] = \"REPETITION\";\n PROD_TYPE[PROD_TYPE[\"REPETITION_MANDATORY\"] = 2] = \"REPETITION_MANDATORY\";\n PROD_TYPE[PROD_TYPE[\"REPETITION_MANDATORY_WITH_SEPARATOR\"] = 3] = \"REPETITION_MANDATORY_WITH_SEPARATOR\";\n PROD_TYPE[PROD_TYPE[\"REPETITION_WITH_SEPARATOR\"] = 4] = \"REPETITION_WITH_SEPARATOR\";\n PROD_TYPE[PROD_TYPE[\"ALTERNATION\"] = 5] = \"ALTERNATION\";\n})(PROD_TYPE || (PROD_TYPE = {}));\nexport function getProdType(prod) {\n /* istanbul ignore else */\n if (prod instanceof Option) {\n return PROD_TYPE.OPTION;\n }\n else if (prod instanceof Repetition) {\n return PROD_TYPE.REPETITION;\n }\n else if (prod instanceof RepetitionMandatory) {\n return PROD_TYPE.REPETITION_MANDATORY;\n }\n else if (prod instanceof RepetitionMandatoryWithSeparator) {\n return PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR;\n }\n else if (prod instanceof RepetitionWithSeparator) {\n return PROD_TYPE.REPETITION_WITH_SEPARATOR;\n }\n else if (prod instanceof Alternation) {\n return PROD_TYPE.ALTERNATION;\n }\n else {\n throw Error(\"non exhaustive match\");\n }\n}\nexport function buildLookaheadFuncForOr(occurrence, ruleGrammar, maxLookahead, hasPredicates, dynamicTokensEnabled, laFuncBuilder) {\n var lookAheadPaths = getLookaheadPathsForOr(occurrence, ruleGrammar, maxLookahead);\n var tokenMatcher = areTokenCategoriesNotUsed(lookAheadPaths)\n ? tokenStructuredMatcherNoCategories\n : tokenStructuredMatcher;\n return laFuncBuilder(lookAheadPaths, hasPredicates, tokenMatcher, dynamicTokensEnabled);\n}\n/**\n * When dealing with an Optional production (OPTION/MANY/2nd iteration of AT_LEAST_ONE/...) we need to compare\n * the lookahead \"inside\" the production and the lookahead immediately \"after\" it in the same top level rule (context free).\n *\n * Example: given a production:\n * ABC(DE)?DF\n *\n * The optional '(DE)?' should only be entered if we see 'DE'. a single Token 'D' is not sufficient to distinguish between the two\n * alternatives.\n *\n * @returns A Lookahead function which will return true IFF the parser should parse the Optional production.\n */\nexport function buildLookaheadFuncForOptionalProd(occurrence, ruleGrammar, k, dynamicTokensEnabled, prodType, lookaheadBuilder) {\n var lookAheadPaths = getLookaheadPathsForOptionalProd(occurrence, ruleGrammar, prodType, k);\n var tokenMatcher = areTokenCategoriesNotUsed(lookAheadPaths)\n ? tokenStructuredMatcherNoCategories\n : tokenStructuredMatcher;\n return lookaheadBuilder(lookAheadPaths[0], tokenMatcher, dynamicTokensEnabled);\n}\nexport function buildAlternativesLookAheadFunc(alts, hasPredicates, tokenMatcher, dynamicTokensEnabled) {\n var numOfAlts = alts.length;\n var areAllOneTokenLookahead = every(alts, function (currAlt) {\n return every(currAlt, function (currPath) {\n return currPath.length === 1;\n });\n });\n // This version takes into account the predicates as well.\n if (hasPredicates) {\n /**\n * @returns {number} - The chosen alternative index\n */\n return function (orAlts) {\n // unfortunately the predicates must be extracted every single time\n // as they cannot be cached due to references to parameters(vars) which are no longer valid.\n // note that in the common case of no predicates, no cpu time will be wasted on this (see else block)\n var predicates = map(orAlts, function (currAlt) { return currAlt.GATE; });\n for (var t = 0; t < numOfAlts; t++) {\n var currAlt = alts[t];\n var currNumOfPaths = currAlt.length;\n var currPredicate = predicates[t];\n if (currPredicate !== undefined && currPredicate.call(this) === false) {\n // if the predicate does not match there is no point in checking the paths\n continue;\n }\n nextPath: for (var j = 0; j < currNumOfPaths; j++) {\n var currPath = currAlt[j];\n var currPathLength = currPath.length;\n for (var i = 0; i < currPathLength; i++) {\n var nextToken = this.LA(i + 1);\n if (tokenMatcher(nextToken, currPath[i]) === false) {\n // mismatch in current path\n // try the next pth\n continue nextPath;\n }\n }\n // found a full path that matches.\n // this will also work for an empty ALT as the loop will be skipped\n return t;\n }\n // none of the paths for the current alternative matched\n // try the next alternative\n }\n // none of the alternatives could be matched\n return undefined;\n };\n }\n else if (areAllOneTokenLookahead && !dynamicTokensEnabled) {\n // optimized (common) case of all the lookaheads paths requiring only\n // a single token lookahead. These Optimizations cannot work if dynamically defined Tokens are used.\n var singleTokenAlts = map(alts, function (currAlt) {\n return flatten(currAlt);\n });\n var choiceToAlt_1 = reduce(singleTokenAlts, function (result, currAlt, idx) {\n forEach(currAlt, function (currTokType) {\n if (!has(result, currTokType.tokenTypeIdx)) {\n result[currTokType.tokenTypeIdx] = idx;\n }\n forEach(currTokType.categoryMatches, function (currExtendingType) {\n if (!has(result, currExtendingType)) {\n result[currExtendingType] = idx;\n }\n });\n });\n return result;\n }, []);\n /**\n * @returns {number} - The chosen alternative index\n */\n return function () {\n var nextToken = this.LA(1);\n return choiceToAlt_1[nextToken.tokenTypeIdx];\n };\n }\n else {\n // optimized lookahead without needing to check the predicates at all.\n // this causes code duplication which is intentional to improve performance.\n /**\n * @returns {number} - The chosen alternative index\n */\n return function () {\n for (var t = 0; t < numOfAlts; t++) {\n var currAlt = alts[t];\n var currNumOfPaths = currAlt.length;\n nextPath: for (var j = 0; j < currNumOfPaths; j++) {\n var currPath = currAlt[j];\n var currPathLength = currPath.length;\n for (var i = 0; i < currPathLength; i++) {\n var nextToken = this.LA(i + 1);\n if (tokenMatcher(nextToken, currPath[i]) === false) {\n // mismatch in current path\n // try the next pth\n continue nextPath;\n }\n }\n // found a full path that matches.\n // this will also work for an empty ALT as the loop will be skipped\n return t;\n }\n // none of the paths for the current alternative matched\n // try the next alternative\n }\n // none of the alternatives could be matched\n return undefined;\n };\n }\n}\nexport function buildSingleAlternativeLookaheadFunction(alt, tokenMatcher, dynamicTokensEnabled) {\n var areAllOneTokenLookahead = every(alt, function (currPath) {\n return currPath.length === 1;\n });\n var numOfPaths = alt.length;\n // optimized (common) case of all the lookaheads paths requiring only\n // a single token lookahead.\n if (areAllOneTokenLookahead && !dynamicTokensEnabled) {\n var singleTokensTypes = flatten(alt);\n if (singleTokensTypes.length === 1 &&\n isEmpty(singleTokensTypes[0].categoryMatches)) {\n var expectedTokenType = singleTokensTypes[0];\n var expectedTokenUniqueKey_1 = expectedTokenType.tokenTypeIdx;\n return function () {\n return this.LA(1).tokenTypeIdx === expectedTokenUniqueKey_1;\n };\n }\n else {\n var choiceToAlt_2 = reduce(singleTokensTypes, function (result, currTokType, idx) {\n result[currTokType.tokenTypeIdx] = true;\n forEach(currTokType.categoryMatches, function (currExtendingType) {\n result[currExtendingType] = true;\n });\n return result;\n }, []);\n return function () {\n var nextToken = this.LA(1);\n return choiceToAlt_2[nextToken.tokenTypeIdx] === true;\n };\n }\n }\n else {\n return function () {\n nextPath: for (var j = 0; j < numOfPaths; j++) {\n var currPath = alt[j];\n var currPathLength = currPath.length;\n for (var i = 0; i < currPathLength; i++) {\n var nextToken = this.LA(i + 1);\n if (tokenMatcher(nextToken, currPath[i]) === false) {\n // mismatch in current path\n // try the next pth\n continue nextPath;\n }\n }\n // found a full path that matches.\n return true;\n }\n // none of the paths matched\n return false;\n };\n }\n}\nvar RestDefinitionFinderWalker = /** @class */ (function (_super) {\n __extends(RestDefinitionFinderWalker, _super);\n function RestDefinitionFinderWalker(topProd, targetOccurrence, targetProdType) {\n var _this = _super.call(this) || this;\n _this.topProd = topProd;\n _this.targetOccurrence = targetOccurrence;\n _this.targetProdType = targetProdType;\n return _this;\n }\n RestDefinitionFinderWalker.prototype.startWalking = function () {\n this.walk(this.topProd);\n return this.restDef;\n };\n RestDefinitionFinderWalker.prototype.checkIsTarget = function (node, expectedProdType, currRest, prevRest) {\n if (node.idx === this.targetOccurrence &&\n this.targetProdType === expectedProdType) {\n this.restDef = currRest.concat(prevRest);\n return true;\n }\n // performance optimization, do not iterate over the entire Grammar ast after we have found the target\n return false;\n };\n RestDefinitionFinderWalker.prototype.walkOption = function (optionProd, currRest, prevRest) {\n if (!this.checkIsTarget(optionProd, PROD_TYPE.OPTION, currRest, prevRest)) {\n _super.prototype.walkOption.call(this, optionProd, currRest, prevRest);\n }\n };\n RestDefinitionFinderWalker.prototype.walkAtLeastOne = function (atLeastOneProd, currRest, prevRest) {\n if (!this.checkIsTarget(atLeastOneProd, PROD_TYPE.REPETITION_MANDATORY, currRest, prevRest)) {\n _super.prototype.walkOption.call(this, atLeastOneProd, currRest, prevRest);\n }\n };\n RestDefinitionFinderWalker.prototype.walkAtLeastOneSep = function (atLeastOneSepProd, currRest, prevRest) {\n if (!this.checkIsTarget(atLeastOneSepProd, PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR, currRest, prevRest)) {\n _super.prototype.walkOption.call(this, atLeastOneSepProd, currRest, prevRest);\n }\n };\n RestDefinitionFinderWalker.prototype.walkMany = function (manyProd, currRest, prevRest) {\n if (!this.checkIsTarget(manyProd, PROD_TYPE.REPETITION, currRest, prevRest)) {\n _super.prototype.walkOption.call(this, manyProd, currRest, prevRest);\n }\n };\n RestDefinitionFinderWalker.prototype.walkManySep = function (manySepProd, currRest, prevRest) {\n if (!this.checkIsTarget(manySepProd, PROD_TYPE.REPETITION_WITH_SEPARATOR, currRest, prevRest)) {\n _super.prototype.walkOption.call(this, manySepProd, currRest, prevRest);\n }\n };\n return RestDefinitionFinderWalker;\n}(RestWalker));\n/**\n * Returns the definition of a target production in a top level level rule.\n */\nvar InsideDefinitionFinderVisitor = /** @class */ (function (_super) {\n __extends(InsideDefinitionFinderVisitor, _super);\n function InsideDefinitionFinderVisitor(targetOccurrence, targetProdType, targetRef) {\n var _this = _super.call(this) || this;\n _this.targetOccurrence = targetOccurrence;\n _this.targetProdType = targetProdType;\n _this.targetRef = targetRef;\n _this.result = [];\n return _this;\n }\n InsideDefinitionFinderVisitor.prototype.checkIsTarget = function (node, expectedProdName) {\n if (node.idx === this.targetOccurrence &&\n this.targetProdType === expectedProdName &&\n (this.targetRef === undefined || node === this.targetRef)) {\n this.result = node.definition;\n }\n };\n InsideDefinitionFinderVisitor.prototype.visitOption = function (node) {\n this.checkIsTarget(node, PROD_TYPE.OPTION);\n };\n InsideDefinitionFinderVisitor.prototype.visitRepetition = function (node) {\n this.checkIsTarget(node, PROD_TYPE.REPETITION);\n };\n InsideDefinitionFinderVisitor.prototype.visitRepetitionMandatory = function (node) {\n this.checkIsTarget(node, PROD_TYPE.REPETITION_MANDATORY);\n };\n InsideDefinitionFinderVisitor.prototype.visitRepetitionMandatoryWithSeparator = function (node) {\n this.checkIsTarget(node, PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR);\n };\n InsideDefinitionFinderVisitor.prototype.visitRepetitionWithSeparator = function (node) {\n this.checkIsTarget(node, PROD_TYPE.REPETITION_WITH_SEPARATOR);\n };\n InsideDefinitionFinderVisitor.prototype.visitAlternation = function (node) {\n this.checkIsTarget(node, PROD_TYPE.ALTERNATION);\n };\n return InsideDefinitionFinderVisitor;\n}(GAstVisitor));\nfunction initializeArrayOfArrays(size) {\n var result = new Array(size);\n for (var i = 0; i < size; i++) {\n result[i] = [];\n }\n return result;\n}\n/**\n * A sort of hash function between a Path in the grammar and a string.\n * Note that this returns multiple \"hashes\" to support the scenario of token categories.\n * - A single path with categories may match multiple **actual** paths.\n */\nfunction pathToHashKeys(path) {\n var keys = [\"\"];\n for (var i = 0; i < path.length; i++) {\n var tokType = path[i];\n var longerKeys = [];\n for (var j = 0; j < keys.length; j++) {\n var currShorterKey = keys[j];\n longerKeys.push(currShorterKey + \"_\" + tokType.tokenTypeIdx);\n for (var t = 0; t < tokType.categoryMatches.length; t++) {\n var categoriesKeySuffix = \"_\" + tokType.categoryMatches[t];\n longerKeys.push(currShorterKey + categoriesKeySuffix);\n }\n }\n keys = longerKeys;\n }\n return keys;\n}\n/**\n * Imperative style due to being called from a hot spot\n */\nfunction isUniquePrefixHash(altKnownPathsKeys, searchPathKeys, idx) {\n for (var currAltIdx = 0; currAltIdx < altKnownPathsKeys.length; currAltIdx++) {\n // We only want to test vs the other alternatives\n if (currAltIdx === idx) {\n continue;\n }\n var otherAltKnownPathsKeys = altKnownPathsKeys[currAltIdx];\n for (var searchIdx = 0; searchIdx < searchPathKeys.length; searchIdx++) {\n var searchKey = searchPathKeys[searchIdx];\n if (otherAltKnownPathsKeys[searchKey] === true) {\n return false;\n }\n }\n }\n // None of the SearchPathKeys were found in any of the other alternatives\n return true;\n}\nexport function lookAheadSequenceFromAlternatives(altsDefs, k) {\n var partialAlts = map(altsDefs, function (currAlt) { return possiblePathsFrom([currAlt], 1); });\n var finalResult = initializeArrayOfArrays(partialAlts.length);\n var altsHashes = map(partialAlts, function (currAltPaths) {\n var dict = {};\n forEach(currAltPaths, function (item) {\n var keys = pathToHashKeys(item.partialPath);\n forEach(keys, function (currKey) {\n dict[currKey] = true;\n });\n });\n return dict;\n });\n var newData = partialAlts;\n // maxLookahead loop\n for (var pathLength = 1; pathLength <= k; pathLength++) {\n var currDataset = newData;\n newData = initializeArrayOfArrays(currDataset.length);\n var _loop_1 = function (altIdx) {\n var currAltPathsAndSuffixes = currDataset[altIdx];\n // paths in current alternative loop\n for (var currPathIdx = 0; currPathIdx < currAltPathsAndSuffixes.length; currPathIdx++) {\n var currPathPrefix = currAltPathsAndSuffixes[currPathIdx].partialPath;\n var suffixDef = currAltPathsAndSuffixes[currPathIdx].suffixDef;\n var prefixKeys = pathToHashKeys(currPathPrefix);\n var isUnique = isUniquePrefixHash(altsHashes, prefixKeys, altIdx);\n // End of the line for this path.\n if (isUnique || isEmpty(suffixDef) || currPathPrefix.length === k) {\n var currAltResult = finalResult[altIdx];\n // TODO: Can we implement a containsPath using Maps/Dictionaries?\n if (containsPath(currAltResult, currPathPrefix) === false) {\n currAltResult.push(currPathPrefix);\n // Update all new keys for the current path.\n for (var j = 0; j < prefixKeys.length; j++) {\n var currKey = prefixKeys[j];\n altsHashes[altIdx][currKey] = true;\n }\n }\n }\n // Expand longer paths\n else {\n var newPartialPathsAndSuffixes = possiblePathsFrom(suffixDef, pathLength + 1, currPathPrefix);\n newData[altIdx] = newData[altIdx].concat(newPartialPathsAndSuffixes);\n // Update keys for new known paths\n forEach(newPartialPathsAndSuffixes, function (item) {\n var prefixKeys = pathToHashKeys(item.partialPath);\n forEach(prefixKeys, function (key) {\n altsHashes[altIdx][key] = true;\n });\n });\n }\n }\n };\n // alternatives loop\n for (var altIdx = 0; altIdx < currDataset.length; altIdx++) {\n _loop_1(altIdx);\n }\n }\n return finalResult;\n}\nexport function getLookaheadPathsForOr(occurrence, ruleGrammar, k, orProd) {\n var visitor = new InsideDefinitionFinderVisitor(occurrence, PROD_TYPE.ALTERNATION, orProd);\n ruleGrammar.accept(visitor);\n return lookAheadSequenceFromAlternatives(visitor.result, k);\n}\nexport function getLookaheadPathsForOptionalProd(occurrence, ruleGrammar, prodType, k) {\n var insideDefVisitor = new InsideDefinitionFinderVisitor(occurrence, prodType);\n ruleGrammar.accept(insideDefVisitor);\n var insideDef = insideDefVisitor.result;\n var afterDefWalker = new RestDefinitionFinderWalker(ruleGrammar, occurrence, prodType);\n var afterDef = afterDefWalker.startWalking();\n var insideFlat = new AlternativeGAST({ definition: insideDef });\n var afterFlat = new AlternativeGAST({ definition: afterDef });\n return lookAheadSequenceFromAlternatives([insideFlat, afterFlat], k);\n}\nexport function containsPath(alternative, searchPath) {\n compareOtherPath: for (var i = 0; i < alternative.length; i++) {\n var otherPath = alternative[i];\n if (otherPath.length !== searchPath.length) {\n continue;\n }\n for (var j = 0; j < otherPath.length; j++) {\n var searchTok = searchPath[j];\n var otherTok = otherPath[j];\n var matchingTokens = searchTok === otherTok ||\n otherTok.categoryMatchesMap[searchTok.tokenTypeIdx] !== undefined;\n if (matchingTokens === false) {\n continue compareOtherPath;\n }\n }\n return true;\n }\n return false;\n}\nexport function isStrictPrefixOfPath(prefix, other) {\n return (prefix.length < other.length &&\n every(prefix, function (tokType, idx) {\n var otherTokType = other[idx];\n return (tokType === otherTokType ||\n otherTokType.categoryMatchesMap[tokType.tokenTypeIdx]);\n }));\n}\nexport function areTokenCategoriesNotUsed(lookAheadPaths) {\n return every(lookAheadPaths, function (singleAltPaths) {\n return every(singleAltPaths, function (singlePath) {\n return every(singlePath, function (token) { return isEmpty(token.categoryMatches); });\n });\n });\n}\n//# sourceMappingURL=lookahead.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport * as utils from \"../../utils/utils\";\nimport { contains, every, findAll, flatten, forEach, isEmpty, map, reduce, reject } from \"../../utils/utils\";\nimport { ParserDefinitionErrorType } from \"../parser/parser\";\nimport { getProductionDslName, isOptionalProd } from \"./gast/gast\";\nimport { containsPath, getLookaheadPathsForOptionalProd, getLookaheadPathsForOr, getProdType, isStrictPrefixOfPath } from \"./lookahead\";\nimport { nextPossibleTokensAfter } from \"./interpreter\";\nimport { Alternation, Alternative as AlternativeGAST, NonTerminal, Option, Repetition, RepetitionMandatory, RepetitionMandatoryWithSeparator, RepetitionWithSeparator, Terminal } from \"./gast/gast_public\";\nimport { GAstVisitor } from \"./gast/gast_visitor_public\";\nexport function validateGrammar(topLevels, globalMaxLookahead, tokenTypes, errMsgProvider, grammarName) {\n var duplicateErrors = utils.map(topLevels, function (currTopLevel) {\n return validateDuplicateProductions(currTopLevel, errMsgProvider);\n });\n var leftRecursionErrors = utils.map(topLevels, function (currTopRule) {\n return validateNoLeftRecursion(currTopRule, currTopRule, errMsgProvider);\n });\n var emptyAltErrors = [];\n var ambiguousAltsErrors = [];\n var emptyRepetitionErrors = [];\n // left recursion could cause infinite loops in the following validations.\n // It is safest to first have the user fix the left recursion errors first and only then examine Further issues.\n if (every(leftRecursionErrors, isEmpty)) {\n emptyAltErrors = map(topLevels, function (currTopRule) {\n return validateEmptyOrAlternative(currTopRule, errMsgProvider);\n });\n ambiguousAltsErrors = map(topLevels, function (currTopRule) {\n return validateAmbiguousAlternationAlternatives(currTopRule, globalMaxLookahead, errMsgProvider);\n });\n emptyRepetitionErrors = validateSomeNonEmptyLookaheadPath(topLevels, globalMaxLookahead, errMsgProvider);\n }\n var termsNamespaceConflictErrors = checkTerminalAndNoneTerminalsNameSpace(topLevels, tokenTypes, errMsgProvider);\n var tooManyAltsErrors = map(topLevels, function (curRule) {\n return validateTooManyAlts(curRule, errMsgProvider);\n });\n var duplicateRulesError = map(topLevels, function (curRule) {\n return validateRuleDoesNotAlreadyExist(curRule, topLevels, grammarName, errMsgProvider);\n });\n return (utils.flatten(duplicateErrors.concat(emptyRepetitionErrors, leftRecursionErrors, emptyAltErrors, ambiguousAltsErrors, termsNamespaceConflictErrors, tooManyAltsErrors, duplicateRulesError)));\n}\nfunction validateDuplicateProductions(topLevelRule, errMsgProvider) {\n var collectorVisitor = new OccurrenceValidationCollector();\n topLevelRule.accept(collectorVisitor);\n var allRuleProductions = collectorVisitor.allProductions;\n var productionGroups = utils.groupBy(allRuleProductions, identifyProductionForDuplicates);\n var duplicates = utils.pick(productionGroups, function (currGroup) {\n return currGroup.length > 1;\n });\n var errors = utils.map(utils.values(duplicates), function (currDuplicates) {\n var firstProd = utils.first(currDuplicates);\n var msg = errMsgProvider.buildDuplicateFoundError(topLevelRule, currDuplicates);\n var dslName = getProductionDslName(firstProd);\n var defError = {\n message: msg,\n type: ParserDefinitionErrorType.DUPLICATE_PRODUCTIONS,\n ruleName: topLevelRule.name,\n dslName: dslName,\n occurrence: firstProd.idx\n };\n var param = getExtraProductionArgument(firstProd);\n if (param) {\n defError.parameter = param;\n }\n return defError;\n });\n return errors;\n}\nexport function identifyProductionForDuplicates(prod) {\n return getProductionDslName(prod) + \"_#_\" + prod.idx + \"_#_\" + getExtraProductionArgument(prod);\n}\nfunction getExtraProductionArgument(prod) {\n if (prod instanceof Terminal) {\n return prod.terminalType.name;\n }\n else if (prod instanceof NonTerminal) {\n return prod.nonTerminalName;\n }\n else {\n return \"\";\n }\n}\nvar OccurrenceValidationCollector = /** @class */ (function (_super) {\n __extends(OccurrenceValidationCollector, _super);\n function OccurrenceValidationCollector() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.allProductions = [];\n return _this;\n }\n OccurrenceValidationCollector.prototype.visitNonTerminal = function (subrule) {\n this.allProductions.push(subrule);\n };\n OccurrenceValidationCollector.prototype.visitOption = function (option) {\n this.allProductions.push(option);\n };\n OccurrenceValidationCollector.prototype.visitRepetitionWithSeparator = function (manySep) {\n this.allProductions.push(manySep);\n };\n OccurrenceValidationCollector.prototype.visitRepetitionMandatory = function (atLeastOne) {\n this.allProductions.push(atLeastOne);\n };\n OccurrenceValidationCollector.prototype.visitRepetitionMandatoryWithSeparator = function (atLeastOneSep) {\n this.allProductions.push(atLeastOneSep);\n };\n OccurrenceValidationCollector.prototype.visitRepetition = function (many) {\n this.allProductions.push(many);\n };\n OccurrenceValidationCollector.prototype.visitAlternation = function (or) {\n this.allProductions.push(or);\n };\n OccurrenceValidationCollector.prototype.visitTerminal = function (terminal) {\n this.allProductions.push(terminal);\n };\n return OccurrenceValidationCollector;\n}(GAstVisitor));\nexport { OccurrenceValidationCollector };\nexport function validateRuleDoesNotAlreadyExist(rule, allRules, className, errMsgProvider) {\n var errors = [];\n var occurrences = reduce(allRules, function (result, curRule) {\n if (curRule.name === rule.name) {\n return result + 1;\n }\n return result;\n }, 0);\n if (occurrences > 1) {\n var errMsg = errMsgProvider.buildDuplicateRuleNameError({\n topLevelRule: rule,\n grammarName: className\n });\n errors.push({\n message: errMsg,\n type: ParserDefinitionErrorType.DUPLICATE_RULE_NAME,\n ruleName: rule.name\n });\n }\n return errors;\n}\n// TODO: is there anyway to get only the rule names of rules inherited from the super grammars?\n// This is not part of the IGrammarErrorProvider because the validation cannot be performed on\n// The grammar structure, only at runtime.\nexport function validateRuleIsOverridden(ruleName, definedRulesNames, className) {\n var errors = [];\n var errMsg;\n if (!utils.contains(definedRulesNames, ruleName)) {\n errMsg =\n \"Invalid rule override, rule: ->\" + ruleName + \"<- cannot be overridden in the grammar: ->\" + className + \"<-\" +\n \"as it is not defined in any of the super grammars \";\n errors.push({\n message: errMsg,\n type: ParserDefinitionErrorType.INVALID_RULE_OVERRIDE,\n ruleName: ruleName\n });\n }\n return errors;\n}\nexport function validateNoLeftRecursion(topRule, currRule, errMsgProvider, path) {\n if (path === void 0) { path = []; }\n var errors = [];\n var nextNonTerminals = getFirstNoneTerminal(currRule.definition);\n if (utils.isEmpty(nextNonTerminals)) {\n return [];\n }\n else {\n var ruleName = topRule.name;\n var foundLeftRecursion = utils.contains(nextNonTerminals, topRule);\n if (foundLeftRecursion) {\n errors.push({\n message: errMsgProvider.buildLeftRecursionError({\n topLevelRule: topRule,\n leftRecursionPath: path\n }),\n type: ParserDefinitionErrorType.LEFT_RECURSION,\n ruleName: ruleName\n });\n }\n // we are only looking for cyclic paths leading back to the specific topRule\n // other cyclic paths are ignored, we still need this difference to avoid infinite loops...\n var validNextSteps = utils.difference(nextNonTerminals, path.concat([topRule]));\n var errorsFromNextSteps = utils.map(validNextSteps, function (currRefRule) {\n var newPath = utils.cloneArr(path);\n newPath.push(currRefRule);\n return validateNoLeftRecursion(topRule, currRefRule, errMsgProvider, newPath);\n });\n return errors.concat(utils.flatten(errorsFromNextSteps));\n }\n}\nexport function getFirstNoneTerminal(definition) {\n var result = [];\n if (utils.isEmpty(definition)) {\n return result;\n }\n var firstProd = utils.first(definition);\n /* istanbul ignore else */\n if (firstProd instanceof NonTerminal) {\n result.push(firstProd.referencedRule);\n }\n else if (firstProd instanceof AlternativeGAST ||\n firstProd instanceof Option ||\n firstProd instanceof RepetitionMandatory ||\n firstProd instanceof RepetitionMandatoryWithSeparator ||\n firstProd instanceof RepetitionWithSeparator ||\n firstProd instanceof Repetition) {\n result = result.concat(getFirstNoneTerminal(firstProd.definition));\n }\n else if (firstProd instanceof Alternation) {\n // each sub definition in alternation is a FLAT\n result = utils.flatten(utils.map(firstProd.definition, function (currSubDef) {\n return getFirstNoneTerminal(currSubDef.definition);\n }));\n }\n else if (firstProd instanceof Terminal) {\n // nothing to see, move along\n }\n else {\n throw Error(\"non exhaustive match\");\n }\n var isFirstOptional = isOptionalProd(firstProd);\n var hasMore = definition.length > 1;\n if (isFirstOptional && hasMore) {\n var rest = utils.drop(definition);\n return result.concat(getFirstNoneTerminal(rest));\n }\n else {\n return result;\n }\n}\nvar OrCollector = /** @class */ (function (_super) {\n __extends(OrCollector, _super);\n function OrCollector() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.alternations = [];\n return _this;\n }\n OrCollector.prototype.visitAlternation = function (node) {\n this.alternations.push(node);\n };\n return OrCollector;\n}(GAstVisitor));\nexport function validateEmptyOrAlternative(topLevelRule, errMsgProvider) {\n var orCollector = new OrCollector();\n topLevelRule.accept(orCollector);\n var ors = orCollector.alternations;\n var errors = utils.reduce(ors, function (errors, currOr) {\n var exceptLast = utils.dropRight(currOr.definition);\n var currErrors = utils.map(exceptLast, function (currAlternative, currAltIdx) {\n var possibleFirstInAlt = nextPossibleTokensAfter([currAlternative], [], null, 1);\n if (utils.isEmpty(possibleFirstInAlt)) {\n return {\n message: errMsgProvider.buildEmptyAlternationError({\n topLevelRule: topLevelRule,\n alternation: currOr,\n emptyChoiceIdx: currAltIdx\n }),\n type: ParserDefinitionErrorType.NONE_LAST_EMPTY_ALT,\n ruleName: topLevelRule.name,\n occurrence: currOr.idx,\n alternative: currAltIdx + 1\n };\n }\n else {\n return null;\n }\n });\n return errors.concat(utils.compact(currErrors));\n }, []);\n return errors;\n}\nexport function validateAmbiguousAlternationAlternatives(topLevelRule, globalMaxLookahead, errMsgProvider) {\n var orCollector = new OrCollector();\n topLevelRule.accept(orCollector);\n var ors = orCollector.alternations;\n // New Handling of ignoring ambiguities\n // - https://github.com/chevrotain/chevrotain/issues/869\n ors = reject(ors, function (currOr) { return currOr.ignoreAmbiguities === true; });\n var errors = utils.reduce(ors, function (result, currOr) {\n var currOccurrence = currOr.idx;\n var actualMaxLookahead = currOr.maxLookahead || globalMaxLookahead;\n var alternatives = getLookaheadPathsForOr(currOccurrence, topLevelRule, actualMaxLookahead, currOr);\n var altsAmbiguityErrors = checkAlternativesAmbiguities(alternatives, currOr, topLevelRule, errMsgProvider);\n var altsPrefixAmbiguityErrors = checkPrefixAlternativesAmbiguities(alternatives, currOr, topLevelRule, errMsgProvider);\n return result.concat(altsAmbiguityErrors, altsPrefixAmbiguityErrors);\n }, []);\n return errors;\n}\nvar RepetionCollector = /** @class */ (function (_super) {\n __extends(RepetionCollector, _super);\n function RepetionCollector() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.allProductions = [];\n return _this;\n }\n RepetionCollector.prototype.visitRepetitionWithSeparator = function (manySep) {\n this.allProductions.push(manySep);\n };\n RepetionCollector.prototype.visitRepetitionMandatory = function (atLeastOne) {\n this.allProductions.push(atLeastOne);\n };\n RepetionCollector.prototype.visitRepetitionMandatoryWithSeparator = function (atLeastOneSep) {\n this.allProductions.push(atLeastOneSep);\n };\n RepetionCollector.prototype.visitRepetition = function (many) {\n this.allProductions.push(many);\n };\n return RepetionCollector;\n}(GAstVisitor));\nexport { RepetionCollector };\nexport function validateTooManyAlts(topLevelRule, errMsgProvider) {\n var orCollector = new OrCollector();\n topLevelRule.accept(orCollector);\n var ors = orCollector.alternations;\n var errors = utils.reduce(ors, function (errors, currOr) {\n if (currOr.definition.length > 255) {\n errors.push({\n message: errMsgProvider.buildTooManyAlternativesError({\n topLevelRule: topLevelRule,\n alternation: currOr\n }),\n type: ParserDefinitionErrorType.TOO_MANY_ALTS,\n ruleName: topLevelRule.name,\n occurrence: currOr.idx\n });\n }\n return errors;\n }, []);\n return errors;\n}\nexport function validateSomeNonEmptyLookaheadPath(topLevelRules, maxLookahead, errMsgProvider) {\n var errors = [];\n forEach(topLevelRules, function (currTopRule) {\n var collectorVisitor = new RepetionCollector();\n currTopRule.accept(collectorVisitor);\n var allRuleProductions = collectorVisitor.allProductions;\n forEach(allRuleProductions, function (currProd) {\n var prodType = getProdType(currProd);\n var actualMaxLookahead = currProd.maxLookahead || maxLookahead;\n var currOccurrence = currProd.idx;\n var paths = getLookaheadPathsForOptionalProd(currOccurrence, currTopRule, prodType, actualMaxLookahead);\n var pathsInsideProduction = paths[0];\n if (isEmpty(flatten(pathsInsideProduction))) {\n var errMsg = errMsgProvider.buildEmptyRepetitionError({\n topLevelRule: currTopRule,\n repetition: currProd\n });\n errors.push({\n message: errMsg,\n type: ParserDefinitionErrorType.NO_NON_EMPTY_LOOKAHEAD,\n ruleName: currTopRule.name\n });\n }\n });\n });\n return errors;\n}\nfunction checkAlternativesAmbiguities(alternatives, alternation, rule, errMsgProvider) {\n var foundAmbiguousPaths = [];\n var identicalAmbiguities = reduce(alternatives, function (result, currAlt, currAltIdx) {\n // ignore (skip) ambiguities with this alternative\n if (alternation.definition[currAltIdx].ignoreAmbiguities === true) {\n return result;\n }\n forEach(currAlt, function (currPath) {\n var altsCurrPathAppearsIn = [currAltIdx];\n forEach(alternatives, function (currOtherAlt, currOtherAltIdx) {\n if (currAltIdx !== currOtherAltIdx &&\n containsPath(currOtherAlt, currPath) &&\n // ignore (skip) ambiguities with this \"other\" alternative\n alternation.definition[currOtherAltIdx].ignoreAmbiguities !== true) {\n altsCurrPathAppearsIn.push(currOtherAltIdx);\n }\n });\n if (altsCurrPathAppearsIn.length > 1 &&\n !containsPath(foundAmbiguousPaths, currPath)) {\n foundAmbiguousPaths.push(currPath);\n result.push({\n alts: altsCurrPathAppearsIn,\n path: currPath\n });\n }\n });\n return result;\n }, []);\n var currErrors = utils.map(identicalAmbiguities, function (currAmbDescriptor) {\n var ambgIndices = map(currAmbDescriptor.alts, function (currAltIdx) { return currAltIdx + 1; });\n var currMessage = errMsgProvider.buildAlternationAmbiguityError({\n topLevelRule: rule,\n alternation: alternation,\n ambiguityIndices: ambgIndices,\n prefixPath: currAmbDescriptor.path\n });\n return {\n message: currMessage,\n type: ParserDefinitionErrorType.AMBIGUOUS_ALTS,\n ruleName: rule.name,\n occurrence: alternation.idx,\n alternatives: [currAmbDescriptor.alts]\n };\n });\n return currErrors;\n}\nexport function checkPrefixAlternativesAmbiguities(alternatives, alternation, rule, errMsgProvider) {\n var errors = [];\n // flatten\n var pathsAndIndices = reduce(alternatives, function (result, currAlt, idx) {\n var currPathsAndIdx = map(currAlt, function (currPath) {\n return { idx: idx, path: currPath };\n });\n return result.concat(currPathsAndIdx);\n }, []);\n forEach(pathsAndIndices, function (currPathAndIdx) {\n var alternativeGast = alternation.definition[currPathAndIdx.idx];\n // ignore (skip) ambiguities with this alternative\n if (alternativeGast.ignoreAmbiguities === true) {\n return;\n }\n var targetIdx = currPathAndIdx.idx;\n var targetPath = currPathAndIdx.path;\n var prefixAmbiguitiesPathsAndIndices = findAll(pathsAndIndices, function (searchPathAndIdx) {\n // prefix ambiguity can only be created from lower idx (higher priority) path\n return (\n // ignore (skip) ambiguities with this \"other\" alternative\n alternation.definition[searchPathAndIdx.idx].ignoreAmbiguities !==\n true &&\n searchPathAndIdx.idx < targetIdx &&\n // checking for strict prefix because identical lookaheads\n // will be be detected using a different validation.\n isStrictPrefixOfPath(searchPathAndIdx.path, targetPath));\n });\n var currPathPrefixErrors = map(prefixAmbiguitiesPathsAndIndices, function (currAmbPathAndIdx) {\n var ambgIndices = [currAmbPathAndIdx.idx + 1, targetIdx + 1];\n var occurrence = alternation.idx === 0 ? \"\" : alternation.idx;\n var message = errMsgProvider.buildAlternationPrefixAmbiguityError({\n topLevelRule: rule,\n alternation: alternation,\n ambiguityIndices: ambgIndices,\n prefixPath: currAmbPathAndIdx.path\n });\n return {\n message: message,\n type: ParserDefinitionErrorType.AMBIGUOUS_PREFIX_ALTS,\n ruleName: rule.name,\n occurrence: occurrence,\n alternatives: ambgIndices\n };\n });\n errors = errors.concat(currPathPrefixErrors);\n });\n return errors;\n}\nfunction checkTerminalAndNoneTerminalsNameSpace(topLevels, tokenTypes, errMsgProvider) {\n var errors = [];\n var tokenNames = map(tokenTypes, function (currToken) { return currToken.name; });\n forEach(topLevels, function (currRule) {\n var currRuleName = currRule.name;\n if (contains(tokenNames, currRuleName)) {\n var errMsg = errMsgProvider.buildNamespaceConflictError(currRule);\n errors.push({\n message: errMsg,\n type: ParserDefinitionErrorType.CONFLICT_TOKENS_RULES_NAMESPACE,\n ruleName: currRuleName\n });\n }\n });\n return errors;\n}\n//# sourceMappingURL=checks.js.map","import { defaults, forEach } from \"../../../utils/utils\";\nimport { resolveGrammar as orgResolveGrammar } from \"../resolver\";\nimport { validateGrammar as orgValidateGrammar } from \"../checks\";\nimport { defaultGrammarResolverErrorProvider, defaultGrammarValidatorErrorProvider } from \"../../errors_public\";\nimport { DslMethodsCollectorVisitor } from \"./gast\";\nexport function resolveGrammar(options) {\n options = defaults(options, {\n errMsgProvider: defaultGrammarResolverErrorProvider\n });\n var topRulesTable = {};\n forEach(options.rules, function (rule) {\n topRulesTable[rule.name] = rule;\n });\n return orgResolveGrammar(topRulesTable, options.errMsgProvider);\n}\nexport function validateGrammar(options) {\n options = defaults(options, {\n errMsgProvider: defaultGrammarValidatorErrorProvider\n });\n return orgValidateGrammar(options.rules, options.maxLookahead, options.tokenTypes, options.errMsgProvider, options.grammarName);\n}\nexport function assignOccurrenceIndices(options) {\n forEach(options.rules, function (currRule) {\n var methodsCollector = new DslMethodsCollectorVisitor();\n currRule.accept(methodsCollector);\n forEach(methodsCollector.dslMethods, function (methods) {\n forEach(methods, function (currMethod, arrIdx) {\n currMethod.idx = arrIdx + 1;\n });\n });\n });\n}\n//# sourceMappingURL=gast_resolver_public.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { contains } from \"../utils/utils\";\nvar MISMATCHED_TOKEN_EXCEPTION = \"MismatchedTokenException\";\nvar NO_VIABLE_ALT_EXCEPTION = \"NoViableAltException\";\nvar EARLY_EXIT_EXCEPTION = \"EarlyExitException\";\nvar NOT_ALL_INPUT_PARSED_EXCEPTION = \"NotAllInputParsedException\";\nvar RECOGNITION_EXCEPTION_NAMES = [\n MISMATCHED_TOKEN_EXCEPTION,\n NO_VIABLE_ALT_EXCEPTION,\n EARLY_EXIT_EXCEPTION,\n NOT_ALL_INPUT_PARSED_EXCEPTION\n];\nObject.freeze(RECOGNITION_EXCEPTION_NAMES);\n// hacks to bypass no support for custom Errors in javascript/typescript\nexport function isRecognitionException(error) {\n // can't do instanceof on hacked custom js exceptions\n return contains(RECOGNITION_EXCEPTION_NAMES, error.name);\n}\nvar RecognitionException = /** @class */ (function (_super) {\n __extends(RecognitionException, _super);\n function RecognitionException(message, token) {\n var _newTarget = this.constructor;\n var _this = _super.call(this, message) || this;\n _this.token = token;\n _this.resyncedTokens = [];\n // fix prototype chain when typescript target is ES5\n Object.setPrototypeOf(_this, _newTarget.prototype);\n /* istanbul ignore next - V8 workaround to remove constructor from stacktrace when typescript target is ES5 */\n if (Error.captureStackTrace) {\n Error.captureStackTrace(_this, _this.constructor);\n }\n return _this;\n }\n return RecognitionException;\n}(Error));\nvar MismatchedTokenException = /** @class */ (function (_super) {\n __extends(MismatchedTokenException, _super);\n function MismatchedTokenException(message, token, previousToken) {\n var _this = _super.call(this, message, token) || this;\n _this.previousToken = previousToken;\n _this.name = MISMATCHED_TOKEN_EXCEPTION;\n return _this;\n }\n return MismatchedTokenException;\n}(RecognitionException));\nexport { MismatchedTokenException };\nvar NoViableAltException = /** @class */ (function (_super) {\n __extends(NoViableAltException, _super);\n function NoViableAltException(message, token, previousToken) {\n var _this = _super.call(this, message, token) || this;\n _this.previousToken = previousToken;\n _this.name = NO_VIABLE_ALT_EXCEPTION;\n return _this;\n }\n return NoViableAltException;\n}(RecognitionException));\nexport { NoViableAltException };\nvar NotAllInputParsedException = /** @class */ (function (_super) {\n __extends(NotAllInputParsedException, _super);\n function NotAllInputParsedException(message, token) {\n var _this = _super.call(this, message, token) || this;\n _this.name = NOT_ALL_INPUT_PARSED_EXCEPTION;\n return _this;\n }\n return NotAllInputParsedException;\n}(RecognitionException));\nexport { NotAllInputParsedException };\nvar EarlyExitException = /** @class */ (function (_super) {\n __extends(EarlyExitException, _super);\n function EarlyExitException(message, token, previousToken) {\n var _this = _super.call(this, message, token) || this;\n _this.previousToken = previousToken;\n _this.name = EARLY_EXIT_EXCEPTION;\n return _this;\n }\n return EarlyExitException;\n}(RecognitionException));\nexport { EarlyExitException };\n//# sourceMappingURL=exceptions_public.js.map","import { createTokenInstance, EOF } from \"../../../scan/tokens_public\";\nimport { cloneArr, contains, dropRight, find, flatten, has, isEmpty, map } from \"../../../utils/utils\";\nimport { MismatchedTokenException } from \"../../exceptions_public\";\nimport { IN } from \"../../constants\";\nimport { DEFAULT_PARSER_CONFIG } from \"../parser\";\nexport var EOF_FOLLOW_KEY = {};\nexport var IN_RULE_RECOVERY_EXCEPTION = \"InRuleRecoveryException\";\nexport function InRuleRecoveryException(message) {\n this.name = IN_RULE_RECOVERY_EXCEPTION;\n this.message = message;\n}\nInRuleRecoveryException.prototype = Error.prototype;\n/**\n * This trait is responsible for the error recovery and fault tolerant logic\n */\nvar Recoverable = /** @class */ (function () {\n function Recoverable() {\n }\n Recoverable.prototype.initRecoverable = function (config) {\n this.firstAfterRepMap = {};\n this.resyncFollows = {};\n this.recoveryEnabled = has(config, \"recoveryEnabled\")\n ? config.recoveryEnabled\n : DEFAULT_PARSER_CONFIG.recoveryEnabled;\n // performance optimization, NOOP will be inlined which\n // effectively means that this optional feature does not exist\n // when not used.\n if (this.recoveryEnabled) {\n this.attemptInRepetitionRecovery = attemptInRepetitionRecovery;\n }\n };\n Recoverable.prototype.getTokenToInsert = function (tokType) {\n var tokToInsert = createTokenInstance(tokType, \"\", NaN, NaN, NaN, NaN, NaN, NaN);\n tokToInsert.isInsertedInRecovery = true;\n return tokToInsert;\n };\n Recoverable.prototype.canTokenTypeBeInsertedInRecovery = function (tokType) {\n return true;\n };\n Recoverable.prototype.tryInRepetitionRecovery = function (grammarRule, grammarRuleArgs, lookAheadFunc, expectedTokType) {\n var _this = this;\n // TODO: can the resyncTokenType be cached?\n var reSyncTokType = this.findReSyncTokenType();\n var savedLexerState = this.exportLexerState();\n var resyncedTokens = [];\n var passedResyncPoint = false;\n var nextTokenWithoutResync = this.LA(1);\n var currToken = this.LA(1);\n var generateErrorMessage = function () {\n var previousToken = _this.LA(0);\n // we are preemptively re-syncing before an error has been detected, therefor we must reproduce\n // the error that would have been thrown\n var msg = _this.errorMessageProvider.buildMismatchTokenMessage({\n expected: expectedTokType,\n actual: nextTokenWithoutResync,\n previous: previousToken,\n ruleName: _this.getCurrRuleFullName()\n });\n var error = new MismatchedTokenException(msg, nextTokenWithoutResync, _this.LA(0));\n // the first token here will be the original cause of the error, this is not part of the resyncedTokens property.\n error.resyncedTokens = dropRight(resyncedTokens);\n _this.SAVE_ERROR(error);\n };\n while (!passedResyncPoint) {\n // re-synced to a point where we can safely exit the repetition/\n if (this.tokenMatcher(currToken, expectedTokType)) {\n generateErrorMessage();\n return; // must return here to avoid reverting the inputIdx\n }\n else if (lookAheadFunc.call(this)) {\n // we skipped enough tokens so we can resync right back into another iteration of the repetition grammar rule\n generateErrorMessage();\n // recursive invocation in other to support multiple re-syncs in the same top level repetition grammar rule\n grammarRule.apply(this, grammarRuleArgs);\n return; // must return here to avoid reverting the inputIdx\n }\n else if (this.tokenMatcher(currToken, reSyncTokType)) {\n passedResyncPoint = true;\n }\n else {\n currToken = this.SKIP_TOKEN();\n this.addToResyncTokens(currToken, resyncedTokens);\n }\n }\n // we were unable to find a CLOSER point to resync inside the Repetition, reset the state.\n // The parsing exception we were trying to prevent will happen in the NEXT parsing step. it may be handled by\n // \"between rules\" resync recovery later in the flow.\n this.importLexerState(savedLexerState);\n };\n Recoverable.prototype.shouldInRepetitionRecoveryBeTried = function (expectTokAfterLastMatch, nextTokIdx, notStuck) {\n // Edge case of arriving from a MANY repetition which is stuck\n // Attempting recovery in this case could cause an infinite loop\n if (notStuck === false) {\n return false;\n }\n // arguments to try and perform resync into the next iteration of the many are missing\n if (expectTokAfterLastMatch === undefined || nextTokIdx === undefined) {\n return false;\n }\n // no need to recover, next token is what we expect...\n if (this.tokenMatcher(this.LA(1), expectTokAfterLastMatch)) {\n return false;\n }\n // error recovery is disabled during backtracking as it can make the parser ignore a valid grammar path\n // and prefer some backtracking path that includes recovered errors.\n if (this.isBackTracking()) {\n return false;\n }\n // if we can perform inRule recovery (single token insertion or deletion) we always prefer that recovery algorithm\n // because if it works, it makes the least amount of changes to the input stream (greedy algorithm)\n //noinspection RedundantIfStatementJS\n if (this.canPerformInRuleRecovery(expectTokAfterLastMatch, this.getFollowsForInRuleRecovery(expectTokAfterLastMatch, nextTokIdx))) {\n return false;\n }\n return true;\n };\n // Error Recovery functionality\n Recoverable.prototype.getFollowsForInRuleRecovery = function (tokType, tokIdxInRule) {\n var grammarPath = this.getCurrentGrammarPath(tokType, tokIdxInRule);\n var follows = this.getNextPossibleTokenTypes(grammarPath);\n return follows;\n };\n Recoverable.prototype.tryInRuleRecovery = function (expectedTokType, follows) {\n if (this.canRecoverWithSingleTokenInsertion(expectedTokType, follows)) {\n var tokToInsert = this.getTokenToInsert(expectedTokType);\n return tokToInsert;\n }\n if (this.canRecoverWithSingleTokenDeletion(expectedTokType)) {\n var nextTok = this.SKIP_TOKEN();\n this.consumeToken();\n return nextTok;\n }\n throw new InRuleRecoveryException(\"sad sad panda\");\n };\n Recoverable.prototype.canPerformInRuleRecovery = function (expectedToken, follows) {\n return (this.canRecoverWithSingleTokenInsertion(expectedToken, follows) ||\n this.canRecoverWithSingleTokenDeletion(expectedToken));\n };\n Recoverable.prototype.canRecoverWithSingleTokenInsertion = function (expectedTokType, follows) {\n var _this = this;\n if (!this.canTokenTypeBeInsertedInRecovery(expectedTokType)) {\n return false;\n }\n // must know the possible following tokens to perform single token insertion\n if (isEmpty(follows)) {\n return false;\n }\n var mismatchedTok = this.LA(1);\n var isMisMatchedTokInFollows = find(follows, function (possibleFollowsTokType) {\n return _this.tokenMatcher(mismatchedTok, possibleFollowsTokType);\n }) !== undefined;\n return isMisMatchedTokInFollows;\n };\n Recoverable.prototype.canRecoverWithSingleTokenDeletion = function (expectedTokType) {\n var isNextTokenWhatIsExpected = this.tokenMatcher(this.LA(2), expectedTokType);\n return isNextTokenWhatIsExpected;\n };\n Recoverable.prototype.isInCurrentRuleReSyncSet = function (tokenTypeIdx) {\n var followKey = this.getCurrFollowKey();\n var currentRuleReSyncSet = this.getFollowSetFromFollowKey(followKey);\n return contains(currentRuleReSyncSet, tokenTypeIdx);\n };\n Recoverable.prototype.findReSyncTokenType = function () {\n var allPossibleReSyncTokTypes = this.flattenFollowSet();\n // this loop will always terminate as EOF is always in the follow stack and also always (virtually) in the input\n var nextToken = this.LA(1);\n var k = 2;\n while (true) {\n var nextTokenType = nextToken.tokenType;\n if (contains(allPossibleReSyncTokTypes, nextTokenType)) {\n return nextTokenType;\n }\n nextToken = this.LA(k);\n k++;\n }\n };\n Recoverable.prototype.getCurrFollowKey = function () {\n // the length is at least one as we always add the ruleName to the stack before invoking the rule.\n if (this.RULE_STACK.length === 1) {\n return EOF_FOLLOW_KEY;\n }\n var currRuleShortName = this.getLastExplicitRuleShortName();\n var currRuleIdx = this.getLastExplicitRuleOccurrenceIndex();\n var prevRuleShortName = this.getPreviousExplicitRuleShortName();\n return {\n ruleName: this.shortRuleNameToFullName(currRuleShortName),\n idxInCallingRule: currRuleIdx,\n inRule: this.shortRuleNameToFullName(prevRuleShortName)\n };\n };\n Recoverable.prototype.buildFullFollowKeyStack = function () {\n var _this = this;\n var explicitRuleStack = this.RULE_STACK;\n var explicitOccurrenceStack = this.RULE_OCCURRENCE_STACK;\n return map(explicitRuleStack, function (ruleName, idx) {\n if (idx === 0) {\n return EOF_FOLLOW_KEY;\n }\n return {\n ruleName: _this.shortRuleNameToFullName(ruleName),\n idxInCallingRule: explicitOccurrenceStack[idx],\n inRule: _this.shortRuleNameToFullName(explicitRuleStack[idx - 1])\n };\n });\n };\n Recoverable.prototype.flattenFollowSet = function () {\n var _this = this;\n var followStack = map(this.buildFullFollowKeyStack(), function (currKey) {\n return _this.getFollowSetFromFollowKey(currKey);\n });\n return flatten(followStack);\n };\n Recoverable.prototype.getFollowSetFromFollowKey = function (followKey) {\n if (followKey === EOF_FOLLOW_KEY) {\n return [EOF];\n }\n var followName = followKey.ruleName + followKey.idxInCallingRule + IN + followKey.inRule;\n return this.resyncFollows[followName];\n };\n // It does not make any sense to include a virtual EOF token in the list of resynced tokens\n // as EOF does not really exist and thus does not contain any useful information (line/column numbers)\n Recoverable.prototype.addToResyncTokens = function (token, resyncTokens) {\n if (!this.tokenMatcher(token, EOF)) {\n resyncTokens.push(token);\n }\n return resyncTokens;\n };\n Recoverable.prototype.reSyncTo = function (tokType) {\n var resyncedTokens = [];\n var nextTok = this.LA(1);\n while (this.tokenMatcher(nextTok, tokType) === false) {\n nextTok = this.SKIP_TOKEN();\n this.addToResyncTokens(nextTok, resyncedTokens);\n }\n // the last token is not part of the error.\n return dropRight(resyncedTokens);\n };\n Recoverable.prototype.attemptInRepetitionRecovery = function (prodFunc, args, lookaheadFunc, dslMethodIdx, prodOccurrence, nextToksWalker, notStuck) {\n // by default this is a NO-OP\n // The actual implementation is with the function(not method) below\n };\n Recoverable.prototype.getCurrentGrammarPath = function (tokType, tokIdxInRule) {\n var pathRuleStack = this.getHumanReadableRuleStack();\n var pathOccurrenceStack = cloneArr(this.RULE_OCCURRENCE_STACK);\n var grammarPath = {\n ruleStack: pathRuleStack,\n occurrenceStack: pathOccurrenceStack,\n lastTok: tokType,\n lastTokOccurrence: tokIdxInRule\n };\n return grammarPath;\n };\n Recoverable.prototype.getHumanReadableRuleStack = function () {\n var _this = this;\n return map(this.RULE_STACK, function (currShortName) {\n return _this.shortRuleNameToFullName(currShortName);\n });\n };\n return Recoverable;\n}());\nexport { Recoverable };\nexport function attemptInRepetitionRecovery(prodFunc, args, lookaheadFunc, dslMethodIdx, prodOccurrence, nextToksWalker, notStuck) {\n var key = this.getKeyForAutomaticLookahead(dslMethodIdx, prodOccurrence);\n var firstAfterRepInfo = this.firstAfterRepMap[key];\n if (firstAfterRepInfo === undefined) {\n var currRuleName = this.getCurrRuleFullName();\n var ruleGrammar = this.getGAstProductions()[currRuleName];\n var walker = new nextToksWalker(ruleGrammar, prodOccurrence);\n firstAfterRepInfo = walker.startWalking();\n this.firstAfterRepMap[key] = firstAfterRepInfo;\n }\n var expectTokAfterLastMatch = firstAfterRepInfo.token;\n var nextTokIdx = firstAfterRepInfo.occurrence;\n var isEndOfRule = firstAfterRepInfo.isEndOfRule;\n // special edge case of a TOP most repetition after which the input should END.\n // this will force an attempt for inRule recovery in that scenario.\n if (this.RULE_STACK.length === 1 &&\n isEndOfRule &&\n expectTokAfterLastMatch === undefined) {\n expectTokAfterLastMatch = EOF;\n nextTokIdx = 1;\n }\n if (this.shouldInRepetitionRecoveryBeTried(expectTokAfterLastMatch, nextTokIdx, notStuck)) {\n // TODO: performance optimization: instead of passing the original args here, we modify\n // the args param (or create a new one) and make sure the lookahead func is explicitly provided\n // to avoid searching the cache for it once more.\n this.tryInRepetitionRecovery(prodFunc, args, lookaheadFunc, expectTokAfterLastMatch);\n }\n}\n//# sourceMappingURL=recoverable.js.map","// Lookahead keys are 32Bit integers in the form\n// TTTTTTTT-ZZZZZZZZZZZZ-YYYY-XXXXXXXX\n// XXXX -> Occurrence Index bitmap.\n// YYYY -> DSL Method Type bitmap.\n// ZZZZZZZZZZZZZZZ -> Rule short Index bitmap.\n// TTTTTTTTT -> alternation alternative index bitmap\nexport var BITS_FOR_METHOD_TYPE = 4;\nexport var BITS_FOR_OCCURRENCE_IDX = 8;\nexport var BITS_FOR_RULE_IDX = 12;\n// TODO: validation, this means that there may at most 2^8 --> 256 alternatives for an alternation.\nexport var BITS_FOR_ALT_IDX = 8;\n// short string used as part of mapping keys.\n// being short improves the performance when composing KEYS for maps out of these\n// The 5 - 8 bits (16 possible values, are reserved for the DSL method indices)\n/* tslint:disable */\nexport var OR_IDX = 1 << BITS_FOR_OCCURRENCE_IDX;\nexport var OPTION_IDX = 2 << BITS_FOR_OCCURRENCE_IDX;\nexport var MANY_IDX = 3 << BITS_FOR_OCCURRENCE_IDX;\nexport var AT_LEAST_ONE_IDX = 4 << BITS_FOR_OCCURRENCE_IDX;\nexport var MANY_SEP_IDX = 5 << BITS_FOR_OCCURRENCE_IDX;\nexport var AT_LEAST_ONE_SEP_IDX = 6 << BITS_FOR_OCCURRENCE_IDX;\n/* tslint:enable */\n// this actually returns a number, but it is always used as a string (object prop key)\nexport function getKeyForAutomaticLookahead(ruleIdx, dslMethodIdx, occurrence) {\n /* tslint:disable */\n return occurrence | dslMethodIdx | ruleIdx;\n /* tslint:enable */\n}\nvar BITS_START_FOR_ALT_IDX = 32 - BITS_FOR_ALT_IDX;\n//# sourceMappingURL=keys.js.map","import { buildAlternativesLookAheadFunc, buildLookaheadFuncForOptionalProd, buildLookaheadFuncForOr, buildSingleAlternativeLookaheadFunction, PROD_TYPE } from \"../../grammar/lookahead\";\nimport { forEach, has, isES2015MapSupported } from \"../../../utils/utils\";\nimport { DEFAULT_PARSER_CONFIG } from \"../parser\";\nimport { AT_LEAST_ONE_IDX, AT_LEAST_ONE_SEP_IDX, getKeyForAutomaticLookahead, MANY_IDX, MANY_SEP_IDX, OPTION_IDX, OR_IDX } from \"../../grammar/keys\";\nimport { collectMethods, getProductionDslName } from \"../../grammar/gast/gast\";\n/**\n * Trait responsible for the lookahead related utilities and optimizations.\n */\nvar LooksAhead = /** @class */ (function () {\n function LooksAhead() {\n }\n LooksAhead.prototype.initLooksAhead = function (config) {\n this.dynamicTokensEnabled = has(config, \"dynamicTokensEnabled\")\n ? config.dynamicTokensEnabled\n : DEFAULT_PARSER_CONFIG.dynamicTokensEnabled;\n this.maxLookahead = has(config, \"maxLookahead\")\n ? config.maxLookahead\n : DEFAULT_PARSER_CONFIG.maxLookahead;\n /* istanbul ignore next - Using plain array as dictionary will be tested on older node.js versions and IE11 */\n this.lookAheadFuncsCache = isES2015MapSupported() ? new Map() : [];\n // Performance optimization on newer engines that support ES6 Map\n // For larger Maps this is slightly faster than using a plain object (array in our case).\n /* istanbul ignore else - The else branch will be tested on older node.js versions and IE11 */\n if (isES2015MapSupported()) {\n this.getLaFuncFromCache = this.getLaFuncFromMap;\n this.setLaFuncCache = this.setLaFuncCacheUsingMap;\n }\n else {\n this.getLaFuncFromCache = this.getLaFuncFromObj;\n this.setLaFuncCache = this.setLaFuncUsingObj;\n }\n };\n LooksAhead.prototype.preComputeLookaheadFunctions = function (rules) {\n var _this = this;\n forEach(rules, function (currRule) {\n _this.TRACE_INIT(currRule.name + \" Rule Lookahead\", function () {\n var _a = collectMethods(currRule), alternation = _a.alternation, repetition = _a.repetition, option = _a.option, repetitionMandatory = _a.repetitionMandatory, repetitionMandatoryWithSeparator = _a.repetitionMandatoryWithSeparator, repetitionWithSeparator = _a.repetitionWithSeparator;\n forEach(alternation, function (currProd) {\n var prodIdx = currProd.idx === 0 ? \"\" : currProd.idx;\n _this.TRACE_INIT(\"\" + getProductionDslName(currProd) + prodIdx, function () {\n var laFunc = buildLookaheadFuncForOr(currProd.idx, currRule, currProd.maxLookahead || _this.maxLookahead, currProd.hasPredicates, _this.dynamicTokensEnabled, _this.lookAheadBuilderForAlternatives);\n var key = getKeyForAutomaticLookahead(_this.fullRuleNameToShort[currRule.name], OR_IDX, currProd.idx);\n _this.setLaFuncCache(key, laFunc);\n });\n });\n forEach(repetition, function (currProd) {\n _this.computeLookaheadFunc(currRule, currProd.idx, MANY_IDX, PROD_TYPE.REPETITION, currProd.maxLookahead, getProductionDslName(currProd));\n });\n forEach(option, function (currProd) {\n _this.computeLookaheadFunc(currRule, currProd.idx, OPTION_IDX, PROD_TYPE.OPTION, currProd.maxLookahead, getProductionDslName(currProd));\n });\n forEach(repetitionMandatory, function (currProd) {\n _this.computeLookaheadFunc(currRule, currProd.idx, AT_LEAST_ONE_IDX, PROD_TYPE.REPETITION_MANDATORY, currProd.maxLookahead, getProductionDslName(currProd));\n });\n forEach(repetitionMandatoryWithSeparator, function (currProd) {\n _this.computeLookaheadFunc(currRule, currProd.idx, AT_LEAST_ONE_SEP_IDX, PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR, currProd.maxLookahead, getProductionDslName(currProd));\n });\n forEach(repetitionWithSeparator, function (currProd) {\n _this.computeLookaheadFunc(currRule, currProd.idx, MANY_SEP_IDX, PROD_TYPE.REPETITION_WITH_SEPARATOR, currProd.maxLookahead, getProductionDslName(currProd));\n });\n });\n });\n };\n LooksAhead.prototype.computeLookaheadFunc = function (rule, prodOccurrence, prodKey, prodType, prodMaxLookahead, dslMethodName) {\n var _this = this;\n this.TRACE_INIT(\"\" + dslMethodName + (prodOccurrence === 0 ? \"\" : prodOccurrence), function () {\n var laFunc = buildLookaheadFuncForOptionalProd(prodOccurrence, rule, prodMaxLookahead || _this.maxLookahead, _this.dynamicTokensEnabled, prodType, _this.lookAheadBuilderForOptional);\n var key = getKeyForAutomaticLookahead(_this.fullRuleNameToShort[rule.name], prodKey, prodOccurrence);\n _this.setLaFuncCache(key, laFunc);\n });\n };\n LooksAhead.prototype.lookAheadBuilderForOptional = function (alt, tokenMatcher, dynamicTokensEnabled) {\n return buildSingleAlternativeLookaheadFunction(alt, tokenMatcher, dynamicTokensEnabled);\n };\n LooksAhead.prototype.lookAheadBuilderForAlternatives = function (alts, hasPredicates, tokenMatcher, dynamicTokensEnabled) {\n return buildAlternativesLookAheadFunc(alts, hasPredicates, tokenMatcher, dynamicTokensEnabled);\n };\n // this actually returns a number, but it is always used as a string (object prop key)\n LooksAhead.prototype.getKeyForAutomaticLookahead = function (dslMethodIdx, occurrence) {\n var currRuleShortName = this.getLastExplicitRuleShortName();\n return getKeyForAutomaticLookahead(currRuleShortName, dslMethodIdx, occurrence);\n };\n /* istanbul ignore next */\n LooksAhead.prototype.getLaFuncFromCache = function (key) {\n return undefined;\n };\n LooksAhead.prototype.getLaFuncFromMap = function (key) {\n return this.lookAheadFuncsCache.get(key);\n };\n /* istanbul ignore next - Using plain array as dictionary will be tested on older node.js versions and IE11 */\n LooksAhead.prototype.getLaFuncFromObj = function (key) {\n return this.lookAheadFuncsCache[key];\n };\n /* istanbul ignore next */\n LooksAhead.prototype.setLaFuncCache = function (key, value) { };\n LooksAhead.prototype.setLaFuncCacheUsingMap = function (key, value) {\n this.lookAheadFuncsCache.set(key, value);\n };\n /* istanbul ignore next - Using plain array as dictionary will be tested on older node.js versions and IE11 */\n LooksAhead.prototype.setLaFuncUsingObj = function (key, value) {\n this.lookAheadFuncsCache[key] = value;\n };\n return LooksAhead;\n}());\nexport { LooksAhead };\n//# sourceMappingURL=looksahead.js.map","/**\n * This nodeLocation tracking is not efficient and should only be used\n * when error recovery is enabled or the Token Vector contains virtual Tokens\n * (e.g, Python Indent/Outdent)\n * As it executes the calculation for every single terminal/nonTerminal\n * and does not rely on the fact the token vector is **sorted**\n */\nexport function setNodeLocationOnlyOffset(currNodeLocation, newLocationInfo) {\n // First (valid) update for this cst node\n if (isNaN(currNodeLocation.startOffset) === true) {\n // assumption1: Token location information is either NaN or a valid number\n // assumption2: Token location information is fully valid if it exist\n // (both start/end offsets exist and are numbers).\n currNodeLocation.startOffset = newLocationInfo.startOffset;\n currNodeLocation.endOffset = newLocationInfo.endOffset;\n }\n // Once the startOffset has been updated with a valid number it should never receive\n // any farther updates as the Token vector is sorted.\n // We still have to check this this condition for every new possible location info\n // because with error recovery enabled we may encounter invalid tokens (NaN location props)\n else if (currNodeLocation.endOffset < newLocationInfo.endOffset === true) {\n currNodeLocation.endOffset = newLocationInfo.endOffset;\n }\n}\n/**\n * This nodeLocation tracking is not efficient and should only be used\n * when error recovery is enabled or the Token Vector contains virtual Tokens\n * (e.g, Python Indent/Outdent)\n * As it executes the calculation for every single terminal/nonTerminal\n * and does not rely on the fact the token vector is **sorted**\n */\nexport function setNodeLocationFull(currNodeLocation, newLocationInfo) {\n // First (valid) update for this cst node\n if (isNaN(currNodeLocation.startOffset) === true) {\n // assumption1: Token location information is either NaN or a valid number\n // assumption2: Token location information is fully valid if it exist\n // (all start/end props exist and are numbers).\n currNodeLocation.startOffset = newLocationInfo.startOffset;\n currNodeLocation.startColumn = newLocationInfo.startColumn;\n currNodeLocation.startLine = newLocationInfo.startLine;\n currNodeLocation.endOffset = newLocationInfo.endOffset;\n currNodeLocation.endColumn = newLocationInfo.endColumn;\n currNodeLocation.endLine = newLocationInfo.endLine;\n }\n // Once the start props has been updated with a valid number it should never receive\n // any farther updates as the Token vector is sorted.\n // We still have to check this this condition for every new possible location info\n // because with error recovery enabled we may encounter invalid tokens (NaN location props)\n else if (currNodeLocation.endOffset < newLocationInfo.endOffset === true) {\n currNodeLocation.endOffset = newLocationInfo.endOffset;\n currNodeLocation.endColumn = newLocationInfo.endColumn;\n currNodeLocation.endLine = newLocationInfo.endLine;\n }\n}\nexport function addTerminalToCst(node, token, tokenTypeName) {\n if (node.children[tokenTypeName] === undefined) {\n node.children[tokenTypeName] = [token];\n }\n else {\n node.children[tokenTypeName].push(token);\n }\n}\nexport function addNoneTerminalToCst(node, ruleName, ruleResult) {\n if (node.children[ruleName] === undefined) {\n node.children[ruleName] = [ruleResult];\n }\n else {\n node.children[ruleName].push(ruleResult);\n }\n}\n//# sourceMappingURL=cst.js.map","import { isUndefined } from \"../utils/utils\";\nexport function classNameFromInstance(instance) {\n return functionName(instance.constructor);\n}\nvar NAME = \"name\";\n/**\n * Utility to obtain Function names.\n * Note that there should not be an assumptions on the result of this function.\n * E.g: When running from minified source code the result may be auto generated.\n */\nexport function functionName(func) {\n // Engines that support Function.prototype.name OR the nth (n>1) time after\n // the name has been computed in the following else block.\n var existingNameProp = func.name;\n /* istanbul ignore else - too many hacks for IE/old versions of node.js here*/\n if (existingNameProp) {\n return existingNameProp;\n }\n else {\n return \"anonymous\";\n }\n}\n/**\n * @returns {boolean} - has the property been successfully defined\n */\nexport function defineNameProp(obj, nameValue) {\n var namePropDescriptor = Object.getOwnPropertyDescriptor(obj, NAME);\n /* istanbul ignore else -> will only run in old versions of node.js */\n if (isUndefined(namePropDescriptor) || namePropDescriptor.configurable) {\n Object.defineProperty(obj, NAME, {\n enumerable: false,\n configurable: true,\n writable: false,\n value: nameValue\n });\n return true;\n }\n /* istanbul ignore next -> will only run in old versions of node.js */\n return false;\n}\n//# sourceMappingURL=lang_extensions.js.map","import { compact, contains, forEach, isArray, isEmpty, isFunction, isUndefined, keys, map } from \"../../utils/utils\";\nimport { defineNameProp, functionName } from \"../../lang/lang_extensions\";\nexport function defaultVisit(ctx, param) {\n var childrenNames = keys(ctx);\n var childrenNamesLength = childrenNames.length;\n for (var i = 0; i < childrenNamesLength; i++) {\n var currChildName = childrenNames[i];\n var currChildArray = ctx[currChildName];\n var currChildArrayLength = currChildArray.length;\n for (var j = 0; j < currChildArrayLength; j++) {\n var currChild = currChildArray[j];\n // distinction between Tokens Children and CstNode children\n if (currChild.tokenTypeIdx === undefined) {\n this[currChild.name](currChild.children, param);\n }\n }\n }\n // defaultVisit does not support generic out param\n return undefined;\n}\nexport function createBaseSemanticVisitorConstructor(grammarName, ruleNames) {\n var derivedConstructor = function () { };\n // can be overwritten according to:\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/\n // name?redirectlocale=en-US&redirectslug=JavaScript%2FReference%2FGlobal_Objects%2FFunction%2Fname\n defineNameProp(derivedConstructor, grammarName + \"BaseSemantics\");\n var semanticProto = {\n visit: function (cstNode, param) {\n // enables writing more concise visitor methods when CstNode has only a single child\n if (isArray(cstNode)) {\n // A CST Node's children dictionary can never have empty arrays as values\n // If a key is defined there will be at least one element in the corresponding value array.\n cstNode = cstNode[0];\n }\n // enables passing optional CstNodes concisely.\n if (isUndefined(cstNode)) {\n return undefined;\n }\n return this[cstNode.name](cstNode.children, param);\n },\n validateVisitor: function () {\n var semanticDefinitionErrors = validateVisitor(this, ruleNames);\n if (!isEmpty(semanticDefinitionErrors)) {\n var errorMessages = map(semanticDefinitionErrors, function (currDefError) { return currDefError.msg; });\n throw Error(\"Errors Detected in CST Visitor <\" + functionName(this.constructor) + \">:\\n\\t\" + (\"\" + errorMessages.join(\"\\n\\n\").replace(/\\n/g, \"\\n\\t\")));\n }\n }\n };\n derivedConstructor.prototype = semanticProto;\n derivedConstructor.prototype.constructor = derivedConstructor;\n derivedConstructor._RULE_NAMES = ruleNames;\n return derivedConstructor;\n}\nexport function createBaseVisitorConstructorWithDefaults(grammarName, ruleNames, baseConstructor) {\n var derivedConstructor = function () { };\n // can be overwritten according to:\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/\n // name?redirectlocale=en-US&redirectslug=JavaScript%2FReference%2FGlobal_Objects%2FFunction%2Fname\n defineNameProp(derivedConstructor, grammarName + \"BaseSemanticsWithDefaults\");\n var withDefaultsProto = Object.create(baseConstructor.prototype);\n forEach(ruleNames, function (ruleName) {\n withDefaultsProto[ruleName] = defaultVisit;\n });\n derivedConstructor.prototype = withDefaultsProto;\n derivedConstructor.prototype.constructor = derivedConstructor;\n return derivedConstructor;\n}\nexport var CstVisitorDefinitionError;\n(function (CstVisitorDefinitionError) {\n CstVisitorDefinitionError[CstVisitorDefinitionError[\"REDUNDANT_METHOD\"] = 0] = \"REDUNDANT_METHOD\";\n CstVisitorDefinitionError[CstVisitorDefinitionError[\"MISSING_METHOD\"] = 1] = \"MISSING_METHOD\";\n})(CstVisitorDefinitionError || (CstVisitorDefinitionError = {}));\nexport function validateVisitor(visitorInstance, ruleNames) {\n var missingErrors = validateMissingCstMethods(visitorInstance, ruleNames);\n var redundantErrors = validateRedundantMethods(visitorInstance, ruleNames);\n return missingErrors.concat(redundantErrors);\n}\nexport function validateMissingCstMethods(visitorInstance, ruleNames) {\n var errors = map(ruleNames, function (currRuleName) {\n if (!isFunction(visitorInstance[currRuleName])) {\n return {\n msg: \"Missing visitor method: <\" + currRuleName + \"> on \" + functionName(visitorInstance.constructor) + \" CST Visitor.\",\n type: CstVisitorDefinitionError.MISSING_METHOD,\n methodName: currRuleName\n };\n }\n });\n return compact(errors);\n}\nvar VALID_PROP_NAMES = [\"constructor\", \"visit\", \"validateVisitor\"];\nexport function validateRedundantMethods(visitorInstance, ruleNames) {\n var errors = [];\n for (var prop in visitorInstance) {\n if (isFunction(visitorInstance[prop]) &&\n !contains(VALID_PROP_NAMES, prop) &&\n !contains(ruleNames, prop)) {\n errors.push({\n msg: \"Redundant visitor method: <\" + prop + \"> on \" + functionName(visitorInstance.constructor) + \" CST Visitor\\n\" +\n \"There is no Grammar Rule corresponding to this method's name.\\n\",\n type: CstVisitorDefinitionError.REDUNDANT_METHOD,\n methodName: prop\n });\n }\n }\n return errors;\n}\n//# sourceMappingURL=cst_visitor.js.map","import { addNoneTerminalToCst, addTerminalToCst, setNodeLocationFull, setNodeLocationOnlyOffset } from \"../../cst/cst\";\nimport { has, isUndefined, keys, NOOP } from \"../../../utils/utils\";\nimport { createBaseSemanticVisitorConstructor, createBaseVisitorConstructorWithDefaults } from \"../../cst/cst_visitor\";\nimport { DEFAULT_PARSER_CONFIG } from \"../parser\";\n/**\n * This trait is responsible for the CST building logic.\n */\nvar TreeBuilder = /** @class */ (function () {\n function TreeBuilder() {\n }\n TreeBuilder.prototype.initTreeBuilder = function (config) {\n this.CST_STACK = [];\n // outputCst is no longer exposed/defined in the pubic API\n this.outputCst = config.outputCst;\n this.nodeLocationTracking = has(config, \"nodeLocationTracking\")\n ? config.nodeLocationTracking\n : DEFAULT_PARSER_CONFIG.nodeLocationTracking;\n if (!this.outputCst) {\n this.cstInvocationStateUpdate = NOOP;\n this.cstFinallyStateUpdate = NOOP;\n this.cstPostTerminal = NOOP;\n this.cstPostNonTerminal = NOOP;\n this.cstPostRule = NOOP;\n }\n else {\n if (/full/i.test(this.nodeLocationTracking)) {\n if (this.recoveryEnabled) {\n this.setNodeLocationFromToken = setNodeLocationFull;\n this.setNodeLocationFromNode = setNodeLocationFull;\n this.cstPostRule = NOOP;\n this.setInitialNodeLocation = this.setInitialNodeLocationFullRecovery;\n }\n else {\n this.setNodeLocationFromToken = NOOP;\n this.setNodeLocationFromNode = NOOP;\n this.cstPostRule = this.cstPostRuleFull;\n this.setInitialNodeLocation = this.setInitialNodeLocationFullRegular;\n }\n }\n else if (/onlyOffset/i.test(this.nodeLocationTracking)) {\n if (this.recoveryEnabled) {\n this.setNodeLocationFromToken = setNodeLocationOnlyOffset;\n this.setNodeLocationFromNode = setNodeLocationOnlyOffset;\n this.cstPostRule = NOOP;\n this.setInitialNodeLocation = this.setInitialNodeLocationOnlyOffsetRecovery;\n }\n else {\n this.setNodeLocationFromToken = NOOP;\n this.setNodeLocationFromNode = NOOP;\n this.cstPostRule = this.cstPostRuleOnlyOffset;\n this.setInitialNodeLocation = this.setInitialNodeLocationOnlyOffsetRegular;\n }\n }\n else if (/none/i.test(this.nodeLocationTracking)) {\n this.setNodeLocationFromToken = NOOP;\n this.setNodeLocationFromNode = NOOP;\n this.cstPostRule = NOOP;\n this.setInitialNodeLocation = NOOP;\n }\n else {\n throw Error(\"Invalid config option: \\\"\" + config.nodeLocationTracking + \"\\\"\");\n }\n }\n };\n TreeBuilder.prototype.setInitialNodeLocationOnlyOffsetRecovery = function (cstNode) {\n cstNode.location = {\n startOffset: NaN,\n endOffset: NaN\n };\n };\n TreeBuilder.prototype.setInitialNodeLocationOnlyOffsetRegular = function (cstNode) {\n cstNode.location = {\n // without error recovery the starting Location of a new CstNode is guaranteed\n // To be the next Token's startOffset (for valid inputs).\n // For invalid inputs there won't be any CSTOutput so this potential\n // inaccuracy does not matter\n startOffset: this.LA(1).startOffset,\n endOffset: NaN\n };\n };\n TreeBuilder.prototype.setInitialNodeLocationFullRecovery = function (cstNode) {\n cstNode.location = {\n startOffset: NaN,\n startLine: NaN,\n startColumn: NaN,\n endOffset: NaN,\n endLine: NaN,\n endColumn: NaN\n };\n };\n /**\n * @see setInitialNodeLocationOnlyOffsetRegular for explanation why this work\n \n * @param cstNode\n */\n TreeBuilder.prototype.setInitialNodeLocationFullRegular = function (cstNode) {\n var nextToken = this.LA(1);\n cstNode.location = {\n startOffset: nextToken.startOffset,\n startLine: nextToken.startLine,\n startColumn: nextToken.startColumn,\n endOffset: NaN,\n endLine: NaN,\n endColumn: NaN\n };\n };\n TreeBuilder.prototype.cstInvocationStateUpdate = function (fullRuleName, shortName) {\n var cstNode = {\n name: fullRuleName,\n children: {}\n };\n this.setInitialNodeLocation(cstNode);\n this.CST_STACK.push(cstNode);\n };\n TreeBuilder.prototype.cstFinallyStateUpdate = function () {\n this.CST_STACK.pop();\n };\n TreeBuilder.prototype.cstPostRuleFull = function (ruleCstNode) {\n var prevToken = this.LA(0);\n var loc = ruleCstNode.location;\n // If this condition is true it means we consumed at least one Token\n // In this CstNode.\n if (loc.startOffset <= prevToken.startOffset === true) {\n loc.endOffset = prevToken.endOffset;\n loc.endLine = prevToken.endLine;\n loc.endColumn = prevToken.endColumn;\n }\n // \"empty\" CstNode edge case\n else {\n loc.startOffset = NaN;\n loc.startLine = NaN;\n loc.startColumn = NaN;\n }\n };\n TreeBuilder.prototype.cstPostRuleOnlyOffset = function (ruleCstNode) {\n var prevToken = this.LA(0);\n var loc = ruleCstNode.location;\n // If this condition is true it means we consumed at least one Token\n // In this CstNode.\n if (loc.startOffset <= prevToken.startOffset === true) {\n loc.endOffset = prevToken.endOffset;\n }\n // \"empty\" CstNode edge case\n else {\n loc.startOffset = NaN;\n }\n };\n TreeBuilder.prototype.cstPostTerminal = function (key, consumedToken) {\n var rootCst = this.CST_STACK[this.CST_STACK.length - 1];\n addTerminalToCst(rootCst, consumedToken, key);\n // This is only used when **both** error recovery and CST Output are enabled.\n this.setNodeLocationFromToken(rootCst.location, consumedToken);\n };\n TreeBuilder.prototype.cstPostNonTerminal = function (ruleCstResult, ruleName) {\n var preCstNode = this.CST_STACK[this.CST_STACK.length - 1];\n addNoneTerminalToCst(preCstNode, ruleName, ruleCstResult);\n // This is only used when **both** error recovery and CST Output are enabled.\n this.setNodeLocationFromNode(preCstNode.location, ruleCstResult.location);\n };\n TreeBuilder.prototype.getBaseCstVisitorConstructor = function () {\n if (isUndefined(this.baseCstVisitorConstructor)) {\n var newBaseCstVisitorConstructor = createBaseSemanticVisitorConstructor(this.className, keys(this.gastProductionsCache));\n this.baseCstVisitorConstructor = newBaseCstVisitorConstructor;\n return newBaseCstVisitorConstructor;\n }\n return this.baseCstVisitorConstructor;\n };\n TreeBuilder.prototype.getBaseCstVisitorConstructorWithDefaults = function () {\n if (isUndefined(this.baseCstVisitorWithDefaultsConstructor)) {\n var newConstructor = createBaseVisitorConstructorWithDefaults(this.className, keys(this.gastProductionsCache), this.getBaseCstVisitorConstructor());\n this.baseCstVisitorWithDefaultsConstructor = newConstructor;\n return newConstructor;\n }\n return this.baseCstVisitorWithDefaultsConstructor;\n };\n TreeBuilder.prototype.getLastExplicitRuleShortName = function () {\n var ruleStack = this.RULE_STACK;\n return ruleStack[ruleStack.length - 1];\n };\n TreeBuilder.prototype.getPreviousExplicitRuleShortName = function () {\n var ruleStack = this.RULE_STACK;\n return ruleStack[ruleStack.length - 2];\n };\n TreeBuilder.prototype.getLastExplicitRuleOccurrenceIndex = function () {\n var occurrenceStack = this.RULE_OCCURRENCE_STACK;\n return occurrenceStack[occurrenceStack.length - 1];\n };\n return TreeBuilder;\n}());\nexport { TreeBuilder };\n//# sourceMappingURL=tree_builder.js.map","import { END_OF_FILE } from \"../parser\";\n/**\n * Trait responsible abstracting over the interaction with Lexer output (Token vector).\n *\n * This could be generalized to support other kinds of lexers, e.g.\n * - Just in Time Lexing / Lexer-Less parsing.\n * - Streaming Lexer.\n */\nvar LexerAdapter = /** @class */ (function () {\n function LexerAdapter() {\n }\n LexerAdapter.prototype.initLexerAdapter = function () {\n this.tokVector = [];\n this.tokVectorLength = 0;\n this.currIdx = -1;\n };\n Object.defineProperty(LexerAdapter.prototype, \"input\", {\n get: function () {\n return this.tokVector;\n },\n set: function (newInput) {\n // @ts-ignore - `this parameter` not supported in setters/getters\n // - https://www.typescriptlang.org/docs/handbook/functions.html#this-parameters\n if (this.selfAnalysisDone !== true) {\n throw Error(\"Missing invocation at the end of the Parser's constructor.\");\n }\n // @ts-ignore - `this parameter` not supported in setters/getters\n // - https://www.typescriptlang.org/docs/handbook/functions.html#this-parameters\n this.reset();\n this.tokVector = newInput;\n this.tokVectorLength = newInput.length;\n },\n enumerable: false,\n configurable: true\n });\n // skips a token and returns the next token\n LexerAdapter.prototype.SKIP_TOKEN = function () {\n if (this.currIdx <= this.tokVector.length - 2) {\n this.consumeToken();\n return this.LA(1);\n }\n else {\n return END_OF_FILE;\n }\n };\n // Lexer (accessing Token vector) related methods which can be overridden to implement lazy lexers\n // or lexers dependent on parser context.\n LexerAdapter.prototype.LA = function (howMuch) {\n var soughtIdx = this.currIdx + howMuch;\n if (soughtIdx < 0 || this.tokVectorLength <= soughtIdx) {\n return END_OF_FILE;\n }\n else {\n return this.tokVector[soughtIdx];\n }\n };\n LexerAdapter.prototype.consumeToken = function () {\n this.currIdx++;\n };\n LexerAdapter.prototype.exportLexerState = function () {\n return this.currIdx;\n };\n LexerAdapter.prototype.importLexerState = function (newState) {\n this.currIdx = newState;\n };\n LexerAdapter.prototype.resetLexerState = function () {\n this.currIdx = -1;\n };\n LexerAdapter.prototype.moveToTerminatedState = function () {\n this.currIdx = this.tokVector.length - 1;\n };\n LexerAdapter.prototype.getLexerPosition = function () {\n return this.exportLexerState();\n };\n return LexerAdapter;\n}());\nexport { LexerAdapter };\n//# sourceMappingURL=lexer_adapter.js.map","import { contains, values } from \"../../../utils/utils\";\nimport { isRecognitionException } from \"../../exceptions_public\";\nimport { DEFAULT_RULE_CONFIG, ParserDefinitionErrorType } from \"../parser\";\nimport { defaultGrammarValidatorErrorProvider } from \"../../errors_public\";\nimport { validateRuleIsOverridden } from \"../../grammar/checks\";\nimport { serializeGrammar } from \"../../grammar/gast/gast_public\";\n/**\n * This trait is responsible for implementing the public API\n * for defining Chevrotain parsers, i.e:\n * - CONSUME\n * - RULE\n * - OPTION\n * - ...\n */\nvar RecognizerApi = /** @class */ (function () {\n function RecognizerApi() {\n }\n RecognizerApi.prototype.ACTION = function (impl) {\n return impl.call(this);\n };\n RecognizerApi.prototype.consume = function (idx, tokType, options) {\n return this.consumeInternal(tokType, idx, options);\n };\n RecognizerApi.prototype.subrule = function (idx, ruleToCall, options) {\n return this.subruleInternal(ruleToCall, idx, options);\n };\n RecognizerApi.prototype.option = function (idx, actionORMethodDef) {\n return this.optionInternal(actionORMethodDef, idx);\n };\n RecognizerApi.prototype.or = function (idx, altsOrOpts) {\n return this.orInternal(altsOrOpts, idx);\n };\n RecognizerApi.prototype.many = function (idx, actionORMethodDef) {\n return this.manyInternal(idx, actionORMethodDef);\n };\n RecognizerApi.prototype.atLeastOne = function (idx, actionORMethodDef) {\n return this.atLeastOneInternal(idx, actionORMethodDef);\n };\n RecognizerApi.prototype.CONSUME = function (tokType, options) {\n return this.consumeInternal(tokType, 0, options);\n };\n RecognizerApi.prototype.CONSUME1 = function (tokType, options) {\n return this.consumeInternal(tokType, 1, options);\n };\n RecognizerApi.prototype.CONSUME2 = function (tokType, options) {\n return this.consumeInternal(tokType, 2, options);\n };\n RecognizerApi.prototype.CONSUME3 = function (tokType, options) {\n return this.consumeInternal(tokType, 3, options);\n };\n RecognizerApi.prototype.CONSUME4 = function (tokType, options) {\n return this.consumeInternal(tokType, 4, options);\n };\n RecognizerApi.prototype.CONSUME5 = function (tokType, options) {\n return this.consumeInternal(tokType, 5, options);\n };\n RecognizerApi.prototype.CONSUME6 = function (tokType, options) {\n return this.consumeInternal(tokType, 6, options);\n };\n RecognizerApi.prototype.CONSUME7 = function (tokType, options) {\n return this.consumeInternal(tokType, 7, options);\n };\n RecognizerApi.prototype.CONSUME8 = function (tokType, options) {\n return this.consumeInternal(tokType, 8, options);\n };\n RecognizerApi.prototype.CONSUME9 = function (tokType, options) {\n return this.consumeInternal(tokType, 9, options);\n };\n RecognizerApi.prototype.SUBRULE = function (ruleToCall, options) {\n return this.subruleInternal(ruleToCall, 0, options);\n };\n RecognizerApi.prototype.SUBRULE1 = function (ruleToCall, options) {\n return this.subruleInternal(ruleToCall, 1, options);\n };\n RecognizerApi.prototype.SUBRULE2 = function (ruleToCall, options) {\n return this.subruleInternal(ruleToCall, 2, options);\n };\n RecognizerApi.prototype.SUBRULE3 = function (ruleToCall, options) {\n return this.subruleInternal(ruleToCall, 3, options);\n };\n RecognizerApi.prototype.SUBRULE4 = function (ruleToCall, options) {\n return this.subruleInternal(ruleToCall, 4, options);\n };\n RecognizerApi.prototype.SUBRULE5 = function (ruleToCall, options) {\n return this.subruleInternal(ruleToCall, 5, options);\n };\n RecognizerApi.prototype.SUBRULE6 = function (ruleToCall, options) {\n return this.subruleInternal(ruleToCall, 6, options);\n };\n RecognizerApi.prototype.SUBRULE7 = function (ruleToCall, options) {\n return this.subruleInternal(ruleToCall, 7, options);\n };\n RecognizerApi.prototype.SUBRULE8 = function (ruleToCall, options) {\n return this.subruleInternal(ruleToCall, 8, options);\n };\n RecognizerApi.prototype.SUBRULE9 = function (ruleToCall, options) {\n return this.subruleInternal(ruleToCall, 9, options);\n };\n RecognizerApi.prototype.OPTION = function (actionORMethodDef) {\n return this.optionInternal(actionORMethodDef, 0);\n };\n RecognizerApi.prototype.OPTION1 = function (actionORMethodDef) {\n return this.optionInternal(actionORMethodDef, 1);\n };\n RecognizerApi.prototype.OPTION2 = function (actionORMethodDef) {\n return this.optionInternal(actionORMethodDef, 2);\n };\n RecognizerApi.prototype.OPTION3 = function (actionORMethodDef) {\n return this.optionInternal(actionORMethodDef, 3);\n };\n RecognizerApi.prototype.OPTION4 = function (actionORMethodDef) {\n return this.optionInternal(actionORMethodDef, 4);\n };\n RecognizerApi.prototype.OPTION5 = function (actionORMethodDef) {\n return this.optionInternal(actionORMethodDef, 5);\n };\n RecognizerApi.prototype.OPTION6 = function (actionORMethodDef) {\n return this.optionInternal(actionORMethodDef, 6);\n };\n RecognizerApi.prototype.OPTION7 = function (actionORMethodDef) {\n return this.optionInternal(actionORMethodDef, 7);\n };\n RecognizerApi.prototype.OPTION8 = function (actionORMethodDef) {\n return this.optionInternal(actionORMethodDef, 8);\n };\n RecognizerApi.prototype.OPTION9 = function (actionORMethodDef) {\n return this.optionInternal(actionORMethodDef, 9);\n };\n RecognizerApi.prototype.OR = function (altsOrOpts) {\n return this.orInternal(altsOrOpts, 0);\n };\n RecognizerApi.prototype.OR1 = function (altsOrOpts) {\n return this.orInternal(altsOrOpts, 1);\n };\n RecognizerApi.prototype.OR2 = function (altsOrOpts) {\n return this.orInternal(altsOrOpts, 2);\n };\n RecognizerApi.prototype.OR3 = function (altsOrOpts) {\n return this.orInternal(altsOrOpts, 3);\n };\n RecognizerApi.prototype.OR4 = function (altsOrOpts) {\n return this.orInternal(altsOrOpts, 4);\n };\n RecognizerApi.prototype.OR5 = function (altsOrOpts) {\n return this.orInternal(altsOrOpts, 5);\n };\n RecognizerApi.prototype.OR6 = function (altsOrOpts) {\n return this.orInternal(altsOrOpts, 6);\n };\n RecognizerApi.prototype.OR7 = function (altsOrOpts) {\n return this.orInternal(altsOrOpts, 7);\n };\n RecognizerApi.prototype.OR8 = function (altsOrOpts) {\n return this.orInternal(altsOrOpts, 8);\n };\n RecognizerApi.prototype.OR9 = function (altsOrOpts) {\n return this.orInternal(altsOrOpts, 9);\n };\n RecognizerApi.prototype.MANY = function (actionORMethodDef) {\n this.manyInternal(0, actionORMethodDef);\n };\n RecognizerApi.prototype.MANY1 = function (actionORMethodDef) {\n this.manyInternal(1, actionORMethodDef);\n };\n RecognizerApi.prototype.MANY2 = function (actionORMethodDef) {\n this.manyInternal(2, actionORMethodDef);\n };\n RecognizerApi.prototype.MANY3 = function (actionORMethodDef) {\n this.manyInternal(3, actionORMethodDef);\n };\n RecognizerApi.prototype.MANY4 = function (actionORMethodDef) {\n this.manyInternal(4, actionORMethodDef);\n };\n RecognizerApi.prototype.MANY5 = function (actionORMethodDef) {\n this.manyInternal(5, actionORMethodDef);\n };\n RecognizerApi.prototype.MANY6 = function (actionORMethodDef) {\n this.manyInternal(6, actionORMethodDef);\n };\n RecognizerApi.prototype.MANY7 = function (actionORMethodDef) {\n this.manyInternal(7, actionORMethodDef);\n };\n RecognizerApi.prototype.MANY8 = function (actionORMethodDef) {\n this.manyInternal(8, actionORMethodDef);\n };\n RecognizerApi.prototype.MANY9 = function (actionORMethodDef) {\n this.manyInternal(9, actionORMethodDef);\n };\n RecognizerApi.prototype.MANY_SEP = function (options) {\n this.manySepFirstInternal(0, options);\n };\n RecognizerApi.prototype.MANY_SEP1 = function (options) {\n this.manySepFirstInternal(1, options);\n };\n RecognizerApi.prototype.MANY_SEP2 = function (options) {\n this.manySepFirstInternal(2, options);\n };\n RecognizerApi.prototype.MANY_SEP3 = function (options) {\n this.manySepFirstInternal(3, options);\n };\n RecognizerApi.prototype.MANY_SEP4 = function (options) {\n this.manySepFirstInternal(4, options);\n };\n RecognizerApi.prototype.MANY_SEP5 = function (options) {\n this.manySepFirstInternal(5, options);\n };\n RecognizerApi.prototype.MANY_SEP6 = function (options) {\n this.manySepFirstInternal(6, options);\n };\n RecognizerApi.prototype.MANY_SEP7 = function (options) {\n this.manySepFirstInternal(7, options);\n };\n RecognizerApi.prototype.MANY_SEP8 = function (options) {\n this.manySepFirstInternal(8, options);\n };\n RecognizerApi.prototype.MANY_SEP9 = function (options) {\n this.manySepFirstInternal(9, options);\n };\n RecognizerApi.prototype.AT_LEAST_ONE = function (actionORMethodDef) {\n this.atLeastOneInternal(0, actionORMethodDef);\n };\n RecognizerApi.prototype.AT_LEAST_ONE1 = function (actionORMethodDef) {\n return this.atLeastOneInternal(1, actionORMethodDef);\n };\n RecognizerApi.prototype.AT_LEAST_ONE2 = function (actionORMethodDef) {\n this.atLeastOneInternal(2, actionORMethodDef);\n };\n RecognizerApi.prototype.AT_LEAST_ONE3 = function (actionORMethodDef) {\n this.atLeastOneInternal(3, actionORMethodDef);\n };\n RecognizerApi.prototype.AT_LEAST_ONE4 = function (actionORMethodDef) {\n this.atLeastOneInternal(4, actionORMethodDef);\n };\n RecognizerApi.prototype.AT_LEAST_ONE5 = function (actionORMethodDef) {\n this.atLeastOneInternal(5, actionORMethodDef);\n };\n RecognizerApi.prototype.AT_LEAST_ONE6 = function (actionORMethodDef) {\n this.atLeastOneInternal(6, actionORMethodDef);\n };\n RecognizerApi.prototype.AT_LEAST_ONE7 = function (actionORMethodDef) {\n this.atLeastOneInternal(7, actionORMethodDef);\n };\n RecognizerApi.prototype.AT_LEAST_ONE8 = function (actionORMethodDef) {\n this.atLeastOneInternal(8, actionORMethodDef);\n };\n RecognizerApi.prototype.AT_LEAST_ONE9 = function (actionORMethodDef) {\n this.atLeastOneInternal(9, actionORMethodDef);\n };\n RecognizerApi.prototype.AT_LEAST_ONE_SEP = function (options) {\n this.atLeastOneSepFirstInternal(0, options);\n };\n RecognizerApi.prototype.AT_LEAST_ONE_SEP1 = function (options) {\n this.atLeastOneSepFirstInternal(1, options);\n };\n RecognizerApi.prototype.AT_LEAST_ONE_SEP2 = function (options) {\n this.atLeastOneSepFirstInternal(2, options);\n };\n RecognizerApi.prototype.AT_LEAST_ONE_SEP3 = function (options) {\n this.atLeastOneSepFirstInternal(3, options);\n };\n RecognizerApi.prototype.AT_LEAST_ONE_SEP4 = function (options) {\n this.atLeastOneSepFirstInternal(4, options);\n };\n RecognizerApi.prototype.AT_LEAST_ONE_SEP5 = function (options) {\n this.atLeastOneSepFirstInternal(5, options);\n };\n RecognizerApi.prototype.AT_LEAST_ONE_SEP6 = function (options) {\n this.atLeastOneSepFirstInternal(6, options);\n };\n RecognizerApi.prototype.AT_LEAST_ONE_SEP7 = function (options) {\n this.atLeastOneSepFirstInternal(7, options);\n };\n RecognizerApi.prototype.AT_LEAST_ONE_SEP8 = function (options) {\n this.atLeastOneSepFirstInternal(8, options);\n };\n RecognizerApi.prototype.AT_LEAST_ONE_SEP9 = function (options) {\n this.atLeastOneSepFirstInternal(9, options);\n };\n RecognizerApi.prototype.RULE = function (name, implementation, config) {\n if (config === void 0) { config = DEFAULT_RULE_CONFIG; }\n if (contains(this.definedRulesNames, name)) {\n var errMsg = defaultGrammarValidatorErrorProvider.buildDuplicateRuleNameError({\n topLevelRule: name,\n grammarName: this.className\n });\n var error = {\n message: errMsg,\n type: ParserDefinitionErrorType.DUPLICATE_RULE_NAME,\n ruleName: name\n };\n this.definitionErrors.push(error);\n }\n this.definedRulesNames.push(name);\n var ruleImplementation = this.defineRule(name, implementation, config);\n this[name] = ruleImplementation;\n return ruleImplementation;\n };\n RecognizerApi.prototype.OVERRIDE_RULE = function (name, impl, config) {\n if (config === void 0) { config = DEFAULT_RULE_CONFIG; }\n var ruleErrors = [];\n ruleErrors = ruleErrors.concat(validateRuleIsOverridden(name, this.definedRulesNames, this.className));\n this.definitionErrors.push.apply(this.definitionErrors, ruleErrors); // mutability for the win\n var ruleImplementation = this.defineRule(name, impl, config);\n this[name] = ruleImplementation;\n return ruleImplementation;\n };\n RecognizerApi.prototype.BACKTRACK = function (grammarRule, args) {\n return function () {\n // save org state\n this.isBackTrackingStack.push(1);\n var orgState = this.saveRecogState();\n try {\n grammarRule.apply(this, args);\n // if no exception was thrown we have succeed parsing the rule.\n return true;\n }\n catch (e) {\n if (isRecognitionException(e)) {\n return false;\n }\n else {\n throw e;\n }\n }\n finally {\n this.reloadRecogState(orgState);\n this.isBackTrackingStack.pop();\n }\n };\n };\n // GAST export APIs\n RecognizerApi.prototype.getGAstProductions = function () {\n return this.gastProductionsCache;\n };\n RecognizerApi.prototype.getSerializedGastProductions = function () {\n return serializeGrammar(values(this.gastProductionsCache));\n };\n return RecognizerApi;\n}());\nexport { RecognizerApi };\n//# sourceMappingURL=recognizer_api.js.map","import { cloneArr, cloneObj, every, flatten, has, isArray, isEmpty, isObject, reduce, uniq, values } from \"../../../utils/utils\";\nimport { AT_LEAST_ONE_IDX, AT_LEAST_ONE_SEP_IDX, BITS_FOR_METHOD_TYPE, BITS_FOR_OCCURRENCE_IDX, MANY_IDX, MANY_SEP_IDX, OPTION_IDX, OR_IDX } from \"../../grammar/keys\";\nimport { isRecognitionException, MismatchedTokenException, NotAllInputParsedException } from \"../../exceptions_public\";\nimport { PROD_TYPE } from \"../../grammar/lookahead\";\nimport { NextTerminalAfterAtLeastOneSepWalker, NextTerminalAfterAtLeastOneWalker, NextTerminalAfterManySepWalker, NextTerminalAfterManyWalker } from \"../../grammar/interpreter\";\nimport { DEFAULT_RULE_CONFIG } from \"../parser\";\nimport { IN_RULE_RECOVERY_EXCEPTION } from \"./recoverable\";\nimport { EOF } from \"../../../scan/tokens_public\";\nimport { augmentTokenTypes, isTokenType, tokenStructuredMatcher, tokenStructuredMatcherNoCategories } from \"../../../scan/tokens\";\nimport { classNameFromInstance } from \"../../../lang/lang_extensions\";\n/**\n * This trait is responsible for the runtime parsing engine\n * Used by the official API (recognizer_api.ts)\n */\nvar RecognizerEngine = /** @class */ (function () {\n function RecognizerEngine() {\n }\n RecognizerEngine.prototype.initRecognizerEngine = function (tokenVocabulary, config) {\n this.className = classNameFromInstance(this);\n // TODO: would using an ES6 Map or plain object be faster (CST building scenario)\n this.shortRuleNameToFull = {};\n this.fullRuleNameToShort = {};\n this.ruleShortNameIdx = 256;\n this.tokenMatcher = tokenStructuredMatcherNoCategories;\n this.definedRulesNames = [];\n this.tokensMap = {};\n this.isBackTrackingStack = [];\n this.RULE_STACK = [];\n this.RULE_OCCURRENCE_STACK = [];\n this.gastProductionsCache = {};\n if (has(config, \"serializedGrammar\")) {\n throw Error(\"The Parser's configuration can no longer contain a property.\\n\" +\n \"\\tSee: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_6-0-0\\n\" +\n \"\\tFor Further details.\");\n }\n if (isArray(tokenVocabulary)) {\n // This only checks for Token vocabularies provided as arrays.\n // That is good enough because the main objective is to detect users of pre-V4.0 APIs\n // rather than all edge cases of empty Token vocabularies.\n if (isEmpty(tokenVocabulary)) {\n throw Error(\"A Token Vocabulary cannot be empty.\\n\" +\n \"\\tNote that the first argument for the parser constructor\\n\" +\n \"\\tis no longer a Token vector (since v4.0).\");\n }\n if (typeof tokenVocabulary[0].startOffset === \"number\") {\n throw Error(\"The Parser constructor no longer accepts a token vector as the first argument.\\n\" +\n \"\\tSee: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_4-0-0\\n\" +\n \"\\tFor Further details.\");\n }\n }\n if (isArray(tokenVocabulary)) {\n this.tokensMap = reduce(tokenVocabulary, function (acc, tokType) {\n acc[tokType.name] = tokType;\n return acc;\n }, {});\n }\n else if (has(tokenVocabulary, \"modes\") &&\n every(flatten(values(tokenVocabulary.modes)), isTokenType)) {\n var allTokenTypes = flatten(values(tokenVocabulary.modes));\n var uniqueTokens = uniq(allTokenTypes);\n this.tokensMap = reduce(uniqueTokens, function (acc, tokType) {\n acc[tokType.name] = tokType;\n return acc;\n }, {});\n }\n else if (isObject(tokenVocabulary)) {\n this.tokensMap = cloneObj(tokenVocabulary);\n }\n else {\n throw new Error(\" argument must be An Array of Token constructors,\" +\n \" A dictionary of Token constructors or an IMultiModeLexerDefinition\");\n }\n // always add EOF to the tokenNames -> constructors map. it is useful to assure all the input has been\n // parsed with a clear error message (\"expecting EOF but found ...\")\n /* tslint:disable */\n this.tokensMap[\"EOF\"] = EOF;\n // TODO: This check may not be accurate for multi mode lexers\n var noTokenCategoriesUsed = every(values(tokenVocabulary), function (tokenConstructor) { return isEmpty(tokenConstructor.categoryMatches); });\n this.tokenMatcher = noTokenCategoriesUsed\n ? tokenStructuredMatcherNoCategories\n : tokenStructuredMatcher;\n // Because ES2015+ syntax should be supported for creating Token classes\n // We cannot assume that the Token classes were created using the \"extendToken\" utilities\n // Therefore we must augment the Token classes both on Lexer initialization and on Parser initialization\n augmentTokenTypes(values(this.tokensMap));\n };\n RecognizerEngine.prototype.defineRule = function (ruleName, impl, config) {\n if (this.selfAnalysisDone) {\n throw Error(\"Grammar rule <\" + ruleName + \"> may not be defined after the 'performSelfAnalysis' method has been called'\\n\" +\n \"Make sure that all grammar rule definitions are done before 'performSelfAnalysis' is called.\");\n }\n var resyncEnabled = has(config, \"resyncEnabled\")\n ? config.resyncEnabled\n : DEFAULT_RULE_CONFIG.resyncEnabled;\n var recoveryValueFunc = has(config, \"recoveryValueFunc\")\n ? config.recoveryValueFunc\n : DEFAULT_RULE_CONFIG.recoveryValueFunc;\n // performance optimization: Use small integers as keys for the longer human readable \"full\" rule names.\n // this greatly improves Map access time (as much as 8% for some performance benchmarks).\n /* tslint:disable */\n var shortName = this.ruleShortNameIdx << (BITS_FOR_METHOD_TYPE + BITS_FOR_OCCURRENCE_IDX);\n /* tslint:enable */\n this.ruleShortNameIdx++;\n this.shortRuleNameToFull[shortName] = ruleName;\n this.fullRuleNameToShort[ruleName] = shortName;\n function invokeRuleWithTry(args) {\n try {\n if (this.outputCst === true) {\n impl.apply(this, args);\n var cst = this.CST_STACK[this.CST_STACK.length - 1];\n this.cstPostRule(cst);\n return cst;\n }\n else {\n return impl.apply(this, args);\n }\n }\n catch (e) {\n return this.invokeRuleCatch(e, resyncEnabled, recoveryValueFunc);\n }\n finally {\n this.ruleFinallyStateUpdate();\n }\n }\n var wrappedGrammarRule;\n wrappedGrammarRule = function (idxInCallingRule, args) {\n if (idxInCallingRule === void 0) { idxInCallingRule = 0; }\n this.ruleInvocationStateUpdate(shortName, ruleName, idxInCallingRule);\n return invokeRuleWithTry.call(this, args);\n };\n var ruleNamePropName = \"ruleName\";\n wrappedGrammarRule[ruleNamePropName] = ruleName;\n wrappedGrammarRule[\"originalGrammarAction\"] = impl;\n return wrappedGrammarRule;\n };\n RecognizerEngine.prototype.invokeRuleCatch = function (e, resyncEnabledConfig, recoveryValueFunc) {\n var isFirstInvokedRule = this.RULE_STACK.length === 1;\n // note the reSync is always enabled for the first rule invocation, because we must always be able to\n // reSync with EOF and just output some INVALID ParseTree\n // during backtracking reSync recovery is disabled, otherwise we can't be certain the backtracking\n // path is really the most valid one\n var reSyncEnabled = resyncEnabledConfig && !this.isBackTracking() && this.recoveryEnabled;\n if (isRecognitionException(e)) {\n var recogError = e;\n if (reSyncEnabled) {\n var reSyncTokType = this.findReSyncTokenType();\n if (this.isInCurrentRuleReSyncSet(reSyncTokType)) {\n recogError.resyncedTokens = this.reSyncTo(reSyncTokType);\n if (this.outputCst) {\n var partialCstResult = this.CST_STACK[this.CST_STACK.length - 1];\n partialCstResult.recoveredNode = true;\n return partialCstResult;\n }\n else {\n return recoveryValueFunc();\n }\n }\n else {\n if (this.outputCst) {\n var partialCstResult = this.CST_STACK[this.CST_STACK.length - 1];\n partialCstResult.recoveredNode = true;\n recogError.partialCstResult = partialCstResult;\n }\n // to be handled Further up the call stack\n throw recogError;\n }\n }\n else if (isFirstInvokedRule) {\n // otherwise a Redundant input error will be created as well and we cannot guarantee that this is indeed the case\n this.moveToTerminatedState();\n // the parser should never throw one of its own errors outside its flow.\n // even if error recovery is disabled\n return recoveryValueFunc();\n }\n else {\n // to be recovered Further up the call stack\n throw recogError;\n }\n }\n else {\n // some other Error type which we don't know how to handle (for example a built in JavaScript Error)\n throw e;\n }\n };\n // Implementation of parsing DSL\n RecognizerEngine.prototype.optionInternal = function (actionORMethodDef, occurrence) {\n var key = this.getKeyForAutomaticLookahead(OPTION_IDX, occurrence);\n return this.optionInternalLogic(actionORMethodDef, occurrence, key);\n };\n RecognizerEngine.prototype.optionInternalLogic = function (actionORMethodDef, occurrence, key) {\n var _this = this;\n var lookAheadFunc = this.getLaFuncFromCache(key);\n var action;\n var predicate;\n if (actionORMethodDef.DEF !== undefined) {\n action = actionORMethodDef.DEF;\n predicate = actionORMethodDef.GATE;\n // predicate present\n if (predicate !== undefined) {\n var orgLookaheadFunction_1 = lookAheadFunc;\n lookAheadFunc = function () {\n return predicate.call(_this) && orgLookaheadFunction_1.call(_this);\n };\n }\n }\n else {\n action = actionORMethodDef;\n }\n if (lookAheadFunc.call(this) === true) {\n return action.call(this);\n }\n return undefined;\n };\n RecognizerEngine.prototype.atLeastOneInternal = function (prodOccurrence, actionORMethodDef) {\n var laKey = this.getKeyForAutomaticLookahead(AT_LEAST_ONE_IDX, prodOccurrence);\n return this.atLeastOneInternalLogic(prodOccurrence, actionORMethodDef, laKey);\n };\n RecognizerEngine.prototype.atLeastOneInternalLogic = function (prodOccurrence, actionORMethodDef, key) {\n var _this = this;\n var lookAheadFunc = this.getLaFuncFromCache(key);\n var action;\n var predicate;\n if (actionORMethodDef.DEF !== undefined) {\n action = actionORMethodDef.DEF;\n predicate = actionORMethodDef.GATE;\n // predicate present\n if (predicate !== undefined) {\n var orgLookaheadFunction_2 = lookAheadFunc;\n lookAheadFunc = function () {\n return predicate.call(_this) && orgLookaheadFunction_2.call(_this);\n };\n }\n }\n else {\n action = actionORMethodDef;\n }\n if (lookAheadFunc.call(this) === true) {\n var notStuck = this.doSingleRepetition(action);\n while (lookAheadFunc.call(this) === true &&\n notStuck === true) {\n notStuck = this.doSingleRepetition(action);\n }\n }\n else {\n throw this.raiseEarlyExitException(prodOccurrence, PROD_TYPE.REPETITION_MANDATORY, actionORMethodDef.ERR_MSG);\n }\n // note that while it may seem that this can cause an error because by using a recursive call to\n // AT_LEAST_ONE we change the grammar to AT_LEAST_TWO, AT_LEAST_THREE ... , the possible recursive call\n // from the tryInRepetitionRecovery(...) will only happen IFF there really are TWO/THREE/.... items.\n // Performance optimization: \"attemptInRepetitionRecovery\" will be defined as NOOP unless recovery is enabled\n this.attemptInRepetitionRecovery(this.atLeastOneInternal, [prodOccurrence, actionORMethodDef], lookAheadFunc, AT_LEAST_ONE_IDX, prodOccurrence, NextTerminalAfterAtLeastOneWalker);\n };\n RecognizerEngine.prototype.atLeastOneSepFirstInternal = function (prodOccurrence, options) {\n var laKey = this.getKeyForAutomaticLookahead(AT_LEAST_ONE_SEP_IDX, prodOccurrence);\n this.atLeastOneSepFirstInternalLogic(prodOccurrence, options, laKey);\n };\n RecognizerEngine.prototype.atLeastOneSepFirstInternalLogic = function (prodOccurrence, options, key) {\n var _this = this;\n var action = options.DEF;\n var separator = options.SEP;\n var firstIterationLookaheadFunc = this.getLaFuncFromCache(key);\n // 1st iteration\n if (firstIterationLookaheadFunc.call(this) === true) {\n ;\n action.call(this);\n // TODO: Optimization can move this function construction into \"attemptInRepetitionRecovery\"\n // because it is only needed in error recovery scenarios.\n var separatorLookAheadFunc = function () {\n return _this.tokenMatcher(_this.LA(1), separator);\n };\n // 2nd..nth iterations\n while (this.tokenMatcher(this.LA(1), separator) === true) {\n // note that this CONSUME will never enter recovery because\n // the separatorLookAheadFunc checks that the separator really does exist.\n this.CONSUME(separator);\n action.call(this);\n }\n // Performance optimization: \"attemptInRepetitionRecovery\" will be defined as NOOP unless recovery is enabled\n this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal, [\n prodOccurrence,\n separator,\n separatorLookAheadFunc,\n action,\n NextTerminalAfterAtLeastOneSepWalker\n ], separatorLookAheadFunc, AT_LEAST_ONE_SEP_IDX, prodOccurrence, NextTerminalAfterAtLeastOneSepWalker);\n }\n else {\n throw this.raiseEarlyExitException(prodOccurrence, PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR, options.ERR_MSG);\n }\n };\n RecognizerEngine.prototype.manyInternal = function (prodOccurrence, actionORMethodDef) {\n var laKey = this.getKeyForAutomaticLookahead(MANY_IDX, prodOccurrence);\n return this.manyInternalLogic(prodOccurrence, actionORMethodDef, laKey);\n };\n RecognizerEngine.prototype.manyInternalLogic = function (prodOccurrence, actionORMethodDef, key) {\n var _this = this;\n var lookaheadFunction = this.getLaFuncFromCache(key);\n var action;\n var predicate;\n if (actionORMethodDef.DEF !== undefined) {\n action = actionORMethodDef.DEF;\n predicate = actionORMethodDef.GATE;\n // predicate present\n if (predicate !== undefined) {\n var orgLookaheadFunction_3 = lookaheadFunction;\n lookaheadFunction = function () {\n return predicate.call(_this) && orgLookaheadFunction_3.call(_this);\n };\n }\n }\n else {\n action = actionORMethodDef;\n }\n var notStuck = true;\n while (lookaheadFunction.call(this) === true && notStuck === true) {\n notStuck = this.doSingleRepetition(action);\n }\n // Performance optimization: \"attemptInRepetitionRecovery\" will be defined as NOOP unless recovery is enabled\n this.attemptInRepetitionRecovery(this.manyInternal, [prodOccurrence, actionORMethodDef], lookaheadFunction, MANY_IDX, prodOccurrence, NextTerminalAfterManyWalker, \n // The notStuck parameter is only relevant when \"attemptInRepetitionRecovery\"\n // is invoked from manyInternal, in the MANY_SEP case and AT_LEAST_ONE[_SEP]\n // An infinite loop cannot occur as:\n // - Either the lookahead is guaranteed to consume something (Single Token Separator)\n // - AT_LEAST_ONE by definition is guaranteed to consume something (or error out).\n notStuck);\n };\n RecognizerEngine.prototype.manySepFirstInternal = function (prodOccurrence, options) {\n var laKey = this.getKeyForAutomaticLookahead(MANY_SEP_IDX, prodOccurrence);\n this.manySepFirstInternalLogic(prodOccurrence, options, laKey);\n };\n RecognizerEngine.prototype.manySepFirstInternalLogic = function (prodOccurrence, options, key) {\n var _this = this;\n var action = options.DEF;\n var separator = options.SEP;\n var firstIterationLaFunc = this.getLaFuncFromCache(key);\n // 1st iteration\n if (firstIterationLaFunc.call(this) === true) {\n action.call(this);\n var separatorLookAheadFunc = function () {\n return _this.tokenMatcher(_this.LA(1), separator);\n };\n // 2nd..nth iterations\n while (this.tokenMatcher(this.LA(1), separator) === true) {\n // note that this CONSUME will never enter recovery because\n // the separatorLookAheadFunc checks that the separator really does exist.\n this.CONSUME(separator);\n // No need for checking infinite loop here due to consuming the separator.\n action.call(this);\n }\n // Performance optimization: \"attemptInRepetitionRecovery\" will be defined as NOOP unless recovery is enabled\n this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal, [\n prodOccurrence,\n separator,\n separatorLookAheadFunc,\n action,\n NextTerminalAfterManySepWalker\n ], separatorLookAheadFunc, MANY_SEP_IDX, prodOccurrence, NextTerminalAfterManySepWalker);\n }\n };\n RecognizerEngine.prototype.repetitionSepSecondInternal = function (prodOccurrence, separator, separatorLookAheadFunc, action, nextTerminalAfterWalker) {\n while (separatorLookAheadFunc()) {\n // note that this CONSUME will never enter recovery because\n // the separatorLookAheadFunc checks that the separator really does exist.\n this.CONSUME(separator);\n action.call(this);\n }\n // we can only arrive to this function after an error\n // has occurred (hence the name 'second') so the following\n // IF will always be entered, its possible to remove it...\n // however it is kept to avoid confusion and be consistent.\n // Performance optimization: \"attemptInRepetitionRecovery\" will be defined as NOOP unless recovery is enabled\n /* istanbul ignore else */\n this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal, [\n prodOccurrence,\n separator,\n separatorLookAheadFunc,\n action,\n nextTerminalAfterWalker\n ], separatorLookAheadFunc, AT_LEAST_ONE_SEP_IDX, prodOccurrence, nextTerminalAfterWalker);\n };\n RecognizerEngine.prototype.doSingleRepetition = function (action) {\n var beforeIteration = this.getLexerPosition();\n action.call(this);\n var afterIteration = this.getLexerPosition();\n // This boolean will indicate if this repetition progressed\n // or if we are \"stuck\" (potential infinite loop in the repetition).\n return afterIteration > beforeIteration;\n };\n RecognizerEngine.prototype.orInternal = function (altsOrOpts, occurrence) {\n var laKey = this.getKeyForAutomaticLookahead(OR_IDX, occurrence);\n var alts = isArray(altsOrOpts)\n ? altsOrOpts\n : altsOrOpts.DEF;\n var laFunc = this.getLaFuncFromCache(laKey);\n var altIdxToTake = laFunc.call(this, alts);\n if (altIdxToTake !== undefined) {\n var chosenAlternative = alts[altIdxToTake];\n return chosenAlternative.ALT.call(this);\n }\n this.raiseNoAltException(occurrence, altsOrOpts.ERR_MSG);\n };\n RecognizerEngine.prototype.ruleFinallyStateUpdate = function () {\n this.RULE_STACK.pop();\n this.RULE_OCCURRENCE_STACK.pop();\n // NOOP when cst is disabled\n this.cstFinallyStateUpdate();\n if (this.RULE_STACK.length === 0 && this.isAtEndOfInput() === false) {\n var firstRedundantTok = this.LA(1);\n var errMsg = this.errorMessageProvider.buildNotAllInputParsedMessage({\n firstRedundant: firstRedundantTok,\n ruleName: this.getCurrRuleFullName()\n });\n this.SAVE_ERROR(new NotAllInputParsedException(errMsg, firstRedundantTok));\n }\n };\n RecognizerEngine.prototype.subruleInternal = function (ruleToCall, idx, options) {\n var ruleResult;\n try {\n var args = options !== undefined ? options.ARGS : undefined;\n ruleResult = ruleToCall.call(this, idx, args);\n this.cstPostNonTerminal(ruleResult, options !== undefined && options.LABEL !== undefined\n ? options.LABEL\n : ruleToCall.ruleName);\n return ruleResult;\n }\n catch (e) {\n this.subruleInternalError(e, options, ruleToCall.ruleName);\n }\n };\n RecognizerEngine.prototype.subruleInternalError = function (e, options, ruleName) {\n if (isRecognitionException(e) && e.partialCstResult !== undefined) {\n this.cstPostNonTerminal(e.partialCstResult, options !== undefined && options.LABEL !== undefined\n ? options.LABEL\n : ruleName);\n delete e.partialCstResult;\n }\n throw e;\n };\n RecognizerEngine.prototype.consumeInternal = function (tokType, idx, options) {\n var consumedToken;\n try {\n var nextToken = this.LA(1);\n if (this.tokenMatcher(nextToken, tokType) === true) {\n this.consumeToken();\n consumedToken = nextToken;\n }\n else {\n this.consumeInternalError(tokType, nextToken, options);\n }\n }\n catch (eFromConsumption) {\n consumedToken = this.consumeInternalRecovery(tokType, idx, eFromConsumption);\n }\n this.cstPostTerminal(options !== undefined && options.LABEL !== undefined\n ? options.LABEL\n : tokType.name, consumedToken);\n return consumedToken;\n };\n RecognizerEngine.prototype.consumeInternalError = function (tokType, nextToken, options) {\n var msg;\n var previousToken = this.LA(0);\n if (options !== undefined && options.ERR_MSG) {\n msg = options.ERR_MSG;\n }\n else {\n msg = this.errorMessageProvider.buildMismatchTokenMessage({\n expected: tokType,\n actual: nextToken,\n previous: previousToken,\n ruleName: this.getCurrRuleFullName()\n });\n }\n throw this.SAVE_ERROR(new MismatchedTokenException(msg, nextToken, previousToken));\n };\n RecognizerEngine.prototype.consumeInternalRecovery = function (tokType, idx, eFromConsumption) {\n // no recovery allowed during backtracking, otherwise backtracking may recover invalid syntax and accept it\n // but the original syntax could have been parsed successfully without any backtracking + recovery\n if (this.recoveryEnabled &&\n // TODO: more robust checking of the exception type. Perhaps Typescript extending expressions?\n eFromConsumption.name === \"MismatchedTokenException\" &&\n !this.isBackTracking()) {\n var follows = this.getFollowsForInRuleRecovery(tokType, idx);\n try {\n return this.tryInRuleRecovery(tokType, follows);\n }\n catch (eFromInRuleRecovery) {\n if (eFromInRuleRecovery.name === IN_RULE_RECOVERY_EXCEPTION) {\n // failed in RuleRecovery.\n // throw the original error in order to trigger reSync error recovery\n throw eFromConsumption;\n }\n else {\n throw eFromInRuleRecovery;\n }\n }\n }\n else {\n throw eFromConsumption;\n }\n };\n RecognizerEngine.prototype.saveRecogState = function () {\n // errors is a getter which will clone the errors array\n var savedErrors = this.errors;\n var savedRuleStack = cloneArr(this.RULE_STACK);\n return {\n errors: savedErrors,\n lexerState: this.exportLexerState(),\n RULE_STACK: savedRuleStack,\n CST_STACK: this.CST_STACK\n };\n };\n RecognizerEngine.prototype.reloadRecogState = function (newState) {\n this.errors = newState.errors;\n this.importLexerState(newState.lexerState);\n this.RULE_STACK = newState.RULE_STACK;\n };\n RecognizerEngine.prototype.ruleInvocationStateUpdate = function (shortName, fullName, idxInCallingRule) {\n this.RULE_OCCURRENCE_STACK.push(idxInCallingRule);\n this.RULE_STACK.push(shortName);\n // NOOP when cst is disabled\n this.cstInvocationStateUpdate(fullName, shortName);\n };\n RecognizerEngine.prototype.isBackTracking = function () {\n return this.isBackTrackingStack.length !== 0;\n };\n RecognizerEngine.prototype.getCurrRuleFullName = function () {\n var shortName = this.getLastExplicitRuleShortName();\n return this.shortRuleNameToFull[shortName];\n };\n RecognizerEngine.prototype.shortRuleNameToFullName = function (shortName) {\n return this.shortRuleNameToFull[shortName];\n };\n RecognizerEngine.prototype.isAtEndOfInput = function () {\n return this.tokenMatcher(this.LA(1), EOF);\n };\n RecognizerEngine.prototype.reset = function () {\n this.resetLexerState();\n this.isBackTrackingStack = [];\n this.errors = [];\n this.RULE_STACK = [];\n // TODO: extract a specific reset for TreeBuilder trait\n this.CST_STACK = [];\n this.RULE_OCCURRENCE_STACK = [];\n };\n return RecognizerEngine;\n}());\nexport { RecognizerEngine };\n//# sourceMappingURL=recognizer_engine.js.map","import { EarlyExitException, isRecognitionException, NoViableAltException } from \"../../exceptions_public\";\nimport { cloneArr, has } from \"../../../utils/utils\";\nimport { getLookaheadPathsForOptionalProd, getLookaheadPathsForOr } from \"../../grammar/lookahead\";\nimport { DEFAULT_PARSER_CONFIG } from \"../parser\";\n/**\n * Trait responsible for runtime parsing errors.\n */\nvar ErrorHandler = /** @class */ (function () {\n function ErrorHandler() {\n }\n ErrorHandler.prototype.initErrorHandler = function (config) {\n this._errors = [];\n this.errorMessageProvider = has(config, \"errorMessageProvider\")\n ? config.errorMessageProvider\n : DEFAULT_PARSER_CONFIG.errorMessageProvider;\n };\n ErrorHandler.prototype.SAVE_ERROR = function (error) {\n if (isRecognitionException(error)) {\n error.context = {\n ruleStack: this.getHumanReadableRuleStack(),\n ruleOccurrenceStack: cloneArr(this.RULE_OCCURRENCE_STACK)\n };\n this._errors.push(error);\n return error;\n }\n else {\n throw Error(\"Trying to save an Error which is not a RecognitionException\");\n }\n };\n Object.defineProperty(ErrorHandler.prototype, \"errors\", {\n get: function () {\n return cloneArr(this._errors);\n },\n set: function (newErrors) {\n this._errors = newErrors;\n },\n enumerable: false,\n configurable: true\n });\n // TODO: consider caching the error message computed information\n ErrorHandler.prototype.raiseEarlyExitException = function (occurrence, prodType, userDefinedErrMsg) {\n var ruleName = this.getCurrRuleFullName();\n var ruleGrammar = this.getGAstProductions()[ruleName];\n var lookAheadPathsPerAlternative = getLookaheadPathsForOptionalProd(occurrence, ruleGrammar, prodType, this.maxLookahead);\n var insideProdPaths = lookAheadPathsPerAlternative[0];\n var actualTokens = [];\n for (var i = 1; i <= this.maxLookahead; i++) {\n actualTokens.push(this.LA(i));\n }\n var msg = this.errorMessageProvider.buildEarlyExitMessage({\n expectedIterationPaths: insideProdPaths,\n actual: actualTokens,\n previous: this.LA(0),\n customUserDescription: userDefinedErrMsg,\n ruleName: ruleName\n });\n throw this.SAVE_ERROR(new EarlyExitException(msg, this.LA(1), this.LA(0)));\n };\n // TODO: consider caching the error message computed information\n ErrorHandler.prototype.raiseNoAltException = function (occurrence, errMsgTypes) {\n var ruleName = this.getCurrRuleFullName();\n var ruleGrammar = this.getGAstProductions()[ruleName];\n // TODO: getLookaheadPathsForOr can be slow for large enough maxLookahead and certain grammars, consider caching ?\n var lookAheadPathsPerAlternative = getLookaheadPathsForOr(occurrence, ruleGrammar, this.maxLookahead);\n var actualTokens = [];\n for (var i = 1; i <= this.maxLookahead; i++) {\n actualTokens.push(this.LA(i));\n }\n var previousToken = this.LA(0);\n var errMsg = this.errorMessageProvider.buildNoViableAltMessage({\n expectedPathsPerAlt: lookAheadPathsPerAlternative,\n actual: actualTokens,\n previous: previousToken,\n customUserDescription: errMsgTypes,\n ruleName: this.getCurrRuleFullName()\n });\n throw this.SAVE_ERROR(new NoViableAltException(errMsg, this.LA(1), previousToken));\n };\n return ErrorHandler;\n}());\nexport { ErrorHandler };\n//# sourceMappingURL=error_handler.js.map","import { NextAfterTokenWalker, nextPossibleTokensAfter } from \"../../grammar/interpreter\";\nimport { first, isUndefined } from \"../../../utils/utils\";\nvar ContentAssist = /** @class */ (function () {\n function ContentAssist() {\n }\n ContentAssist.prototype.initContentAssist = function () { };\n ContentAssist.prototype.computeContentAssist = function (startRuleName, precedingInput) {\n var startRuleGast = this.gastProductionsCache[startRuleName];\n if (isUndefined(startRuleGast)) {\n throw Error(\"Rule ->\" + startRuleName + \"<- does not exist in this grammar.\");\n }\n return nextPossibleTokensAfter([startRuleGast], precedingInput, this.tokenMatcher, this.maxLookahead);\n };\n // TODO: should this be a member method or a utility? it does not have any state or usage of 'this'...\n // TODO: should this be more explicitly part of the public API?\n ContentAssist.prototype.getNextPossibleTokenTypes = function (grammarPath) {\n var topRuleName = first(grammarPath.ruleStack);\n var gastProductions = this.getGAstProductions();\n var topProduction = gastProductions[topRuleName];\n var nextPossibleTokenTypes = new NextAfterTokenWalker(topProduction, grammarPath).startWalking();\n return nextPossibleTokenTypes;\n };\n return ContentAssist;\n}());\nexport { ContentAssist };\n//# sourceMappingURL=context_assist.js.map","import { forEach, has, isArray, isFunction, peek, some } from \"../../../utils/utils\";\nimport { Alternation, Alternative, NonTerminal, Option, Repetition, RepetitionMandatory, RepetitionMandatoryWithSeparator, RepetitionWithSeparator, Rule, Terminal } from \"../../grammar/gast/gast_public\";\nimport { Lexer } from \"../../../scan/lexer_public\";\nimport { augmentTokenTypes, hasShortKeyProperty } from \"../../../scan/tokens\";\nimport { createToken, createTokenInstance } from \"../../../scan/tokens_public\";\nimport { END_OF_FILE } from \"../parser\";\nimport { BITS_FOR_OCCURRENCE_IDX } from \"../../grammar/keys\";\nvar RECORDING_NULL_OBJECT = {\n description: \"This Object indicates the Parser is during Recording Phase\"\n};\nObject.freeze(RECORDING_NULL_OBJECT);\nvar HANDLE_SEPARATOR = true;\nvar MAX_METHOD_IDX = Math.pow(2, BITS_FOR_OCCURRENCE_IDX) - 1;\nvar RFT = createToken({ name: \"RECORDING_PHASE_TOKEN\", pattern: Lexer.NA });\naugmentTokenTypes([RFT]);\nvar RECORDING_PHASE_TOKEN = createTokenInstance(RFT, \"This IToken indicates the Parser is in Recording Phase\\n\\t\" +\n \"\" +\n \"See: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details\", \n// Using \"-1\" instead of NaN (as in EOF) because an actual number is less likely to\n// cause errors if the output of LA or CONSUME would be (incorrectly) used during the recording phase.\n-1, -1, -1, -1, -1, -1);\nObject.freeze(RECORDING_PHASE_TOKEN);\nvar RECORDING_PHASE_CSTNODE = {\n name: \"This CSTNode indicates the Parser is in Recording Phase\\n\\t\" +\n \"See: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details\",\n children: {}\n};\n/**\n * This trait handles the creation of the GAST structure for Chevrotain Grammars\n */\nvar GastRecorder = /** @class */ (function () {\n function GastRecorder() {\n }\n GastRecorder.prototype.initGastRecorder = function (config) {\n this.recordingProdStack = [];\n this.RECORDING_PHASE = false;\n };\n GastRecorder.prototype.enableRecording = function () {\n var _this = this;\n this.RECORDING_PHASE = true;\n this.TRACE_INIT(\"Enable Recording\", function () {\n var _loop_1 = function (i) {\n var idx = i > 0 ? i : \"\";\n _this[\"CONSUME\" + idx] = function (arg1, arg2) {\n return this.consumeInternalRecord(arg1, i, arg2);\n };\n _this[\"SUBRULE\" + idx] = function (arg1, arg2) {\n return this.subruleInternalRecord(arg1, i, arg2);\n };\n _this[\"OPTION\" + idx] = function (arg1) {\n return this.optionInternalRecord(arg1, i);\n };\n _this[\"OR\" + idx] = function (arg1) {\n return this.orInternalRecord(arg1, i);\n };\n _this[\"MANY\" + idx] = function (arg1) {\n this.manyInternalRecord(i, arg1);\n };\n _this[\"MANY_SEP\" + idx] = function (arg1) {\n this.manySepFirstInternalRecord(i, arg1);\n };\n _this[\"AT_LEAST_ONE\" + idx] = function (arg1) {\n this.atLeastOneInternalRecord(i, arg1);\n };\n _this[\"AT_LEAST_ONE_SEP\" + idx] = function (arg1) {\n this.atLeastOneSepFirstInternalRecord(i, arg1);\n };\n };\n /**\n * Warning Dark Voodoo Magic upcoming!\n * We are \"replacing\" the public parsing DSL methods API\n * With **new** alternative implementations on the Parser **instance**\n *\n * So far this is the only way I've found to avoid performance regressions during parsing time.\n * - Approx 30% performance regression was measured on Chrome 75 Canary when attempting to replace the \"internal\"\n * implementations directly instead.\n */\n for (var i = 0; i < 10; i++) {\n _loop_1(i);\n }\n // DSL methods with the idx(suffix) as an argument\n _this[\"consume\"] = function (idx, arg1, arg2) {\n return this.consumeInternalRecord(arg1, idx, arg2);\n };\n _this[\"subrule\"] = function (idx, arg1, arg2) {\n return this.subruleInternalRecord(arg1, idx, arg2);\n };\n _this[\"option\"] = function (idx, arg1) {\n return this.optionInternalRecord(arg1, idx);\n };\n _this[\"or\"] = function (idx, arg1) {\n return this.orInternalRecord(arg1, idx);\n };\n _this[\"many\"] = function (idx, arg1) {\n this.manyInternalRecord(idx, arg1);\n };\n _this[\"atLeastOne\"] = function (idx, arg1) {\n this.atLeastOneInternalRecord(idx, arg1);\n };\n _this.ACTION = _this.ACTION_RECORD;\n _this.BACKTRACK = _this.BACKTRACK_RECORD;\n _this.LA = _this.LA_RECORD;\n });\n };\n GastRecorder.prototype.disableRecording = function () {\n var _this = this;\n this.RECORDING_PHASE = false;\n // By deleting these **instance** properties, any future invocation\n // will be deferred to the original methods on the **prototype** object\n // This seems to get rid of any incorrect optimizations that V8 may\n // do during the recording phase.\n this.TRACE_INIT(\"Deleting Recording methods\", function () {\n for (var i = 0; i < 10; i++) {\n var idx = i > 0 ? i : \"\";\n delete _this[\"CONSUME\" + idx];\n delete _this[\"SUBRULE\" + idx];\n delete _this[\"OPTION\" + idx];\n delete _this[\"OR\" + idx];\n delete _this[\"MANY\" + idx];\n delete _this[\"MANY_SEP\" + idx];\n delete _this[\"AT_LEAST_ONE\" + idx];\n delete _this[\"AT_LEAST_ONE_SEP\" + idx];\n }\n delete _this[\"consume\"];\n delete _this[\"subrule\"];\n delete _this[\"option\"];\n delete _this[\"or\"];\n delete _this[\"many\"];\n delete _this[\"atLeastOne\"];\n delete _this.ACTION;\n delete _this.BACKTRACK;\n delete _this.LA;\n });\n };\n // TODO: is there any way to use this method to check no\n // Parser methods are called inside an ACTION?\n // Maybe try/catch/finally on ACTIONS while disabling the recorders state changes?\n GastRecorder.prototype.ACTION_RECORD = function (impl) {\n // NO-OP during recording\n return;\n };\n // Executing backtracking logic will break our recording logic assumptions\n GastRecorder.prototype.BACKTRACK_RECORD = function (grammarRule, args) {\n return function () { return true; };\n };\n // LA is part of the official API and may be used for custom lookahead logic\n // by end users who may forget to wrap it in ACTION or inside a GATE\n GastRecorder.prototype.LA_RECORD = function (howMuch) {\n // We cannot use the RECORD_PHASE_TOKEN here because someone may depend\n // On LA return EOF at the end of the input so an infinite loop may occur.\n return END_OF_FILE;\n };\n GastRecorder.prototype.topLevelRuleRecord = function (name, def) {\n try {\n var newTopLevelRule = new Rule({ definition: [], name: name });\n newTopLevelRule.name = name;\n this.recordingProdStack.push(newTopLevelRule);\n def.call(this);\n this.recordingProdStack.pop();\n return newTopLevelRule;\n }\n catch (originalError) {\n if (originalError.KNOWN_RECORDER_ERROR !== true) {\n try {\n originalError.message =\n originalError.message +\n '\\n\\t This error was thrown during the \"grammar recording phase\" For more info see:\\n\\t' +\n \"https://chevrotain.io/docs/guide/internals.html#grammar-recording\";\n }\n catch (mutabilityError) {\n // We may not be able to modify the original error object\n throw originalError;\n }\n }\n throw originalError;\n }\n };\n // Implementation of parsing DSL\n GastRecorder.prototype.optionInternalRecord = function (actionORMethodDef, occurrence) {\n return recordProd.call(this, Option, actionORMethodDef, occurrence);\n };\n GastRecorder.prototype.atLeastOneInternalRecord = function (occurrence, actionORMethodDef) {\n recordProd.call(this, RepetitionMandatory, actionORMethodDef, occurrence);\n };\n GastRecorder.prototype.atLeastOneSepFirstInternalRecord = function (occurrence, options) {\n recordProd.call(this, RepetitionMandatoryWithSeparator, options, occurrence, HANDLE_SEPARATOR);\n };\n GastRecorder.prototype.manyInternalRecord = function (occurrence, actionORMethodDef) {\n recordProd.call(this, Repetition, actionORMethodDef, occurrence);\n };\n GastRecorder.prototype.manySepFirstInternalRecord = function (occurrence, options) {\n recordProd.call(this, RepetitionWithSeparator, options, occurrence, HANDLE_SEPARATOR);\n };\n GastRecorder.prototype.orInternalRecord = function (altsOrOpts, occurrence) {\n return recordOrProd.call(this, altsOrOpts, occurrence);\n };\n GastRecorder.prototype.subruleInternalRecord = function (ruleToCall, occurrence, options) {\n assertMethodIdxIsValid(occurrence);\n if (!ruleToCall || has(ruleToCall, \"ruleName\") === false) {\n var error = new Error(\" argument is invalid\" +\n (\" expecting a Parser method reference but got: <\" + JSON.stringify(ruleToCall) + \">\") +\n (\"\\n inside top level rule: <\" + this.recordingProdStack[0].name + \">\"));\n error.KNOWN_RECORDER_ERROR = true;\n throw error;\n }\n var prevProd = peek(this.recordingProdStack);\n var ruleName = ruleToCall[\"ruleName\"];\n var newNoneTerminal = new NonTerminal({\n idx: occurrence,\n nonTerminalName: ruleName,\n // The resolving of the `referencedRule` property will be done once all the Rule's GASTs have been created\n referencedRule: undefined\n });\n prevProd.definition.push(newNoneTerminal);\n return this.outputCst ? RECORDING_PHASE_CSTNODE : RECORDING_NULL_OBJECT;\n };\n GastRecorder.prototype.consumeInternalRecord = function (tokType, occurrence, options) {\n assertMethodIdxIsValid(occurrence);\n if (!hasShortKeyProperty(tokType)) {\n var error = new Error(\" argument is invalid\" +\n (\" expecting a TokenType reference but got: <\" + JSON.stringify(tokType) + \">\") +\n (\"\\n inside top level rule: <\" + this.recordingProdStack[0].name + \">\"));\n error.KNOWN_RECORDER_ERROR = true;\n throw error;\n }\n var prevProd = peek(this.recordingProdStack);\n var newNoneTerminal = new Terminal({\n idx: occurrence,\n terminalType: tokType\n });\n prevProd.definition.push(newNoneTerminal);\n return RECORDING_PHASE_TOKEN;\n };\n return GastRecorder;\n}());\nexport { GastRecorder };\nfunction recordProd(prodConstructor, mainProdArg, occurrence, handleSep) {\n if (handleSep === void 0) { handleSep = false; }\n assertMethodIdxIsValid(occurrence);\n var prevProd = peek(this.recordingProdStack);\n var grammarAction = isFunction(mainProdArg) ? mainProdArg : mainProdArg.DEF;\n var newProd = new prodConstructor({ definition: [], idx: occurrence });\n if (handleSep) {\n newProd.separator = mainProdArg.SEP;\n }\n if (has(mainProdArg, \"MAX_LOOKAHEAD\")) {\n newProd.maxLookahead = mainProdArg.MAX_LOOKAHEAD;\n }\n this.recordingProdStack.push(newProd);\n grammarAction.call(this);\n prevProd.definition.push(newProd);\n this.recordingProdStack.pop();\n return RECORDING_NULL_OBJECT;\n}\nfunction recordOrProd(mainProdArg, occurrence) {\n var _this = this;\n assertMethodIdxIsValid(occurrence);\n var prevProd = peek(this.recordingProdStack);\n // Only an array of alternatives\n var hasOptions = isArray(mainProdArg) === false;\n var alts = hasOptions === false ? mainProdArg : mainProdArg.DEF;\n var newOrProd = new Alternation({\n definition: [],\n idx: occurrence,\n ignoreAmbiguities: hasOptions && mainProdArg.IGNORE_AMBIGUITIES === true\n });\n if (has(mainProdArg, \"MAX_LOOKAHEAD\")) {\n newOrProd.maxLookahead = mainProdArg.MAX_LOOKAHEAD;\n }\n var hasPredicates = some(alts, function (currAlt) { return isFunction(currAlt.GATE); });\n newOrProd.hasPredicates = hasPredicates;\n prevProd.definition.push(newOrProd);\n forEach(alts, function (currAlt) {\n var currAltFlat = new Alternative({ definition: [] });\n newOrProd.definition.push(currAltFlat);\n if (has(currAlt, \"IGNORE_AMBIGUITIES\")) {\n currAltFlat.ignoreAmbiguities = currAlt.IGNORE_AMBIGUITIES;\n }\n // **implicit** ignoreAmbiguities due to usage of gate\n else if (has(currAlt, \"GATE\")) {\n currAltFlat.ignoreAmbiguities = true;\n }\n _this.recordingProdStack.push(currAltFlat);\n currAlt.ALT.call(_this);\n _this.recordingProdStack.pop();\n });\n return RECORDING_NULL_OBJECT;\n}\nfunction getIdxSuffix(idx) {\n return idx === 0 ? \"\" : \"\" + idx;\n}\nfunction assertMethodIdxIsValid(idx) {\n if (idx < 0 || idx > MAX_METHOD_IDX) {\n var error = new Error(\n // The stack trace will contain all the needed details\n \"Invalid DSL Method idx value: <\" + idx + \">\\n\\t\" +\n (\"Idx value must be a none negative value smaller than \" + (MAX_METHOD_IDX + 1)));\n error.KNOWN_RECORDER_ERROR = true;\n throw error;\n }\n}\n//# sourceMappingURL=gast_recorder.js.map","import { has, timer } from \"../../../utils/utils\";\nimport { DEFAULT_PARSER_CONFIG } from \"../parser\";\n/**\n * Trait responsible for runtime parsing errors.\n */\nvar PerformanceTracer = /** @class */ (function () {\n function PerformanceTracer() {\n }\n PerformanceTracer.prototype.initPerformanceTracer = function (config) {\n if (has(config, \"traceInitPerf\")) {\n var userTraceInitPerf = config.traceInitPerf;\n var traceIsNumber = typeof userTraceInitPerf === \"number\";\n this.traceInitMaxIdent = traceIsNumber\n ? userTraceInitPerf\n : Infinity;\n this.traceInitPerf = traceIsNumber\n ? userTraceInitPerf > 0\n : userTraceInitPerf;\n }\n else {\n this.traceInitMaxIdent = 0;\n this.traceInitPerf = DEFAULT_PARSER_CONFIG.traceInitPerf;\n }\n this.traceInitIndent = -1;\n };\n PerformanceTracer.prototype.TRACE_INIT = function (phaseDesc, phaseImpl) {\n // No need to optimize this using NOOP pattern because\n // It is not called in a hot spot...\n if (this.traceInitPerf === true) {\n this.traceInitIndent++;\n var indent = new Array(this.traceInitIndent + 1).join(\"\\t\");\n if (this.traceInitIndent < this.traceInitMaxIdent) {\n console.log(indent + \"--> <\" + phaseDesc + \">\");\n }\n var _a = timer(phaseImpl), time = _a.time, value = _a.value;\n /* istanbul ignore next - Difficult to reproduce specific performance behavior (>10ms) in tests */\n var traceMethod = time > 10 ? console.warn : console.log;\n if (this.traceInitIndent < this.traceInitMaxIdent) {\n traceMethod(indent + \"<-- <\" + phaseDesc + \"> time: \" + time + \"ms\");\n }\n this.traceInitIndent--;\n return value;\n }\n else {\n return phaseImpl();\n }\n };\n return PerformanceTracer;\n}());\nexport { PerformanceTracer };\n//# sourceMappingURL=perf_tracer.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { applyMixins, cloneObj, forEach, has, isEmpty, map, toFastProperties, values } from \"../../utils/utils\";\nimport { computeAllProdsFollows } from \"../grammar/follow\";\nimport { createTokenInstance, EOF } from \"../../scan/tokens_public\";\nimport { defaultGrammarValidatorErrorProvider, defaultParserErrorProvider } from \"../errors_public\";\nimport { resolveGrammar, validateGrammar } from \"../grammar/gast/gast_resolver_public\";\nimport { Recoverable } from \"./traits/recoverable\";\nimport { LooksAhead } from \"./traits/looksahead\";\nimport { TreeBuilder } from \"./traits/tree_builder\";\nimport { LexerAdapter } from \"./traits/lexer_adapter\";\nimport { RecognizerApi } from \"./traits/recognizer_api\";\nimport { RecognizerEngine } from \"./traits/recognizer_engine\";\nimport { ErrorHandler } from \"./traits/error_handler\";\nimport { ContentAssist } from \"./traits/context_assist\";\nimport { GastRecorder } from \"./traits/gast_recorder\";\nimport { PerformanceTracer } from \"./traits/perf_tracer\";\nexport var END_OF_FILE = createTokenInstance(EOF, \"\", NaN, NaN, NaN, NaN, NaN, NaN);\nObject.freeze(END_OF_FILE);\nexport var DEFAULT_PARSER_CONFIG = Object.freeze({\n recoveryEnabled: false,\n maxLookahead: 3,\n dynamicTokensEnabled: false,\n outputCst: true,\n errorMessageProvider: defaultParserErrorProvider,\n nodeLocationTracking: \"none\",\n traceInitPerf: false,\n skipValidations: false\n});\nexport var DEFAULT_RULE_CONFIG = Object.freeze({\n recoveryValueFunc: function () { return undefined; },\n resyncEnabled: true\n});\nexport var ParserDefinitionErrorType;\n(function (ParserDefinitionErrorType) {\n ParserDefinitionErrorType[ParserDefinitionErrorType[\"INVALID_RULE_NAME\"] = 0] = \"INVALID_RULE_NAME\";\n ParserDefinitionErrorType[ParserDefinitionErrorType[\"DUPLICATE_RULE_NAME\"] = 1] = \"DUPLICATE_RULE_NAME\";\n ParserDefinitionErrorType[ParserDefinitionErrorType[\"INVALID_RULE_OVERRIDE\"] = 2] = \"INVALID_RULE_OVERRIDE\";\n ParserDefinitionErrorType[ParserDefinitionErrorType[\"DUPLICATE_PRODUCTIONS\"] = 3] = \"DUPLICATE_PRODUCTIONS\";\n ParserDefinitionErrorType[ParserDefinitionErrorType[\"UNRESOLVED_SUBRULE_REF\"] = 4] = \"UNRESOLVED_SUBRULE_REF\";\n ParserDefinitionErrorType[ParserDefinitionErrorType[\"LEFT_RECURSION\"] = 5] = \"LEFT_RECURSION\";\n ParserDefinitionErrorType[ParserDefinitionErrorType[\"NONE_LAST_EMPTY_ALT\"] = 6] = \"NONE_LAST_EMPTY_ALT\";\n ParserDefinitionErrorType[ParserDefinitionErrorType[\"AMBIGUOUS_ALTS\"] = 7] = \"AMBIGUOUS_ALTS\";\n ParserDefinitionErrorType[ParserDefinitionErrorType[\"CONFLICT_TOKENS_RULES_NAMESPACE\"] = 8] = \"CONFLICT_TOKENS_RULES_NAMESPACE\";\n ParserDefinitionErrorType[ParserDefinitionErrorType[\"INVALID_TOKEN_NAME\"] = 9] = \"INVALID_TOKEN_NAME\";\n ParserDefinitionErrorType[ParserDefinitionErrorType[\"NO_NON_EMPTY_LOOKAHEAD\"] = 10] = \"NO_NON_EMPTY_LOOKAHEAD\";\n ParserDefinitionErrorType[ParserDefinitionErrorType[\"AMBIGUOUS_PREFIX_ALTS\"] = 11] = \"AMBIGUOUS_PREFIX_ALTS\";\n ParserDefinitionErrorType[ParserDefinitionErrorType[\"TOO_MANY_ALTS\"] = 12] = \"TOO_MANY_ALTS\";\n})(ParserDefinitionErrorType || (ParserDefinitionErrorType = {}));\nexport function EMPTY_ALT(value) {\n if (value === void 0) { value = undefined; }\n return function () {\n return value;\n };\n}\nvar Parser = /** @class */ (function () {\n function Parser(tokenVocabulary, config) {\n this.definitionErrors = [];\n this.selfAnalysisDone = false;\n var that = this;\n that.initErrorHandler(config);\n that.initLexerAdapter();\n that.initLooksAhead(config);\n that.initRecognizerEngine(tokenVocabulary, config);\n that.initRecoverable(config);\n that.initTreeBuilder(config);\n that.initContentAssist();\n that.initGastRecorder(config);\n that.initPerformanceTracer(config);\n if (has(config, \"ignoredIssues\")) {\n throw new Error(\"The IParserConfig property has been deprecated.\\n\\t\" +\n \"Please use the flag on the relevant DSL method instead.\\n\\t\" +\n \"See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#IGNORING_AMBIGUITIES\\n\\t\" +\n \"For further details.\");\n }\n this.skipValidations = has(config, \"skipValidations\")\n ? config.skipValidations\n : DEFAULT_PARSER_CONFIG.skipValidations;\n }\n /**\n * @deprecated use the **instance** method with the same name instead\n */\n Parser.performSelfAnalysis = function (parserInstance) {\n throw Error(\"The **static** `performSelfAnalysis` method has been deprecated.\" +\n \"\\t\\nUse the **instance** method with the same name instead.\");\n };\n Parser.prototype.performSelfAnalysis = function () {\n var _this = this;\n this.TRACE_INIT(\"performSelfAnalysis\", function () {\n var defErrorsMsgs;\n _this.selfAnalysisDone = true;\n var className = _this.className;\n _this.TRACE_INIT(\"toFastProps\", function () {\n // Without this voodoo magic the parser would be x3-x4 slower\n // It seems it is better to invoke `toFastProperties` **before**\n // Any manipulations of the `this` object done during the recording phase.\n toFastProperties(_this);\n });\n _this.TRACE_INIT(\"Grammar Recording\", function () {\n try {\n _this.enableRecording();\n // Building the GAST\n forEach(_this.definedRulesNames, function (currRuleName) {\n var wrappedRule = _this[currRuleName];\n var originalGrammarAction = wrappedRule[\"originalGrammarAction\"];\n var recordedRuleGast = undefined;\n _this.TRACE_INIT(currRuleName + \" Rule\", function () {\n recordedRuleGast = _this.topLevelRuleRecord(currRuleName, originalGrammarAction);\n });\n _this.gastProductionsCache[currRuleName] = recordedRuleGast;\n });\n }\n finally {\n _this.disableRecording();\n }\n });\n var resolverErrors = [];\n _this.TRACE_INIT(\"Grammar Resolving\", function () {\n resolverErrors = resolveGrammar({\n rules: values(_this.gastProductionsCache)\n });\n _this.definitionErrors.push.apply(_this.definitionErrors, resolverErrors); // mutability for the win?\n });\n _this.TRACE_INIT(\"Grammar Validations\", function () {\n // only perform additional grammar validations IFF no resolving errors have occurred.\n // as unresolved grammar may lead to unhandled runtime exceptions in the follow up validations.\n if (isEmpty(resolverErrors) && _this.skipValidations === false) {\n var validationErrors = validateGrammar({\n rules: values(_this.gastProductionsCache),\n maxLookahead: _this.maxLookahead,\n tokenTypes: values(_this.tokensMap),\n errMsgProvider: defaultGrammarValidatorErrorProvider,\n grammarName: className\n });\n _this.definitionErrors.push.apply(_this.definitionErrors, validationErrors); // mutability for the win?\n }\n });\n // this analysis may fail if the grammar is not perfectly valid\n if (isEmpty(_this.definitionErrors)) {\n // The results of these computations are not needed unless error recovery is enabled.\n if (_this.recoveryEnabled) {\n _this.TRACE_INIT(\"computeAllProdsFollows\", function () {\n var allFollows = computeAllProdsFollows(values(_this.gastProductionsCache));\n _this.resyncFollows = allFollows;\n });\n }\n _this.TRACE_INIT(\"ComputeLookaheadFunctions\", function () {\n _this.preComputeLookaheadFunctions(values(_this.gastProductionsCache));\n });\n }\n if (!Parser.DEFER_DEFINITION_ERRORS_HANDLING &&\n !isEmpty(_this.definitionErrors)) {\n defErrorsMsgs = map(_this.definitionErrors, function (defError) { return defError.message; });\n throw new Error(\"Parser Definition Errors detected:\\n \" + defErrorsMsgs.join(\"\\n-------------------------------\\n\"));\n }\n });\n };\n // Set this flag to true if you don't want the Parser to throw error when problems in it's definition are detected.\n // (normally during the parser's constructor).\n // This is a design time flag, it will not affect the runtime error handling of the parser, just design time errors,\n // for example: duplicate rule names, referencing an unresolved subrule, ect...\n // This flag should not be enabled during normal usage, it is used in special situations, for example when\n // needing to display the parser definition errors in some GUI(online playground).\n Parser.DEFER_DEFINITION_ERRORS_HANDLING = false;\n return Parser;\n}());\nexport { Parser };\napplyMixins(Parser, [\n Recoverable,\n LooksAhead,\n TreeBuilder,\n LexerAdapter,\n RecognizerEngine,\n RecognizerApi,\n ErrorHandler,\n ContentAssist,\n GastRecorder,\n PerformanceTracer\n]);\nvar CstParser = /** @class */ (function (_super) {\n __extends(CstParser, _super);\n function CstParser(tokenVocabulary, config) {\n if (config === void 0) { config = DEFAULT_PARSER_CONFIG; }\n var _this = this;\n var configClone = cloneObj(config);\n configClone.outputCst = true;\n _this = _super.call(this, tokenVocabulary, configClone) || this;\n return _this;\n }\n return CstParser;\n}(Parser));\nexport { CstParser };\nvar EmbeddedActionsParser = /** @class */ (function (_super) {\n __extends(EmbeddedActionsParser, _super);\n function EmbeddedActionsParser(tokenVocabulary, config) {\n if (config === void 0) { config = DEFAULT_PARSER_CONFIG; }\n var _this = this;\n var configClone = cloneObj(config);\n configClone.outputCst = false;\n _this = _super.call(this, tokenVocabulary, configClone) || this;\n return _this;\n }\n return EmbeddedActionsParser;\n}(Parser));\nexport { EmbeddedActionsParser };\n//# sourceMappingURL=parser.js.map","import { VERSION } from \"../version\";\nexport function createSyntaxDiagramsCode(grammar, _a) {\n var _b = _a === void 0 ? {} : _a, _c = _b.resourceBase, resourceBase = _c === void 0 ? \"https://unpkg.com/chevrotain@\" + VERSION + \"/diagrams/\" : _c, _d = _b.css, css = _d === void 0 ? \"https://unpkg.com/chevrotain@\" + VERSION + \"/diagrams/diagrams.css\" : _d;\n var header = \"\\n\\n\\n\\n\\n\\n\";\n var cssHtml = \"\\n\\n\";\n var scripts = \"\\n\\n\\n\\n\\n\";\n var diagramsDiv = \"\\n
\\n\";\n var serializedGrammar = \"\\n\\n\";\n var initLogic = \"\\n\\n\";\n return (header + cssHtml + scripts + diagramsDiv + serializedGrammar + initLogic);\n}\n//# sourceMappingURL=render_public.js.map","import { forEach, map } from \"../utils/utils\";\nimport { RepetitionMandatory, Option, RepetitionMandatoryWithSeparator, RepetitionWithSeparator, Terminal, NonTerminal, Alternation, Alternative, Repetition } from \"../parse/grammar/gast/gast_public\";\n/**\n * Missing features\n * 1. Rule arguments\n * 2. Gates\n * 3. embedded actions\n */\nvar NL = \"\\n\";\nexport function genUmdModule(options) {\n return \"\\n(function (root, factory) {\\n if (typeof define === 'function' && define.amd) {\\n // AMD. Register as an anonymous module.\\n define(['chevrotain'], factory);\\n } else if (typeof module === 'object' && module.exports) {\\n // Node. Does not work with strict CommonJS, but\\n // only CommonJS-like environments that support module.exports,\\n // like Node.\\n module.exports = factory(require('chevrotain'));\\n } else {\\n // Browser globals (root is window)\\n root.returnExports = factory(root.b);\\n }\\n}(typeof self !== 'undefined' ? self : this, function (chevrotain) {\\n\\n\" + genClass(options) + \"\\n \\nreturn {\\n \" + options.name + \": \" + options.name + \" \\n}\\n}));\\n\";\n}\nexport function genWrapperFunction(options) {\n return \" \\n\" + genClass(options) + \"\\nreturn new \" + options.name + \"(tokenVocabulary, config) \\n\";\n}\nexport function genClass(options) {\n // TODO: how to pass the token vocabulary? Constructor? other?\n var result = \"\\nfunction \" + options.name + \"(tokenVocabulary, config) {\\n // invoke super constructor\\n // No support for embedded actions currently, so we can 'hardcode'\\n // The use of CstParser.\\n chevrotain.CstParser.call(this, tokenVocabulary, config)\\n\\n const $ = this\\n\\n \" + genAllRules(options.rules) + \"\\n\\n // very important to call this after all the rules have been defined.\\n // otherwise the parser may not work correctly as it will lack information\\n // derived during the self analysis phase.\\n this.performSelfAnalysis(this)\\n}\\n\\n// inheritance as implemented in javascript in the previous decade... :(\\n\" + options.name + \".prototype = Object.create(chevrotain.CstParser.prototype)\\n\" + options.name + \".prototype.constructor = \" + options.name + \" \\n \";\n return result;\n}\nexport function genAllRules(rules) {\n var rulesText = map(rules, function (currRule) {\n return genRule(currRule, 1);\n });\n return rulesText.join(\"\\n\");\n}\nexport function genRule(prod, n) {\n var result = indent(n, \"$.RULE(\\\"\" + prod.name + \"\\\", function() {\") + NL;\n result += genDefinition(prod.definition, n + 1);\n result += indent(n + 1, \"})\") + NL;\n return result;\n}\nexport function genTerminal(prod, n) {\n var name = prod.terminalType.name;\n // TODO: potential performance optimization, avoid tokenMap Dictionary access\n return indent(n, \"$.CONSUME\" + prod.idx + \"(this.tokensMap.\" + name + \")\" + NL);\n}\nexport function genNonTerminal(prod, n) {\n return indent(n, \"$.SUBRULE\" + prod.idx + \"($.\" + prod.nonTerminalName + \")\" + NL);\n}\nexport function genAlternation(prod, n) {\n var result = indent(n, \"$.OR\" + prod.idx + \"([\") + NL;\n var alts = map(prod.definition, function (altDef) { return genSingleAlt(altDef, n + 1); });\n result += alts.join(\",\" + NL);\n result += NL + indent(n, \"])\" + NL);\n return result;\n}\nexport function genSingleAlt(prod, n) {\n var result = indent(n, \"{\") + NL;\n result += indent(n + 1, \"ALT: function() {\") + NL;\n result += genDefinition(prod.definition, n + 1);\n result += indent(n + 1, \"}\") + NL;\n result += indent(n, \"}\");\n return result;\n}\nfunction genProd(prod, n) {\n /* istanbul ignore else */\n if (prod instanceof NonTerminal) {\n return genNonTerminal(prod, n);\n }\n else if (prod instanceof Option) {\n return genDSLRule(\"OPTION\", prod, n);\n }\n else if (prod instanceof RepetitionMandatory) {\n return genDSLRule(\"AT_LEAST_ONE\", prod, n);\n }\n else if (prod instanceof RepetitionMandatoryWithSeparator) {\n return genDSLRule(\"AT_LEAST_ONE_SEP\", prod, n);\n }\n else if (prod instanceof RepetitionWithSeparator) {\n return genDSLRule(\"MANY_SEP\", prod, n);\n }\n else if (prod instanceof Repetition) {\n return genDSLRule(\"MANY\", prod, n);\n }\n else if (prod instanceof Alternation) {\n return genAlternation(prod, n);\n }\n else if (prod instanceof Terminal) {\n return genTerminal(prod, n);\n }\n else if (prod instanceof Alternative) {\n return genDefinition(prod.definition, n);\n }\n else {\n throw Error(\"non exhaustive match\");\n }\n}\nfunction genDSLRule(dslName, prod, n) {\n var result = indent(n, \"$.\" + (dslName + prod.idx) + \"(\");\n if (prod.separator) {\n result += \"{\" + NL;\n result +=\n indent(n + 1, \"SEP: this.tokensMap.\" + prod.separator.name) + \",\" + NL;\n result += \"DEF: \" + genDefFunction(prod.definition, n + 2) + NL;\n result += indent(n, \"}\") + NL;\n }\n else {\n result += genDefFunction(prod.definition, n + 1);\n }\n result += indent(n, \")\") + NL;\n return result;\n}\nfunction genDefFunction(definition, n) {\n var def = \"function() {\" + NL;\n def += genDefinition(definition, n);\n def += indent(n, \"}\") + NL;\n return def;\n}\nfunction genDefinition(def, n) {\n var result = \"\";\n forEach(def, function (prod) {\n result += genProd(prod, n + 1);\n });\n return result;\n}\nfunction indent(howMuch, text) {\n var spaces = Array(howMuch * 4 + 1).join(\" \");\n return spaces + text;\n}\n//# sourceMappingURL=generate.js.map","import { genUmdModule, genWrapperFunction } from \"./generate\";\nexport function generateParserFactory(options) {\n var wrapperText = genWrapperFunction({\n name: options.name,\n rules: options.rules\n });\n var constructorWrapper = new Function(\"tokenVocabulary\", \"config\", \"chevrotain\", wrapperText);\n return function (config) {\n return constructorWrapper(options.tokenVocabulary, config, \n // TODO: check how the require is transpiled/webpacked\n require(\"../api\"));\n };\n}\nexport function generateParserModule(options) {\n return genUmdModule({ name: options.name, rules: options.rules });\n}\n//# sourceMappingURL=generate_public.js.map","/* istanbul ignore file - tricky to import some things from this module during testing */\n// semantic version\nexport { VERSION } from \"./version\";\nexport { CstParser, EmbeddedActionsParser, ParserDefinitionErrorType, EMPTY_ALT } from \"./parse/parser/parser\";\nexport { Lexer, LexerDefinitionErrorType } from \"./scan/lexer_public\";\n// Tokens utilities\nexport { createToken, createTokenInstance, EOF, tokenLabel, tokenMatcher, tokenName } from \"./scan/tokens_public\";\n// Other Utilities\nexport { defaultGrammarResolverErrorProvider, defaultGrammarValidatorErrorProvider, defaultParserErrorProvider } from \"./parse/errors_public\";\nexport { EarlyExitException, isRecognitionException, MismatchedTokenException, NotAllInputParsedException, NoViableAltException } from \"./parse/exceptions_public\";\nexport { defaultLexerErrorProvider } from \"./scan/lexer_errors_public\";\n// grammar reflection API\nexport { Alternation, Alternative, NonTerminal, Option, Repetition, RepetitionMandatory, RepetitionMandatoryWithSeparator, RepetitionWithSeparator, Rule, Terminal } from \"./parse/grammar/gast/gast_public\";\n// GAST Utilities\nexport { serializeGrammar, serializeProduction } from \"./parse/grammar/gast/gast_public\";\nexport { GAstVisitor } from \"./parse/grammar/gast/gast_visitor_public\";\nexport { assignOccurrenceIndices, resolveGrammar, validateGrammar } from \"./parse/grammar/gast/gast_resolver_public\";\n/* istanbul ignore next */\nexport function clearCache() {\n console.warn(\"The clearCache function was 'soft' removed from the Chevrotain API.\" +\n \"\\n\\t It performs no action other than printing this message.\" +\n \"\\n\\t Please avoid using it as it will be completely removed in the future\");\n}\nexport { createSyntaxDiagramsCode } from \"./diagrams/render_public\";\nexport { generateParserFactory, generateParserModule } from \"./generate/generate_public\";\nvar Parser = /** @class */ (function () {\n function Parser() {\n throw new Error(\"The Parser class has been deprecated, use CstParser or EmbeddedActionsParser instead.\\t\\n\" +\n \"See: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_7-0-0\");\n }\n return Parser;\n}());\nexport { Parser };\n//# sourceMappingURL=api.js.map","const {createToken, Lexer} = require('chevrotain');\r\nconst FormulaError = require('../formulas/error')\r\n\r\n// the vocabulary will be exported and used in the Parser definition.\r\nconst tokenVocabulary = {};\r\n\r\nconst WhiteSpace = createToken({\r\n name: 'WhiteSpace',\r\n pattern: /\\s+/,\r\n group: Lexer.SKIPPED,\r\n});\r\n\r\nconst String = createToken({\r\n name: 'String',\r\n pattern: /\"(\"\"|[^\"])*\"/\r\n});\r\n\r\nconst SingleQuotedString = createToken({\r\n name: 'SingleQuotedString',\r\n pattern: /'(''|[^'])*'/\r\n});\r\n\r\nconst SheetQuoted = createToken({\r\n name: 'SheetQuoted',\r\n pattern: /'((?![\\\\\\/\\[\\]*?:]).)+?'!/\r\n});\r\n\r\nconst Function = createToken({\r\n name: 'Function',\r\n pattern: /[A-Za-z_]+[A-Za-z_0-9.]*\\(/\r\n});\r\n\r\nconst FormulaErrorT = createToken({\r\n name: 'FormulaErrorT',\r\n pattern: /#NULL!|#DIV\\/0!|#VALUE!|#NAME\\?|#NUM!|#N\\/A/\r\n});\r\n\r\nconst RefError = createToken({\r\n name: 'RefError',\r\n pattern: /#REF!/\r\n});\r\n\r\nconst Name = createToken({\r\n name: 'Name',\r\n pattern: /[a-zA-Z_][a-zA-Z0-9_.?]*/,\r\n // longer_alt: RangeColumn // e.g. A:AA\r\n});\r\n\r\nconst Sheet = createToken({\r\n name: 'Sheet',\r\n pattern: /[A-Za-z_.\\d\\u007F-\\uFFFF]+!/\r\n});\r\n\r\nconst Cell = createToken({\r\n name: 'Cell',\r\n pattern: /[$]?[A-Za-z]{1,3}[$]?[1-9][0-9]*/,\r\n longer_alt: Name\r\n});\r\n\r\nconst Number = createToken({\r\n name: 'Number',\r\n pattern: /[0-9]+[.]?[0-9]*([eE][+\\-][0-9]+)?/\r\n});\r\n\r\nconst Boolean = createToken({\r\n name: 'Boolean',\r\n pattern: /TRUE|FALSE/i\r\n});\r\n\r\nconst Column = createToken({\r\n name: 'Column',\r\n pattern: /[$]?[A-Za-z]{1,3}/,\r\n longer_alt: Name\r\n});\r\n\r\n\r\n/**\r\n * Symbols and operators\r\n */\r\nconst At = createToken({\r\n name: 'At',\r\n pattern: /@/\r\n});\r\n\r\nconst Comma = createToken({\r\n name: 'Comma',\r\n pattern: /,/\r\n});\r\n\r\nconst Colon = createToken({\r\n name: 'Colon',\r\n pattern: /:/\r\n});\r\n\r\nconst Semicolon = createToken({\r\n name: 'Semicolon',\r\n pattern: /;/\r\n});\r\n\r\nconst OpenParen = createToken({\r\n name: 'OpenParen',\r\n pattern: /\\(/\r\n});\r\n\r\nconst CloseParen = createToken({\r\n name: 'CloseParen',\r\n pattern: /\\)/\r\n});\r\n\r\nconst OpenSquareParen = createToken({\r\n name: 'OpenSquareParen',\r\n pattern: /\\[/\r\n});\r\n\r\nconst CloseSquareParen = createToken({\r\n name: 'CloseSquareParen',\r\n pattern: /]/\r\n});\r\n\r\nconst ExclamationMark = createToken({\r\n name: 'exclamationMark',\r\n pattern: /!/\r\n});\r\n\r\nconst OpenCurlyParen = createToken({\r\n name: 'OpenCurlyParen',\r\n pattern: /{/\r\n});\r\n\r\nconst CloseCurlyParen = createToken({\r\n name: 'CloseCurlyParen',\r\n pattern: /}/\r\n});\r\n\r\nconst QuoteS = createToken({\r\n name: 'QuoteS',\r\n pattern: /'/\r\n});\r\n\r\n\r\nconst MulOp = createToken({\r\n name: 'MulOp',\r\n pattern: /\\*/\r\n});\r\n\r\nconst PlusOp = createToken({\r\n name: 'PlusOp',\r\n pattern: /\\+/\r\n});\r\n\r\nconst DivOp = createToken({\r\n name: 'DivOp',\r\n pattern: /\\//\r\n});\r\n\r\nconst MinOp = createToken({\r\n name: 'MinOp',\r\n pattern: /-/\r\n});\r\n\r\nconst ConcatOp = createToken({\r\n name: 'ConcatOp',\r\n pattern: /&/\r\n});\r\n\r\nconst ExOp = createToken({\r\n name: 'ExOp',\r\n pattern: /\\^/\r\n});\r\n\r\nconst PercentOp = createToken({\r\n name: 'PercentOp',\r\n pattern: /%/\r\n});\r\n\r\nconst GtOp = createToken({\r\n name: 'GtOp',\r\n pattern: />/\r\n});\r\n\r\nconst EqOp = createToken({\r\n name: 'EqOp',\r\n pattern: /=/\r\n});\r\n\r\nconst LtOp = createToken({\r\n name: 'LtOp',\r\n pattern: //\r\n});\r\n\r\nconst GteOp = createToken({\r\n name: 'GteOp',\r\n pattern: />=/\r\n});\r\n\r\nconst LteOp = createToken({\r\n name: 'LteOp',\r\n pattern: /<=/\r\n});\r\n\r\n// The order of tokens is important\r\nconst allTokens = [\r\n\r\n WhiteSpace,\r\n String,\r\n SheetQuoted,\r\n SingleQuotedString,\r\n Function,\r\n FormulaErrorT,\r\n RefError,\r\n Sheet,\r\n Cell,\r\n Boolean,\r\n Column,\r\n Name,\r\n Number,\r\n\r\n At,\r\n Comma,\r\n Colon,\r\n Semicolon,\r\n OpenParen,\r\n CloseParen,\r\n OpenSquareParen,\r\n CloseSquareParen,\r\n // ExclamationMark,\r\n OpenCurlyParen,\r\n CloseCurlyParen,\r\n QuoteS,\r\n MulOp,\r\n PlusOp,\r\n DivOp,\r\n MinOp,\r\n ConcatOp,\r\n ExOp,\r\n MulOp,\r\n PercentOp,\r\n NeqOp,\r\n GteOp,\r\n LteOp,\r\n GtOp,\r\n EqOp,\r\n LtOp,\r\n];\r\n\r\nconst SelectLexer = new Lexer(allTokens, {ensureOptimizations: true});\r\n\r\nallTokens.forEach(tokenType => {\r\n tokenVocabulary[tokenType.name] = tokenType\r\n});\r\n\r\nmodule.exports = {\r\n tokenVocabulary: tokenVocabulary,\r\n\r\n lex: function (inputText) {\r\n const lexingResult = SelectLexer.tokenize(inputText)\r\n\r\n if (lexingResult.errors.length > 0) {\r\n const error = lexingResult.errors[0];\r\n const line = error.line, column = error.column;\r\n let msg = '\\n' + inputText.split('\\n')[line - 1] + '\\n';\r\n msg += Array(column - 1).fill(' ').join('') + '^\\n';\r\n error.message = msg + `Error at position ${line}:${column}\\n` + error.message;\r\n error.errorLocation = {line, column};\r\n throw FormulaError.ERROR(error.message, error);\r\n }\r\n\r\n return lexingResult\r\n }\r\n};\r\n","const lexer = require('./lexing');\r\nconst {EmbeddedActionsParser} = require(\"chevrotain\");\r\nconst tokenVocabulary = lexer.tokenVocabulary;\r\nconst {\r\n String,\r\n SheetQuoted,\r\n ExcelRefFunction,\r\n ExcelConditionalRefFunction,\r\n Function,\r\n FormulaErrorT,\r\n RefError,\r\n Cell,\r\n Sheet,\r\n Name,\r\n Number,\r\n Boolean,\r\n Column,\r\n\r\n // At,\r\n Comma,\r\n Colon,\r\n Semicolon,\r\n OpenParen,\r\n CloseParen,\r\n // OpenSquareParen,\r\n // CloseSquareParen,\r\n // ExclamationMark,\r\n OpenCurlyParen,\r\n CloseCurlyParen,\r\n MulOp,\r\n PlusOp,\r\n DivOp,\r\n MinOp,\r\n ConcatOp,\r\n ExOp,\r\n PercentOp,\r\n NeqOp,\r\n GteOp,\r\n LteOp,\r\n GtOp,\r\n EqOp,\r\n LtOp\r\n} = lexer.tokenVocabulary;\r\n\r\nclass Parsing extends EmbeddedActionsParser {\r\n /**\r\n *\r\n * @param {FormulaParser|DepParser} context\r\n * @param {Utils} utils\r\n */\r\n constructor(context, utils) {\r\n super(tokenVocabulary, {\r\n outputCst: false,\r\n maxLookahead: 1,\r\n skipValidations: true,\r\n // traceInitPerf: true,\r\n });\r\n this.utils = utils;\r\n this.binaryOperatorsPrecedence = [\r\n ['^'],\r\n ['*', '/'],\r\n ['+', '-'],\r\n ['&'],\r\n ['<', '>', '=', '<>', '<=', '>='],\r\n ];\r\n const $ = this;\r\n\r\n // Adopted from https://github.com/spreadsheetlab/XLParser/blob/master/src/XLParser/ExcelFormulaGrammar.cs\r\n\r\n $.RULE('formulaWithBinaryOp', () => {\r\n const infixes = [];\r\n const values = [$.SUBRULE($.formulaWithPercentOp)];\r\n $.MANY(() => {\r\n // Caching Arrays of Alternatives\r\n // https://sap.github.io/chevrotain/docs/guide/performance.html#caching-arrays-of-alternatives\r\n infixes.push($.OR($.c1 ||\r\n (\r\n $.c1 = [\r\n {ALT: () => $.CONSUME(GtOp).image},\r\n {ALT: () => $.CONSUME(EqOp).image},\r\n {ALT: () => $.CONSUME(LtOp).image},\r\n {ALT: () => $.CONSUME(NeqOp).image},\r\n {ALT: () => $.CONSUME(GteOp).image},\r\n {ALT: () => $.CONSUME(LteOp).image},\r\n {ALT: () => $.CONSUME(ConcatOp).image},\r\n {ALT: () => $.CONSUME(PlusOp).image},\r\n {ALT: () => $.CONSUME(MinOp).image},\r\n {ALT: () => $.CONSUME(MulOp).image},\r\n {ALT: () => $.CONSUME(DivOp).image},\r\n {ALT: () => $.CONSUME(ExOp).image}\r\n ]\r\n )));\r\n values.push($.SUBRULE2($.formulaWithPercentOp));\r\n });\r\n $.ACTION(() => {\r\n // evaluate\r\n for (const ops of this.binaryOperatorsPrecedence) {\r\n for (let index = 0, length = infixes.length; index < length; index++) {\r\n const infix = infixes[index];\r\n if (!ops.includes(infix)) continue;\r\n infixes.splice(index, 1);\r\n values.splice(index, 2, this.utils.applyInfix(values[index], infix, values[index + 1]));\r\n index--;\r\n length--;\r\n }\r\n }\r\n });\r\n\r\n return values[0];\r\n });\r\n\r\n $.RULE('plusMinusOp', () => $.OR([\r\n {ALT: () => $.CONSUME(PlusOp).image},\r\n {ALT: () => $.CONSUME(MinOp).image}\r\n ]));\r\n\r\n $.RULE('formulaWithPercentOp', () => {\r\n let value = $.SUBRULE($.formulaWithUnaryOp);\r\n $.OPTION(() => {\r\n const postfix = $.CONSUME(PercentOp).image;\r\n value = $.ACTION(() => this.utils.applyPostfix(value, postfix));\r\n });\r\n return value;\r\n });\r\n\r\n $.RULE('formulaWithUnaryOp', () => {\r\n // support ++---3 => -3\r\n const prefixes = [];\r\n $.MANY(() => {\r\n const op = $.OR([\r\n {ALT: () => $.CONSUME(PlusOp).image},\r\n {ALT: () => $.CONSUME(MinOp).image}\r\n ]);\r\n prefixes.push(op);\r\n });\r\n const formula = $.SUBRULE($.formulaWithIntersect);\r\n if (prefixes.length > 0) return $.ACTION(() => this.utils.applyPrefix(prefixes, formula));\r\n return formula;\r\n });\r\n\r\n\r\n $.RULE('formulaWithIntersect', () => {\r\n // e.g. 'A1 A2 A3'\r\n let ref1 = $.SUBRULE($.formulaWithRange);\r\n const refs = [ref1];\r\n // console.log('check intersect')\r\n $.MANY({\r\n GATE: () => {\r\n // see https://github.com/SAP/chevrotain/blob/master/examples/grammars/css/css.js#L436-L441\r\n const prevToken = $.LA(0);\r\n const nextToken = $.LA(1);\r\n // This is the only place where the grammar is whitespace sensitive.\r\n return nextToken.startOffset > prevToken.endOffset + 1;\r\n },\r\n DEF: () => {\r\n refs.push($.SUBRULE3($.formulaWithRange));\r\n }\r\n });\r\n if (refs.length > 1) {\r\n return $.ACTION(() => $.ACTION(() => this.utils.applyIntersect(refs)))\r\n }\r\n return ref1;\r\n });\r\n\r\n $.RULE('formulaWithRange', () => {\r\n // e.g. 'A1:C3' or 'A1:A3:C4', can be any number of references, at lease 2\r\n const ref1 = $.SUBRULE($.formula);\r\n const refs = [ref1];\r\n $.MANY(() => {\r\n $.CONSUME(Colon);\r\n refs.push($.SUBRULE2($.formula));\r\n });\r\n if (refs.length > 1)\r\n return $.ACTION(() => $.ACTION(() => this.utils.applyRange(refs)));\r\n return ref1;\r\n });\r\n\r\n $.RULE('formula', () => $.OR9([\r\n {ALT: () => $.SUBRULE($.referenceWithoutInfix)},\r\n {ALT: () => $.SUBRULE($.paren)},\r\n {ALT: () => $.SUBRULE($.constant)},\r\n {ALT: () => $.SUBRULE($.functionCall)},\r\n {ALT: () => $.SUBRULE($.constantArray)},\r\n ]));\r\n\r\n $.RULE('paren', () => {\r\n // formula paren or union paren\r\n $.CONSUME(OpenParen);\r\n let result;\r\n const refs = [];\r\n refs.push($.SUBRULE($.formulaWithBinaryOp));\r\n $.MANY(() => {\r\n $.CONSUME(Comma);\r\n refs.push($.SUBRULE2($.formulaWithBinaryOp));\r\n });\r\n if (refs.length > 1)\r\n result = $.ACTION(() => this.utils.applyUnion(refs));\r\n else\r\n result = refs[0];\r\n\r\n $.CONSUME(CloseParen);\r\n return result;\r\n });\r\n\r\n $.RULE('constantArray', () => {\r\n // console.log('constantArray');\r\n const arr = [[]];\r\n let currentRow = 0;\r\n $.CONSUME(OpenCurlyParen);\r\n\r\n // array must contain at least one item\r\n arr[currentRow].push($.SUBRULE($.constantForArray));\r\n $.MANY(() => {\r\n const sep = $.OR([\r\n {ALT: () => $.CONSUME(Comma).image},\r\n {ALT: () => $.CONSUME(Semicolon).image}\r\n ]);\r\n const constant = $.SUBRULE2($.constantForArray);\r\n if (sep === ',') {\r\n arr[currentRow].push(constant)\r\n } else {\r\n currentRow++;\r\n arr[currentRow] = [];\r\n arr[currentRow].push(constant)\r\n }\r\n });\r\n\r\n $.CONSUME(CloseCurlyParen);\r\n\r\n return $.ACTION(() => this.utils.toArray(arr));\r\n });\r\n\r\n /**\r\n * Used in array\r\n */\r\n $.RULE('constantForArray', () => $.OR([\r\n {\r\n ALT: () => {\r\n const prefix = $.OPTION(() => $.SUBRULE($.plusMinusOp));\r\n const image = $.CONSUME(Number).image;\r\n const number = $.ACTION(() => this.utils.toNumber(image));\r\n if (prefix)\r\n return $.ACTION(() => this.utils.applyPrefix([prefix], number));\r\n return number;\r\n }\r\n }, {\r\n ALT: () => {\r\n const str = $.CONSUME(String).image;\r\n return $.ACTION(() => this.utils.toString(str));\r\n }\r\n }, {\r\n ALT: () => {\r\n const bool = $.CONSUME(Boolean).image;\r\n return $.ACTION(() => this.utils.toBoolean(bool));\r\n }\r\n }, {\r\n ALT: () => {\r\n const err = $.CONSUME(FormulaErrorT).image;\r\n return $.ACTION(() => this.utils.toError(err));\r\n }\r\n }, {\r\n ALT: () => {\r\n const err = $.CONSUME(RefError).image;\r\n return $.ACTION(() => this.utils.toError(err));\r\n }\r\n },\r\n ]));\r\n\r\n $.RULE('constant', () => $.OR([\r\n {\r\n ALT: () => {\r\n const number = $.CONSUME(Number).image;\r\n return $.ACTION(() => this.utils.toNumber(number));\r\n }\r\n }, {\r\n ALT: () => {\r\n const str = $.CONSUME(String).image;\r\n return $.ACTION(() => this.utils.toString(str));\r\n }\r\n }, {\r\n ALT: () => {\r\n const bool = $.CONSUME(Boolean).image;\r\n return $.ACTION(() => this.utils.toBoolean(bool));\r\n }\r\n }, {\r\n ALT: () => {\r\n const err = $.CONSUME(FormulaErrorT).image;\r\n return $.ACTION(() => this.utils.toError(err));\r\n }\r\n },\r\n ]));\r\n\r\n $.RULE('functionCall', () => {\r\n const functionName = $.CONSUME(Function).image.slice(0, -1);\r\n // console.log('functionName', functionName);\r\n const args = $.SUBRULE($.arguments);\r\n $.CONSUME(CloseParen);\r\n // dependency parser won't call function.\r\n return $.ACTION(() => context.callFunction(functionName, args));\r\n\r\n });\r\n\r\n $.RULE('arguments', () => {\r\n // console.log('try arguments')\r\n\r\n // allows ',' in the front\r\n $.MANY2(() => {\r\n $.CONSUME2(Comma);\r\n });\r\n const args = [];\r\n // allows empty arguments\r\n $.OPTION(() => {\r\n args.push($.SUBRULE($.formulaWithBinaryOp));\r\n $.MANY(() => {\r\n $.CONSUME1(Comma);\r\n args.push(null); // e.g. ROUND(1.5,)\r\n $.OPTION3(() => {\r\n args.pop();\r\n args.push($.SUBRULE2($.formulaWithBinaryOp))\r\n });\r\n });\r\n });\r\n return args;\r\n });\r\n\r\n $.RULE('referenceWithoutInfix', () => $.OR([\r\n\r\n {ALT: () => $.SUBRULE($.referenceItem)},\r\n\r\n {\r\n // sheet name prefix\r\n ALT: () => {\r\n // console.log('try sheetName');\r\n const sheetName = $.SUBRULE($.prefixName);\r\n // console.log('sheetName', sheetName);\r\n const referenceItem = $.SUBRULE2($.formulaWithRange);\r\n\r\n $.ACTION(() => {\r\n if (this.utils.isFormulaError(referenceItem))\r\n return referenceItem;\r\n referenceItem.ref.sheet = sheetName\r\n });\r\n return referenceItem;\r\n }\r\n },\r\n\r\n // {ALT: () => $.SUBRULE('dynamicDataExchange')},\r\n ]));\r\n\r\n $.RULE('referenceItem', () => $.OR([\r\n {\r\n ALT: () => {\r\n const address = $.CONSUME(Cell).image;\r\n return $.ACTION(() => this.utils.parseCellAddress(address));\r\n }\r\n },\r\n {\r\n ALT: () => {\r\n const name = $.CONSUME(Name).image;\r\n return $.ACTION(() => context.getVariable(name))\r\n }\r\n },\r\n {\r\n ALT: () => {\r\n const column = $.CONSUME(Column).image;\r\n return $.ACTION(() => this.utils.parseCol(column))\r\n }\r\n },\r\n // A row check should be here, but the token is same with Number,\r\n // In other to resolve ambiguities, I leave this empty, and\r\n // parse the number to row number when needed.\r\n {\r\n ALT: () => {\r\n const err = $.CONSUME(RefError).image;\r\n return $.ACTION(() => this.utils.toError(err))\r\n }\r\n },\r\n // {ALT: () => $.SUBRULE($.udfFunctionCall)},\r\n // {ALT: () => $.SUBRULE($.structuredReference)},\r\n ]));\r\n\r\n $.RULE('prefixName', () => $.OR([\r\n {ALT: () => $.CONSUME(Sheet).image.slice(0, -1)},\r\n {ALT: () => $.CONSUME(SheetQuoted).image.slice(1, -2).replace(/''/g, \"'\")},\r\n ]));\r\n\r\n this.performSelfAnalysis();\r\n }\r\n}\r\n\r\nmodule.exports = {\r\n Parser: Parsing,\r\n};\r\n","const FormulaError = require('../formulas/error');\r\nconst {Address} = require('../formulas/helpers');\r\nconst {Prefix, Postfix, Infix, Operators} = require('../formulas/operators');\r\nconst Collection = require('./type/collection');\r\nconst MAX_ROW = 1048576, MAX_COLUMN = 16384;\r\nconst {NotAllInputParsedException} = require('chevrotain');\r\n\r\nclass Utils {\r\n\r\n constructor(context) {\r\n this.context = context;\r\n }\r\n\r\n columnNameToNumber(columnName) {\r\n return Address.columnNameToNumber(columnName);\r\n }\r\n\r\n /**\r\n * Parse the cell address only.\r\n * @param {string} cellAddress\r\n * @return {{ref: {col: number, address: string, row: number}}}\r\n */\r\n parseCellAddress(cellAddress) {\r\n const res = cellAddress.match(/([$]?)([A-Za-z]{1,3})([$]?)([1-9][0-9]*)/);\r\n // console.log('parseCellAddress', cellAddress);\r\n return {\r\n ref: {\r\n address: res[0],\r\n col: this.columnNameToNumber(res[2]),\r\n row: +res[4]\r\n },\r\n };\r\n }\r\n\r\n parseRow(row) {\r\n const rowNum = +row;\r\n if (!Number.isInteger(rowNum))\r\n throw Error('Row number must be integer.');\r\n return {\r\n ref: {\r\n col: undefined,\r\n row: +row\r\n },\r\n };\r\n }\r\n\r\n parseCol(col) {\r\n return {\r\n ref: {\r\n col: this.columnNameToNumber(col),\r\n row: undefined,\r\n },\r\n };\r\n }\r\n\r\n parseColRange(col1, col2) {\r\n // const res = colRange.match(/([$]?)([A-Za-z]{1,3}):([$]?)([A-Za-z]{1,4})/);\r\n col1 = this.columnNameToNumber(col1);\r\n col2 = this.columnNameToNumber(col2);\r\n return {\r\n ref: {\r\n from: {\r\n col: Math.min(col1, col2),\r\n row: null\r\n },\r\n to: {\r\n col: Math.max(col1, col2),\r\n row: null\r\n }\r\n }\r\n }\r\n }\r\n\r\n parseRowRange(row1, row2) {\r\n // const res = rowRange.match(/([$]?)([1-9][0-9]*):([$]?)([1-9][0-9]*)/);\r\n return {\r\n ref: {\r\n from: {\r\n col: null,\r\n row: Math.min(row1, row2),\r\n },\r\n to: {\r\n col: null,\r\n row: Math.max(row1, row2),\r\n }\r\n }\r\n\r\n }\r\n }\r\n\r\n\r\n _applyPrefix(prefixes, val, isArray) {\r\n if (this.isFormulaError(val))\r\n return val;\r\n return Prefix.unaryOp(prefixes, val, isArray);\r\n }\r\n\r\n async applyPrefixAsync(prefixes, value) {\r\n const {val, isArray} = this.extractRefValue(await value);\r\n return this._applyPrefix(prefixes, val, isArray);\r\n }\r\n\r\n /**\r\n * Apply + or - unary prefix.\r\n * @param {Array.} prefixes\r\n * @param {*} value\r\n * @return {*}\r\n */\r\n applyPrefix(prefixes, value) {\r\n // console.log('applyPrefix', prefixes, value);\r\n if (this.context.async) {\r\n return this.applyPrefixAsync(prefixes, value);\r\n } else {\r\n const {val, isArray} = this.extractRefValue(value);\r\n return this._applyPrefix(prefixes, val, isArray);\r\n }\r\n }\r\n\r\n _applyPostfix(val, isArray, postfix) {\r\n if (this.isFormulaError(val))\r\n return val;\r\n return Postfix.percentOp(val, postfix, isArray);\r\n }\r\n\r\n async applyPostfixAsync(value, postfix) {\r\n const {val, isArray} = this.extractRefValue(await value);\r\n return this._applyPostfix(val, isArray, postfix);\r\n }\r\n\r\n applyPostfix(value, postfix) {\r\n // console.log('applyPostfix', value, postfix);\r\n if (this.context.async) {\r\n return this.applyPostfixAsync(value, postfix);\r\n } else {\r\n const {val, isArray} = this.extractRefValue(value);\r\n return this._applyPostfix(val, isArray, postfix)\r\n }\r\n }\r\n\r\n _applyInfix(res1, infix, res2) {\r\n const val1 = res1.val, isArray1 = res1.isArray;\r\n const val2 = res2.val, isArray2 = res2.isArray;\r\n if (this.isFormulaError(val1))\r\n return val1;\r\n if (this.isFormulaError(val2))\r\n return val2;\r\n if (Operators.compareOp.includes(infix))\r\n return Infix.compareOp(val1, infix, val2, isArray1, isArray2);\r\n else if (Operators.concatOp.includes(infix))\r\n return Infix.concatOp(val1, infix, val2, isArray1, isArray2);\r\n else if (Operators.mathOp.includes(infix))\r\n return Infix.mathOp(val1, infix, val2, isArray1, isArray2);\r\n else\r\n throw new Error(`Unrecognized infix: ${infix}`);\r\n }\r\n\r\n async applyInfixAsync(value1, infix, value2) {\r\n const res1 = this.extractRefValue(await value1);\r\n const res2 = this.extractRefValue(await value2);\r\n return this._applyInfix(res1, infix, res2)\r\n }\r\n\r\n applyInfix(value1, infix, value2) {\r\n if (this.context.async) {\r\n return this.applyInfixAsync(value1, infix, value2)\r\n } else {\r\n const res1 = this.extractRefValue(value1);\r\n const res2 = this.extractRefValue(value2);\r\n return this._applyInfix(res1, infix, res2)\r\n }\r\n }\r\n\r\n applyIntersect(refs) {\r\n // console.log('applyIntersect', refs);\r\n if (this.isFormulaError(refs[0]))\r\n return refs[0];\r\n if (!refs[0].ref)\r\n throw Error(`Expecting a reference, but got ${refs[0]}.`);\r\n // a intersection will keep track of references, value won't be retrieved here.\r\n let maxRow, maxCol, minRow, minCol, sheet, res; // index start from 1\r\n // first time setup\r\n const ref = refs.shift().ref;\r\n sheet = ref.sheet;\r\n if (!ref.from) {\r\n // check whole row/col reference\r\n if (ref.row === undefined || ref.col === undefined) {\r\n throw Error('Cannot intersect the whole row or column.')\r\n }\r\n\r\n // cell ref\r\n maxRow = minRow = ref.row;\r\n maxCol = minCol = ref.col;\r\n } else {\r\n // range ref\r\n // update\r\n maxRow = Math.max(ref.from.row, ref.to.row);\r\n minRow = Math.min(ref.from.row, ref.to.row);\r\n maxCol = Math.max(ref.from.col, ref.to.col);\r\n minCol = Math.min(ref.from.col, ref.to.col);\r\n }\r\n\r\n let err;\r\n refs.forEach(ref => {\r\n if (this.isFormulaError(ref))\r\n return ref;\r\n ref = ref.ref;\r\n if (!ref) throw Error(`Expecting a reference, but got ${ref}.`);\r\n if (!ref.from) {\r\n if (ref.row === undefined || ref.col === undefined) {\r\n throw Error('Cannot intersect the whole row or column.')\r\n }\r\n // cell ref\r\n if (ref.row > maxRow || ref.row < minRow || ref.col > maxCol || ref.col < minCol\r\n || sheet !== ref.sheet) {\r\n err = FormulaError.NULL;\r\n }\r\n maxRow = minRow = ref.row;\r\n maxCol = minCol = ref.col;\r\n } else {\r\n // range ref\r\n const refMaxRow = Math.max(ref.from.row, ref.to.row);\r\n const refMinRow = Math.min(ref.from.row, ref.to.row);\r\n const refMaxCol = Math.max(ref.from.col, ref.to.col);\r\n const refMinCol = Math.min(ref.from.col, ref.to.col);\r\n if (refMinRow > maxRow || refMaxRow < minRow || refMinCol > maxCol || refMaxCol < minCol\r\n || sheet !== ref.sheet) {\r\n err = FormulaError.NULL;\r\n }\r\n // update\r\n maxRow = Math.min(maxRow, refMaxRow);\r\n minRow = Math.max(minRow, refMinRow);\r\n maxCol = Math.min(maxCol, refMaxCol);\r\n minCol = Math.max(minCol, refMinCol);\r\n }\r\n });\r\n if (err) return err;\r\n // check if the ref can be reduced to cell reference\r\n if (maxRow === minRow && maxCol === minCol) {\r\n res = {\r\n ref: {\r\n sheet,\r\n row: maxRow,\r\n col: maxCol\r\n }\r\n }\r\n } else {\r\n res = {\r\n ref: {\r\n sheet,\r\n from: {row: minRow, col: minCol},\r\n to: {row: maxRow, col: maxCol}\r\n }\r\n };\r\n }\r\n\r\n if (!res.ref.sheet)\r\n delete res.ref.sheet;\r\n return res;\r\n }\r\n\r\n applyUnion(refs) {\r\n const collection = new Collection();\r\n for (let i = 0; i < refs.length; i++) {\r\n if (this.isFormulaError(refs[i]))\r\n return refs[i];\r\n collection.add(this.extractRefValue(refs[i]).val, refs[i]);\r\n }\r\n\r\n // console.log('applyUnion', unions);\r\n return collection;\r\n }\r\n\r\n /**\r\n * Apply multiple references, e.g. A1:B3:C8:A:1:.....\r\n * @param refs\r\n // * @return {{ref: {from: {col: number, row: number}, to: {col: number, row: number}}}}\r\n */\r\n applyRange(refs) {\r\n let res, maxRow = -1, maxCol = -1, minRow = MAX_ROW + 1, minCol = MAX_COLUMN + 1;\r\n refs.forEach(ref => {\r\n if (this.isFormulaError(ref))\r\n return ref;\r\n // row ref is saved as number, parse the number to row ref here\r\n if (typeof ref === 'number') {\r\n ref = this.parseRow(ref);\r\n }\r\n ref = ref.ref;\r\n // check whole row/col reference\r\n if (ref.row === undefined) {\r\n minRow = 1;\r\n maxRow = MAX_ROW\r\n }\r\n if (ref.col === undefined) {\r\n minCol = 1;\r\n maxCol = MAX_COLUMN;\r\n }\r\n\r\n if (ref.row > maxRow)\r\n maxRow = ref.row;\r\n if (ref.row < minRow)\r\n minRow = ref.row;\r\n if (ref.col > maxCol)\r\n maxCol = ref.col;\r\n if (ref.col < minCol)\r\n minCol = ref.col;\r\n });\r\n if (maxRow === minRow && maxCol === minCol) {\r\n res = {\r\n ref: {\r\n row: maxRow,\r\n col: maxCol\r\n }\r\n }\r\n } else {\r\n res = {\r\n ref: {\r\n from: {row: minRow, col: minCol},\r\n to: {row: maxRow, col: maxCol}\r\n }\r\n };\r\n }\r\n return res;\r\n }\r\n\r\n /**\r\n * Throw away the refs, and retrieve the value.\r\n * @return {{val: *, isArray: boolean}}\r\n */\r\n extractRefValue(obj) {\r\n let res = obj, isArray = false;\r\n if (Array.isArray(res))\r\n isArray = true;\r\n if (obj.ref) {\r\n // can be number or array\r\n return {val: this.context.retrieveRef(obj), isArray};\r\n\r\n }\r\n return {val: res, isArray};\r\n }\r\n\r\n /**\r\n *\r\n * @param array\r\n * @return {Array}\r\n */\r\n toArray(array) {\r\n // TODO: check if array is valid\r\n // console.log('toArray', array);\r\n return array;\r\n }\r\n\r\n /**\r\n * @param {string} number\r\n * @return {number}\r\n */\r\n toNumber(number) {\r\n return Number(number);\r\n }\r\n\r\n /**\r\n * @param {string} string\r\n * @return {string}\r\n */\r\n toString(string) {\r\n return string.substring(1, string.length - 1) .replace(/\"\"/g, '\"');\r\n }\r\n\r\n /**\r\n * @param {string} bool\r\n * @return {boolean}\r\n */\r\n toBoolean(bool) {\r\n return bool === 'TRUE';\r\n }\r\n\r\n /**\r\n * Parse an error.\r\n * @param {string} error\r\n * @return {string}\r\n */\r\n toError(error) {\r\n return new FormulaError(error.toUpperCase());\r\n }\r\n\r\n isFormulaError(obj) {\r\n return obj instanceof FormulaError;\r\n }\r\n\r\n static formatChevrotainError(error, inputText) {\r\n let line, column, msg = '';\r\n // e.g. SUM(1))\r\n if (error instanceof NotAllInputParsedException) {\r\n line = error.token.startLine;\r\n column = error.token.startColumn;\r\n } else {\r\n line = error.previousToken.startLine;\r\n column = error.previousToken.startColumn + 1;\r\n }\r\n\r\n msg += '\\n' + inputText.split('\\n')[line - 1] + '\\n';\r\n msg += Array(column - 1).fill(' ').join('') + '^\\n';\r\n msg += `Error at position ${line}:${column}\\n` + error.message;\r\n error.errorLocation = {line, column};\r\n return FormulaError.ERROR(msg, error);\r\n }\r\n\r\n}\r\n\r\nmodule.exports = Utils;\r\n","const TextFunctions = require('../formulas/functions/text');\r\nconst MathFunctions = require('../formulas/functions/math');\r\nconst TrigFunctions = require('../formulas/functions/trigonometry');\r\nconst LogicalFunctions = require('../formulas/functions/logical');\r\nconst EngFunctions = require('../formulas/functions/engineering');\r\nconst ReferenceFunctions = require('../formulas/functions/reference');\r\nconst InformationFunctions = require('../formulas/functions/information');\r\nconst StatisticalFunctions = require('../formulas/functions/statistical');\r\nconst DateFunctions = require('../formulas/functions/date');\r\nconst WebFunctions = require('../formulas/functions/web');\r\nconst FormulaError = require('../formulas/error');\r\nconst {FormulaHelpers} = require('../formulas/helpers');\r\nconst {Parser, allTokens} = require('./parsing');\r\nconst lexer = require('./lexing');\r\nconst Utils = require('./utils');\r\n\r\n/**\r\n * A Excel Formula Parser & Evaluator\r\n */\r\nclass FormulaParser {\r\n\r\n /**\r\n * @param {{functions: {}, functionsNeedContext: {}, onVariable: function, onCell: function, onRange: function}} [config]\r\n * @param isTest - is in testing environment\r\n */\r\n constructor(config, isTest = false) {\r\n this.logs = [];\r\n this.isTest = isTest;\r\n this.utils = new Utils(this);\r\n config = Object.assign({\r\n functions: {},\r\n functionsNeedContext: {},\r\n onVariable: () => null,\r\n onCell: () => 0,\r\n onRange: () => [[0]],\r\n }, config);\r\n\r\n this.onVariable = config.onVariable;\r\n this.functions = Object.assign({}, DateFunctions, StatisticalFunctions, InformationFunctions, ReferenceFunctions,\r\n EngFunctions, LogicalFunctions, TextFunctions, MathFunctions, TrigFunctions, WebFunctions,\r\n config.functions, config.functionsNeedContext);\r\n this.onRange = config.onRange;\r\n this.onCell = config.onCell;\r\n\r\n // functions treat null as 0, other functions treats null as \"\"\r\n this.funsNullAs0 = Object.keys(MathFunctions)\r\n .concat(Object.keys(TrigFunctions))\r\n .concat(Object.keys(LogicalFunctions))\r\n .concat(Object.keys(EngFunctions))\r\n .concat(Object.keys(ReferenceFunctions))\r\n .concat(Object.keys(StatisticalFunctions))\r\n .concat(Object.keys(DateFunctions));\r\n\r\n // functions need context and don't need to retrieve references\r\n this.funsNeedContextAndNoDataRetrieve = ['ROW', 'ROWS', 'COLUMN', 'COLUMNS', 'SUMIF', 'INDEX', 'AVERAGEIF', 'IF'];\r\n\r\n // functions need parser context\r\n this.funsNeedContext = [...Object.keys(config.functionsNeedContext), ...this.funsNeedContextAndNoDataRetrieve,\r\n 'INDEX', 'OFFSET', 'INDIRECT', 'IF', 'CHOOSE', 'WEBSERVICE'];\r\n\r\n // functions preserve reference in arguments\r\n this.funsPreserveRef = Object.keys(InformationFunctions);\r\n\r\n this.parser = new Parser(this, this.utils);\r\n }\r\n\r\n /**\r\n * Get all lexing token names. Webpack needs this.\r\n * @return {Array.} - All token names that should not be minimized.\r\n */\r\n static get allTokens() {\r\n return allTokens;\r\n }\r\n\r\n /**\r\n * Get value from the cell reference\r\n * @param ref\r\n * @return {*}\r\n */\r\n getCell(ref) {\r\n // console.log('get cell', JSON.stringify(ref));\r\n if (ref.sheet == null)\r\n ref.sheet = this.position ? this.position.sheet : undefined;\r\n return this.onCell(ref);\r\n }\r\n\r\n /**\r\n * Get values from the range reference.\r\n * @param ref\r\n * @return {*}\r\n */\r\n getRange(ref) {\r\n // console.log('get range', JSON.stringify(ref));\r\n if (ref.sheet == null)\r\n ref.sheet = this.position ? this.position.sheet : undefined;\r\n return this.onRange(ref)\r\n }\r\n\r\n /**\r\n * TODO:\r\n * Get references or values from a user defined variable.\r\n * @param name\r\n * @return {*}\r\n */\r\n getVariable(name) {\r\n // console.log('get variable', name);\r\n const res = {ref: this.onVariable(name, this.position.sheet, this.position)};\r\n if (res.ref == null)\r\n return FormulaError.NAME;\r\n return res;\r\n }\r\n\r\n /**\r\n * Retrieve values from the given reference.\r\n * @param valueOrRef\r\n * @return {*}\r\n */\r\n retrieveRef(valueOrRef) {\r\n if (FormulaHelpers.isRangeRef(valueOrRef)) {\r\n return this.getRange(valueOrRef.ref);\r\n }\r\n if (FormulaHelpers.isCellRef(valueOrRef)) {\r\n return this.getCell(valueOrRef.ref)\r\n }\r\n return valueOrRef;\r\n }\r\n\r\n /**\r\n * Call an excel function.\r\n * @param name - Function name.\r\n * @param args - Arguments that pass to the function.\r\n * @return {*}\r\n */\r\n _callFunction(name, args) {\r\n if (name.indexOf('_xlfn.') === 0)\r\n name = name.slice(6);\r\n name = name.toUpperCase();\r\n // if one arg is null, it means 0 or \"\" depends on the function it calls\r\n const nullValue = this.funsNullAs0.includes(name) ? 0 : '';\r\n\r\n if (!this.funsNeedContextAndNoDataRetrieve.includes(name)) {\r\n // retrieve reference\r\n args = args.map(arg => {\r\n if (arg === null)\r\n return {value: nullValue, isArray: false, omitted: true};\r\n const res = this.utils.extractRefValue(arg);\r\n\r\n if (this.funsPreserveRef.includes(name)) {\r\n return {value: res.val, isArray: res.isArray, ref: arg.ref};\r\n }\r\n return {\r\n value: res.val,\r\n isArray: res.isArray,\r\n isRangeRef: !!FormulaHelpers.isRangeRef(arg),\r\n isCellRef: !!FormulaHelpers.isCellRef(arg)\r\n };\r\n });\r\n }\r\n // console.log('callFunction', name, args)\r\n\r\n if (this.functions[name]) {\r\n let res;\r\n try {\r\n if (!this.funsNeedContextAndNoDataRetrieve.includes(name) && !this.funsNeedContext.includes(name))\r\n res = (this.functions[name](...args));\r\n else\r\n res = (this.functions[name](this, ...args));\r\n } catch (e) {\r\n // allow functions throw FormulaError, this make functions easier to implement!\r\n if (e instanceof FormulaError) {\r\n return e;\r\n } else {\r\n throw e;\r\n }\r\n }\r\n if (res === undefined) {\r\n // console.log(`Function ${name} may be not implemented.`);\r\n if (this.isTest) {\r\n if (!this.logs.includes(name)) this.logs.push(name);\r\n return {value: 0, ref: {}};\r\n }\r\n throw FormulaError.NOT_IMPLEMENTED(name);\r\n }\r\n return res;\r\n } else {\r\n // console.log(`Function ${name} is not implemented`);\r\n if (this.isTest) {\r\n if (!this.logs.includes(name)) this.logs.push(name);\r\n return {value: 0, ref: {}};\r\n }\r\n throw FormulaError.NOT_IMPLEMENTED(name);\r\n }\r\n }\r\n\r\n async callFunctionAsync(name, args) {\r\n const awaitedArgs = [];\r\n for (const arg of args) {\r\n awaitedArgs.push(await arg);\r\n }\r\n const res = await this._callFunction(name, awaitedArgs);\r\n return FormulaHelpers.checkFunctionResult(res)\r\n }\r\n\r\n callFunction(name, args) {\r\n if (this.async) {\r\n return this.callFunctionAsync(name, args);\r\n } else {\r\n const res = this._callFunction(name, args);\r\n return FormulaHelpers.checkFunctionResult(res);\r\n }\r\n }\r\n\r\n /**\r\n * Return currently supported functions.\r\n * @return {this}\r\n */\r\n supportedFunctions() {\r\n const supported = [];\r\n const functions = Object.keys(this.functions);\r\n functions.forEach(fun => {\r\n try {\r\n const res = this.functions[fun](0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);\r\n if (res === undefined) return;\r\n supported.push(fun);\r\n } catch (e) {\r\n if (e instanceof Error)\r\n supported.push(fun);\r\n }\r\n });\r\n return supported.sort();\r\n }\r\n\r\n /**\r\n * Check and return the appropriate formula result.\r\n * @param result\r\n * @param {boolean} [allowReturnArray] - If the formula can return an array\r\n * @return {*}\r\n */\r\n checkFormulaResult(result, allowReturnArray = false) {\r\n const type = typeof result;\r\n // number\r\n if (type === 'number') {\r\n if (isNaN(result)) {\r\n return FormulaError.VALUE;\r\n } else if (!isFinite(result)) {\r\n return FormulaError.NUM;\r\n }\r\n result += 0; // make -0 to 0\r\n } else if (type === 'object') {\r\n if (result instanceof FormulaError)\r\n return result;\r\n if (allowReturnArray) {\r\n if (result.ref) {\r\n result = this.retrieveRef(result);\r\n }\r\n // Disallow union, and other unknown data types.\r\n // e.g. `=(A1:C1, A2:E9)` -> #VALUE!\r\n if (typeof result === 'object' && !Array.isArray(result) && result != null) {\r\n return FormulaError.VALUE;\r\n }\r\n\r\n } else {\r\n if (result.ref && result.ref.row && !result.ref.from) {\r\n // single cell reference\r\n result = this.retrieveRef(result);\r\n } else if (result.ref && result.ref.from && result.ref.from.col === result.ref.to.col) {\r\n // single Column reference\r\n result = this.retrieveRef({\r\n ref: {\r\n row: result.ref.from.row, col: result.ref.from.col\r\n }\r\n });\r\n } else if (Array.isArray(result)) {\r\n result = result[0][0]\r\n } else {\r\n // array, range reference, union collections\r\n return FormulaError.VALUE;\r\n }\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * Parse an excel formula.\r\n * @param {string} inputText\r\n * @param {{row: number, col: number}} [position] - The position of the parsed formula\r\n * e.g. {row: 1, col: 1}\r\n * @param {boolean} [allowReturnArray] - If the formula can return an array. Useful when parsing array formulas,\r\n * or data validation formulas.\r\n * @returns {*}\r\n */\r\n parse(inputText, position, allowReturnArray = false) {\r\n if (inputText.length === 0) throw Error('Input must not be empty.');\r\n this.position = position;\r\n this.async = false;\r\n const lexResult = lexer.lex(inputText);\r\n this.parser.input = lexResult.tokens;\r\n let res;\r\n try {\r\n res = this.parser.formulaWithBinaryOp();\r\n res = this.checkFormulaResult(res, allowReturnArray);\r\n if (res instanceof FormulaError) {\r\n return res;\r\n }\r\n } catch (e) {\r\n throw FormulaError.ERROR(e.message, e);\r\n }\r\n if (this.parser.errors.length > 0) {\r\n const error = this.parser.errors[0];\r\n throw Utils.formatChevrotainError(error, inputText);\r\n }\r\n return res;\r\n }\r\n\r\n /**\r\n * Parse an excel formula asynchronously.\r\n * Use when providing custom async functions.\r\n * @param {string} inputText\r\n * @param {{row: number, col: number}} [position] - The position of the parsed formula\r\n * e.g. {row: 1, col: 1}\r\n * @param {boolean} [allowReturnArray] - If the formula can return an array. Useful when parsing array formulas,\r\n * or data validation formulas.\r\n * @returns {*}\r\n */\r\n async parseAsync(inputText, position, allowReturnArray = false) {\r\n if (inputText.length === 0) throw Error('Input must not be empty.');\r\n this.position = position;\r\n this.async = true;\r\n const lexResult = lexer.lex(inputText);\r\n this.parser.input = lexResult.tokens;\r\n let res;\r\n try {\r\n res = await this.parser.formulaWithBinaryOp();\r\n res = this.checkFormulaResult(res, allowReturnArray);\r\n if (res instanceof FormulaError) {\r\n return res;\r\n }\r\n } catch (e) {\r\n throw FormulaError.ERROR(e.message, e);\r\n }\r\n if (this.parser.errors.length > 0) {\r\n const error = this.parser.errors[0];\r\n throw Utils.formatChevrotainError(error, inputText);\r\n }\r\n return res;\r\n }\r\n}\r\n\r\nmodule.exports = {\r\n FormulaParser,\r\n FormulaHelpers,\r\n};\r\n","const FormulaError = require('../../formulas/error');\r\nconst {FormulaHelpers, Types, Address} = require('../../formulas/helpers');\r\nconst {Prefix, Postfix, Infix, Operators} = require('../../formulas/operators');\r\nconst Collection = require('../type/collection');\r\nconst MAX_ROW = 1048576, MAX_COLUMN = 16384;\r\n\r\nclass Utils {\r\n\r\n constructor(context) {\r\n this.context = context;\r\n }\r\n\r\n columnNameToNumber(columnName) {\r\n return Address.columnNameToNumber(columnName);\r\n }\r\n\r\n /**\r\n * Parse the cell address only.\r\n * @param {string} cellAddress\r\n * @return {{ref: {col: number, address: string, row: number}}}\r\n */\r\n parseCellAddress(cellAddress) {\r\n const res = cellAddress.match(/([$]?)([A-Za-z]{1,3})([$]?)([1-9][0-9]*)/);\r\n // console.log('parseCellAddress', cellAddress);\r\n return {\r\n ref: {\r\n col: this.columnNameToNumber(res[2]),\r\n row: +res[4]\r\n },\r\n };\r\n }\r\n\r\n parseRow(row) {\r\n const rowNum = +row;\r\n if (!Number.isInteger(rowNum))\r\n throw Error('Row number must be integer.');\r\n return {\r\n ref: {\r\n col: undefined,\r\n row: +row\r\n },\r\n };\r\n }\r\n\r\n parseCol(col) {\r\n return {\r\n ref: {\r\n col: this.columnNameToNumber(col),\r\n row: undefined,\r\n },\r\n };\r\n }\r\n\r\n /**\r\n * Apply + or - unary prefix.\r\n * @param {Array.} prefixes\r\n * @param {*} value\r\n * @return {*}\r\n */\r\n applyPrefix(prefixes, value) {\r\n this.extractRefValue(value);\r\n return 0;\r\n }\r\n\r\n applyPostfix(value, postfix) {\r\n this.extractRefValue(value);\r\n return 0\r\n }\r\n\r\n applyInfix(value1, infix, value2) {\r\n this.extractRefValue(value1);\r\n this.extractRefValue(value2);\r\n return 0;\r\n }\r\n\r\n applyIntersect(refs) {\r\n // console.log('applyIntersect', refs);\r\n if (this.isFormulaError(refs[0]))\r\n return refs[0];\r\n if (!refs[0].ref)\r\n throw Error(`Expecting a reference, but got ${refs[0]}.`);\r\n // a intersection will keep track of references, value won't be retrieved here.\r\n let maxRow, maxCol, minRow, minCol, sheet, res; // index start from 1\r\n // first time setup\r\n const ref = refs.shift().ref;\r\n sheet = ref.sheet;\r\n if (!ref.from) {\r\n // check whole row/col reference\r\n if (ref.row === undefined || ref.col === undefined) {\r\n throw Error('Cannot intersect the whole row or column.')\r\n }\r\n\r\n // cell ref\r\n maxRow = minRow = ref.row;\r\n maxCol = minCol = ref.col;\r\n } else {\r\n // range ref\r\n // update\r\n maxRow = Math.max(ref.from.row, ref.to.row);\r\n minRow = Math.min(ref.from.row, ref.to.row);\r\n maxCol = Math.max(ref.from.col, ref.to.col);\r\n minCol = Math.min(ref.from.col, ref.to.col);\r\n }\r\n\r\n let err;\r\n refs.forEach(ref => {\r\n if (this.isFormulaError(ref))\r\n return ref;\r\n ref = ref.ref;\r\n if (!ref) throw Error(`Expecting a reference, but got ${ref}.`);\r\n if (!ref.from) {\r\n if (ref.row === undefined || ref.col === undefined) {\r\n throw Error('Cannot intersect the whole row or column.')\r\n }\r\n // cell ref\r\n if (ref.row > maxRow || ref.row < minRow || ref.col > maxCol || ref.col < minCol\r\n || sheet !== ref.sheet) {\r\n err = FormulaError.NULL;\r\n }\r\n maxRow = minRow = ref.row;\r\n maxCol = minCol = ref.col;\r\n } else {\r\n // range ref\r\n const refMaxRow = Math.max(ref.from.row, ref.to.row);\r\n const refMinRow = Math.min(ref.from.row, ref.to.row);\r\n const refMaxCol = Math.max(ref.from.col, ref.to.col);\r\n const refMinCol = Math.min(ref.from.col, ref.to.col);\r\n if (refMinRow > maxRow || refMaxRow < minRow || refMinCol > maxCol || refMaxCol < minCol\r\n || sheet !== ref.sheet) {\r\n err = FormulaError.NULL;\r\n }\r\n // update\r\n maxRow = Math.min(maxRow, refMaxRow);\r\n minRow = Math.max(minRow, refMinRow);\r\n maxCol = Math.min(maxCol, refMaxCol);\r\n minCol = Math.max(minCol, refMinCol);\r\n }\r\n });\r\n if (err) return err;\r\n // check if the ref can be reduced to cell reference\r\n if (maxRow === minRow && maxCol === minCol) {\r\n res = {\r\n ref: {\r\n sheet,\r\n row: maxRow,\r\n col: maxCol\r\n }\r\n }\r\n } else {\r\n res = {\r\n ref: {\r\n sheet,\r\n from: {row: minRow, col: minCol},\r\n to: {row: maxRow, col: maxCol}\r\n }\r\n };\r\n }\r\n\r\n if (!res.ref.sheet)\r\n delete res.ref.sheet;\r\n return res;\r\n }\r\n\r\n applyUnion(refs) {\r\n const collection = new Collection();\r\n for (let i = 0; i < refs.length; i++) {\r\n if (this.isFormulaError(refs[i]))\r\n return refs[i];\r\n collection.add(this.extractRefValue(refs[i]).val, refs[i]);\r\n }\r\n\r\n // console.log('applyUnion', unions);\r\n return collection;\r\n }\r\n\r\n /**\r\n * Apply multiple references, e.g. A1:B3:C8:A:1:.....\r\n * @param refs\r\n // * @return {{ref: {from: {col: number, row: number}, to: {col: number, row: number}}}}\r\n */\r\n applyRange(refs) {\r\n let res, maxRow = -1, maxCol = -1, minRow = MAX_ROW + 1, minCol = MAX_COLUMN + 1;\r\n refs.forEach(ref => {\r\n if (this.isFormulaError(ref))\r\n return ref;\r\n // row ref is saved as number, parse the number to row ref here\r\n if (typeof ref === 'number') {\r\n ref = this.parseRow(ref);\r\n }\r\n ref = ref.ref;\r\n // check whole row/col reference\r\n if (ref.row === undefined) {\r\n minRow = 1;\r\n maxRow = MAX_ROW\r\n }\r\n if (ref.col === undefined) {\r\n minCol = 1;\r\n maxCol = MAX_COLUMN;\r\n }\r\n\r\n if (ref.row > maxRow)\r\n maxRow = ref.row;\r\n if (ref.row < minRow)\r\n minRow = ref.row;\r\n if (ref.col > maxCol)\r\n maxCol = ref.col;\r\n if (ref.col < minCol)\r\n minCol = ref.col;\r\n });\r\n if (maxRow === minRow && maxCol === minCol) {\r\n res = {\r\n ref: {\r\n row: maxRow,\r\n col: maxCol\r\n }\r\n }\r\n } else {\r\n res = {\r\n ref: {\r\n from: {row: minRow, col: minCol},\r\n to: {row: maxRow, col: maxCol}\r\n }\r\n };\r\n }\r\n return res;\r\n }\r\n\r\n /**\r\n * Throw away the refs, and retrieve the value.\r\n * @return {{val: *, isArray: boolean}}\r\n */\r\n extractRefValue(obj) {\r\n const isArray = Array.isArray(obj);\r\n if (obj.ref) {\r\n // can be number or array\r\n return {val: this.context.retrieveRef(obj), isArray};\r\n\r\n }\r\n return {val: obj, isArray};\r\n }\r\n\r\n /**\r\n *\r\n * @param array\r\n * @return {Array}\r\n */\r\n toArray(array) {\r\n // TODO: check if array is valid\r\n // console.log('toArray', array);\r\n return array;\r\n }\r\n\r\n /**\r\n * @param {string} number\r\n * @return {number}\r\n */\r\n toNumber(number) {\r\n return Number(number);\r\n }\r\n\r\n /**\r\n * @param {string} string\r\n * @return {string}\r\n */\r\n toString(string) {\r\n return string.substring(1, string.length - 1) .replace(/\"\"/g, '\"');\r\n }\r\n\r\n /**\r\n * @param {string} bool\r\n * @return {boolean}\r\n */\r\n toBoolean(bool) {\r\n return bool === 'TRUE';\r\n }\r\n\r\n /**\r\n * Parse an error.\r\n * @param {string} error\r\n * @return {FormulaError}\r\n */\r\n toError(error) {\r\n return new FormulaError(error.toUpperCase());\r\n }\r\n\r\n isFormulaError(obj) {\r\n return obj instanceof FormulaError;\r\n }\r\n}\r\n\r\nmodule.exports = Utils;\r\n","const FormulaError = require('../../formulas/error');\r\nconst {FormulaHelpers} = require('../../formulas/helpers');\r\nconst {Parser} = require('../parsing');\r\nconst lexer = require('../lexing');\r\nconst Utils = require('./utils');\r\nconst {formatChevrotainError} = require('../utils');\r\n\r\nclass DepParser {\r\n\r\n /**\r\n *\r\n * @param {{onVariable: Function}} [config]\r\n */\r\n constructor(config) {\r\n this.data = [];\r\n this.utils = new Utils(this);\r\n config = Object.assign({\r\n onVariable: () => null,\r\n }, config);\r\n this.utils = new Utils(this);\r\n\r\n this.onVariable = config.onVariable;\r\n this.functions = {}\r\n\r\n this.parser = new Parser(this, this.utils);\r\n }\r\n\r\n /**\r\n * Get value from the cell reference\r\n * @param ref\r\n * @return {*}\r\n */\r\n getCell(ref) {\r\n // console.log('get cell', JSON.stringify(ref));\r\n if (ref.row != null) {\r\n if (ref.sheet == null)\r\n ref.sheet = this.position ? this.position.sheet : undefined;\r\n const idx = this.data.findIndex(element => {\r\n return (element.from && element.from.row <= ref.row && element.to.row >= ref.row\r\n && element.from.col <= ref.col && element.to.col >= ref.col)\r\n || (element.row === ref.row && element.col === ref.col && element.sheet === ref.sheet)\r\n });\r\n if (idx === -1)\r\n this.data.push(ref);\r\n }\r\n return 0;\r\n }\r\n\r\n /**\r\n * Get values from the range reference.\r\n * @param ref\r\n * @return {*}\r\n */\r\n getRange(ref) {\r\n // console.log('get range', JSON.stringify(ref));\r\n if (ref.from.row != null) {\r\n if (ref.sheet == null)\r\n ref.sheet = this.position ? this.position.sheet : undefined;\r\n\r\n const idx = this.data.findIndex(element => {\r\n return element.from && element.from.row === ref.from.row && element.from.col === ref.from.col\r\n && element.to.row === ref.to.row && element.to.col === ref.to.col;\r\n });\r\n if (idx === -1)\r\n this.data.push(ref);\r\n }\r\n return [[0]]\r\n }\r\n\r\n /**\r\n * TODO:\r\n * Get references or values from a user defined variable.\r\n * @param name\r\n * @return {*}\r\n */\r\n getVariable(name) {\r\n // console.log('get variable', name);\r\n const res = {ref: this.onVariable(name, this.position.sheet)};\r\n if (res.ref == null)\r\n return FormulaError.NAME;\r\n if (FormulaHelpers.isCellRef(res))\r\n this.getCell(res.ref);\r\n else {\r\n this.getRange(res.ref);\r\n }\r\n return 0;\r\n }\r\n\r\n /**\r\n * Retrieve values from the given reference.\r\n * @param valueOrRef\r\n * @return {*}\r\n */\r\n retrieveRef(valueOrRef) {\r\n if (FormulaHelpers.isRangeRef(valueOrRef)) {\r\n return this.getRange(valueOrRef.ref);\r\n }\r\n if (FormulaHelpers.isCellRef(valueOrRef)) {\r\n return this.getCell(valueOrRef.ref)\r\n }\r\n return valueOrRef;\r\n }\r\n\r\n /**\r\n * Call an excel function.\r\n * @param name - Function name.\r\n * @param args - Arguments that pass to the function.\r\n * @return {*}\r\n */\r\n callFunction(name, args) {\r\n args.forEach(arg => {\r\n if (arg == null)\r\n return;\r\n this.retrieveRef(arg);\r\n });\r\n return {value: 0, ref: {}};\r\n }\r\n\r\n /**\r\n * Check and return the appropriate formula result.\r\n * @param result\r\n * @return {*}\r\n */\r\n checkFormulaResult(result) {\r\n this.retrieveRef(result);\r\n }\r\n\r\n /**\r\n * Parse an excel formula and return the dependencies\r\n * @param {string} inputText\r\n * @param {{row: number, col: number, sheet: string}} position\r\n * @param {boolean} [ignoreError=false] if true, throw FormulaError when error occurred.\r\n * if false, the parser will return partial dependencies.\r\n * @returns {Array.<{}>}\r\n */\r\n parse(inputText, position, ignoreError = false) {\r\n if (inputText.length === 0) throw Error('Input must not be empty.');\r\n this.data = [];\r\n this.position = position;\r\n const lexResult = lexer.lex(inputText);\r\n this.parser.input = lexResult.tokens;\r\n try {\r\n const res = this.parser.formulaWithBinaryOp();\r\n this.checkFormulaResult(res);\r\n } catch (e) {\r\n if (!ignoreError) {\r\n throw FormulaError.ERROR(e.message, e);\r\n }\r\n }\r\n if (this.parser.errors.length > 0 && !ignoreError) {\r\n const error = this.parser.errors[0];\r\n throw formatChevrotainError(error, inputText);\r\n }\r\n\r\n return this.data;\r\n }\r\n}\r\n\r\nmodule.exports = {\r\n DepParser,\r\n};\r\n","const {FormulaParser} = require('./grammar/hooks');\r\nconst {DepParser} = require('./grammar/dependency/hooks');\r\nconst SSF = require('./ssf/ssf');\r\nconst FormulaError = require('./formulas/error');\r\n\r\n// const funs = new FormulaParser().supportedFunctions();\r\n// console.log('Supported:', funs.join(', '),\r\n// `\\nTotal: ${funs.length}/477, ${funs.length/477*100}% implemented.`);\r\n\r\n\r\nObject.assign(FormulaParser, {\r\n MAX_ROW: 1048576,\r\n MAX_COLUMN: 16384,\r\n SSF,\r\n DepParser,\r\n FormulaError, ...require('./formulas/helpers')\r\n});\r\nmodule.exports = FormulaParser;\r\n","import Parser, { DepParser } from 'fast-formula-parser';\nexport class FormulaParser {\n parser;\n depParser;\n root;\n constructor(root) {\n this.root = root;\n this.parser = new Parser({\n onCell: ({ col, row }) => {\n const cell = this.root.data[row - 1][col - 1];\n const cellValue = cell.resultValue.length > 0 ? cell.resultValue : cell.value;\n if (cellValue && isNaN(Number(cellValue)) === false)\n return Number(cellValue);\n return this.root.data[row - 1][col - 1].resultValue ?? '';\n },\n });\n this.depParser = new DepParser({});\n this.depParser;\n }\n}\n","import { Editor } from \"./components/editor\";\nimport { Scroller } from \"./components/scroller\";\nimport { Sheet } from \"./components/sheet\";\nimport { Table } from \"./components/table\";\nimport { Toolbar } from \"./components/toolbar\";\nimport { Cell, } from \"./modules/cell\";\nimport { Config, } from \"./modules/config\";\nimport { Selection } from \"./modules/selection\";\nimport { Styles } from \"./modules/styles\";\nimport { Viewport } from \"./modules/viewport\";\nimport \"./scss/main.scss\";\nimport { createSampleData } from \"./utils/createData\";\nimport { Cache, CachedColumn, CachedRow } from \"./modules/cache\";\nimport { Row } from \"./modules/row\";\nimport { Column } from \"./modules/column\";\nimport { ColumnsBar } from \"./components/columnsBar\";\nimport { RowsBar } from \"./components/rowsBar\";\nimport { EventTypes, Events } from \"./modules/events\";\nimport { Clipboard } from \"./modules/clipboard\";\nimport { FormulaParser } from \"./modules/formulaParser\";\nexport const CSS_PREFIX = \"modern_sc_\";\nexport default class Spreadsheet {\n table;\n scroller;\n toolbar;\n rowsBar;\n columnsBar;\n sheet;\n editor;\n styles;\n config;\n data;\n viewport;\n selection;\n cache;\n events;\n clipboard;\n formulaParser;\n constructor(target, props) {\n const data = createSampleData(40, 40);\n const config = this.makeConfigFromData(data, props?.view ?? { height: 600, width: 800 });\n if (props?.view) {\n config.view = props.view;\n }\n this.config = new Config(config);\n this.config.onCellClick = props?.onCellClick ?? null;\n this.config.onSelectonChange = props?.onSelectionChange ?? null;\n this.config.onCellChange = props?.onCellChange ?? null;\n this.config.onCopy = props?.onCopy ?? null;\n this.rowsBar = new RowsBar(this);\n this.columnsBar = new ColumnsBar(this);\n this.sheet = new Sheet(this);\n this.table = new Table(this);\n this.scroller = new Scroller(this);\n this.toolbar = new Toolbar(this);\n this.editor = new Editor(this);\n this.cache = this.getInitialCache();\n this.viewport = new Viewport(this, this.scroller.getViewportBoundlingRect());\n this.selection = new Selection();\n this.events = new Events(this);\n this.clipboard = new Clipboard(this);\n this.formulaParser = new FormulaParser(this);\n this.data = data;\n this.styles = new Styles();\n this.buildComponent();\n this.setElementsPositions();\n this.appendTableToTarget(target);\n this.renderSheet();\n this.renderColumnsBar();\n this.renderRowsBar();\n }\n setRowsBarPosition() {\n const top = this.columnsBar.height + this.toolbar.height;\n const left = 0;\n this.rowsBar.setElementPosition(top, left);\n }\n setColumnsBarPosition() {\n const top = this.toolbar.height;\n const left = this.rowsBar.width;\n this.columnsBar.setElementPosition(top, left);\n }\n setElementsPositions() {\n this.setRowsBarPosition();\n this.setColumnsBarPosition();\n }\n getInitialCache() {\n const cachedCols = [];\n let currentWidth = 0;\n for (let i = 0; i <= this.config.columns.length - 1; i++) {\n const col = this.config.columns[i];\n currentWidth += col.width;\n const cacheCol = new CachedColumn({\n xPos: currentWidth,\n colIdx: i,\n });\n cachedCols.push(cacheCol);\n }\n const cachedRows = [];\n let currentHeight = 0;\n for (let i = 0; i <= this.config.rows.length - 1; i++) {\n const row = this.config.rows[i];\n currentHeight += row.height;\n const cacheRow = new CachedRow({\n yPos: currentHeight,\n rowIdx: i,\n });\n cachedRows.push(cacheRow);\n }\n const cache = new Cache({\n columns: cachedCols,\n rows: cachedRows,\n });\n return cache;\n }\n buildComponent() {\n const content = document.createElement(\"div\"); //* Abstract\n content.style.top = this.columnsBarHeight + \"px\";\n content.style.left = this.rowsBarWidth + \"px\";\n content.appendChild(this.sheet.element);\n content.classList.add(CSS_PREFIX + \"content\");\n this.table.element.appendChild(this.toolbar.element);\n this.table.element.appendChild(this.rowsBar.element);\n this.table.element.appendChild(this.columnsBar.element);\n this.table.element.appendChild(content);\n this.table.element.appendChild(this.scroller.element);\n this.table.element.append(this.editor.element);\n }\n /**Destroy spreadsheet DOM element.\n *\n * May be usefull when need to rerender component.\n */\n destroy() {\n this.table.element.remove();\n }\n appendTableToTarget(target) {\n if (typeof target === \"string\") {\n const element = document.querySelector(target);\n if (!element)\n throw new Error(`Element with selector ${target} is not finded in DOM.\\n Make sure it exists.`);\n element?.appendChild(this.table.element);\n }\n if (target instanceof HTMLElement) {\n target.append(this.table.element);\n }\n }\n /** Canvas rendering context 2D.\n *\n * Abble to draw on canvas with default CanvasAPI methods\n */\n get ctx() {\n return this.sheet.ctx;\n }\n get viewProps() {\n return this.config.view;\n }\n get columnsBarHeight() {\n return this.columnsBar.height;\n }\n get rowsBarWidth() {\n return this.rowsBar.width;\n }\n get toolbarHeight() {\n return this.toolbar.height;\n }\n /** Focusing on interactive part of spreadsheet */\n focusTable() {\n this.scroller.element.focus();\n }\n getCellByCoords(x, y) {\n return this.sheet.getCellByCoords(x, y);\n }\n getCell(position) {\n const { column, row } = position;\n return this.data[row][column];\n }\n changeCellValues(position, values, enableCallback = true) {\n const { column, row } = position;\n this.data[row][column].changeValues(values);\n this.events.dispatch({\n type: EventTypes.CELL_CHANGE,\n cell: this.data[row][column],\n enableCallback: enableCallback\n });\n this.renderCell(row, column);\n }\n changeCellStyles(position, styles) {\n const { column, row } = position;\n this.data[row][column].changeStyles(styles);\n this.renderCell(row, column);\n }\n applyActionToRange(range, callback) {\n const fromRow = Math.min(range.from.row, range.to.row);\n const toRow = Math.max(range.from.row, range.to.row);\n const fromCol = Math.min(range.from.column, range.to.column);\n const toCol = Math.max(range.from.column, range.to.column);\n for (let row = fromRow; row <= toRow; row++) {\n for (let col = fromCol; col <= toCol; col++) {\n const cell = this.data[row][col];\n callback(cell);\n }\n }\n }\n deleteSelectedCellsValues() {\n if (this.selection.selectedRange !== null) {\n this.applyActionToRange(this.selection.selectedRange, (cell) => {\n this.changeCellValues(cell.position, {\n displayValue: \"\",\n resultValue: \"\",\n value: \"\",\n });\n });\n }\n else {\n if (!this.selection.selectedCell)\n return;\n this.changeCellValues(this.selection.selectedCell, {\n displayValue: \"\",\n resultValue: \"\",\n value: \"\",\n });\n }\n }\n showEditor(position, initialString) {\n this.editor.show(position, initialString);\n }\n renderSheet() {\n this.sheet.renderSheet();\n }\n renderSelection() {\n this.sheet.renderSelection();\n }\n renderColumnsBar() {\n this.columnsBar.renderBar();\n }\n renderRowsBar() {\n this.rowsBar.renderBar();\n }\n renderCell(row, col) {\n this.data[row][col].render(this);\n }\n loadData(data) {\n const rowsLength = data.length;\n const colsLength = data[0] ? data[0].length : 0;\n this.data = [];\n const formattedData = [];\n // Transform serialized objects to Cells\n for (let row = 0; row < rowsLength; row++) {\n const innerRow = [];\n for (let col = 0; col < colsLength; col++) {\n const cell = data[row][col];\n innerRow.push(new Cell({\n displayValue: cell.displayValue,\n position: cell.position,\n resultValue: cell.resultValue,\n value: cell.value,\n style: cell.style,\n }));\n }\n formattedData.push(innerRow);\n }\n const config = this.makeConfigFromData(formattedData, this.config.view);\n config.onCellChange = this.config.onCellChange;\n config.onCellClick = this.config.onCellClick;\n config.onCopy = this.config.onCopy;\n config.onSelectonChange = this.config.onSelectonChange;\n this.data = formattedData;\n this.selection.selectedCell = null;\n this.selection.selectedRange = null;\n this.config = config;\n this.cache = this.getInitialCache();\n this.scroller.updateScrollerSize();\n this.viewport = new Viewport(this, this.scroller.getViewportBoundlingRect());\n this.renderSheet();\n return this;\n }\n makeConfigFromData(data, view) {\n const lastRowIdx = data.length - 1;\n const lastColIdx = data[0] ? data[0].length : 0;\n const rows = [];\n for (let row = 0; row < lastRowIdx; row++) {\n rows.push(new Row({\n height: 40,\n title: String(row),\n }));\n }\n const columns = [];\n for (let col = 0; col < lastColIdx; col++) {\n columns.push(new Column({\n width: 150,\n title: String(col),\n }));\n }\n const config = new Config({\n view,\n rows,\n columns,\n onCellClick: null,\n });\n return config;\n }\n serializeData() {\n const rowsLength = this.data.length;\n const colsLength = this.data[0] ? this.data[0].length : 0;\n const cellsArray = [];\n for (let row = 0; row < rowsLength; row++) {\n const innerRow = [];\n for (let col = 0; col < colsLength; col++) {\n innerRow.push(this.data[row][col].getSerializableCell());\n }\n cellsArray.push(innerRow);\n }\n return cellsArray;\n }\n}\nexport * from \"./modules/cache\";\nexport * from \"./modules/cell\";\nexport * from \"./modules/column\";\nexport * from \"./modules/config\";\nexport * from \"./modules/renderBox\";\nexport * from \"./modules/row\";\nexport * from \"./modules/selection\";\nexport * from \"./modules/styles\";\nexport * from \"./modules/viewport\";\nexport * from \"./utils/createData\";\n"],"names":["EventTypes","Events","root","__publicField","event","scroller","offsetX","offsetY","clickedCell","cell","selection","Selection","_b","_a","enableCallback","range","data","dataAsString","action","err","RenderBox","config","cellPosition","column","x","row","y","Editor","key","target","element","CSS_PREFIX","position","initialString","height","width","checkEqualCellSelections","selection1","selection2","Scroller","lastSelectedCell","isRangeChanged","newSelection","keysRegex","isPressedLetterKey","cells","from","to","rect","horizontalScroller","verticalScroller","mode","scrollTop","scrollLeft","bottom","right","groupScrollers","stack","acc","curr","totalHeight","totalWidth","CellStyles","props","Position","SerializableCell","Cell$2","styles","values","parser","renderBox","ctx","Sheet$2","canvas","col","selectedCell","selectedRange","startRow","startCol","lastRow","lastCol","startCellBox","box","firstRowIdx","lastColIdx","lastRowIdx","firstColIdx","Table","container","sizes","Toolbar","toolbarElement","Config","Styles","Viewport","Column$2","Row","createSampleData","rows","columns","fillCellsByCoords","innerRow","value","Cell","createSampleConfig","rowsArr","i","rowItem","colsArr","colItem","Column","makeSpreadsheetConfigAndData","CachedColumn","CachedRow","Cache","initial","rowIdx","colIdx","ColumnsBar","top","left","isColSelected","specialX","RowsBar","isRowSeleted","specialY","Clipboard","mapedData","item","arrayOfCells","cellProps","rowsLength","colsLength","j","savedCell","Collection$3","refs","obj","ref","collection","Collection","FormulaError","require$$0","require$$1","Types","Factorials","ReversedTypes","FormulaHelpers","result","arr1","val","isArray","allowBoolean","number","params","valueType","allowUnion","hook","defValue","minSize","param","isCellRef","isRangeRef","isUnion","isLiteral","info","type","flat","allowSingleValue","paramType","variable","context","range1","range2","Address","H","arg","res","WildCard","lookupText","flags","Criteria","criteria","upper","op","dividend","name","modulo","columnName","len","code","rowOffset","colOffset","helpers","error","msg","details","functionName","args","SSF$1","SSF","_strrev","o","fill","c","l","pad0","v","d","t","pad_","rpad_","pad0r1","pad0r2","p2_32","pad0r","isgeneral","s","days","months","init_table","table_fmt","frac","D","mixed","sgn","B","P_2","P_1","P","Q_2","Q_1","Q","A","q","parse_date_code","opts","b2","date","time","dow","dout","out","fix_hijri","basedate","dnthresh","base1904","datenum_local","date1904","epoch","general_fmt_int","general_fmt_num","gnr1","gnr2","gnr4","gnr5","gnr6","gfn2","w","gfn5","gfn3","gfn4","V","general_fmt","format","write_date","fmt","ss0","ss","tt","outl","commaify","write_num","pct1","write_num_pct","sfmt","mul","write_num_cm","idx","write_num_exp","period","ee","fakee","$$","$1","$2","$3","frac1","write_num_f1","r","aval","sign","den","rr","base","myn","myd","write_num_f2","dec1","closeparen","phone","hashq","str","cc","rnd","dd","dec","carry","flr","write_num_flt","ffmt","ri","ff","oa","lres","rres","write_num_cm2","write_num_pct2","write_num_exp2","write_num_int","split_fmt","in_str","abstime","fmt_is_date","eval_fmt","flen","lst","dt","hr","bt","ssm","nstr","jj","vv","myv","ostr","decpt","lasti","retval","cfregex","cfregex2","chkcond","thresh","choose_fmt","f","lat","m1","m2","load_entry","tbl","ssf","defaultResult","singleUnitStrs","placeNameStrs","num2Word","nums","maxLen","overflowIndex","overflowNums","remainingNumbs","digit","grammarFix","neungLen","combine","baht","satang","bahttext","num","bahtStr","satangStr","bahtArr","satangArr","module","require$$2","require$$3","charsets","toFull","set","toHalf","re","way","sets","toFullWidth","str0","toHalfWidth","TextFunctions","text","decimals","decimalString","text1","text2","findText","withinText","startNum","noCommas","comma","numChars","decimalSeparator","groupSeparator","leftParenOrMinus","rightParen","percent","letter","old_text","start_num","num_chars","new_text","arr","number_times","findTextRegex","formatText","e","Prefix","prefixes","prefix","Postfix","postfix","type2Number","Infix","value1","infix","value2","isArray1","isArray2","type1","type2","operators","fd","factorial","n","factorialDouble","MathFunctions","functionNum","options","ref1","radix","minLength","significance","absSignificance","times","offset","numberChosen","nFactorial","kFactorial","radians","a","b","array","numRow","numCol","det","diagLeft","diagRight","array1","array2","aNumRows","aNumCols","bNumRows","bNumCols","m","v1","v2","divisor","multiple","numbers","numerator","denominator","dimension","matrix","rowArr","temp","power","product","parsedNumber","degrees","form","digits","roman","multiplier","coefficients","coefficient","sumRange","ranges","isCriteriaArray","sum","rowNum","colNum","valueToAdd","arrays","arrayX","arrayY","math","MAX_NUMBER","TrigFunctions","trigonometry","getNumLogicalValue","numTrue","numFalse","LogicalFunctions","logicalTest","valueIfTrue","valueIfFalse","valueIfError","valueIfNa","logical","factory","exports","BESSEL","M","_horner","z","_bessel_iter","f0","f1","tdx","f2","_bessel_wrap","bessel0","bessel1","nonzero","b0","b1","besselj","W","b0_a1a","b0_a2a","b0_a1b","b0_a2b","a1","a2","xx","b1_a1a","b1_a2a","b1_a1b","b1_a2b","ret","jsum","bjp","bj","bjm","tox","bessely","besseli","b0_a","b0_b","b1_a","b1_b","bip","bi","bim","besselk","window","this","jStat","Math","undefined","concat","slice","toString","calcRdx","isFunction","isNumber","toVector","fn","index","submat","ind","nrow","objArr","cols","func","toAlter","ncol","retZero","retOne","retIdent","size","min","max","length","hival","step","current","cnt","start","end","rl","_slice","list","rcSlice","colSlice","rowSlice","nl","ml","diagArray","mat","jProto","funcs","passfunc","self","results","ascNum","clip","mean","tmp","prod","low","high","hash","_arr","logs","meanOfLogs","arrlen","diffs","arrLen","distinctNumbers","numberCounts","sortedDistinctNumbers","numberRanks","currentRank","count","first","last","rank","maxCount","numMaxCount","mode_arr","flag","sumsqerr","samples","dev","median","quantilesArray","alphap","betap","sortedArray","quantileVals","p","aleph","k","gamma","exclusive","realIndex","score","kind","counter","strict","binCnt","binWidth","bins","arr2","u","arr1Len","sq_dev","mu","sigma","skewSum","fullbool","tmpthis","callbackFunction","argsToPass","curriedFunction","vector","cof","ser","x0","x2","xp","gl","gl0","fact","xden","xnum","yi","aln","ap","del","h","ITMAX","an","fpmin","qab","qap","qam","aa","EPS","gln","pp","lna1","afac","isneg","ty","lna","lnb","al","shape","oalph","newthis","vals","fnfunc","alpha","beta","df1","df2","x1","local","scale","dof","rate","ncp","tol","min_iterations","flip","prob","lastvalue","std","dof2","betinc","eps","a0","m9","c9","betacdf","N","scaledPDF","samplesDone","scaledCDF","factor","sumarr","L","lam","U","slam","loglam","invalpha","vr","us","laplaceSign","tukeyWprob","nleg","ihalf","C1","C2","C3","bb","wlar","wincr1","wincr2","xleg","aleg","qsqz","pr_w","wincr","blb","binc","bub","einsum","cc1","wi","elsum","ac","qexpo","pplus","pminus","rinsum","tukeyQinv","p0","q0","p1","q1","p2","q2","p3","q3","p4","q4","c1","c2","c3","c4","c5","vmax","ps","nmeans","df","nlegq","ihalfq","eps1","eps2","dhaf","dquar","deigh","dlarg","ulen1","ulen2","ulen3","ulen4","xlegq","alegq","f2lf","f21","ff4","ulen","ans","otsum","twa1","t1","wprb","rotsum","maxiter","valx0","valx1","iter","xabs","push","isUsable","nrescols","rescols","nnorm","newarr","determinant","submatrix","maug","pivot","y2","maxrow","parts","matrix_mode","R","T","xv","xk","qr2","R_I","I","Aj","cAi","Ij","cIi","qr_solve","array_mode","QR","attrs","Q1","R1","RI","Q2","condition","ev","maxim","theta","t_j","u_j","order","k1","k2","u_j1","k3","k4","h1","g","X","pos","h_min","y1","F","dF","dl","temp1","temp2","Y","Bt","C","Vt","sides","zscore","tscore","expVar","sample","sampMean","sampSampMean","tmpargs","unexpVar","anovafscore","fscore","mean1","mean2","n1","n2","sd","qscore","means","change","pvalue","differenceOfProportions","pooled","se","sub_regress","exog","var_count","modelList","endog_index","exog_index","ols","endog","nobs","df_model","df_resid","coef","predict","resid","ybar","SSE","SSR","SST","R2","t_test","model","subModelList","sigmaHat","seBetaHat","mod","tStatistic","pValue","leftppf","interval95","F_test","F_statistic","fcdf","ols_wrap","ttest","ftest","adjust_R2","matrixRows","jMat","pass","jMatX","jMatY","innerinv","xtransp","next","compile","jMatYBar","yAverage","covar","sds","ts","inner","yBar","ssr","sse","sst","bessel","require$$4","MAX_OCT","MIN_OCT","MAX_BIN","MIN_BIN","numberRegex","IMWithoutRealRegex","IMRegex","parseIM","textOrNumber","real","im","unit","match","EngineeringFunctions","numberStr","places","number1","number2","shiftAmount","realNum","iNum","suffix","lowerLimit","upperLimit","ifNegative","toDecimal","toBinary","iNumber","realInput","imaginaryInput","imaginary","iNumber1","iNumber2","res1","unit1","res2","unit2","argument","realSum","imSum","prevUnit","isNegative","toHex","engineering","ReferenceFunctions","rowNumber","columnNumber","absNum","sheetText","indexNum","lookupValue","tableArray","rowIndexNum","rangeLookup","lookupType","prevValue","currValue","areaNum","colIndexNum","currRow","reference","error2Number","InfoFunctions","infoType","information","SQRT2PI","DistributionFunctions","cumulative","probability","numberS","trials","probabilityS","numberS2","degFreedom","actualRange","expectedRange","actual","expected","xsqr","filterArr1","filterArr2","lambda","d1","d2","x1Mean","x2Mean","s1","s2","e2y","knownYs","knownXs","filteredY","filteredX","xAllEqual","yMean","xMean","dataArray","binsArray","binsArrayFiltered","filterArr","knownY","knownX","newX","useConst","isKnownXOmitted","avg_x","avg_y","avg_xy","avg_xx","new_y","sample_s","number_sample","population_s","number_pop","pdf","cdf","standard_dev","number_f","number_s","probability_s","deg_freedom","distribution","StatisticalFunctions","avg","averageRange","statistical","MS_PER_DAY","d1900","WEEK_STARTS","WEEK_TYPES","WEEKEND_TYPES","timeRegex","dateRegex1","dateRegex2","dateRegex3","parseSimplifiedDate","fmt1","fmt2","fmt3","parseTime","minutes","seconds","ampm","now","toSerial","addOn","toDate","serial","parseDateWithExtra","serialOrString","isDateGiven","parseDate","compareDateIgnoreTime","date1","date2","isLeapYear","year","DateFunctions","month","day","startDate","endDate","yearDiff","monthDiff","dayDiff","dateText","method","dayNum","yearStart","holidays","holidaysArr","numWorkDays","found","weekend","weekendArr","skip","hour","minute","second","timeText","returnType","weekTypes","weekStart","basis","sm","sy","ed","em","ey","yLength","years","average","WebFunctions","url","web","VERSION","isEmpty","keys","mapValues","callback","objKeys","currKey","map","flatten","currItem","forEach","iteratorCallback","isObject","colKeys","isString","isUndefined","drop","howMuch","dropRight","filter","predicate","reject","pick","has","prop","contains","find","cloneArr","newArr","cloneObj","clonedObj","findAll","reduce","arrOrObj","iterator","isArr","accumulator","compact","uniq","identity","identities","currIdentity","isRegExp","every","difference","some","indexOf","assign","sources","_i","curSource","currSourceKeys","assignNoOverwrite","defaults","groupBy","groupKeyFunc","currGroupKey","currGroupArr","merge","obj1","obj2","keys2","NOOP","IDENTITY","packArray","holeyArr","orgValue","PRINT_ERROR","PRINT_WARNING","isES2015MapSupported","applyMixins","derivedCtor","baseCtors","baseCtor","baseProto","propName","basePropDescriptor","toFastProperties","toBecomeFast","FakeConstructor","fakeInstance","fakeAccess","peek","timer","total","RegExpParser","newState","input","addFlag","alts","begin","terms","ASSERT_EXISTS","disjunction","ASSERT_NEVER_REACH_HERE","isBacktracking","atLeast","atMost","atom","complement","digitsCharCodes","whitespaceCodes","wordCharCodes","escapeCode","letterCode","escapedChar","nextChar","isFromSingleChar","isToSingleChar","insertToSet","capturing","groupAst","decimalPatternNoZero","decimalPattern","prevState","howMany","hexString","hexChar","hexDigitPattern","charCode","char","subItem","flagObj","flagKey","BaseRegExpVisitor","node","child","subChild","regExpAstCache","regExpParser","getRegExpAst","regExp","regExpStr","regExpAst","clearRegExpParserCache","__extends","extendStatics","__","complementErrorMessage","failedOptimizationPrefixMsg","getOptimizedStartCodesIndices","ensureOptimizations","ast","firstChars","firstCharOptimizedIndices","msgSuffix","ignoreCase","term","addOptimizedIdxToResult","rangeCode","minOptimizationVal","minUnOptVal","maxUnOptVal","minOptIdx","charCodeToOptimizedIndex","maxOptIdx","currOptIdx","isOptionalQuantifier","isWholeOptional","optimizedCharIdx","handleIgnoreCase","upperChar","lowerChar","findCode","setNode","targetCharCodes","codeOrRange","range_1","targetCode","CharCodeFinder","_super","_this","canMatchCharCode","charCodes","pattern","charCodeFinder","PATTERN","DEFAULT_MODE","MODES","SUPPORT_STICKY","analyzeTokenTypes","tokenTypes","tracer","initCharCodeToOptimizedIndexMap","onlyRelevantTypes","currType","Lexer","hasCustom","allTransformedPatterns","currPattern","regExpSource","addStickyFlag","addStartOfInput","escapedRegExpString","wrappedRegExp","patternIdxToType","patternIdxToGroup","patternIdxToLongerAltIdx","patternIdxToPushMode","patternIdxToPopMode","clazz","groupName","longerAltType","longerAltIdx","patternIdxToCanLineTerminator","lineTerminatorCharCodes","getCharCodes","tokType","checkLineBreaksIssues","patternIdxToIsCustom","patternIdxToShort","emptyGroups","patternIdxToConfig","isCustomPattern","isShortPattern","canBeOptimized","charCodeToPatternIdxToConfig","currTokType","optimizedIdx","addToMapOfArrays","lastOptimizedIdx_1","charOrInt","currOptimizedIdx","optimizedCodes","validatePatterns","validModesNames","errors","missingResult","findMissingPatterns","invalidResult","findInvalidPatterns","validTokenTypes","validateRegExpPattern","findInvalidGroupType","findModesThatDoNotExist","findUnreachablePatterns","withRegExpPatterns","findEndOfInputAnchor","findStartOfInputAnchor","findUnsupportedFlags","findDuplicatePatterns","findEmptyMatchRegExps","tokenTypesWithMissingPattern","LexerDefinitionErrorType","valid","tokenTypesWithInvalidPattern","end_of_input","EndAnchorFinder","invalidRegex","regexpAst","endAnchorVisitor","matchesEmptyString","start_of_input","StartAnchorFinder","startAnchorVisitor","invalidFlags","identicalPatterns","outerType","innerType","duplicatePatterns","currIdenticalSet","setOfIdentical","tokenTypeNames","dupPatternSrc","invalidTypes","group","validModes","invalidModes","canBeTested","noMetaChar","testIdx","tokenType","testTokenType","regExpArray","metaChars","performRuntimeChecks","lexerDefinition","trackLines","lineTerminatorCharacters","currModeValue","currModeName","currIdx","performWarningRuntimeChecks","warnings","hasAnyLineBreak","allTokenTypes","tokTypes","concreteTokenTypes","terminatorCharCodes","currIssue","message","buildLineBreakIssueMessage","warningDescriptor","cloneEmptyGroups","clonedResult","groupKeys","currGroupValue","LineTerminatorOptimizedTester","charsOrCodes","numOrString","charCodeToOptimizedIdxMap","tokenStructuredMatcher","tokInstance","tokConstructor","instanceType","tokenStructuredMatcherNoCategories","token","tokenShortNameIdx","tokenIdxToClass","augmentTokenTypes","tokenTypesAndParents","expandCategories","assignTokenDefaultProps","assignCategoriesMapProp","assignCategoriesTokensProp","categories","searching","newCategories","hasShortKeyProperty","hasCategoriesProperty","hasExtendingTokensTypesProperty","hasExtendingTokensTypesMapProperty","singleAssignCategoriesToksMap","path","nextNode","pathNode","nextCategory","newPath","isTokenType","defaultLexerErrorProvider","fullText","startOffset","line","DEFAULT_LEXER_CONFIG","traceInitVal","actualDefinition","hasOnlySingleMode","allModeNames","currModDef","currModName","currAnalyzeResult_1","allErrMessages","allErrMessagesString","unOptimizedModes","cannotBeOptimized","modeName","initialMode","lexResult","matchAltImage","matchedImage","payload","altPayload","imageLength","newToken","errLength","orgText","orgLength","matchedTokensIndex","guessedNumberOfTokens","matchedTokens","groups","lineTerminatorPattern","currModePatternsLength","currCharCodeToPatternIdxToConfig","modeStack","emptyArray","getPossiblePatterns","getPossiblePatternsSlow","getPossiblePatternsOptimized","possiblePatterns","pop_mode","popToken","msg_1","newMode","modeCanBeOptimized","push_mode","currConfig","nextCharCode","chosenPatternIdxToConfig","chosenPatternsLength","singleCharCode","longerAltConfig","longerAltPattern","numOfLTsInMatch","foundTerminator","lastLTEndOffset","errorStartOffset","errorLine","errorColumn","foundResyncPoint","currConfig_1","pushMode","newLastIndex","lastLTIdx","lastCharIsLT","fixForEndingInLT","oldColumn","image","tokenTypeIdx","startLine","startColumn","tokenVector","tokenToAdd","phaseDesc","phaseImpl","indent","traceMethod","tokenLabel","hasTokenLabel","tokenName","PARENT","CATEGORIES","LABEL","GROUP","PUSH_MODE","POP_MODE","LONGER_ALT","LINE_BREAKS","START_CHARS_HINT","createToken","createTokenInternal","EOF","createTokenInstance","endOffset","endLine","endColumn","tokenMatcher","AbstractProduction","_definition","visitor","NonTerminal","definition","Rule","Alternative","Option","RepetitionMandatory","RepetitionMandatoryWithSeparator","Repetition","RepetitionWithSeparator","Alternation","Terminal","serializeGrammar","topRules","serializeProduction","convertDefinition","serializedTerminal","RestWalker","prevRest","subProd","currRest","terminal","refProd","flatProd","fullOrRest","optionProd","atLeastOneProd","fullAtLeastOneRest","atLeastOneSepProd","fullAtLeastOneSepRest","restForRepetitionWithSeparator","manyProd","fullManyRest","manySepProd","fullManySepRest","orProd","alt","prodWrapper","repSepProd","repSepRest","fullRepSepRest","GAstVisitor","nodeAny","isSequenceProd","isOptionalProd","alreadyVisited","isDirectlyOptional","isBranchingProd","getProductionDslName","DslMethodsCollectorVisitor","subrule","option","manySep","atLeastOne","atLeastOneSep","many","or","collectorVisitor","collectMethods","rule","dslMethods","firstForTerminal","firstForSequence","firstForBranching","firstSet","seq","nextSubProdIdx","hasInnerProdsRemaining","currSubProd","isLastInnerProdOptional","allAlternativesFirsts","innerProd","IN","ResyncFollowsWalker","topProd","followName","buildBetweenProdsFollowPrefix","fullRest","restProd","t_in_topProd_follows","computeAllProdsFollows","topProductions","reSyncFollows","currRefsFollow","occurenceInParent","defaultParserErrorProvider","hasLabel","expectedMsg","firstRedundant","expectedPathsPerAlt","customUserDescription","errPrefix","actualText","errSuffix","allLookAheadPaths","currAltPaths","nextValidTokenSequences","currPath","currTokenType","nextValidSequenceItems","itemMsg","calculatedDescription","expectedIterationPaths","defaultGrammarResolverErrorProvider","topLevelRule","undefinedRule","defaultGrammarValidatorErrorProvider","duplicateProds","getExtraProductionArgument","topLevelName","duplicateProd","dslName","extraArgument","hasExplicitIndex","errMsg","pathMsg","currTok","occurrence","currtok","currMessage","ruleName","pathNames","utils.map","currRule","leftRecursivePath","resolveGrammar","topLevels","errMsgProvider","refResolver","GastRefResolverVisitor","nameToTopRule","ParserDefinitionErrorType","AbstractNextPossibleTokensWalker","NextAfterTokenWalker","AbstractNextTerminalAfterProductionWalker","topRule","NextTerminalAfterManyWalker","firstAfterMany","_first","NextTerminalAfterManySepWalker","firstAfterManySep","NextTerminalAfterAtLeastOneWalker","firstAfterAtLeastOne","NextTerminalAfterAtLeastOneSepWalker","atleastOneSepProd","firstAfterfirstAfterAtLeastOneSep","possiblePathsFrom","targetDef","maxLength","remainingPathWith","nextDef","getAlternativesForProd","alternatives","newDef","currAlt","nextPossibleTokensAfter","initialDef","tokMatcher","maxLookAhead","EXIT_NON_TERMINAL","EXIT_NON_TERMINAL_ARR","EXIT_ALTERNATIVE","foundCompletePath","tokenVectorLength","minimalAlternativesIndex","possiblePaths","currDef","currRuleStack","currOccurrenceStack","nextPath","nextIdx","actualToken","newRuleStack","newOccurrenceStack","nextPathWithout","nextPathWith","secondIteration","separatorGast","nthRepetition","currAltPath","expandTopLevelRule","newCurrOccurrenceStack","PROD_TYPE","getProdType","buildLookaheadFuncForOr","ruleGrammar","maxLookahead","hasPredicates","dynamicTokensEnabled","laFuncBuilder","lookAheadPaths","getLookaheadPathsForOr","areTokenCategoriesNotUsed","buildLookaheadFuncForOptionalProd","prodType","lookaheadBuilder","getLookaheadPathsForOptionalProd","buildAlternativesLookAheadFunc","numOfAlts","areAllOneTokenLookahead","orAlts","predicates","currNumOfPaths","currPredicate","currPathLength","nextToken","singleTokenAlts","choiceToAlt_1","currExtendingType","buildSingleAlternativeLookaheadFunction","numOfPaths","singleTokensTypes","expectedTokenType","expectedTokenUniqueKey_1","choiceToAlt_2","RestDefinitionFinderWalker","targetOccurrence","targetProdType","expectedProdType","InsideDefinitionFinderVisitor","targetRef","expectedProdName","initializeArrayOfArrays","pathToHashKeys","longerKeys","currShorterKey","categoriesKeySuffix","isUniquePrefixHash","altKnownPathsKeys","searchPathKeys","currAltIdx","otherAltKnownPathsKeys","searchIdx","searchKey","lookAheadSequenceFromAlternatives","altsDefs","partialAlts","finalResult","altsHashes","dict","newData","pathLength","currDataset","_loop_1","altIdx","currAltPathsAndSuffixes","currPathIdx","currPathPrefix","suffixDef","prefixKeys","isUnique","currAltResult","containsPath","newPartialPathsAndSuffixes","insideDefVisitor","insideDef","afterDefWalker","afterDef","insideFlat","AlternativeGAST","afterFlat","alternative","searchPath","compareOtherPath","otherPath","searchTok","otherTok","matchingTokens","isStrictPrefixOfPath","other","otherTokType","singleAltPaths","singlePath","validateGrammar","globalMaxLookahead","grammarName","duplicateErrors","currTopLevel","validateDuplicateProductions","leftRecursionErrors","currTopRule","validateNoLeftRecursion","emptyAltErrors","ambiguousAltsErrors","emptyRepetitionErrors","validateEmptyOrAlternative","validateAmbiguousAlternationAlternatives","validateSomeNonEmptyLookaheadPath","termsNamespaceConflictErrors","checkTerminalAndNoneTerminalsNameSpace","tooManyAltsErrors","curRule","validateTooManyAlts","duplicateRulesError","validateRuleDoesNotAlreadyExist","utils.flatten","OccurrenceValidationCollector","allRuleProductions","productionGroups","utils.groupBy","identifyProductionForDuplicates","duplicates","utils.pick","currGroup","utils.values","currDuplicates","firstProd","utils.first","defError","allRules","className","occurrences","validateRuleIsOverridden","definedRulesNames","utils.contains","nextNonTerminals","getFirstNoneTerminal","utils.isEmpty","foundLeftRecursion","validNextSteps","utils.difference","errorsFromNextSteps","currRefRule","utils.cloneArr","currSubDef","isFirstOptional","hasMore","rest","utils.drop","OrCollector","orCollector","ors","utils.reduce","currOr","exceptLast","utils.dropRight","currErrors","currAlternative","possibleFirstInAlt","utils.compact","currOccurrence","actualMaxLookahead","altsAmbiguityErrors","checkAlternativesAmbiguities","altsPrefixAmbiguityErrors","checkPrefixAlternativesAmbiguities","RepetionCollector","topLevelRules","currProd","paths","pathsInsideProduction","alternation","foundAmbiguousPaths","identicalAmbiguities","altsCurrPathAppearsIn","currOtherAlt","currOtherAltIdx","currAmbDescriptor","ambgIndices","pathsAndIndices","currPathsAndIdx","currPathAndIdx","alternativeGast","targetIdx","targetPath","prefixAmbiguitiesPathsAndIndices","searchPathAndIdx","currPathPrefixErrors","currAmbPathAndIdx","tokenNames","currToken","currRuleName","topRulesTable","orgResolveGrammar","orgValidateGrammar","assignOccurrenceIndices","methodsCollector","methods","currMethod","arrIdx","MISMATCHED_TOKEN_EXCEPTION","NO_VIABLE_ALT_EXCEPTION","EARLY_EXIT_EXCEPTION","NOT_ALL_INPUT_PARSED_EXCEPTION","RECOGNITION_EXCEPTION_NAMES","isRecognitionException","RecognitionException","_newTarget","MismatchedTokenException","previousToken","NoViableAltException","NotAllInputParsedException","EarlyExitException","EOF_FOLLOW_KEY","IN_RULE_RECOVERY_EXCEPTION","InRuleRecoveryException","Recoverable","DEFAULT_PARSER_CONFIG","attemptInRepetitionRecovery","tokToInsert","grammarRule","grammarRuleArgs","lookAheadFunc","expectedTokType","reSyncTokType","savedLexerState","resyncedTokens","passedResyncPoint","nextTokenWithoutResync","generateErrorMessage","expectTokAfterLastMatch","nextTokIdx","notStuck","tokIdxInRule","grammarPath","follows","nextTok","expectedToken","mismatchedTok","isMisMatchedTokInFollows","possibleFollowsTokType","isNextTokenWhatIsExpected","followKey","currentRuleReSyncSet","allPossibleReSyncTokTypes","nextTokenType","currRuleShortName","currRuleIdx","prevRuleShortName","explicitRuleStack","explicitOccurrenceStack","followStack","resyncTokens","prodFunc","lookaheadFunc","dslMethodIdx","prodOccurrence","nextToksWalker","pathRuleStack","pathOccurrenceStack","currShortName","firstAfterRepInfo","walker","isEndOfRule","BITS_FOR_METHOD_TYPE","BITS_FOR_OCCURRENCE_IDX","OR_IDX","OPTION_IDX","MANY_IDX","AT_LEAST_ONE_IDX","MANY_SEP_IDX","AT_LEAST_ONE_SEP_IDX","getKeyForAutomaticLookahead","ruleIdx","LooksAhead","rules","repetition","repetitionMandatory","repetitionMandatoryWithSeparator","repetitionWithSeparator","prodIdx","laFunc","prodKey","prodMaxLookahead","dslMethodName","setNodeLocationOnlyOffset","currNodeLocation","newLocationInfo","setNodeLocationFull","addTerminalToCst","tokenTypeName","addNoneTerminalToCst","ruleResult","classNameFromInstance","instance","NAME","existingNameProp","defineNameProp","nameValue","namePropDescriptor","defaultVisit","childrenNames","childrenNamesLength","currChildName","currChildArray","currChildArrayLength","currChild","createBaseSemanticVisitorConstructor","ruleNames","derivedConstructor","semanticProto","cstNode","semanticDefinitionErrors","validateVisitor","errorMessages","currDefError","createBaseVisitorConstructorWithDefaults","baseConstructor","withDefaultsProto","CstVisitorDefinitionError","visitorInstance","missingErrors","validateMissingCstMethods","redundantErrors","validateRedundantMethods","VALID_PROP_NAMES","TreeBuilder","fullRuleName","shortName","ruleCstNode","prevToken","loc","consumedToken","rootCst","ruleCstResult","preCstNode","newBaseCstVisitorConstructor","newConstructor","ruleStack","occurrenceStack","LexerAdapter","newInput","END_OF_FILE","soughtIdx","RecognizerApi","impl","ruleToCall","actionORMethodDef","altsOrOpts","implementation","DEFAULT_RULE_CONFIG","ruleImplementation","ruleErrors","orgState","RecognizerEngine","tokenVocabulary","uniqueTokens","noTokenCategoriesUsed","tokenConstructor","resyncEnabled","recoveryValueFunc","invokeRuleWithTry","cst","wrappedGrammarRule","idxInCallingRule","ruleNamePropName","resyncEnabledConfig","isFirstInvokedRule","reSyncEnabled","recogError","partialCstResult","orgLookaheadFunction_1","laKey","orgLookaheadFunction_2","separator","firstIterationLookaheadFunc","separatorLookAheadFunc","lookaheadFunction","orgLookaheadFunction_3","firstIterationLaFunc","nextTerminalAfterWalker","beforeIteration","afterIteration","altIdxToTake","chosenAlternative","firstRedundantTok","eFromConsumption","eFromInRuleRecovery","savedErrors","savedRuleStack","fullName","ErrorHandler","newErrors","userDefinedErrMsg","lookAheadPathsPerAlternative","insideProdPaths","actualTokens","errMsgTypes","ContentAssist","startRuleName","precedingInput","startRuleGast","topRuleName","gastProductions","topProduction","nextPossibleTokenTypes","RECORDING_NULL_OBJECT","HANDLE_SEPARATOR","MAX_METHOD_IDX","RFT","RECORDING_PHASE_TOKEN","RECORDING_PHASE_CSTNODE","GastRecorder","arg1","arg2","def","newTopLevelRule","originalError","recordProd","recordOrProd","assertMethodIdxIsValid","getIdxSuffix","prevProd","newNoneTerminal","prodConstructor","mainProdArg","handleSep","grammarAction","newProd","hasOptions","newOrProd","currAltFlat","PerformanceTracer","userTraceInitPerf","traceIsNumber","EMPTY_ALT","Parser","that","parserInstance","defErrorsMsgs","wrappedRule","originalGrammarAction","recordedRuleGast","resolverErrors","validationErrors","allFollows","CstParser","configClone","EmbeddedActionsParser","createSyntaxDiagramsCode","grammar","_c","resourceBase","_d","css","header","cssHtml","scripts","diagramsDiv","serializedGrammar","initLogic","NL","genUmdModule","genClass","genWrapperFunction","genAllRules","rulesText","genRule","genDefinition","genTerminal","genNonTerminal","genAlternation","altDef","genSingleAlt","genProd","genDSLRule","genDefFunction","spaces","generateParserFactory","wrapperText","constructorWrapper","generateParserModule","clearCache","WhiteSpace","String","SingleQuotedString","SheetQuoted","Function","FormulaErrorT","RefError","Name","Sheet","Number","Boolean","At","Comma","Colon","Semicolon","OpenParen","CloseParen","OpenSquareParen","CloseSquareParen","OpenCurlyParen","CloseCurlyParen","QuoteS","MulOp","PlusOp","DivOp","MinOp","ConcatOp","ExOp","PercentOp","GtOp","EqOp","LtOp","NeqOp","GteOp","LteOp","allTokens","SelectLexer","lexing","inputText","lexingResult","lexer","ExcelRefFunction","ExcelConditionalRefFunction","Parsing","utils","$","infixes","ops","formula","currentRow","sep","constant","bool","sheetName","referenceItem","address","parsing","Operators","MAX_ROW","MAX_COLUMN","Utils$3","cellAddress","col1","col2","row1","row2","val1","val2","maxRow","maxCol","minRow","minCol","sheet","refMaxRow","refMinRow","refMaxCol","refMinCol","string","Utils","EngFunctions","require$$5","InformationFunctions","require$$6","require$$7","require$$8","require$$9","require$$10","require$$11","require$$12","require$$13","require$$14","FormulaParser$2","isTest","valueOrRef","nullValue","awaitedArgs","supported","fun","allowReturnArray","hooks","FormulaParser","Utils$1","formatChevrotainError","DepParser$1","ignoreError","DepParser","fastFormulaParser","cellValue","Spreadsheet","cachedCols","currentWidth","cacheCol","cachedRows","currentHeight","cacheRow","content","fromRow","toRow","fromCol","toCol","formattedData","view","cellsArray"],"mappings":"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","x_google_ignoreList":[20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88]}