hyperformula
Version:
HyperFormula is a JavaScript engine for efficient processing of spreadsheet-like data and formulas
97 lines • 2.33 kB
JavaScript
/**
* @license
* Copyright (c) 2025 Handsoncode. All rights reserved.
*/
/**
* A symbol representing an empty cell value.
*/
export const EmptyValue = Symbol('Empty value');
export function getRawValue(num) {
if (num instanceof RichNumber) {
return num.val;
} else {
return num;
}
}
export class RichNumber {
constructor(val, format) {
this.val = val;
this.format = format;
}
fromNumber(val) {
// eslint-disable-next-line @typescript-eslint/no-unsafe-call
return new this.constructor(val);
}
}
export function cloneNumber(val, newVal) {
if (typeof val === 'number') {
return newVal;
} else {
const ret = val.fromNumber(newVal);
ret.format = val.format;
return ret;
}
}
export class DateNumber extends RichNumber {
getDetailedType() {
return NumberType.NUMBER_DATE;
}
}
export class CurrencyNumber extends RichNumber {
getDetailedType() {
return NumberType.NUMBER_CURRENCY;
}
}
export class TimeNumber extends RichNumber {
getDetailedType() {
return NumberType.NUMBER_TIME;
}
}
export class DateTimeNumber extends RichNumber {
getDetailedType() {
return NumberType.NUMBER_DATETIME;
}
}
export class PercentNumber extends RichNumber {
getDetailedType() {
return NumberType.NUMBER_PERCENT;
}
}
export function isExtendedNumber(val) {
return typeof val === 'number' || val instanceof RichNumber;
}
export var NumberType;
(function (NumberType) {
NumberType["NUMBER_RAW"] = "NUMBER_RAW";
NumberType["NUMBER_DATE"] = "NUMBER_DATE";
NumberType["NUMBER_TIME"] = "NUMBER_TIME";
NumberType["NUMBER_DATETIME"] = "NUMBER_DATETIME";
NumberType["NUMBER_CURRENCY"] = "NUMBER_CURRENCY";
NumberType["NUMBER_PERCENT"] = "NUMBER_PERCENT";
})(NumberType || (NumberType = {}));
export function getTypeOfExtendedNumber(num) {
if (num instanceof RichNumber) {
return num.getDetailedType();
} else {
return NumberType.NUMBER_RAW;
}
}
export function getFormatOfExtendedNumber(num) {
if (num instanceof RichNumber) {
return num.format;
} else {
return undefined;
}
}
export function getTypeFormatOfExtendedNumber(num) {
if (num instanceof RichNumber) {
return {
type: num.getDetailedType(),
format: num.format
};
} else {
return {
type: NumberType.NUMBER_RAW
};
}
}