@gridsheet/react-core 1.4.0-alpha.9 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/README.md +27 -0
  2. package/dist/components/Cell.d.ts.map +1 -1
  3. package/dist/components/Cell.js +3 -1
  4. package/dist/components/Cell.js.map +1 -1
  5. package/dist/components/Editor.d.ts +2 -1
  6. package/dist/components/Editor.d.ts.map +1 -1
  7. package/dist/components/Editor.js +13 -4
  8. package/dist/components/Editor.js.map +1 -1
  9. package/dist/components/FormulaBar.d.ts.map +1 -1
  10. package/dist/components/FormulaBar.js +4 -3
  11. package/dist/components/FormulaBar.js.map +1 -1
  12. package/dist/components/GridSheet.d.ts.map +1 -1
  13. package/dist/components/GridSheet.js +3 -2
  14. package/dist/components/GridSheet.js.map +1 -1
  15. package/dist/components/SheetProvider.d.ts +2 -0
  16. package/dist/components/SheetProvider.d.ts.map +1 -1
  17. package/dist/components/SheetProvider.js +3 -0
  18. package/dist/components/SheetProvider.js.map +1 -1
  19. package/dist/components/Tabular.d.ts.map +1 -1
  20. package/dist/components/Tabular.js +38 -29
  21. package/dist/components/Tabular.js.map +1 -1
  22. package/dist/formula/evaluator.d.ts +10 -3
  23. package/dist/formula/evaluator.d.ts.map +1 -1
  24. package/dist/formula/evaluator.js +11 -6
  25. package/dist/formula/evaluator.js.map +1 -1
  26. package/dist/formula/functions/__base.d.ts +4 -1
  27. package/dist/formula/functions/__base.d.ts.map +1 -1
  28. package/dist/formula/functions/__base.js +2 -1
  29. package/dist/formula/functions/__base.js.map +1 -1
  30. package/dist/formula/functions/add.js +4 -4
  31. package/dist/formula/functions/add.js.map +1 -1
  32. package/dist/formula/functions/col.d.ts +1 -2
  33. package/dist/formula/functions/col.d.ts.map +1 -1
  34. package/dist/formula/functions/col.js +8 -5
  35. package/dist/formula/functions/col.js.map +1 -1
  36. package/dist/formula/functions/col.spec.d.ts +2 -0
  37. package/dist/formula/functions/col.spec.d.ts.map +1 -0
  38. package/dist/formula/functions/minus.js +4 -4
  39. package/dist/formula/functions/minus.js.map +1 -1
  40. package/dist/formula/functions/row.d.ts +1 -2
  41. package/dist/formula/functions/row.d.ts.map +1 -1
  42. package/dist/formula/functions/row.js +8 -5
  43. package/dist/formula/functions/row.js.map +1 -1
  44. package/dist/formula/functions/row.spec.d.ts +2 -0
  45. package/dist/formula/functions/row.spec.d.ts.map +1 -0
  46. package/dist/formula/mapping.d.ts.map +1 -1
  47. package/dist/formula/mapping.js +1 -0
  48. package/dist/formula/mapping.js.map +1 -1
  49. package/dist/formula/solver.d.ts +3 -2
  50. package/dist/formula/solver.d.ts.map +1 -1
  51. package/dist/formula/solver.js +3 -3
  52. package/dist/formula/solver.js.map +1 -1
  53. package/dist/index.d.ts +1 -1
  54. package/dist/index.d.ts.map +1 -1
  55. package/dist/lib/clipboard.d.ts.map +1 -1
  56. package/dist/lib/clipboard.js +28 -2
  57. package/dist/lib/clipboard.js.map +1 -1
  58. package/dist/lib/table.d.ts +2 -1
  59. package/dist/lib/table.d.ts.map +1 -1
  60. package/dist/lib/table.js +21 -10
  61. package/dist/lib/table.js.map +1 -1
  62. package/dist/lib/time.d.ts +7 -1
  63. package/dist/lib/time.d.ts.map +1 -1
  64. package/dist/lib/time.js +94 -3
  65. package/dist/lib/time.js.map +1 -1
  66. package/dist/parsers/core.d.ts.map +1 -1
  67. package/dist/parsers/core.js +1 -29
  68. package/dist/parsers/core.js.map +1 -1
  69. package/dist/renderers/core.d.ts +24 -21
  70. package/dist/renderers/core.d.ts.map +1 -1
  71. package/dist/renderers/core.js +34 -46
  72. package/dist/renderers/core.js.map +1 -1
  73. package/dist/store/actions.d.ts.map +1 -1
  74. package/dist/store/actions.js.map +1 -1
  75. package/dist/types.d.ts +5 -2
  76. package/dist/types.d.ts.map +1 -1
  77. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"table.js","sources":["../../lib/table.ts"],"sourcesContent":["import { defaultParser } from '../parsers/core';\nimport { defaultRenderer } from '../renderers/core';\nimport {\n Id,\n Ids,\n IdMatrix,\n AreaType,\n CellsByIdType,\n CellsByAddressType,\n PointType,\n WriterType,\n Address,\n CellFilter,\n Labelers,\n MatrixType,\n CellType,\n Parsers,\n Renderers,\n HistoryType,\n StoreReflectionType,\n ShapeType,\n OperatorType,\n TableMapType,\n SheetMapType,\n} from '../types';\nimport { areaShape, createMatrix, expandRange, getMaxSizesFromCells, matrixShape, putMatrix } from './structs';\nimport { a2p, x2c, p2a, y2r, grantAddressAbsolute } from './converters';\nimport { FunctionMapping } from '../formula/functions/__base';\nimport { functions as functionsDefault } from '../formula/mapping';\nimport { absolutizeFormula, Lexer, stripSheetName } from '../formula/evaluator';\nimport { solveFormula } from '../formula/solver';\n\nimport { DEFAULT_HEIGHT, DEFAULT_WIDTH, HEADER_HEIGHT, HEADER_WIDTH, HISTORY_LIMIT } from '../constants';\nimport { shouldTracking } from '../store/helpers';\nimport * as prevention from './prevention';\n\ntype Props = {\n parsers?: Parsers;\n renderers?: Renderers;\n labelers?: Labelers;\n useBigInt?: boolean;\n historyLimit?: number;\n minNumRows?: number;\n maxNumRows?: number;\n minNumCols?: number;\n maxNumCols?: number;\n headerHeight?: number;\n headerWidth?: number;\n functions?: FunctionMapping;\n};\n\nconst noFilter: CellFilter = () => true;\n\ntype GetProps = {\n // null for the system, do not use it\n evaluates?: boolean | null;\n raise?: boolean;\n filter?: CellFilter;\n};\n\ntype MoveProps = {\n src: AreaType;\n dst: AreaType;\n operator?: OperatorType;\n reflection?: StoreReflectionType;\n historicize?: boolean;\n};\n\ntype GetFlattenProps = GetProps & {\n key?: keyof CellType;\n};\n\ntype GetPropsWithArea = GetProps & {\n area?: AreaType;\n};\n\ntype GetFlattenPropsWithArea = GetFlattenProps & {\n area?: AreaType;\n};\n\nexport interface UserTable {\n changedAt: Date;\n lastChangedAt?: Date;\n top: number;\n left: number;\n bottom: number;\n right: number;\n minNumRows: number;\n maxNumRows: number;\n minNumCols: number;\n maxNumCols: number;\n totalWidth: number;\n totalHeight: number;\n headerWidth: number;\n headerHeight: number;\n currentHistory?: HistoryType;\n\n getRectSize(area: AreaType): ShapeType;\n getAddressById(id: Id, slideY: number, slideX: number): string | undefined;\n getAddressesByIds(ids: CellsByIdType): CellsByAddressType;\n getPointById(id: Id): PointType;\n getByPoint(point: PointType): CellType | undefined;\n getById(id: Id): CellType | undefined;\n getNumRows(base?: number): number;\n getNumCols(base?: number): number;\n getMatrixFlatten(args?: GetFlattenPropsWithArea): any[][];\n getObjectFlatten(args?: GetFlattenProps): CellsByAddressType;\n getRowsFlatten(args?: GetFlattenProps): CellsByAddressType[];\n getColsFlatten(args?: GetFlattenProps): CellsByAddressType[];\n getMatrix(args?: GetPropsWithArea): (CellType | null)[][];\n getObject(args?: GetProps): CellsByAddressType;\n getRows(args?: GetProps): CellsByAddressType[];\n getCols(args?: GetProps): CellsByAddressType[];\n getTableBySheetName(sheetName: string): UserTable;\n move(args: MoveProps): UserTable;\n copy(args: MoveProps): UserTable;\n update(args: {\n diff: CellsByAddressType;\n partial?: boolean;\n updateChangedAt?: boolean;\n reflection?: StoreReflectionType;\n }): UserTable;\n writeMatrix(args: {\n point: PointType;\n matrix: MatrixType<string>;\n updateChangedAt?: boolean;\n reflection?: StoreReflectionType;\n }): UserTable;\n write(args: {\n point: PointType;\n value: string;\n updateChangedAt?: boolean;\n reflection?: StoreReflectionType;\n }): UserTable;\n addRowsAndUpdate(args: {\n y: number;\n numRows: number;\n baseY: number;\n diff: CellsByAddressType;\n partial?: boolean;\n updateChangedAt?: boolean;\n reflection?: StoreReflectionType;\n }): UserTable;\n addRows(args: { y: number; numRows: number; baseY: number; reflection?: StoreReflectionType }): UserTable;\n deleteRows(args: { y: number; numRows: number; reflection?: StoreReflectionType }): UserTable;\n addColsAndUpdate(args: {\n x: number;\n numCols: number;\n baseX: number;\n diff: CellsByAddressType;\n partial?: boolean;\n updateChangedAt?: boolean;\n reflection?: StoreReflectionType;\n }): UserTable;\n addCols(args: { x: number; numCols: number; baseX: number; reflection?: StoreReflectionType }): UserTable;\n deleteCols(args: { x: number; numCols: number; reflection?: StoreReflectionType }): UserTable;\n undo(): {\n history: HistoryType | null;\n newTable: UserTable;\n };\n redo(): {\n history: HistoryType | null;\n newTable: UserTable;\n };\n getHistories(): HistoryType[];\n getHistoryIndex(): number;\n getHistorySize(): number;\n}\n\nexport class Table implements UserTable {\n public changedAt: Date;\n public lastChangedAt?: Date;\n public minNumRows: number;\n public maxNumRows: number;\n public minNumCols: number;\n public maxNumCols: number;\n public totalWidth: number = 0;\n public totalHeight: number = 0;\n public headerWidth: number = 0;\n public headerHeight: number = 0;\n public currentHistory?: HistoryType;\n public sheetId: number = 0;\n public sheetName: string = '';\n public sheets: SheetMapType = {};\n public tables: TableMapType = {};\n\n private head: bigint | number;\n private idMatrix: IdMatrix;\n private data: CellsByIdType = {};\n private area: AreaType = { top: 0, left: 0, bottom: 0, right: 0 };\n private parsers: Parsers;\n private renderers: Renderers;\n private labelers: Labelers;\n private functions: FunctionMapping = {};\n private lastHistory?: HistoryType;\n private histories: HistoryType[];\n private historyIndex: number;\n private addressesById: { [id: Id]: Address };\n private historyLimit: number;\n private solvedCaches: { [address: Address]: any };\n private idsToBeAbsoluted: Id[];\n\n constructor({\n parsers = {},\n renderers = {},\n labelers = {},\n useBigInt = false,\n historyLimit: historyLimit,\n minNumRows = 1,\n maxNumRows = -1,\n minNumCols = 1,\n maxNumCols = -1,\n headerWidth = HEADER_WIDTH,\n headerHeight = HEADER_HEIGHT,\n functions = functionsDefault,\n }: Props) {\n this.head = useBigInt ? BigInt(0) : 0;\n this.parsers = parsers || {};\n this.renderers = renderers || {};\n this.labelers = labelers || {};\n this.idMatrix = [];\n this.histories = [];\n this.historyIndex = -1;\n this.addressesById = {};\n this.historyLimit = historyLimit || HISTORY_LIMIT;\n this.changedAt = new Date();\n this.minNumRows = minNumRows || 0;\n this.maxNumRows = maxNumRows || 0;\n this.minNumCols = minNumCols || 0;\n this.maxNumCols = maxNumCols || 0;\n this.solvedCaches = {};\n this.headerHeight = headerHeight;\n this.headerWidth = headerWidth;\n this.functions = functions;\n this.idsToBeAbsoluted = [];\n }\n\n public getTableBySheetName(sheetName: string) {\n const sheetId = this.sheets[sheetName];\n return this.tables[sheetId];\n }\n\n public initialize(cells: CellsByAddressType) {\n const auto = getMaxSizesFromCells(cells);\n this.area = {\n top: 0,\n left: 0,\n bottom: auto.numRows || 0,\n right: auto.numCols || 0,\n };\n\n // make idMatrix beforehand\n for (let y = 0; y < auto.numRows + 1; y++) {\n const ids: Ids = [];\n this.idMatrix.push(ids);\n for (let x = 0; x < auto.numCols + 1; x++) {\n const id = this.generateId();\n ids.push(id);\n const address = p2a({ y, x });\n this.addressesById[id] = address;\n }\n }\n Object.keys(cells).forEach((address) => {\n const range = expandRange(address);\n const data = cells[address];\n range.forEach((address) => {\n const origin = cells[address];\n cells[address] = {\n ...origin,\n ...data,\n style: {\n ...origin?.style,\n ...data?.style,\n },\n prevention: (origin?.prevention || 0) | (data?.prevention || 0),\n };\n });\n });\n\n const common = cells?.['default'];\n for (let y = 0; y < auto.numRows + 1; y++) {\n const rowId = y2r(y);\n const rowDefault = cells?.[rowId];\n for (let x = 0; x < auto.numCols + 1; x++) {\n const id = this.getId({ y, x });\n const address = p2a({ y, x });\n const colId = x2c(x);\n const colDefault = cells?.[colId];\n const cell = cells?.[address];\n const stacked = {\n ...common,\n ...rowDefault,\n ...colDefault,\n ...cell,\n style: {\n ...common?.style,\n ...rowDefault?.style,\n ...colDefault?.style,\n ...cell?.style,\n },\n prevention:\n (common?.prevention || 0) |\n (rowDefault?.prevention || 0) |\n (colDefault?.prevention || 0) |\n (cell?.prevention || 0),\n } as CellType;\n\n if (stacked?.value?.startsWith?.('=')) {\n this.idsToBeAbsoluted.push(id);\n }\n if (y === 0) {\n if (stacked.width == null) {\n stacked.width = DEFAULT_WIDTH;\n }\n } else if (x === 0) {\n if (stacked.height == null) {\n stacked.height = DEFAULT_HEIGHT;\n }\n } else {\n delete stacked.height;\n delete stacked.width;\n delete stacked.labeler;\n }\n this.data[id] = stacked;\n }\n }\n this.setTotalSize();\n }\n\n public absolutizeFormula() {\n this.idsToBeAbsoluted.forEach((id) => {\n const cell = this.data[id];\n if (cell == null) {\n return;\n }\n cell.value = absolutizeFormula({\n value: cell?.value,\n table: this,\n });\n });\n }\n\n private generateId() {\n return (this.head++).toString(36);\n }\n\n public getRectSize({ top, left, bottom, right }: AreaType) {\n let width = 0,\n height = 0;\n for (let x = left || 1; x < right; x++) {\n width += this.getByPoint({ y: 0, x })?.width || DEFAULT_WIDTH;\n }\n for (let y = top || 1; y < bottom; y++) {\n height += this.getByPoint({ y, x: 0 })?.height || DEFAULT_HEIGHT;\n }\n return { width, height };\n }\n private setTotalSize() {\n const { bottom, right } = this.area;\n const { width, height } = this.getRectSize({\n top: 1,\n left: 1,\n bottom: bottom + 1,\n right: right + 1,\n });\n this.totalWidth = width + this.headerWidth;\n this.totalHeight = height + this.headerHeight;\n }\n\n public shallowCopy({ copyCache = true }: { copyCache?: boolean } = {}) {\n const copied: Table = Object.assign(Object.create(Object.getPrototypeOf(this)), this);\n copied.changedAt = new Date();\n copied.lastChangedAt = this.changedAt;\n copied.setTotalSize();\n copied.idsToBeAbsoluted = [];\n copied.solvedCaches = {};\n if (!copyCache) {\n // force reset\n this.addressesById = {};\n }\n return copied;\n }\n\n public getAddressById(id: Id, slideY = 0, slideX = 0): string | undefined {\n const absCol = id.startsWith('$');\n if (absCol) {\n id = id.slice(1);\n slideX = 0;\n }\n const absRow = id.endsWith('$');\n if (absRow) {\n id = id.slice(0, -1);\n slideY = 0;\n }\n\n for (let y = 0; y < this.idMatrix.length; y++) {\n const ids = this.idMatrix[y];\n for (let x = 0; x < ids.length; x++) {\n const existing = ids[x];\n const address = p2a({ y, x });\n this.addressesById[existing] = address;\n if (existing === id) {\n const slidedAddress = p2a({\n y: y + slideY,\n x: x + slideX,\n });\n return grantAddressAbsolute(slidedAddress, absCol, absRow);\n }\n }\n }\n }\n\n public getAddressesByIds(ids: CellsByIdType) {\n const addresses: CellsByAddressType = {};\n Object.keys(ids).forEach((id) => {\n const cell = ids[id];\n const address = this.getAddressById(id);\n if (cell && address) {\n addresses[address] = cell;\n }\n });\n return addresses;\n }\n\n public getPointById(id: Id): PointType {\n const address = this.getAddressById(id);\n if (address) {\n return a2p(address);\n }\n return { y: 0, x: 0 };\n }\n private getId(point: PointType) {\n const { y, x } = point;\n return this.idMatrix[Math.abs(y)]?.[Math.abs(x)];\n }\n\n public getByPoint(point: PointType) {\n const { y, x } = point;\n if (y === -1 || x === -1) {\n return undefined;\n }\n const id = this.idMatrix[y]?.[x];\n if (id == null) {\n return undefined;\n }\n const value = this.data[id];\n return value;\n }\n\n public getById(id: Id) {\n return this.data[id];\n }\n\n public getNumRows(base = 0) {\n const { top, bottom } = this.area;\n return base + bottom - top;\n }\n\n public getNumCols(base = 0) {\n const { left, right } = this.area;\n return base + right - left;\n }\n\n public get top() {\n return this.area.top;\n }\n public get left() {\n return this.area.left;\n }\n public get bottom() {\n return this.area.bottom;\n }\n public get right() {\n return this.area.right;\n }\n\n public getMatrixFlatten({\n area,\n key = 'value',\n evaluates = true,\n raise = false,\n filter = noFilter,\n }: GetFlattenPropsWithArea = {}) {\n const { top, left, bottom, right } = area || {\n top: 1,\n left: 1,\n bottom: this.area.bottom,\n right: this.area.right,\n };\n const matrix = createMatrix(bottom - top + 1, right - left + 1);\n for (let y = top; y <= bottom; y++) {\n for (let x = left; x <= right; x++) {\n const cell = this.getByPoint({ y, x }) || {};\n if (!filter(cell)) {\n continue;\n }\n matrix[y - top][x - left] = solveFormula({\n value: cell[key],\n table: this,\n raise,\n evaluates,\n });\n }\n }\n return matrix;\n }\n public getObjectFlatten({ key = 'value', evaluates = true, raise = false, filter = noFilter }: GetFlattenProps = {}) {\n const result: CellsByAddressType = {};\n const { top, left, bottom, right } = this.area;\n for (let y = top; y <= bottom; y++) {\n for (let x = left; x <= right; x++) {\n const cell = this.getByPoint({ y: y - top, x: x - left });\n if (cell != null && filter(cell)) {\n result[p2a({ y, x })] = solveFormula({\n value: cell[key],\n table: this,\n raise,\n evaluates,\n });\n }\n }\n }\n return result;\n }\n public getRowsFlatten({ key = 'value', evaluates = true, raise = false, filter = noFilter }: GetFlattenProps = {}) {\n const result: CellsByAddressType[] = [];\n const { top, left, bottom, right } = this.area;\n for (let y = top; y <= bottom; y++) {\n const row: CellsByAddressType = {};\n result.push(row);\n for (let x = left; x <= right; x++) {\n const cell = this.getByPoint({ y: y - top, x: x - left });\n if (cell != null && filter(cell)) {\n row[x2c(x) || y2r(y)] = solveFormula({\n value: cell[key],\n table: this,\n raise,\n evaluates,\n });\n }\n }\n }\n return result;\n }\n public getColsFlatten({ key = 'value', evaluates = true, raise = false, filter = noFilter }: GetFlattenProps = {}) {\n const result: CellsByAddressType[] = [];\n const { top, left, bottom, right } = this.area;\n for (let x = left; x <= right; x++) {\n const col: CellsByAddressType = {};\n result.push(col);\n for (let y = top; y <= bottom; y++) {\n const cell = this.getByPoint({ y: y - top, x: x - left });\n if (cell != null && filter(cell)) {\n col[y2r(y) || x2c(x)] = solveFormula({\n value: cell[key],\n table: this,\n raise,\n evaluates,\n });\n }\n }\n }\n return result;\n }\n public getMatrix({\n area,\n evaluates = true,\n raise = false,\n filter = noFilter,\n }: GetPropsWithArea = {}): (CellType | null)[][] {\n const { top, left, bottom, right } = area || {\n top: 1,\n left: 1,\n bottom: this.area.bottom,\n right: this.area.right,\n };\n const matrix = createMatrix(bottom - top + 1, right - left + 1);\n for (let y = top; y <= bottom; y++) {\n for (let x = left; x <= right; x++) {\n const cell = this.getByPoint({ y, x });\n if (cell != null && filter(cell)) {\n matrix[y - top][x - left] = {\n ...cell,\n value: solveFormula({\n value: cell?.value,\n table: this,\n raise,\n evaluates,\n }),\n };\n }\n }\n }\n return matrix;\n }\n public getObject({ evaluates = true, raise = false, filter = noFilter }: GetProps = {}) {\n const result: CellsByAddressType = {};\n const { top, left, bottom, right } = this.area;\n for (let y = top; y <= bottom; y++) {\n for (let x = left; x <= right; x++) {\n const cell = this.getByPoint({ y: y - top, x: x - left });\n if (cell != null && filter(cell)) {\n result[p2a({ y, x })] = {\n ...cell,\n value: solveFormula({\n value: cell?.value,\n table: this,\n raise,\n evaluates,\n }),\n };\n }\n }\n }\n return result;\n }\n public getRows({ evaluates = true, raise = false, filter = noFilter }: GetProps = {}) {\n const result: CellsByAddressType[] = [];\n const { top, left, bottom, right } = this.area;\n for (let y = top; y <= bottom; y++) {\n const row: CellsByAddressType = {};\n result.push(row);\n for (let x = left; x <= right; x++) {\n const cell = this.getByPoint({ y: y - top, x: x - left });\n if (cell != null && filter(cell)) {\n row[x2c(x) || y2r(y)] = {\n ...cell,\n value: solveFormula({\n value: cell?.value,\n table: this,\n raise,\n evaluates,\n }),\n };\n }\n }\n }\n return result;\n }\n public getCols({ evaluates = true, raise = false, filter = noFilter }: GetProps = {}) {\n const result: CellsByAddressType[] = [];\n const { top, left, bottom, right } = this.area;\n for (let x = left; x <= right; x++) {\n const col: CellsByAddressType = {};\n result.push(col);\n for (let y = top; y <= bottom; y++) {\n const cell = this.getByPoint({ y: y - top, x: x - left });\n if (cell != null && filter(cell)) {\n col[y2r(y) || x2c(x)] = {\n ...cell,\n value: solveFormula({\n value: cell?.value,\n table: this,\n raise,\n evaluates,\n }),\n };\n }\n }\n }\n return result;\n }\n\n private pushHistory(history: HistoryType) {\n const strayedHistories = this.histories.splice(this.historyIndex + 1, this.histories.length);\n strayedHistories.forEach(this.cleanStrayed.bind(this));\n this.histories.push(history);\n this.lastHistory = this.currentHistory = history;\n if (this.histories.length > this.historyLimit) {\n const kickedOut = this.histories.splice(0, 1)[0];\n this.cleanObsolete(kickedOut);\n } else {\n this.historyIndex++;\n }\n }\n\n private cleanObsolete(history: HistoryType) {\n if (history.operation === 'DELETE_ROWS' || history.operation === 'DELETE_COLS') {\n history.deleted.forEach((ids) => {\n ids.forEach((id) => {\n delete this.data[id];\n });\n });\n }\n if (history.operation === 'MOVE') {\n Object.keys(history.lostRows).forEach((address) => {\n const idMatrix = history.lostRows[address];\n idMatrix.map((ids) =>\n ids.forEach((id) => {\n if (id != null) {\n delete this.data[id];\n }\n }),\n );\n });\n }\n }\n\n private cleanStrayed(history: HistoryType) {\n if (history.operation === 'ADD_ROWS' || history.operation === 'ADD_COLS') {\n history.idMatrix.forEach((ids) => {\n ids.forEach((id) => {\n delete this.data[id];\n });\n });\n }\n }\n\n private getNewIdMatrix(area: AreaType) {\n const matrix: IdMatrix = [];\n const { top, left, bottom, right } = area;\n for (let y = top; y <= bottom; y++) {\n const ids: Ids = [];\n matrix.push(ids);\n for (let x = left; x <= right; x++) {\n ids.push(this.generateId());\n }\n }\n return matrix;\n }\n\n private getIdMatrixFromArea(area: AreaType) {\n const matrix: IdMatrix = [];\n const { top, left, bottom, right } = area;\n for (let y = top; y <= bottom; y++) {\n const ids: Ids = [];\n matrix.push(ids);\n for (let x = left; x <= right; x++) {\n const id = this.idMatrix[y]?.[x];\n if (id == null) {\n continue;\n }\n ids.push(id);\n }\n }\n return matrix;\n }\n\n private setChangedAt(cell?: CellType, changedAt?: Date) {\n if (cell == null) {\n return null;\n }\n cell.changedAt = changedAt || new Date();\n return cell;\n }\n\n private copyCellLayout(cell: CellType | undefined) {\n if (cell == null) {\n return undefined;\n }\n const newCell: CellType = {};\n if (cell.style != null) {\n newCell.style = cell.style;\n }\n if (cell.justifyContent != null) {\n newCell.justifyContent = cell.justifyContent;\n }\n if (cell.alignItems != null) {\n newCell.alignItems = cell.alignItems;\n }\n if (cell.renderer != null) {\n newCell.renderer = cell.renderer;\n }\n if (cell.parser != null) {\n newCell.parser = cell.parser;\n }\n if (cell.width != null) {\n newCell.width = cell.width;\n }\n if (cell.height != null) {\n newCell.height = cell.height;\n }\n if (cell.labeler != null) {\n newCell.labeler = cell.labeler;\n }\n return newCell;\n }\n\n public move({ src, dst, historicize = true, operator = 'SYSTEM', reflection = {} }: MoveProps) {\n const matrixNew = this.getNewIdMatrix(src);\n const matrixFrom = this.getIdMatrixFromArea(src);\n const matrixTo = this.getIdMatrixFromArea(dst);\n putMatrix(this.idMatrix, matrixNew, src, (_, id) => {\n const cell = this.data[id];\n if (operator === 'USER' && prevention.isPrevented(cell?.prevention, prevention.MoveFrom)) {\n return false;\n }\n return true;\n });\n const lostRows = putMatrix(this.idMatrix, matrixFrom, dst, (srcId, dstId) => {\n const srcCell = this.data[srcId];\n const dstCell = this.data[dstId];\n if (\n operator === 'USER' &&\n (prevention.isPrevented(srcCell?.prevention, prevention.MoveFrom) ||\n prevention.isPrevented(dstCell?.prevention, prevention.MoveTo))\n ) {\n return false;\n }\n if (srcCell != null) {\n this.setChangedAt(srcCell, new Date());\n }\n return true;\n });\n if (historicize) {\n this.pushHistory({\n applyed: true,\n operation: 'MOVE',\n reflection,\n src,\n dst,\n matrixFrom,\n matrixTo,\n matrixNew,\n lostRows,\n });\n }\n return this.shallowCopy({ copyCache: false });\n }\n\n public copy({ src, dst, operator = 'SYSTEM', reflection = {} }: MoveProps) {\n const { height: maxHeight, width: maxWidth } = areaShape({\n ...src,\n base: 1,\n });\n const { top: topFrom, left: leftFrom } = src;\n const { top: topTo, left: leftTo, bottom: bottomTo, right: rightTo } = dst;\n const diff: CellsByAddressType = {};\n const changedAt = new Date();\n\n for (let i = 0; i <= bottomTo - topTo; i++) {\n const toY = topTo + i;\n if (toY > this.getNumRows()) {\n continue;\n }\n for (let j = 0; j <= rightTo - leftTo; j++) {\n const toX = leftTo + j;\n if (toX > this.getNumCols()) {\n continue;\n }\n const fromY = topFrom + (i % maxHeight);\n const fromX = leftFrom + (j % maxWidth);\n const slideY = toY - fromY;\n const slideX = toX - fromX;\n const cell: CellType = {\n ...this.getByPoint({\n y: topFrom + (i % maxHeight),\n x: leftFrom + (j % maxWidth),\n }),\n prevention: 0, // Is this okay?\n };\n const value = absolutizeFormula({\n value: cell?.value,\n table: this,\n slideY,\n slideX,\n });\n this.setChangedAt(cell, changedAt);\n diff[p2a({ y: toY, x: toX })] = {\n ...cell,\n style: { ...cell?.style },\n value,\n };\n }\n }\n return this.update({\n diff,\n partial: false,\n operator,\n reflection,\n });\n }\n\n private _update({\n diff,\n partial = true,\n updateChangedAt = true,\n ignoreFields = ['labeler', 'prevention'],\n operator = 'SYSTEM',\n }: {\n diff: CellsByAddressType;\n partial?: boolean;\n updateChangedAt?: boolean;\n ignoreFields?: (keyof CellType)[];\n operator?: OperatorType;\n }) {\n const diffBefore: CellsByIdType = {};\n const diffAfter: CellsByIdType = {};\n const changedAt = new Date();\n\n Object.keys(diff).forEach((address) => {\n const cell = { ...diff[address] };\n if (operator === 'USER' && prevention.isPrevented(cell?.prevention, prevention.Update)) {\n return;\n }\n\n cell.value = absolutizeFormula({\n value: cell.value,\n table: this,\n });\n const point = a2p(address);\n const id = this.getId(point);\n const current = this.data[id];\n ignoreFields.forEach((key) => {\n cell[key] = current?.[key];\n });\n if (operator === 'USER' && prevention.isPrevented(current?.prevention, prevention.Write)) {\n cell.value = current?.value;\n }\n if (operator === 'USER' && prevention.isPrevented(current?.prevention, prevention.Style)) {\n cell.style = current?.style;\n cell.justifyContent = current?.justifyContent;\n cell.alignItems = current?.alignItems;\n }\n if (operator === 'USER' && prevention.isPrevented(current?.prevention, prevention.Resize)) {\n cell.width = current?.width;\n cell.height = current?.height;\n }\n if (operator === 'USER' && prevention.isPrevented(current?.prevention, prevention.SetRenderer)) {\n cell.renderer = current?.renderer;\n }\n if (operator === 'USER' && prevention.isPrevented(current?.prevention, prevention.SetParser)) {\n cell.parser = current?.parser;\n }\n if (updateChangedAt) {\n this.setChangedAt(cell, changedAt);\n }\n // must not partial\n diffBefore[id] = this.getByPoint(point);\n diffAfter[id] = cell;\n if (partial) {\n this.data[id] = { ...current, ...cell };\n } else {\n this.data[id] = cell;\n }\n });\n this.solvedCaches = {};\n return {\n diffBefore,\n diffAfter,\n };\n }\n\n public update({\n diff,\n partial = true,\n updateChangedAt = true,\n historicize = true,\n operator = 'SYSTEM',\n reflection = {},\n }: {\n diff: CellsByAddressType;\n partial?: boolean;\n updateChangedAt?: boolean;\n historicize?: boolean;\n operator?: OperatorType;\n reflection?: StoreReflectionType;\n }) {\n const { diffBefore, diffAfter } = this._update({\n diff,\n partial,\n operator,\n updateChangedAt,\n });\n\n if (historicize) {\n this.pushHistory({\n applyed: true,\n operation: 'UPDATE',\n reflection,\n diffBefore,\n diffAfter,\n partial,\n });\n }\n return this.shallowCopy({ copyCache: true });\n }\n\n public writeMatrix({\n point,\n matrix,\n updateChangedAt = true,\n historicize = true,\n operator = 'SYSTEM',\n reflection = {},\n }: {\n point: PointType;\n matrix: MatrixType<string>;\n updateChangedAt?: boolean;\n historicize?: boolean;\n operator?: OperatorType;\n reflection?: StoreReflectionType;\n }) {\n const { y: baseY, x: baseX } = point;\n const diff: CellsByAddressType = {};\n matrix.forEach((cols, i) => {\n const y = baseY + i;\n if (y > this.bottom) {\n return;\n }\n cols.forEach((value, j) => {\n const x = baseX + j;\n if (x > this.right) {\n return;\n }\n const cell = this.parse({ y, x }, value);\n diff[p2a({ y, x })] = cell;\n });\n });\n return this.update({\n diff,\n partial: true,\n updateChangedAt,\n historicize,\n operator,\n reflection,\n });\n }\n\n public write({\n point,\n value,\n updateChangedAt = true,\n historicize = true,\n operator = 'SYSTEM',\n reflection = {},\n }: {\n point: PointType;\n value: string;\n updateChangedAt?: boolean;\n historicize?: boolean;\n operator?: OperatorType;\n reflection?: StoreReflectionType;\n }) {\n return this.writeMatrix({\n point,\n matrix: [[value]],\n updateChangedAt,\n historicize,\n operator,\n reflection,\n });\n }\n\n public addRowsAndUpdate({\n y,\n numRows,\n baseY,\n diff,\n partial,\n updateChangedAt,\n operator = 'SYSTEM',\n reflection = {},\n }: {\n y: number;\n numRows: number;\n baseY: number;\n diff: CellsByAddressType;\n partial?: boolean;\n updateChangedAt?: boolean;\n operator?: OperatorType;\n reflection?: StoreReflectionType;\n }) {\n const returned = this.addRows({\n y,\n numRows,\n baseY,\n reflection,\n });\n\n Object.assign(this.lastHistory!, this._update({ diff, partial, updateChangedAt, operator }), { partial });\n\n return returned;\n }\n\n public addRows({\n y,\n numRows,\n baseY,\n // operator = 'SYSTEM',\n reflection = {},\n }: {\n y: number;\n numRows: number;\n baseY: number;\n operator?: OperatorType;\n reflection?: StoreReflectionType;\n }) {\n if (this.maxNumRows !== -1 && this.getNumRows() + numRows > this.maxNumRows) {\n console.error(`Rows are limited to ${this.maxNumRows}.`);\n return this;\n }\n const numCols = this.getNumCols(1);\n const rows: IdMatrix = [];\n const changedAt = new Date();\n for (let i = 0; i < numRows; i++) {\n const row: Ids = [];\n for (let j = 0; j < numCols; j++) {\n const id = this.generateId();\n row.push(id);\n const cell = this.getByPoint({ y: baseY, x: j });\n const copied = this.copyCellLayout(cell);\n this.data[id] = { ...copied, changedAt };\n }\n rows.push(row);\n }\n this.idMatrix.splice(y, 0, ...rows);\n this.area.bottom += numRows;\n\n this.pushHistory({\n applyed: true,\n operation: 'ADD_ROWS',\n reflection,\n y,\n numRows,\n idMatrix: rows,\n });\n return this.shallowCopy({ copyCache: false });\n }\n public deleteRows({\n y,\n numRows,\n operator = 'SYSTEM',\n reflection = {},\n }: {\n y: number;\n numRows: number;\n operator?: OperatorType;\n reflection?: StoreReflectionType;\n }) {\n if (this.minNumRows !== -1 && this.getNumRows() - numRows < this.minNumRows) {\n console.error(`At least ${this.minNumRows} row(s) are required.`);\n return this;\n }\n\n const ys: number[] = [];\n for (let i = y; i < y + numRows; i++) {\n const cell = this.getByPoint({ y: i, x: 0 });\n if (operator === 'USER' && prevention.isPrevented(cell?.prevention, prevention.DeleteRow)) {\n console.warn(`Cannot delete row ${i}.`);\n return this;\n }\n ys.unshift(i);\n }\n\n const deleted: MatrixType = [];\n ys.forEach((y) => {\n const row = this.idMatrix.splice(y, 1);\n deleted.unshift(row[0]);\n });\n this.area.bottom -= ys.length;\n this.pushHistory({\n applyed: true,\n operation: 'DELETE_ROWS',\n reflection,\n ys: ys.reverse(),\n deleted,\n });\n return this.shallowCopy({ copyCache: false });\n }\n\n public addColsAndUpdate({\n x,\n numCols,\n baseX,\n diff,\n partial,\n updateChangedAt,\n reflection = {},\n }: {\n x: number;\n numCols: number;\n baseX: number;\n diff: CellsByAddressType;\n partial?: boolean;\n updateChangedAt?: boolean;\n reflection?: StoreReflectionType;\n }) {\n const returned = this.addCols({\n x,\n numCols,\n baseX,\n reflection,\n });\n\n Object.assign(this.lastHistory!, this._update({ diff, partial, updateChangedAt }), { partial });\n return returned;\n }\n\n public addCols({\n x,\n numCols,\n baseX,\n reflection = {},\n }: {\n x: number;\n numCols: number;\n baseX: number;\n reflection?: StoreReflectionType;\n }) {\n if (this.maxNumCols !== -1 && this.getNumCols() + numCols > this.maxNumCols) {\n console.error(`Columns are limited to ${this.maxNumCols}.`);\n return this;\n }\n const numRows = this.getNumRows(1);\n const rows: IdMatrix = [];\n const changedAt = new Date();\n for (let i = 0; i < numRows; i++) {\n const row: Ids = [];\n for (let j = 0; j < numCols; j++) {\n const id = this.generateId();\n row.push(id);\n const cell = this.getByPoint({ y: i, x: baseX });\n const copied = this.copyCellLayout(cell);\n this.idMatrix[i].splice(x, 0, id);\n this.data[id] = { ...copied, changedAt };\n }\n rows.push(row);\n }\n this.area.right += numCols;\n\n this.pushHistory({\n applyed: true,\n operation: 'ADD_COLS',\n reflection,\n x,\n numCols,\n idMatrix: rows,\n });\n return this.shallowCopy({ copyCache: false });\n }\n public deleteCols({\n x,\n numCols,\n operator = 'SYSTEM',\n reflection = {},\n }: {\n x: number;\n numCols: number;\n operator?: OperatorType;\n reflection?: StoreReflectionType;\n }) {\n if (this.minNumCols !== -1 && this.getNumCols() - numCols < this.minNumCols) {\n console.error(`At least ${this.minNumCols} column(s) are required.`);\n return this;\n }\n\n const xs: number[] = [];\n for (let i = x; i < x + numCols; i++) {\n const cell = this.getByPoint({ y: 0, x: i });\n if (operator === 'USER' && prevention.isPrevented(cell?.prevention, prevention.DeleteCol)) {\n console.warn(`Cannot delete col ${i}.`);\n continue;\n }\n xs.unshift(i);\n }\n\n const deleted: MatrixType = [];\n this.idMatrix.forEach((row) => {\n const deleting: Ids = [];\n deleted.push(deleting);\n // reverse and delete\n xs.forEach((x) => {\n deleting.unshift(...row.splice(x, 1));\n });\n });\n this.area.right -= xs.length;\n\n this.pushHistory({\n applyed: true,\n operation: 'DELETE_COLS',\n reflection,\n xs: xs.reverse(),\n deleted,\n });\n return this.shallowCopy({ copyCache: false });\n }\n public getHistories() {\n return [...this.histories];\n }\n public getHistoryIndex() {\n return this.historyIndex;\n }\n public getHistorySize() {\n return this.histories.length;\n }\n public getHistoryLimit() {\n return this.historyLimit;\n }\n\n public setFunctions(additionalFunctions: FunctionMapping) {\n this.functions = { ...functionsDefault, ...additionalFunctions };\n }\n\n public getArea(): AreaType {\n return { ...this.area };\n }\n\n public parse(point: PointType, value: string) {\n const cell = this.getByPoint(point) || {};\n const parser = this.parsers[cell.parser || ''] || defaultParser;\n return parser.call(value, cell);\n }\n\n public render(point: PointType, writer?: WriterType) {\n const cell = this.getByPoint(point) || {};\n const renderer = this.renderers[cell.renderer || ''] || defaultRenderer;\n return renderer.call(this, point, writer);\n }\n\n public stringify(point: PointType, value?: any, evaluates = false) {\n const cell = this.getByPoint(point);\n const renderer = this.renderers[cell?.renderer || ''] || defaultRenderer;\n const s = renderer.stringify(typeof value === 'undefined' ? { ...cell } : { ...cell, value });\n\n if (s[0] === '=') {\n if (evaluates) {\n return String(solveFormula({ value: s, table: this, raise: false, evaluates }));\n }\n const lexer = new Lexer(s.substring(1));\n lexer.tokenize();\n return '=' + lexer.stringifyToRef(this);\n }\n return s;\n }\n\n public trim(area: AreaType): Table {\n const copied: Table = Object.assign(Object.create(Object.getPrototypeOf(this)), this);\n copied.area = area;\n // this causes RangeError on circular reference(maximum call stack size exceeded)\n // copied.solvedCaches = {};\n return copied;\n }\n\n public getIdByAddress(address: Address) {\n let table: Table = this;\n if (address.indexOf('!') !== -1) {\n const [sheetName, addr] = address.split('!');\n const sheetId = this.sheets[stripSheetName(sheetName)];\n table = this.tables[sheetId];\n address = addr;\n }\n const { y, x } = a2p(address);\n const id = table.getId({ y, x });\n if (id) {\n const prefix = table === this ? '' : `#${table.sheetId}!`;\n return `${prefix}#${x < 0 ? '$' : ''}${id}${y < 0 ? '$' : ''}`;\n }\n }\n\n private applyDiff(diff: CellsByIdType, partial = true) {\n if (!partial) {\n Object.assign(this.data, diff);\n return;\n }\n Object.keys(diff).map((id) => {\n const cell = diff[id];\n this.data[id] = { ...this.getById(id), ...cell };\n });\n }\n\n public undo() {\n if (this.historyIndex < 0) {\n return { history: null, newTable: this as Table };\n }\n const history = this.histories[this.historyIndex--];\n history.applyed = false;\n this.currentHistory = history;\n switch (history.operation) {\n case 'UPDATE':\n // diffBefore is guaranteed as total of cell (not partial)\n this.applyDiff(history.diffBefore, false);\n break;\n case 'ADD_ROWS': {\n if (history.diffBefore) {\n this.applyDiff(history.diffBefore, false);\n }\n const { height } = matrixShape({ matrix: history.idMatrix });\n this.idMatrix.splice(history.y, height);\n this.area.bottom -= height;\n break;\n }\n case 'ADD_COLS': {\n if (history.diffBefore) {\n this.applyDiff(history.diffBefore, false);\n }\n const { width } = matrixShape({ matrix: history.idMatrix });\n this.idMatrix.forEach((row) => {\n row.splice(history.x, width);\n });\n this.area.right -= width;\n break;\n }\n case 'DELETE_ROWS': {\n const { ys, deleted } = history;\n ys.forEach((y, i) => {\n this.idMatrix.splice(y, 0, deleted[i]);\n });\n this.area.bottom += ys.length;\n break;\n }\n case 'DELETE_COLS': {\n const { xs, deleted } = history;\n this.idMatrix.forEach((row, i) => {\n for (let j = 0; j < xs.length; j++) {\n row.splice(xs[j], 0, deleted[i][j]);\n }\n });\n this.area.right += xs.length;\n break;\n }\n case 'MOVE': {\n const { top: yFrom, left: xFrom } = history.src;\n const { top: yTo, left: xTo } = history.dst;\n const { height: rows, width: cols } = matrixShape({\n matrix: history.matrixFrom,\n base: -1,\n });\n putMatrix(this.idMatrix, history.matrixFrom, {\n top: yFrom,\n left: xFrom,\n bottom: yFrom + rows,\n right: xFrom + cols,\n });\n putMatrix(this.idMatrix, history.matrixTo, {\n top: yTo,\n left: xTo,\n bottom: yTo + rows,\n right: xTo + cols,\n });\n break;\n }\n }\n return {\n history,\n newTable: this.shallowCopy({\n copyCache: !shouldTracking(history.operation),\n }),\n };\n }\n\n public redo() {\n if (this.historyIndex + 1 >= this.histories.length) {\n return { history: null, newTable: this as Table };\n }\n const history = this.histories[++this.historyIndex];\n history.applyed = true;\n this.currentHistory = history;\n\n switch (history.operation) {\n case 'UPDATE':\n this.applyDiff(history.diffAfter, history.partial);\n break;\n case 'ADD_ROWS': {\n if (history.diffAfter) {\n this.applyDiff(history.diffAfter, history.partial);\n }\n const { height } = matrixShape({ matrix: history.idMatrix });\n this.idMatrix.splice(history.y, 0, ...history.idMatrix);\n this.area.bottom += height;\n break;\n }\n case 'ADD_COLS': {\n if (history.diffAfter) {\n this.applyDiff(history.diffAfter, history.partial);\n }\n const { width } = matrixShape({ matrix: history.idMatrix });\n this.idMatrix.map((row, i) => {\n row.splice(history.x, 0, ...history.idMatrix[i]);\n });\n this.area.right += width;\n break;\n }\n case 'DELETE_ROWS': {\n const { ys } = history;\n [...ys].reverse().forEach((y) => {\n this.idMatrix.splice(y, 1);\n });\n this.area.bottom -= ys.length;\n break;\n }\n case 'DELETE_COLS': {\n const { xs } = history;\n [...xs].reverse().forEach((x) => {\n this.idMatrix.forEach((row) => {\n row.splice(x, 1);\n });\n });\n this.area.right -= xs.length;\n break;\n }\n case 'MOVE': {\n const { src, dst } = history;\n this.move({ src, dst, operator: 'USER', historicize: false });\n }\n }\n return {\n history,\n newTable: this.shallowCopy({\n copyCache: !shouldTracking(history.operation),\n }),\n };\n }\n public getFunction(name: string) {\n return this.functions[name];\n }\n\n public getLabel(key: string, n: number) {\n const labeler = this.labelers[key];\n return labeler?.(n);\n }\n public getBase() {\n return this;\n }\n public getSolvedCache(key: string) {\n return this.solvedCaches[key];\n }\n public setSolvedCache(key: string, value: any) {\n this.solvedCaches[key] = value;\n }\n public wrappedSheetName() {\n const sheetName = this.sheetName;\n if (sheetName.indexOf(' ') !== -1) {\n return `'${sheetName}'`;\n }\n return sheetName;\n }\n public sheetPrefix(omit = false) {\n if (omit) {\n return '';\n }\n if (this.sheetName) {\n return `${this.wrappedSheetName()}!`;\n }\n return '';\n }\n public rangeToArea(range: string) {\n const cells = range.split(':');\n let [start, end] = cells;\n if (start.match(/[a-zA-Z]$/)) {\n start += '1';\n }\n if (start.match(/^[1-9]/)) {\n start = `A${start}`;\n }\n if (end?.match(/[a-zA-Z]$/)) {\n end += this.bottom;\n }\n if (end?.match(/^[1-9]/)) {\n end = `${x2c(this.right)}${end}`;\n }\n const { y: top, x: left } = a2p(start);\n const { y: bottom, x: right } = a2p(end || start);\n return {\n top: Math.abs(top),\n left: Math.abs(left),\n bottom: Math.abs(bottom),\n right: Math.abs(right),\n };\n }\n}\n"],"names":["functions","functionsDefault","address","prevention.isPrevented","prevention.MoveFrom","prevention.MoveTo","prevention.Update","prevention.Write","prevention.Style","prevention.Resize","prevention.SetRenderer","prevention.SetParser","prevention.DeleteRow","y","prevention.DeleteCol","x"],"mappings":"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"}
1
+ {"version":3,"file":"table.js","sources":["../../lib/table.ts"],"sourcesContent":["import { defaultParser } from '../parsers/core';\nimport { defaultRenderer } from '../renderers/core';\nimport {\n Id,\n Ids,\n IdMatrix,\n AreaType,\n CellsByIdType,\n CellsByAddressType,\n PointType,\n WriterType,\n Address,\n CellFilter,\n Labelers,\n MatrixType,\n CellType,\n Parsers,\n Renderers,\n HistoryType,\n StoreReflectionType,\n ShapeType,\n OperatorType,\n TableMapType,\n SheetMapType,\n} from '../types';\nimport { areaShape, createMatrix, expandRange, getMaxSizesFromCells, matrixShape, putMatrix } from './structs';\nimport { a2p, x2c, p2a, y2r, grantAddressAbsolute } from './converters';\nimport { FunctionMapping } from '../formula/functions/__base';\nimport { functions as functionsDefault } from '../formula/mapping';\nimport { absolutizeFormula, Lexer, stripSheetName } from '../formula/evaluator';\nimport { solveFormula } from '../formula/solver';\n\nimport { DEFAULT_HEIGHT, DEFAULT_WIDTH, HEADER_HEIGHT, HEADER_WIDTH, HISTORY_LIMIT } from '../constants';\nimport { shouldTracking } from '../store/helpers';\nimport * as prevention from './prevention';\n\ntype Props = {\n parsers?: Parsers;\n renderers?: Renderers;\n labelers?: Labelers;\n useBigInt?: boolean;\n historyLimit?: number;\n minNumRows?: number;\n maxNumRows?: number;\n minNumCols?: number;\n maxNumCols?: number;\n headerHeight?: number;\n headerWidth?: number;\n functions?: FunctionMapping;\n sheetName?: string;\n};\n\nconst noFilter: CellFilter = () => true;\n\ntype GetProps = {\n // null for the system, do not use it\n evaluates?: boolean | null;\n raise?: boolean;\n filter?: CellFilter;\n};\n\ntype MoveProps = {\n src: AreaType;\n dst: AreaType;\n operator?: OperatorType;\n reflection?: StoreReflectionType;\n historicize?: boolean;\n};\n\ntype GetFlattenProps = GetProps & {\n key?: keyof CellType;\n};\n\ntype GetPropsWithArea = GetProps & {\n area?: AreaType;\n};\n\ntype GetFlattenPropsWithArea = GetFlattenProps & {\n area?: AreaType;\n};\n\nexport interface UserTable {\n changedAt: Date;\n lastChangedAt?: Date;\n top: number;\n left: number;\n bottom: number;\n right: number;\n minNumRows: number;\n maxNumRows: number;\n minNumCols: number;\n maxNumCols: number;\n totalWidth: number;\n totalHeight: number;\n headerWidth: number;\n headerHeight: number;\n currentHistory?: HistoryType;\n\n getRectSize(area: AreaType): ShapeType;\n getAddressById(id: Id, slideY: number, slideX: number): string | undefined;\n getAddressesByIds(ids: CellsByIdType): CellsByAddressType;\n getPointById(id: Id): PointType;\n getByPoint(point: PointType): CellType | undefined;\n getById(id: Id): CellType | undefined;\n getNumRows(base?: number): number;\n getNumCols(base?: number): number;\n getMatrixFlatten(args?: GetFlattenPropsWithArea): any[][];\n getObjectFlatten(args?: GetFlattenProps): CellsByAddressType;\n getRowsFlatten(args?: GetFlattenProps): CellsByAddressType[];\n getColsFlatten(args?: GetFlattenProps): CellsByAddressType[];\n getMatrix(args?: GetPropsWithArea): (CellType | null)[][];\n getObject(args?: GetProps): CellsByAddressType;\n getRows(args?: GetProps): CellsByAddressType[];\n getCols(args?: GetProps): CellsByAddressType[];\n getTableBySheetName(sheetName: string): UserTable;\n move(args: MoveProps): UserTable;\n copy(args: MoveProps): UserTable;\n update(args: {\n diff: CellsByAddressType;\n partial?: boolean;\n updateChangedAt?: boolean;\n reflection?: StoreReflectionType;\n }): UserTable;\n writeMatrix(args: {\n point: PointType;\n matrix: MatrixType<string>;\n updateChangedAt?: boolean;\n reflection?: StoreReflectionType;\n }): UserTable;\n write(args: {\n point: PointType;\n value: string;\n updateChangedAt?: boolean;\n reflection?: StoreReflectionType;\n }): UserTable;\n addRowsAndUpdate(args: {\n y: number;\n numRows: number;\n baseY: number;\n diff: CellsByAddressType;\n partial?: boolean;\n updateChangedAt?: boolean;\n reflection?: StoreReflectionType;\n }): UserTable;\n addRows(args: { y: number; numRows: number; baseY: number; reflection?: StoreReflectionType }): UserTable;\n deleteRows(args: { y: number; numRows: number; reflection?: StoreReflectionType }): UserTable;\n addColsAndUpdate(args: {\n x: number;\n numCols: number;\n baseX: number;\n diff: CellsByAddressType;\n partial?: boolean;\n updateChangedAt?: boolean;\n reflection?: StoreReflectionType;\n }): UserTable;\n addCols(args: { x: number; numCols: number; baseX: number; reflection?: StoreReflectionType }): UserTable;\n deleteCols(args: { x: number; numCols: number; reflection?: StoreReflectionType }): UserTable;\n undo(): {\n history: HistoryType | null;\n newTable: UserTable;\n };\n redo(): {\n history: HistoryType | null;\n newTable: UserTable;\n };\n getHistories(): HistoryType[];\n getHistoryIndex(): number;\n getHistorySize(): number;\n}\n\nexport class Table implements UserTable {\n public changedAt: Date;\n public lastChangedAt?: Date;\n public minNumRows: number;\n public maxNumRows: number;\n public minNumCols: number;\n public maxNumCols: number;\n public totalWidth: number = 0;\n public totalHeight: number = 0;\n public headerWidth: number = 0;\n public headerHeight: number = 0;\n public currentHistory?: HistoryType;\n public sheetId: number = 0;\n public sheetName: string = '';\n public sheets: SheetMapType = {};\n public tables: TableMapType = {};\n\n private head: bigint | number;\n private idMatrix: IdMatrix;\n private data: CellsByIdType = {};\n private area: AreaType = { top: 0, left: 0, bottom: 0, right: 0 };\n private parsers: Parsers;\n private renderers: Renderers;\n private labelers: Labelers;\n private functions: FunctionMapping = {};\n private lastHistory?: HistoryType;\n private histories: HistoryType[];\n private historyIndex: number;\n private addressesById: { [id: Id]: Address };\n private historyLimit: number;\n private solvedCaches: { [address: Address]: any };\n private idsToBeAbsoluted: Id[];\n\n constructor({\n parsers = {},\n renderers = {},\n labelers = {},\n useBigInt = false,\n historyLimit: historyLimit,\n minNumRows = 1,\n maxNumRows = -1,\n minNumCols = 1,\n maxNumCols = -1,\n headerWidth = HEADER_WIDTH,\n headerHeight = HEADER_HEIGHT,\n functions = functionsDefault,\n sheetName,\n }: Props) {\n this.head = useBigInt ? BigInt(0) : 0;\n this.parsers = parsers || {};\n this.renderers = renderers || {};\n this.labelers = labelers || {};\n this.idMatrix = [];\n this.histories = [];\n this.historyIndex = -1;\n this.addressesById = {};\n this.historyLimit = historyLimit || HISTORY_LIMIT;\n this.changedAt = new Date();\n this.minNumRows = minNumRows || 0;\n this.maxNumRows = maxNumRows || 0;\n this.minNumCols = minNumCols || 0;\n this.maxNumCols = maxNumCols || 0;\n this.solvedCaches = {};\n this.headerHeight = headerHeight;\n this.headerWidth = headerWidth;\n this.functions = functions;\n this.idsToBeAbsoluted = [];\n this.sheetName = sheetName || '';\n }\n\n public getTableBySheetName(sheetName: string) {\n const sheetId = this.sheets[sheetName];\n return this.tables[sheetId];\n }\n\n public initialize(cells: CellsByAddressType) {\n const auto = getMaxSizesFromCells(cells);\n this.area = {\n top: 0,\n left: 0,\n bottom: auto.numRows || 0,\n right: auto.numCols || 0,\n };\n\n // make idMatrix beforehand\n for (let y = 0; y < auto.numRows + 1; y++) {\n const ids: Ids = [];\n this.idMatrix.push(ids);\n for (let x = 0; x < auto.numCols + 1; x++) {\n const id = this.generateId();\n ids.push(id);\n const address = p2a({ y, x });\n this.addressesById[id] = address;\n }\n }\n Object.keys(cells).forEach((address) => {\n const range = expandRange(address);\n const data = cells[address];\n range.forEach((address) => {\n const origin = cells[address];\n cells[address] = {\n ...origin,\n ...data,\n style: {\n ...origin?.style,\n ...data?.style,\n },\n prevention: (origin?.prevention || 0) | (data?.prevention || 0),\n };\n });\n });\n\n const common = cells?.['default'];\n for (let y = 0; y < auto.numRows + 1; y++) {\n const rowId = y2r(y);\n const rowDefault = cells?.[rowId];\n for (let x = 0; x < auto.numCols + 1; x++) {\n const id = this.getId({ y, x });\n const address = p2a({ y, x });\n const colId = x2c(x);\n const colDefault = cells?.[colId];\n const cell = cells?.[address];\n const stacked = {\n ...common,\n ...rowDefault,\n ...colDefault,\n ...cell,\n style: {\n ...common?.style,\n ...rowDefault?.style,\n ...colDefault?.style,\n ...cell?.style,\n },\n prevention:\n (common?.prevention || 0) |\n (rowDefault?.prevention || 0) |\n (colDefault?.prevention || 0) |\n (cell?.prevention || 0),\n } as CellType;\n\n if (stacked?.value?.startsWith?.('=')) {\n this.idsToBeAbsoluted.push(id);\n }\n if (y === 0) {\n if (stacked.width == null) {\n stacked.width = DEFAULT_WIDTH;\n }\n } else if (x === 0) {\n if (stacked.height == null) {\n stacked.height = DEFAULT_HEIGHT;\n }\n } else {\n delete stacked.height;\n delete stacked.width;\n delete stacked.labeler;\n }\n this.data[id] = stacked;\n }\n }\n this.setTotalSize();\n }\n\n public absolutizeFormula() {\n this.idsToBeAbsoluted.forEach((id) => {\n const cell = this.data[id];\n if (cell == null) {\n return;\n }\n cell.value = absolutizeFormula({\n value: cell?.value,\n table: this,\n });\n });\n }\n\n private generateId() {\n return (this.head++).toString(36);\n }\n\n public getRectSize({ top, left, bottom, right }: AreaType) {\n let width = 0,\n height = 0;\n for (let x = left || 1; x < right; x++) {\n width += this.getByPoint({ y: 0, x })?.width || DEFAULT_WIDTH;\n }\n for (let y = top || 1; y < bottom; y++) {\n height += this.getByPoint({ y, x: 0 })?.height || DEFAULT_HEIGHT;\n }\n return { width, height };\n }\n private setTotalSize() {\n const { bottom, right } = this.area;\n const { width, height } = this.getRectSize({\n top: 1,\n left: 1,\n bottom: bottom + 1,\n right: right + 1,\n });\n this.totalWidth = width + this.headerWidth;\n this.totalHeight = height + this.headerHeight;\n }\n\n public shallowCopy({ copyCache = true }: { copyCache?: boolean } = {}) {\n const copied: Table = Object.assign(Object.create(Object.getPrototypeOf(this)), this);\n copied.changedAt = new Date();\n copied.lastChangedAt = this.changedAt;\n copied.setTotalSize();\n copied.idsToBeAbsoluted = [];\n copied.solvedCaches = {};\n if (!copyCache) {\n // force reset\n this.addressesById = {};\n }\n copied.sheetName = this.sheetName;\n return copied;\n }\n\n public getAddressById(id: Id, slideY = 0, slideX = 0): string | undefined {\n const absCol = id.startsWith('$');\n if (absCol) {\n id = id.slice(1);\n slideX = 0;\n }\n const absRow = id.endsWith('$');\n if (absRow) {\n id = id.slice(0, -1);\n slideY = 0;\n }\n\n for (let y = 0; y < this.idMatrix.length; y++) {\n const ids = this.idMatrix[y];\n for (let x = 0; x < ids.length; x++) {\n const existing = ids[x];\n const address = p2a({ y, x });\n this.addressesById[existing] = address;\n if (existing === id) {\n const slidedAddress = p2a({\n y: y + slideY,\n x: x + slideX,\n });\n return grantAddressAbsolute(slidedAddress, absCol, absRow);\n }\n }\n }\n }\n\n public getAddressesByIds(ids: CellsByIdType) {\n const addresses: CellsByAddressType = {};\n Object.keys(ids).forEach((id) => {\n const cell = ids[id];\n const address = this.getAddressById(id);\n if (cell && address) {\n addresses[address] = cell;\n }\n });\n return addresses;\n }\n\n public getPointById(id: Id): PointType {\n const address = this.getAddressById(id);\n if (address) {\n return a2p(address);\n }\n return { y: 0, x: 0 };\n }\n private getId(point: PointType) {\n const { y, x } = point;\n return this.idMatrix[Math.abs(y)]?.[Math.abs(x)];\n }\n\n public getByPoint(point: PointType) {\n const { y, x } = point;\n if (y === -1 || x === -1) {\n return undefined;\n }\n const id = this.idMatrix[y]?.[x];\n if (id == null) {\n return undefined;\n }\n const value = this.data[id];\n return value;\n }\n\n public getById(id: Id) {\n return this.data[id];\n }\n\n public getNumRows(base = 0) {\n const { top, bottom } = this.area;\n return base + bottom - top;\n }\n\n public getNumCols(base = 0) {\n const { left, right } = this.area;\n return base + right - left;\n }\n\n public get top() {\n return this.area.top;\n }\n public get left() {\n return this.area.left;\n }\n public get bottom() {\n return this.area.bottom;\n }\n public get right() {\n return this.area.right;\n }\n\n public getMatrixFlatten({\n area,\n key = 'value',\n evaluates = true,\n raise = false,\n filter = noFilter,\n }: GetFlattenPropsWithArea = {}) {\n const { top, left, bottom, right } = area || {\n top: 1,\n left: 1,\n bottom: this.area.bottom,\n right: this.area.right,\n };\n const matrix = createMatrix(bottom - top + 1, right - left + 1);\n for (let y = top; y <= bottom; y++) {\n for (let x = left; x <= right; x++) {\n const cell = this.getByPoint({ y, x }) || {};\n if (!filter(cell)) {\n continue;\n }\n matrix[y - top][x - left] = solveFormula({\n value: cell[key],\n table: this,\n raise,\n evaluates,\n origin: { y, x },\n });\n }\n }\n return matrix;\n }\n public getObjectFlatten({ key = 'value', evaluates = true, raise = false, filter = noFilter }: GetFlattenProps = {}) {\n const result: CellsByAddressType = {};\n const { top, left, bottom, right } = this.area;\n for (let y = top; y <= bottom; y++) {\n for (let x = left; x <= right; x++) {\n const cell = this.getByPoint({ y: y - top, x: x - left });\n if (cell != null && filter(cell)) {\n result[p2a({ y, x })] = solveFormula({\n value: cell[key],\n table: this,\n raise,\n evaluates,\n origin: { y, x },\n });\n }\n }\n }\n return result;\n }\n public getRowsFlatten({ key = 'value', evaluates = true, raise = false, filter = noFilter }: GetFlattenProps = {}) {\n const result: CellsByAddressType[] = [];\n const { top, left, bottom, right } = this.area;\n for (let y = top; y <= bottom; y++) {\n const row: CellsByAddressType = {};\n result.push(row);\n for (let x = left; x <= right; x++) {\n const cell = this.getByPoint({ y: y - top, x: x - left });\n if (cell != null && filter(cell)) {\n row[x2c(x) || y2r(y)] = solveFormula({\n value: cell[key],\n table: this,\n raise,\n evaluates,\n origin: { y, x },\n });\n }\n }\n }\n return result;\n }\n public getColsFlatten({ key = 'value', evaluates = true, raise = false, filter = noFilter }: GetFlattenProps = {}) {\n const result: CellsByAddressType[] = [];\n const { top, left, bottom, right } = this.area;\n for (let x = left; x <= right; x++) {\n const col: CellsByAddressType = {};\n result.push(col);\n for (let y = top; y <= bottom; y++) {\n const cell = this.getByPoint({ y: y - top, x: x - left });\n if (cell != null && filter(cell)) {\n col[y2r(y) || x2c(x)] = solveFormula({\n value: cell[key],\n table: this,\n raise,\n evaluates,\n origin: { y, x },\n });\n }\n }\n }\n return result;\n }\n public getMatrix({\n area,\n evaluates = true,\n raise = false,\n filter = noFilter,\n }: GetPropsWithArea = {}): (CellType | null)[][] {\n const { top, left, bottom, right } = area || {\n top: 1,\n left: 1,\n bottom: this.area.bottom,\n right: this.area.right,\n };\n const matrix = createMatrix(bottom - top + 1, right - left + 1);\n for (let y = top; y <= bottom; y++) {\n for (let x = left; x <= right; x++) {\n const cell = this.getByPoint({ y, x });\n if (cell != null && filter(cell)) {\n matrix[y - top][x - left] = {\n ...cell,\n value: solveFormula({\n value: cell?.value,\n table: this,\n raise,\n evaluates,\n origin: { y, x },\n }),\n };\n }\n }\n }\n return matrix;\n }\n public getObject({ evaluates = true, raise = false, filter = noFilter }: GetProps = {}) {\n const result: CellsByAddressType = {};\n const { top, left, bottom, right } = this.area;\n for (let y = top; y <= bottom; y++) {\n for (let x = left; x <= right; x++) {\n const cell = this.getByPoint({ y: y - top, x: x - left });\n if (cell != null && filter(cell)) {\n result[p2a({ y, x })] = {\n ...cell,\n value: solveFormula({\n value: cell?.value,\n table: this,\n raise,\n evaluates,\n origin: { y, x },\n }),\n };\n }\n }\n }\n return result;\n }\n public getRows({ evaluates = true, raise = false, filter = noFilter }: GetProps = {}) {\n const result: CellsByAddressType[] = [];\n const { top, left, bottom, right } = this.area;\n for (let y = top; y <= bottom; y++) {\n const row: CellsByAddressType = {};\n result.push(row);\n for (let x = left; x <= right; x++) {\n const cell = this.getByPoint({ y: y - top, x: x - left });\n if (cell != null && filter(cell)) {\n row[x2c(x) || y2r(y)] = {\n ...cell,\n value: solveFormula({\n value: cell?.value,\n table: this,\n raise,\n evaluates,\n origin: { y, x },\n }),\n };\n }\n }\n }\n return result;\n }\n public getCols({ evaluates = true, raise = false, filter = noFilter }: GetProps = {}) {\n const result: CellsByAddressType[] = [];\n const { top, left, bottom, right } = this.area;\n for (let x = left; x <= right; x++) {\n const col: CellsByAddressType = {};\n result.push(col);\n for (let y = top; y <= bottom; y++) {\n const cell = this.getByPoint({ y: y - top, x: x - left });\n if (cell != null && filter(cell)) {\n col[y2r(y) || x2c(x)] = {\n ...cell,\n value: solveFormula({\n value: cell?.value,\n table: this,\n raise,\n evaluates,\n origin: { y, x },\n }),\n };\n }\n }\n }\n return result;\n }\n\n private pushHistory(history: HistoryType) {\n const strayedHistories = this.histories.splice(this.historyIndex + 1, this.histories.length);\n strayedHistories.forEach(this.cleanStrayed.bind(this));\n this.histories.push(history);\n this.lastHistory = this.currentHistory = history;\n if (this.histories.length > this.historyLimit) {\n const kickedOut = this.histories.splice(0, 1)[0];\n this.cleanObsolete(kickedOut);\n } else {\n this.historyIndex++;\n }\n }\n\n private cleanObsolete(history: HistoryType) {\n if (history.operation === 'DELETE_ROWS' || history.operation === 'DELETE_COLS') {\n history.deleted.forEach((ids) => {\n ids.forEach((id) => {\n delete this.data[id];\n });\n });\n }\n if (history.operation === 'MOVE') {\n Object.keys(history.lostRows).forEach((address) => {\n const idMatrix = history.lostRows[address];\n idMatrix.map((ids) =>\n ids.forEach((id) => {\n if (id != null) {\n delete this.data[id];\n }\n }),\n );\n });\n }\n }\n\n private cleanStrayed(history: HistoryType) {\n if (history.operation === 'ADD_ROWS' || history.operation === 'ADD_COLS') {\n history.idMatrix.forEach((ids) => {\n ids.forEach((id) => {\n delete this.data[id];\n });\n });\n }\n }\n\n private getNewIdMatrix(area: AreaType) {\n const matrix: IdMatrix = [];\n const { top, left, bottom, right } = area;\n for (let y = top; y <= bottom; y++) {\n const ids: Ids = [];\n matrix.push(ids);\n for (let x = left; x <= right; x++) {\n ids.push(this.generateId());\n }\n }\n return matrix;\n }\n\n private getIdMatrixFromArea(area: AreaType) {\n const matrix: IdMatrix = [];\n const { top, left, bottom, right } = area;\n for (let y = top; y <= bottom; y++) {\n const ids: Ids = [];\n matrix.push(ids);\n for (let x = left; x <= right; x++) {\n const id = this.idMatrix[y]?.[x];\n if (id == null) {\n continue;\n }\n ids.push(id);\n }\n }\n return matrix;\n }\n\n private setChangedAt(cell?: CellType, changedAt?: Date) {\n if (cell == null) {\n return null;\n }\n cell.changedAt = changedAt || new Date();\n return cell;\n }\n\n private copyCellLayout(cell: CellType | undefined) {\n if (cell == null) {\n return undefined;\n }\n const newCell: CellType = {};\n if (cell.style != null) {\n newCell.style = cell.style;\n }\n if (cell.justifyContent != null) {\n newCell.justifyContent = cell.justifyContent;\n }\n if (cell.alignItems != null) {\n newCell.alignItems = cell.alignItems;\n }\n if (cell.renderer != null) {\n newCell.renderer = cell.renderer;\n }\n if (cell.parser != null) {\n newCell.parser = cell.parser;\n }\n if (cell.width != null) {\n newCell.width = cell.width;\n }\n if (cell.height != null) {\n newCell.height = cell.height;\n }\n if (cell.labeler != null) {\n newCell.labeler = cell.labeler;\n }\n return newCell;\n }\n\n public move({ src, dst, historicize = true, operator = 'SYSTEM', reflection = {} }: MoveProps) {\n const matrixNew = this.getNewIdMatrix(src);\n const matrixFrom = this.getIdMatrixFromArea(src);\n const matrixTo = this.getIdMatrixFromArea(dst);\n putMatrix(this.idMatrix, matrixNew, src, (_, id) => {\n const cell = this.data[id];\n if (operator === 'USER' && prevention.isPrevented(cell?.prevention, prevention.MoveFrom)) {\n return false;\n }\n return true;\n });\n const lostRows = putMatrix(this.idMatrix, matrixFrom, dst, (srcId, dstId) => {\n const srcCell = this.data[srcId];\n const dstCell = this.data[dstId];\n if (\n operator === 'USER' &&\n (prevention.isPrevented(srcCell?.prevention, prevention.MoveFrom) ||\n prevention.isPrevented(dstCell?.prevention, prevention.MoveTo))\n ) {\n return false;\n }\n if (srcCell != null) {\n this.setChangedAt(srcCell, new Date());\n }\n return true;\n });\n if (historicize) {\n this.pushHistory({\n applyed: true,\n operation: 'MOVE',\n reflection,\n src,\n dst,\n matrixFrom,\n matrixTo,\n matrixNew,\n lostRows,\n });\n }\n return this.shallowCopy({ copyCache: false });\n }\n\n public copy({ src, dst, operator = 'SYSTEM', reflection = {} }: MoveProps) {\n const { height: maxHeight, width: maxWidth } = areaShape({\n ...src,\n base: 1,\n });\n const { top: topFrom, left: leftFrom } = src;\n const { top: topTo, left: leftTo, bottom: bottomTo, right: rightTo } = dst;\n const diff: CellsByAddressType = {};\n const changedAt = new Date();\n\n for (let i = 0; i <= bottomTo - topTo; i++) {\n const toY = topTo + i;\n if (toY > this.getNumRows()) {\n continue;\n }\n for (let j = 0; j <= rightTo - leftTo; j++) {\n const toX = leftTo + j;\n if (toX > this.getNumCols()) {\n continue;\n }\n const fromY = topFrom + (i % maxHeight);\n const fromX = leftFrom + (j % maxWidth);\n const slideY = toY - fromY;\n const slideX = toX - fromX;\n const cell: CellType = {\n ...this.getByPoint({\n y: topFrom + (i % maxHeight),\n x: leftFrom + (j % maxWidth),\n }),\n prevention: 0, // Is this okay?\n };\n const value = absolutizeFormula({\n value: cell?.value,\n table: this,\n slideY,\n slideX,\n });\n this.setChangedAt(cell, changedAt);\n diff[p2a({ y: toY, x: toX })] = {\n ...cell,\n style: { ...cell?.style },\n value,\n };\n }\n }\n return this.update({\n diff,\n partial: false,\n operator,\n reflection,\n });\n }\n\n private _update({\n diff,\n partial = true,\n updateChangedAt = true,\n ignoreFields = ['labeler', 'prevention'],\n operator = 'SYSTEM',\n }: {\n diff: CellsByAddressType;\n partial?: boolean;\n updateChangedAt?: boolean;\n ignoreFields?: (keyof CellType)[];\n operator?: OperatorType;\n }) {\n const diffBefore: CellsByIdType = {};\n const diffAfter: CellsByIdType = {};\n const changedAt = new Date();\n\n Object.keys(diff).forEach((address) => {\n const cell = { ...diff[address] };\n if (operator === 'USER' && prevention.isPrevented(cell?.prevention, prevention.Update)) {\n return;\n }\n\n cell.value = absolutizeFormula({\n value: cell.value,\n table: this,\n });\n const point = a2p(address);\n const id = this.getId(point);\n const current = this.data[id];\n ignoreFields.forEach((key) => {\n cell[key] = current?.[key];\n });\n if (operator === 'USER' && prevention.isPrevented(current?.prevention, prevention.Write)) {\n cell.value = current?.value;\n }\n if (operator === 'USER' && prevention.isPrevented(current?.prevention, prevention.Style)) {\n cell.style = current?.style;\n cell.justifyContent = current?.justifyContent;\n cell.alignItems = current?.alignItems;\n }\n if (operator === 'USER' && prevention.isPrevented(current?.prevention, prevention.Resize)) {\n cell.width = current?.width;\n cell.height = current?.height;\n }\n if (operator === 'USER' && prevention.isPrevented(current?.prevention, prevention.SetRenderer)) {\n cell.renderer = current?.renderer;\n }\n if (operator === 'USER' && prevention.isPrevented(current?.prevention, prevention.SetParser)) {\n cell.parser = current?.parser;\n }\n if (updateChangedAt) {\n this.setChangedAt(cell, changedAt);\n }\n // must not partial\n diffBefore[id] = this.getByPoint(point);\n diffAfter[id] = cell;\n if (partial) {\n this.data[id] = { ...current, ...cell };\n } else {\n this.data[id] = cell;\n }\n });\n this.solvedCaches = {};\n return {\n diffBefore,\n diffAfter,\n };\n }\n\n public update({\n diff,\n partial = true,\n updateChangedAt = true,\n historicize = true,\n operator = 'SYSTEM',\n reflection = {},\n }: {\n diff: CellsByAddressType;\n partial?: boolean;\n updateChangedAt?: boolean;\n historicize?: boolean;\n operator?: OperatorType;\n reflection?: StoreReflectionType;\n }) {\n const { diffBefore, diffAfter } = this._update({\n diff,\n partial,\n operator,\n updateChangedAt,\n });\n\n if (historicize) {\n this.pushHistory({\n applyed: true,\n operation: 'UPDATE',\n reflection,\n diffBefore,\n diffAfter,\n partial,\n });\n }\n return this.shallowCopy({ copyCache: true });\n }\n\n public writeMatrix({\n point,\n matrix,\n updateChangedAt = true,\n historicize = true,\n operator = 'SYSTEM',\n reflection = {},\n }: {\n point: PointType;\n matrix: MatrixType<string>;\n updateChangedAt?: boolean;\n historicize?: boolean;\n operator?: OperatorType;\n reflection?: StoreReflectionType;\n }) {\n const { y: baseY, x: baseX } = point;\n const diff: CellsByAddressType = {};\n matrix.forEach((cols, i) => {\n const y = baseY + i;\n if (y > this.bottom) {\n return;\n }\n cols.forEach((value, j) => {\n const x = baseX + j;\n if (x > this.right) {\n return;\n }\n const cell = this.parse({ y, x }, value);\n diff[p2a({ y, x })] = cell;\n });\n });\n return this.update({\n diff,\n partial: true,\n updateChangedAt,\n historicize,\n operator,\n reflection,\n });\n }\n\n public write({\n point,\n value,\n updateChangedAt = true,\n historicize = true,\n operator = 'SYSTEM',\n reflection = {},\n }: {\n point: PointType;\n value: string;\n updateChangedAt?: boolean;\n historicize?: boolean;\n operator?: OperatorType;\n reflection?: StoreReflectionType;\n }) {\n return this.writeMatrix({\n point,\n matrix: [[value]],\n updateChangedAt,\n historicize,\n operator,\n reflection,\n });\n }\n\n public addRowsAndUpdate({\n y,\n numRows,\n baseY,\n diff,\n partial,\n updateChangedAt,\n operator = 'SYSTEM',\n reflection = {},\n }: {\n y: number;\n numRows: number;\n baseY: number;\n diff: CellsByAddressType;\n partial?: boolean;\n updateChangedAt?: boolean;\n operator?: OperatorType;\n reflection?: StoreReflectionType;\n }) {\n const returned = this.addRows({\n y,\n numRows,\n baseY,\n reflection,\n });\n\n Object.assign(this.lastHistory!, this._update({ diff, partial, updateChangedAt, operator }), { partial });\n\n return returned;\n }\n\n public addRows({\n y,\n numRows,\n baseY,\n // operator = 'SYSTEM',\n reflection = {},\n }: {\n y: number;\n numRows: number;\n baseY: number;\n operator?: OperatorType;\n reflection?: StoreReflectionType;\n }) {\n if (this.maxNumRows !== -1 && this.getNumRows() + numRows > this.maxNumRows) {\n console.error(`Rows are limited to ${this.maxNumRows}.`);\n return this;\n }\n const numCols = this.getNumCols(1);\n const rows: IdMatrix = [];\n const changedAt = new Date();\n for (let i = 0; i < numRows; i++) {\n const row: Ids = [];\n for (let j = 0; j < numCols; j++) {\n const id = this.generateId();\n row.push(id);\n const cell = this.getByPoint({ y: baseY, x: j });\n const copied = this.copyCellLayout(cell);\n this.data[id] = { ...copied, changedAt };\n }\n rows.push(row);\n }\n this.idMatrix.splice(y, 0, ...rows);\n this.area.bottom += numRows;\n\n this.pushHistory({\n applyed: true,\n operation: 'ADD_ROWS',\n reflection,\n y,\n numRows,\n idMatrix: rows,\n });\n return this.shallowCopy({ copyCache: false });\n }\n public deleteRows({\n y,\n numRows,\n operator = 'SYSTEM',\n reflection = {},\n }: {\n y: number;\n numRows: number;\n operator?: OperatorType;\n reflection?: StoreReflectionType;\n }) {\n if (this.minNumRows !== -1 && this.getNumRows() - numRows < this.minNumRows) {\n console.error(`At least ${this.minNumRows} row(s) are required.`);\n return this;\n }\n\n const ys: number[] = [];\n for (let i = y; i < y + numRows; i++) {\n const cell = this.getByPoint({ y: i, x: 0 });\n if (operator === 'USER' && prevention.isPrevented(cell?.prevention, prevention.DeleteRow)) {\n console.warn(`Cannot delete row ${i}.`);\n return this;\n }\n ys.unshift(i);\n }\n\n const deleted: MatrixType = [];\n ys.forEach((y) => {\n const row = this.idMatrix.splice(y, 1);\n deleted.unshift(row[0]);\n });\n this.area.bottom -= ys.length;\n this.pushHistory({\n applyed: true,\n operation: 'DELETE_ROWS',\n reflection,\n ys: ys.reverse(),\n deleted,\n });\n return this.shallowCopy({ copyCache: false });\n }\n\n public addColsAndUpdate({\n x,\n numCols,\n baseX,\n diff,\n partial,\n updateChangedAt,\n reflection = {},\n }: {\n x: number;\n numCols: number;\n baseX: number;\n diff: CellsByAddressType;\n partial?: boolean;\n updateChangedAt?: boolean;\n reflection?: StoreReflectionType;\n }) {\n const returned = this.addCols({\n x,\n numCols,\n baseX,\n reflection,\n });\n\n Object.assign(this.lastHistory!, this._update({ diff, partial, updateChangedAt }), { partial });\n return returned;\n }\n\n public addCols({\n x,\n numCols,\n baseX,\n reflection = {},\n }: {\n x: number;\n numCols: number;\n baseX: number;\n reflection?: StoreReflectionType;\n }) {\n if (this.maxNumCols !== -1 && this.getNumCols() + numCols > this.maxNumCols) {\n console.error(`Columns are limited to ${this.maxNumCols}.`);\n return this;\n }\n const numRows = this.getNumRows(1);\n const rows: IdMatrix = [];\n const changedAt = new Date();\n for (let i = 0; i < numRows; i++) {\n const row: Ids = [];\n for (let j = 0; j < numCols; j++) {\n const id = this.generateId();\n row.push(id);\n const cell = this.getByPoint({ y: i, x: baseX });\n const copied = this.copyCellLayout(cell);\n this.idMatrix[i].splice(x, 0, id);\n this.data[id] = { ...copied, changedAt };\n }\n rows.push(row);\n }\n this.area.right += numCols;\n\n this.pushHistory({\n applyed: true,\n operation: 'ADD_COLS',\n reflection,\n x,\n numCols,\n idMatrix: rows,\n });\n return this.shallowCopy({ copyCache: false });\n }\n public deleteCols({\n x,\n numCols,\n operator = 'SYSTEM',\n reflection = {},\n }: {\n x: number;\n numCols: number;\n operator?: OperatorType;\n reflection?: StoreReflectionType;\n }) {\n if (this.minNumCols !== -1 && this.getNumCols() - numCols < this.minNumCols) {\n console.error(`At least ${this.minNumCols} column(s) are required.`);\n return this;\n }\n\n const xs: number[] = [];\n for (let i = x; i < x + numCols; i++) {\n const cell = this.getByPoint({ y: 0, x: i });\n if (operator === 'USER' && prevention.isPrevented(cell?.prevention, prevention.DeleteCol)) {\n console.warn(`Cannot delete col ${i}.`);\n continue;\n }\n xs.unshift(i);\n }\n\n const deleted: MatrixType = [];\n this.idMatrix.forEach((row) => {\n const deleting: Ids = [];\n deleted.push(deleting);\n // reverse and delete\n xs.forEach((x) => {\n deleting.unshift(...row.splice(x, 1));\n });\n });\n this.area.right -= xs.length;\n\n this.pushHistory({\n applyed: true,\n operation: 'DELETE_COLS',\n reflection,\n xs: xs.reverse(),\n deleted,\n });\n return this.shallowCopy({ copyCache: false });\n }\n public getHistories() {\n return [...this.histories];\n }\n public getHistoryIndex() {\n return this.historyIndex;\n }\n public getHistorySize() {\n return this.histories.length;\n }\n public getHistoryLimit() {\n return this.historyLimit;\n }\n\n public setFunctions(additionalFunctions: FunctionMapping) {\n this.functions = { ...functionsDefault, ...additionalFunctions };\n }\n\n public getArea(): AreaType {\n return { ...this.area };\n }\n\n public parse(point: PointType, value: string) {\n const cell = this.getByPoint(point) || {};\n const parser = this.parsers[cell.parser || ''] || defaultParser;\n return parser.call(value, cell);\n }\n\n public render(point: PointType, writer?: WriterType) {\n const cell = this.getByPoint(point) || {};\n const renderer = this.renderers[cell.renderer || ''] || defaultRenderer;\n return renderer.call(this, point, writer);\n }\n\n public stringify(point: PointType, value?: any, evaluates = false) {\n const cell = this.getByPoint(point);\n const renderer = this.renderers[cell?.renderer || ''] || defaultRenderer;\n const s = renderer.stringify(typeof value === 'undefined' ? { ...cell } : { ...cell, value });\n\n if (s[0] === '=') {\n if (evaluates) {\n return String(solveFormula({ value: s, table: this, raise: false, evaluates, origin: point }));\n }\n const lexer = new Lexer(s.substring(1));\n lexer.tokenize();\n return '=' + lexer.stringifyToRef(this);\n }\n return s;\n }\n\n public trim(area: AreaType): Table {\n const copied: Table = Object.assign(Object.create(Object.getPrototypeOf(this)), this);\n copied.area = area;\n // this causes RangeError on circular reference(maximum call stack size exceeded)\n // copied.solvedCaches = {};\n return copied;\n }\n\n public getIdByAddress(address: Address) {\n let table: Table = this;\n if (address.indexOf('!') !== -1) {\n const [sheetName, addr] = address.split('!');\n const sheetId = this.sheets[stripSheetName(sheetName)];\n table = this.tables[sheetId];\n address = addr;\n }\n const { y, x } = a2p(address);\n const id = table.getId({ y, x });\n if (id) {\n const prefix = table === this ? '' : `#${table.sheetId}!`;\n return `${prefix}#${x < 0 ? '$' : ''}${id}${y < 0 ? '$' : ''}`;\n }\n }\n\n private applyDiff(diff: CellsByIdType, partial = true) {\n if (!partial) {\n Object.assign(this.data, diff);\n return;\n }\n Object.keys(diff).map((id) => {\n const cell = diff[id];\n this.data[id] = { ...this.getById(id), ...cell };\n });\n }\n\n public undo() {\n if (this.historyIndex < 0) {\n return { history: null, newTable: this as Table };\n }\n const history = this.histories[this.historyIndex--];\n history.applyed = false;\n this.currentHistory = history;\n switch (history.operation) {\n case 'UPDATE':\n // diffBefore is guaranteed as total of cell (not partial)\n this.applyDiff(history.diffBefore, false);\n break;\n case 'ADD_ROWS': {\n if (history.diffBefore) {\n this.applyDiff(history.diffBefore, false);\n }\n const { height } = matrixShape({ matrix: history.idMatrix });\n this.idMatrix.splice(history.y, height);\n this.area.bottom -= height;\n break;\n }\n case 'ADD_COLS': {\n if (history.diffBefore) {\n this.applyDiff(history.diffBefore, false);\n }\n const { width } = matrixShape({ matrix: history.idMatrix });\n this.idMatrix.forEach((row) => {\n row.splice(history.x, width);\n });\n this.area.right -= width;\n break;\n }\n case 'DELETE_ROWS': {\n const { ys, deleted } = history;\n ys.forEach((y, i) => {\n this.idMatrix.splice(y, 0, deleted[i]);\n });\n this.area.bottom += ys.length;\n break;\n }\n case 'DELETE_COLS': {\n const { xs, deleted } = history;\n this.idMatrix.forEach((row, i) => {\n for (let j = 0; j < xs.length; j++) {\n row.splice(xs[j], 0, deleted[i][j]);\n }\n });\n this.area.right += xs.length;\n break;\n }\n case 'MOVE': {\n const { top: yFrom, left: xFrom } = history.src;\n const { top: yTo, left: xTo } = history.dst;\n const { height: rows, width: cols } = matrixShape({\n matrix: history.matrixFrom,\n base: -1,\n });\n putMatrix(this.idMatrix, history.matrixFrom, {\n top: yFrom,\n left: xFrom,\n bottom: yFrom + rows,\n right: xFrom + cols,\n });\n putMatrix(this.idMatrix, history.matrixTo, {\n top: yTo,\n left: xTo,\n bottom: yTo + rows,\n right: xTo + cols,\n });\n break;\n }\n }\n return {\n history,\n newTable: this.shallowCopy({\n copyCache: !shouldTracking(history.operation),\n }),\n };\n }\n\n public redo() {\n if (this.historyIndex + 1 >= this.histories.length) {\n return { history: null, newTable: this as Table };\n }\n const history = this.histories[++this.historyIndex];\n history.applyed = true;\n this.currentHistory = history;\n\n switch (history.operation) {\n case 'UPDATE':\n this.applyDiff(history.diffAfter, history.partial);\n break;\n case 'ADD_ROWS': {\n if (history.diffAfter) {\n this.applyDiff(history.diffAfter, history.partial);\n }\n const { height } = matrixShape({ matrix: history.idMatrix });\n this.idMatrix.splice(history.y, 0, ...history.idMatrix);\n this.area.bottom += height;\n break;\n }\n case 'ADD_COLS': {\n if (history.diffAfter) {\n this.applyDiff(history.diffAfter, history.partial);\n }\n const { width } = matrixShape({ matrix: history.idMatrix });\n this.idMatrix.map((row, i) => {\n row.splice(history.x, 0, ...history.idMatrix[i]);\n });\n this.area.right += width;\n break;\n }\n case 'DELETE_ROWS': {\n const { ys } = history;\n [...ys].reverse().forEach((y) => {\n this.idMatrix.splice(y, 1);\n });\n this.area.bottom -= ys.length;\n break;\n }\n case 'DELETE_COLS': {\n const { xs } = history;\n [...xs].reverse().forEach((x) => {\n this.idMatrix.forEach((row) => {\n row.splice(x, 1);\n });\n });\n this.area.right -= xs.length;\n break;\n }\n case 'MOVE': {\n const { src, dst } = history;\n this.move({ src, dst, operator: 'USER', historicize: false });\n }\n }\n return {\n history,\n newTable: this.shallowCopy({\n copyCache: !shouldTracking(history.operation),\n }),\n };\n }\n public getFunction(name: string) {\n return this.functions[name];\n }\n\n public getLabel(key: string, n: number) {\n const labeler = this.labelers[key];\n return labeler?.(n);\n }\n public getBase() {\n return this;\n }\n public getSolvedCache(key: string) {\n return this.solvedCaches[key];\n }\n public setSolvedCache(key: string, value: any) {\n this.solvedCaches[key] = value;\n }\n public wrappedSheetName() {\n const sheetName = this.sheetName;\n if (sheetName.indexOf(' ') !== -1) {\n return `'${sheetName}'`;\n }\n return sheetName;\n }\n public sheetPrefix(omit = false) {\n if (omit) {\n return '';\n }\n if (this.sheetName) {\n return `${this.wrappedSheetName()}!`;\n }\n return '';\n }\n public rangeToArea(range: string) {\n const cells = range.split(':');\n let [start, end] = cells;\n if (start.match(/[a-zA-Z]$/)) {\n start += '1';\n }\n if (start.match(/^[1-9]/)) {\n start = `A${start}`;\n }\n if (end?.match(/[a-zA-Z]$/)) {\n end += this.bottom;\n }\n if (end?.match(/^[1-9]/)) {\n end = `${x2c(this.right)}${end}`;\n }\n const { y: top, x: left } = a2p(start);\n const { y: bottom, x: right } = a2p(end || start);\n return {\n top: Math.abs(top),\n left: Math.abs(left),\n bottom: Math.abs(bottom),\n right: Math.abs(right),\n };\n }\n}\n"],"names":["functions","functionsDefault","address","prevention.isPrevented","prevention.MoveFrom","prevention.MoveTo","prevention.Update","prevention.Write","prevention.Style","prevention.Resize","prevention.SetRenderer","prevention.SetParser","prevention.DeleteRow","y","prevention.DeleteCol","x"],"mappings":"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"}
@@ -1,17 +1,23 @@
1
+ export declare const defaultTimeDeltaFormat = "HH:mm:ss";
1
2
  export declare const BASE_DATE: Date;
2
3
  type Diff = [number, number, number, number, number, number, number];
3
4
  export declare class TimeDelta {
5
+ gsType: string;
4
6
  protected diff: Diff;
5
7
  private date1;
6
8
  private date2;
7
9
  format: string;
8
- constructor(date1: Date, date2: Date);
10
+ constructor(date1: Date, date2: Date, format?: string);
9
11
  add(date: Date): Date;
10
12
  sub(date: Date): Date;
11
13
  stringify(format?: string): string;
12
14
  toJSON(): string;
13
15
  toString(): string;
14
16
  static create(hours?: number, minutes?: number, seconds?: number, milliseconds?: number): TimeDelta;
17
+ static is(obj: any): boolean;
18
+ static ensure(obj: any): TimeDelta;
19
+ static fromObject(obj: any): TimeDelta;
20
+ static parse(value: string, format?: string, strict?: boolean): TimeDelta | undefined;
15
21
  }
16
22
  export {};
17
23
  //# sourceMappingURL=time.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"time.d.ts","sourceRoot":"","sources":["../../lib/time.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,SAAS,MAAmC,CAAC;AAU1D,KAAK,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAErE,qBAAa,SAAS;IACpB,SAAS,CAAC,IAAI,EAAE,IAAI,CAAyB;IAC7C,OAAO,CAAC,KAAK,CAAO;IACpB,OAAO,CAAC,KAAK,CAAO;IACb,MAAM,EAAE,MAAM,CAAC;gBAEV,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI;IAc7B,GAAG,CAAC,IAAI,EAAE,IAAI;IAMd,GAAG,CAAC,IAAI,EAAE,IAAI;IAOd,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM;IAuBzB,MAAM;IAIN,QAAQ;IAIf,MAAM,CAAC,MAAM,CAAC,KAAK,SAAI,EAAE,OAAO,SAAI,EAAE,OAAO,SAAI,EAAE,YAAY,SAAI;CAQpE"}
1
+ {"version":3,"file":"time.d.ts","sourceRoot":"","sources":["../../lib/time.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,sBAAsB,aAAa,CAAC;AAEjD,eAAO,MAAM,SAAS,MAAmC,CAAC;AAU1D,KAAK,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAErE,qBAAa,SAAS;IACb,MAAM,SAAe;IAC5B,SAAS,CAAC,IAAI,EAAE,IAAI,CAAyB;IAC7C,OAAO,CAAC,KAAK,CAAO;IACpB,OAAO,CAAC,KAAK,CAAO;IACb,MAAM,EAAE,MAAM,CAAC;gBAEV,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,SAAyB;IAc9D,GAAG,CAAC,IAAI,EAAE,IAAI;IAMd,GAAG,CAAC,IAAI,EAAE,IAAI;IAOd,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM;IAuBzB,MAAM;IAIN,QAAQ;IAIf,MAAM,CAAC,MAAM,CAAC,KAAK,SAAI,EAAE,OAAO,SAAI,EAAE,OAAO,SAAI,EAAE,YAAY,SAAI;IASnE,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO;IAU5B,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG;IAStB,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG;IAG1B,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,SAAyB,EAAE,MAAM,UAAQ,GAAG,SAAS,GAAG,SAAS;CA8CpG"}
package/dist/lib/time.js CHANGED
@@ -1,4 +1,5 @@
1
1
  import dayjs from "../_virtual/dayjs.min.js";
2
+ const defaultTimeDeltaFormat = "HH:mm:ss";
2
3
  const BASE_DATE = /* @__PURE__ */ new Date("2345-01-02T03:04:05Z");
3
4
  const UNITS = ["year", "month", "day", "hour", "minute", "second", "millisecond"];
4
5
  const ADD_FNS = UNITS.map(
@@ -8,7 +9,8 @@ const SUB_FNS = UNITS.map(
8
9
  (unit) => (date, amount) => dayjs(date).subtract(amount, unit).toDate()
9
10
  );
10
11
  class TimeDelta {
11
- constructor(date1, date2) {
12
+ constructor(date1, date2, format = defaultTimeDeltaFormat) {
13
+ this.gsType = "TimeDelta";
12
14
  this.diff = [0, 0, 0, 0, 0, 0, 0];
13
15
  this.diff = [
14
16
  date1.getFullYear() - date2.getFullYear(),
@@ -21,7 +23,7 @@ class TimeDelta {
21
23
  ];
22
24
  this.date1 = date1;
23
25
  this.date2 = date2;
24
- this.format = "HH:mm:ss";
26
+ this.format = format;
25
27
  }
26
28
  add(date) {
27
29
  this.diff.forEach((n, i) => {
@@ -71,9 +73,98 @@ class TimeDelta {
71
73
  });
72
74
  return new TimeDelta(date, BASE_DATE);
73
75
  }
76
+ static is(obj) {
77
+ if (obj instanceof TimeDelta) {
78
+ return true;
79
+ }
80
+ if ((obj == null ? void 0 : obj.gsType) === "TimeDelta") {
81
+ return true;
82
+ }
83
+ return false;
84
+ }
85
+ static ensure(obj) {
86
+ if (obj instanceof TimeDelta) {
87
+ return obj;
88
+ }
89
+ if ((obj == null ? void 0 : obj.gsType) === "TimeDelta") {
90
+ return TimeDelta.fromObject(obj);
91
+ }
92
+ return TimeDelta.create();
93
+ }
94
+ static fromObject(obj) {
95
+ return new TimeDelta(new Date(obj.date1), new Date(obj.date2));
96
+ }
97
+ static parse(value, format = defaultTimeDeltaFormat, strict = false) {
98
+ {
99
+ const formattedMatcher = dayjsFormatToNamedRegex(format);
100
+ const match = value.match(formattedMatcher);
101
+ if (match == null ? void 0 : match.groups) {
102
+ return TimeDelta.create(
103
+ Number(match.groups.HH || match.groups.H || 0),
104
+ Number(match.groups.mm || match.groups.m || 0),
105
+ Number(match.groups.ss || match.groups.s || 0),
106
+ Number(match.groups.SSS || match.groups.SS || match.groups.S || 0)
107
+ );
108
+ }
109
+ }
110
+ if (strict) {
111
+ return;
112
+ }
113
+ {
114
+ const match = value.match(/^([+-]?)(\d+):(\d{2})$/);
115
+ if (match) {
116
+ const [, _sign, hours, minutes] = match;
117
+ const sign = _sign === "-" ? -1 : 1;
118
+ return TimeDelta.create(sign * Number(hours), sign * Number(minutes));
119
+ }
120
+ }
121
+ {
122
+ const match = value.match(/^([+-]?)(\d+):(\d{2}):(\d{2})$/);
123
+ if (match) {
124
+ const [, _sign, hours, minutes, seconds] = match;
125
+ const sign = _sign === "-" ? -1 : 1;
126
+ return TimeDelta.create(sign * Number(hours), sign * Number(minutes), sign * Number(seconds));
127
+ }
128
+ }
129
+ {
130
+ const match = value.match(/^([+-]?)(\d+):(\d{2}):(\d{2})\.(\d+)$/);
131
+ if (match) {
132
+ const [, _sign, hours, minutes, seconds, msecs] = match;
133
+ const sign = _sign === "-" ? -1 : 1;
134
+ return TimeDelta.create(
135
+ sign * Number(hours),
136
+ sign * Number(minutes),
137
+ sign * Number(seconds),
138
+ sign * Number(msecs)
139
+ );
140
+ }
141
+ }
142
+ }
143
+ }
144
+ const tokenRegexMap = {
145
+ HH: { group: "HH", pattern: "(?<HH>\\d+)" },
146
+ H: { group: "H", pattern: "(?<HH>\\d+)" },
147
+ mm: { group: "mm", pattern: "(?<mm>[0-5]\\d)" },
148
+ m: { group: "m", pattern: "(?<m>\\d|[1-5]\\d)" },
149
+ ss: { group: "ss", pattern: "(?<ss>[0-5]\\d)" },
150
+ s: { group: "s", pattern: "(?<s>\\d|[1-5]\\d)" },
151
+ SSS: { group: "SSS", pattern: "(?<SSS>\\d{3})" },
152
+ SS: { group: "SS", pattern: "(?<SS>\\d{2})" },
153
+ S: { group: "S", pattern: "(?<S>\\d)" }
154
+ };
155
+ function dayjsFormatToNamedRegex(format) {
156
+ const sortedTokens = Object.keys(tokenRegexMap).sort((a, b) => b.length - a.length);
157
+ const tokenPattern = new RegExp(sortedTokens.join("|"), "g");
158
+ const escapedFormat = format.replace(/[-\/\\^$*+?.()|[\]{}]/g, "\\$&");
159
+ const regexSource = escapedFormat.replace(tokenPattern, (match) => {
160
+ var _a;
161
+ return ((_a = tokenRegexMap[match]) == null ? void 0 : _a.pattern) ?? match;
162
+ });
163
+ return new RegExp(`^${regexSource}$`);
74
164
  }
75
165
  export {
76
166
  BASE_DATE,
77
- TimeDelta
167
+ TimeDelta,
168
+ defaultTimeDeltaFormat
78
169
  };
79
170
  //# sourceMappingURL=time.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"time.js","sources":["../../lib/time.ts"],"sourcesContent":["import dayjs from 'dayjs';\n\nexport const BASE_DATE = new Date('2345-01-02T03:04:05Z');\ntype DiffFunction = (date: Date | number, amount: number) => Date;\nconst UNITS = ['year', 'month', 'day', 'hour', 'minute', 'second', 'millisecond'] as const;\nconst ADD_FNS = UNITS.map(\n (unit) => (date: Date, amount: number) => dayjs(date).add(amount, unit).toDate(),\n) as DiffFunction[];\nconst SUB_FNS = UNITS.map(\n (unit) => (date: Date, amount: number) => dayjs(date).subtract(amount, unit).toDate(),\n) as DiffFunction[];\n\ntype Diff = [number, number, number, number, number, number, number];\n\nexport class TimeDelta {\n protected diff: Diff = [0, 0, 0, 0, 0, 0, 0];\n private date1: Date;\n private date2: Date;\n public format: string;\n\n constructor(date1: Date, date2: Date) {\n this.diff = [\n date1.getFullYear() - date2.getFullYear(),\n date1.getMonth() - date2.getMonth(),\n date1.getDate() - date2.getDate(),\n date1.getHours() - date2.getHours(),\n date1.getMinutes() - date2.getMinutes(),\n date1.getSeconds() - date2.getSeconds(),\n date1.getMilliseconds() - date2.getMilliseconds(),\n ];\n this.date1 = date1;\n this.date2 = date2;\n this.format = 'HH:mm:ss';\n }\n public add(date: Date) {\n this.diff.forEach((n, i) => {\n date = ADD_FNS[i](date, n);\n });\n return date;\n }\n public sub(date: Date) {\n this.diff.forEach((n, i) => {\n date = SUB_FNS[i](date, n);\n });\n return date;\n }\n\n public stringify(format?: string) {\n if (format == null) {\n format = this.format;\n }\n const tokens = [];\n const msecs = this.date1.getMilliseconds() - this.date2.getMilliseconds();\n let secs = (this.date1.getTime() - this.date2.getTime()) / 1000;\n for (const divider of [3600, 60]) {\n tokens.push(Math.floor(secs / divider));\n secs %= divider;\n }\n tokens.push(secs, msecs);\n let result = format;\n result = result.replace('HH', String(tokens[0]).padStart(2, '0'));\n result = result.replace('H', String(tokens[0]));\n result = result.replace('mm', String(tokens[1]).padStart(2, '0'));\n result = result.replace('ss', String(tokens[2]).padStart(2, '0'));\n result = result.replace('SSS', String(tokens[3]).padStart(3, '0'));\n result = result.replace('SS', String(tokens[3]).padStart(2, '0').substring(0, 2));\n result = result.replace('S', String(tokens[3]).padStart(1, '0').substring(0, 1));\n return result;\n }\n\n public toJSON() {\n return this.stringify();\n }\n\n public toString() {\n return this.stringify();\n }\n\n static create(hours = 0, minutes = 0, seconds = 0, milliseconds = 0) {\n const diff: Diff = [0, 0, 0, hours, minutes, seconds, milliseconds];\n let date = BASE_DATE;\n diff.forEach((n, i) => {\n date = ADD_FNS[i](date, n);\n });\n return new TimeDelta(date, BASE_DATE);\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"time.js","sources":["../../lib/time.ts"],"sourcesContent":["import dayjs from 'dayjs';\n\nexport const defaultTimeDeltaFormat = 'HH:mm:ss';\n\nexport const BASE_DATE = new Date('2345-01-02T03:04:05Z');\ntype DiffFunction = (date: Date | number, amount: number) => Date;\nconst UNITS = ['year', 'month', 'day', 'hour', 'minute', 'second', 'millisecond'] as const;\nconst ADD_FNS = UNITS.map(\n (unit) => (date: Date, amount: number) => dayjs(date).add(amount, unit).toDate(),\n) as DiffFunction[];\nconst SUB_FNS = UNITS.map(\n (unit) => (date: Date, amount: number) => dayjs(date).subtract(amount, unit).toDate(),\n) as DiffFunction[];\n\ntype Diff = [number, number, number, number, number, number, number];\n\nexport class TimeDelta {\n public gsType = 'TimeDelta';\n protected diff: Diff = [0, 0, 0, 0, 0, 0, 0];\n private date1: Date;\n private date2: Date;\n public format: string;\n\n constructor(date1: Date, date2: Date, format = defaultTimeDeltaFormat) {\n this.diff = [\n date1.getFullYear() - date2.getFullYear(),\n date1.getMonth() - date2.getMonth(),\n date1.getDate() - date2.getDate(),\n date1.getHours() - date2.getHours(),\n date1.getMinutes() - date2.getMinutes(),\n date1.getSeconds() - date2.getSeconds(),\n date1.getMilliseconds() - date2.getMilliseconds(),\n ];\n this.date1 = date1;\n this.date2 = date2;\n this.format = format;\n }\n public add(date: Date) {\n this.diff.forEach((n, i) => {\n date = ADD_FNS[i](date, n);\n });\n return date;\n }\n public sub(date: Date) {\n this.diff.forEach((n, i) => {\n date = SUB_FNS[i](date, n);\n });\n return date;\n }\n\n public stringify(format?: string) {\n if (format == null) {\n format = this.format;\n }\n const tokens = [];\n const msecs = this.date1.getMilliseconds() - this.date2.getMilliseconds();\n let secs = (this.date1.getTime() - this.date2.getTime()) / 1000;\n for (const divider of [3600, 60]) {\n tokens.push(Math.floor(secs / divider));\n secs %= divider;\n }\n tokens.push(secs, msecs);\n let result = format;\n result = result.replace('HH', String(tokens[0]).padStart(2, '0'));\n result = result.replace('H', String(tokens[0]));\n result = result.replace('mm', String(tokens[1]).padStart(2, '0'));\n result = result.replace('ss', String(tokens[2]).padStart(2, '0'));\n result = result.replace('SSS', String(tokens[3]).padStart(3, '0'));\n result = result.replace('SS', String(tokens[3]).padStart(2, '0').substring(0, 2));\n result = result.replace('S', String(tokens[3]).padStart(1, '0').substring(0, 1));\n return result;\n }\n\n public toJSON() {\n return this.stringify();\n }\n\n public toString() {\n return this.stringify();\n }\n\n static create(hours = 0, minutes = 0, seconds = 0, milliseconds = 0) {\n const diff: Diff = [0, 0, 0, hours, minutes, seconds, milliseconds];\n let date = BASE_DATE;\n diff.forEach((n, i) => {\n date = ADD_FNS[i](date, n);\n });\n return new TimeDelta(date, BASE_DATE);\n }\n\n static is(obj: any): boolean {\n if (obj instanceof TimeDelta) {\n return true;\n }\n if (obj?.gsType === 'TimeDelta') {\n return true;\n }\n return false;\n }\n\n static ensure(obj: any) {\n if (obj instanceof TimeDelta) {\n return obj;\n }\n if (obj?.gsType === 'TimeDelta') {\n return TimeDelta.fromObject(obj);\n }\n return TimeDelta.create();\n }\n static fromObject(obj: any) {\n return new TimeDelta(new Date(obj.date1), new Date(obj.date2));\n }\n static parse(value: string, format = defaultTimeDeltaFormat, strict = false): TimeDelta | undefined {\n {\n const formattedMatcher = dayjsFormatToNamedRegex(format);\n const match = value.match(formattedMatcher);\n if (match?.groups) {\n return TimeDelta.create(\n Number(match.groups.HH || match.groups.H || 0),\n Number(match.groups.mm || match.groups.m || 0),\n Number(match.groups.ss || match.groups.s || 0),\n Number(match.groups.SSS || match.groups.SS || match.groups.S || 0),\n );\n }\n }\n if (strict) {\n return;\n }\n {\n const match = value.match(/^([+-]?)(\\d+):(\\d{2})$/);\n if (match) {\n const [, _sign, hours, minutes] = match;\n const sign = _sign === '-' ? -1 : 1;\n return TimeDelta.create(sign * Number(hours), sign * Number(minutes));\n }\n }\n {\n const match = value.match(/^([+-]?)(\\d+):(\\d{2}):(\\d{2})$/);\n if (match) {\n const [, _sign, hours, minutes, seconds] = match;\n const sign = _sign === '-' ? -1 : 1;\n return TimeDelta.create(sign * Number(hours), sign * Number(minutes), sign * Number(seconds));\n }\n }\n {\n const match = value.match(/^([+-]?)(\\d+):(\\d{2}):(\\d{2})\\.(\\d+)$/);\n if (match) {\n const [, _sign, hours, minutes, seconds, msecs] = match;\n const sign = _sign === '-' ? -1 : 1;\n return TimeDelta.create(\n sign * Number(hours),\n sign * Number(minutes),\n sign * Number(seconds),\n sign * Number(msecs),\n );\n }\n }\n }\n}\n\nconst tokenRegexMap: Record<string, { group: string; pattern: string }> = {\n HH: { group: 'HH', pattern: '(?<HH>\\\\d+)' },\n H: { group: 'H', pattern: '(?<HH>\\\\d+)' },\n mm: { group: 'mm', pattern: '(?<mm>[0-5]\\\\d)' },\n m: { group: 'm', pattern: '(?<m>\\\\d|[1-5]\\\\d)' },\n ss: { group: 'ss', pattern: '(?<ss>[0-5]\\\\d)' },\n s: { group: 's', pattern: '(?<s>\\\\d|[1-5]\\\\d)' },\n SSS: { group: 'SSS', pattern: '(?<SSS>\\\\d{3})' },\n SS: { group: 'SS', pattern: '(?<SS>\\\\d{2})' },\n S: { group: 'S', pattern: '(?<S>\\\\d)' },\n};\n\nfunction dayjsFormatToNamedRegex(format: string): RegExp {\n const sortedTokens = Object.keys(tokenRegexMap).sort((a, b) => b.length - a.length);\n const tokenPattern = new RegExp(sortedTokens.join('|'), 'g');\n\n const escapedFormat = format.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n\n const regexSource = escapedFormat.replace(tokenPattern, (match) => {\n return tokenRegexMap[match]?.pattern ?? match;\n });\n\n return new RegExp(`^${regexSource}$`);\n}\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../parsers/core.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAOxC,KAAK,SAAS,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;AAC5C,KAAK,SAAS,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,GAAG,CAAC;AAExC,KAAK,KAAK,GAAG;IACX,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,MAAM,CAAC,EAAE,eAAe,EAAE,CAAC;CAC5B,CAAC;AAQF,MAAM,WAAW,eAAe;IAC9B,SAAS,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,QAAQ,KAAK,GAAG,CAAC,EAAE,CAAC;IACxD,QAAQ,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAClD,KAAK,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,GAAG,CAAC;IAC3C,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;IAC3D,MAAM,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAC;IAC5D,SAAS,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;IAClE,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,QAAQ,GAAG,IAAI,GAAG,SAAS,CAAC;CACzD;AAED,qBAAa,MAAO,YAAW,eAAe;IAC5C,SAAS,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,QAAQ,KAAK,GAAG,CAAC,EAAE,CAKpD;IAEF,OAAO,CAAC,SAAS,CAAC,CAAY;IAC9B,OAAO,CAAC,UAAU,CAAC,CAAY;gBAEnB,KAAK,CAAC,EAAE,KAAK;IAUzB,OAAO,CAAC,WAAW;IAWZ,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,QAAQ;IAQ7C,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ;IAGhD,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,QAAQ,GAAG,GAAG;IAoBjD,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,SAAS;IAIzD,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,SAAS;IAO1D,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,SAAS;IAmChE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,QAAQ,GAAG,IAAI,GAAG,SAAS;CAoBvD;AAED,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC;AAEhC,eAAO,MAAM,aAAa,QAAe,CAAC"}
1
+ {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../parsers/core.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAOxC,KAAK,SAAS,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;AAC5C,KAAK,SAAS,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,GAAG,CAAC;AAExC,KAAK,KAAK,GAAG;IACX,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,MAAM,CAAC,EAAE,eAAe,EAAE,CAAC;CAC5B,CAAC;AAQF,MAAM,WAAW,eAAe;IAC9B,SAAS,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,QAAQ,KAAK,GAAG,CAAC,EAAE,CAAC;IACxD,QAAQ,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAClD,KAAK,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,GAAG,CAAC;IAC3C,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;IAC3D,MAAM,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAC;IAC5D,SAAS,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;IAClE,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,QAAQ,GAAG,IAAI,GAAG,SAAS,CAAC;CACzD;AAED,qBAAa,MAAO,YAAW,eAAe;IAC5C,SAAS,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,QAAQ,KAAK,GAAG,CAAC,EAAE,CAKpD;IAEF,OAAO,CAAC,SAAS,CAAC,CAAY;IAC9B,OAAO,CAAC,UAAU,CAAC,CAAY;gBAEnB,KAAK,CAAC,EAAE,KAAK;IAUzB,OAAO,CAAC,WAAW;IAWZ,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,QAAQ;IAQ7C,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ;IAGhD,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,QAAQ,GAAG,GAAG;IAoBjD,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,SAAS;IAIzD,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,SAAS;IAO1D,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,SAAS;IAOhE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,QAAQ,GAAG,IAAI,GAAG,SAAS;CAoBvD;AAED,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC;AAEhC,eAAO,MAAM,aAAa,QAAe,CAAC"}
@@ -78,35 +78,7 @@ class Parser {
78
78
  if (value.length < 4 || isNaN(value[value.length - 1])) {
79
79
  return;
80
80
  }
81
- {
82
- const match = value.match(/^([+-]?)(\d+):(\d{2})$/);
83
- if (match) {
84
- const [, _sign, hours, minutes] = match;
85
- const sign = _sign === "-" ? -1 : 1;
86
- return TimeDelta.create(sign * Number(hours), sign * Number(minutes));
87
- }
88
- }
89
- {
90
- const match = value.match(/^([+-]?)(\d+):(\d{2}):(\d{2})$/);
91
- if (match) {
92
- const [, _sign, hours, minutes, seconds] = match;
93
- const sign = _sign === "-" ? -1 : 1;
94
- return TimeDelta.create(sign * Number(hours), sign * Number(minutes), sign * Number(seconds));
95
- }
96
- }
97
- {
98
- const match = value.match(/^([+-]?)(\d+):(\d{2}):(\d{2})\.(\d+)$/);
99
- if (match) {
100
- const [, _sign, hours, minutes, seconds, msecs] = match;
101
- const sign = _sign === "-" ? -1 : 1;
102
- return TimeDelta.create(
103
- sign * Number(hours),
104
- sign * Number(minutes),
105
- sign * Number(seconds),
106
- sign * Number(msecs)
107
- );
108
- }
109
- }
81
+ return TimeDelta.parse(value);
110
82
  }
111
83
  date(value, cell) {
112
84
  const first = value[0];