UNPKG

hyperformula-dc

Version:

HyperFormula is a JavaScript engine for efficient processing of spreadsheet-like data and formulas

343 lines (342 loc) 11 kB
/** * @license * Copyright (c) 2021 Handsoncode. All rights reserved. */ import { ProcedureAst } from '../../parser'; import { InterpreterState } from '../InterpreterState'; import { InterpreterValue, NumberType } from '../InterpreterValue'; import { ArgumentTypes, FunctionPlugin, FunctionPluginTypecheck } from './FunctionPlugin'; /** * Interpreter plugin containing date-specific functions */ export declare class DateTimePlugin extends FunctionPlugin implements FunctionPluginTypecheck<DateTimePlugin> { static implementedFunctions: { DATE: { method: string; parameters: { argumentType: ArgumentTypes; }[]; returnNumberType: NumberType; }; TIME: { method: string; parameters: { argumentType: ArgumentTypes; }[]; returnNumberType: NumberType; }; MONTH: { method: string; parameters: { argumentType: ArgumentTypes; minValue: number; }[]; }; YEAR: { method: string; parameters: { argumentType: ArgumentTypes; minValue: number; }[]; }; HOUR: { method: string; parameters: { argumentType: ArgumentTypes; minValue: number; }[]; }; MINUTE: { method: string; parameters: { argumentType: ArgumentTypes; minValue: number; }[]; }; SECOND: { method: string; parameters: { argumentType: ArgumentTypes; minValue: number; }[]; }; TEXT: { method: string; parameters: { argumentType: ArgumentTypes; }[]; }; EOMONTH: { method: string; parameters: ({ argumentType: ArgumentTypes; minValue: number; } | { argumentType: ArgumentTypes; minValue?: undefined; })[]; returnNumberType: NumberType; }; DAY: { method: string; parameters: { argumentType: ArgumentTypes; minValue: number; }[]; }; DAYS: { method: string; parameters: { argumentType: ArgumentTypes; minValue: number; }[]; }; WEEKDAY: { method: string; parameters: ({ argumentType: ArgumentTypes; minValue: number; defaultValue?: undefined; } | { argumentType: ArgumentTypes; defaultValue: number; minValue?: undefined; })[]; }; WEEKNUM: { method: string; parameters: ({ argumentType: ArgumentTypes; minValue: number; defaultValue?: undefined; } | { argumentType: ArgumentTypes; defaultValue: number; minValue?: undefined; })[]; }; ISOWEEKNUM: { method: string; parameters: { argumentType: ArgumentTypes; minValue: number; }[]; }; DATEVALUE: { method: string; parameters: { argumentType: ArgumentTypes; }[]; returnNumberType: NumberType; }; TIMEVALUE: { method: string; parameters: { argumentType: ArgumentTypes; }[]; returnNumberType: NumberType; }; NOW: { method: string; parameters: never[]; isVolatile: boolean; returnNumberType: NumberType; }; TODAY: { method: string; parameters: never[]; isVolatile: boolean; returnNumberType: NumberType; }; EDATE: { method: string; parameters: ({ argumentType: ArgumentTypes; minValue: number; } | { argumentType: ArgumentTypes; minValue?: undefined; })[]; returnNumberType: NumberType; }; DAYS360: { method: string; parameters: ({ argumentType: ArgumentTypes; minValue: number; defaultValue?: undefined; } | { argumentType: ArgumentTypes; defaultValue: boolean; minValue?: undefined; })[]; }; DATEDIF: { method: string; parameters: ({ argumentType: ArgumentTypes; minValue: number; } | { argumentType: ArgumentTypes; minValue?: undefined; })[]; }; YEARFRAC: { method: string; parameters: ({ argumentType: ArgumentTypes; minValue: number; defaultValue?: undefined; maxValue?: undefined; } | { argumentType: ArgumentTypes; defaultValue: number; minValue: number; maxValue: number; })[]; }; INTERVAL: { method: string; parameters: { argumentType: ArgumentTypes; minValue: number; }[]; }; NETWORKDAYS: { method: string; parameters: ({ argumentType: ArgumentTypes; minValue: number; optionalArg?: undefined; } | { argumentType: ArgumentTypes; optionalArg: boolean; minValue?: undefined; })[]; }; 'NETWORKDAYS.INTL': { method: string; parameters: ({ argumentType: ArgumentTypes; minValue: number; defaultValue?: undefined; optionalArg?: undefined; } | { argumentType: ArgumentTypes; defaultValue: number; minValue?: undefined; optionalArg?: undefined; } | { argumentType: ArgumentTypes; optionalArg: boolean; minValue?: undefined; defaultValue?: undefined; })[]; }; WORKDAY: { method: string; parameters: ({ argumentType: ArgumentTypes; minValue: number; optionalArg?: undefined; } | { argumentType: ArgumentTypes; minValue?: undefined; optionalArg?: undefined; } | { argumentType: ArgumentTypes; optionalArg: boolean; minValue?: undefined; })[]; }; 'WORKDAY.INTL': { method: string; parameters: ({ argumentType: ArgumentTypes; minValue: number; defaultValue?: undefined; optionalArg?: undefined; } | { argumentType: ArgumentTypes; minValue?: undefined; defaultValue?: undefined; optionalArg?: undefined; } | { argumentType: ArgumentTypes; defaultValue: number; minValue?: undefined; optionalArg?: undefined; } | { argumentType: ArgumentTypes; optionalArg: boolean; minValue?: undefined; defaultValue?: undefined; })[]; }; }; /** * Corresponds to DATE(year, month, day) * * Converts a provided year, month and day into date * * @param ast * @param state */ date(ast: ProcedureAst, state: InterpreterState): InterpreterValue; time(ast: ProcedureAst, state: InterpreterState): InterpreterValue; eomonth(ast: ProcedureAst, state: InterpreterState): InterpreterValue; day(ast: ProcedureAst, state: InterpreterState): InterpreterValue; days(ast: ProcedureAst, state: InterpreterState): InterpreterValue; /** * Corresponds to MONTH(date) * * Returns the month of the year specified by a given date * * @param ast * @param state */ month(ast: ProcedureAst, state: InterpreterState): InterpreterValue; /** * Corresponds to YEAR(date) * * Returns the year specified by a given date * * @param ast * @param state */ year(ast: ProcedureAst, state: InterpreterState): InterpreterValue; hour(ast: ProcedureAst, state: InterpreterState): InterpreterValue; minute(ast: ProcedureAst, state: InterpreterState): InterpreterValue; second(ast: ProcedureAst, state: InterpreterState): InterpreterValue; /** * Corresponds to TEXT(number, format) * * Tries to convert number to specified date format. * * @param ast * @param state */ text(ast: ProcedureAst, state: InterpreterState): InterpreterValue; weekday(ast: ProcedureAst, state: InterpreterState): InterpreterValue; weeknum(ast: ProcedureAst, state: InterpreterState): InterpreterValue; isoweeknum(ast: ProcedureAst, state: InterpreterState): InterpreterValue; private isoweeknumCore; datevalue(ast: ProcedureAst, state: InterpreterState): InterpreterValue; timevalue(ast: ProcedureAst, state: InterpreterState): InterpreterValue; now(ast: ProcedureAst, state: InterpreterState): InterpreterValue; today(ast: ProcedureAst, state: InterpreterState): InterpreterValue; edate(ast: ProcedureAst, state: InterpreterState): InterpreterValue; datedif(ast: ProcedureAst, state: InterpreterState): InterpreterValue; days360(ast: ProcedureAst, state: InterpreterState): InterpreterValue; private days360Core; yearfrac(ast: ProcedureAst, state: InterpreterState): InterpreterValue; interval(ast: ProcedureAst, state: InterpreterState): InterpreterValue; networkdays(ast: ProcedureAst, state: InterpreterState): InterpreterValue; networkdaysintl(ast: ProcedureAst, state: InterpreterState): InterpreterValue; workday(ast: ProcedureAst, state: InterpreterState): InterpreterValue; workdayintl(ast: ProcedureAst, state: InterpreterState): InterpreterValue; private networkdayscore; private workdaycore; private countWorkdays; private simpleRangeToFilteredHolidays; }