Source: index.js

/*
 * kollavarsham
 * http://kollavarsham.org
 *
 * Copyright (c) 2014-2023 The Kollavarsham Team
 * Licensed under the MIT license.
 */
/**
 * @module kollavarsham
 */
import { Calculations } from './calculations';
import { SakaDate } from './dates/index';
export const DefaultSettings = { system: 'SuryaSiddhanta', latitude: 23.2, longitude: 75.8 };
/**
 * The Kollavarsham class implements all the public APIs of the library.
 *
 * Create a new instance of this class, passing in the relevant options and call methods on the instance.
 *
 * @class Kollavarsham
 * @param {Object} [options] A set of key value pairs to configure the Kollavarsham instance. All settings are optional.
 *  @param {String} [options.system='SuryaSiddhanta'] Set to 'InPancasiddhantika' or 'SuryaSiddhanta' to use the corresponding system
 *  @param {Number} [options.latitude=23.2] Sets the latitude for the location for the conversions. Defaults to Ujjain, Madhya Pradesh
 *  @param {Number} [options.longitude=75.8] Sets the longitude for the location for the conversions. Default to Ujjain, Madhya Pradesh
 * @constructor
 * @example
 *const Kollavarsham = require('kollavarsham');
 *
 *const options = {
 *  system: 'SuryaSiddhanta',
 *  latitude: 10,
 *  longitude: 76.2
 *};
 *
 *const kollavarsham = new Kollavarsham(options);
 *
 *let todayInMalayalamEra = kollavarsham.fromGregorianDate(new Date());
 *
 *let today = kollavarsham.toGregorianDate(todayInMalayalamEra);  // Not implemented yet
 */
export class Kollavarsham {
    constructor(options = DefaultSettings) {
        /**
         * Holds the settings state of the Kollavarsham instance. To access a snapshot use the {@link Kollavarsham#getSettings} method
         * @property settings
         * @type {{system, latitude, longitude}}
         */
        this.settings = {
            system: options.system,
            latitude: options.latitude,
            longitude: options.longitude
        };
    }
    /**
     * Converts a Gregorian date to the equivalent Kollavarsham date, respecting the current configuration
     *
     * @method fromGregorianDate
     * @for Kollavarsham
     * @param date {Date} The Gregorian date to be converted to Kollavarsham
     * @returns {kollavarshamDate} Converted date
     * @example
     *const Kollavarsham = require('Kollavarsham');
     *const kollavarsham = new Kollavarsham();
     *let today = kollavarsham.fromGregorianDate(new Date(1979, 4, 22));
     */
    fromGregorianDate(date) {
        const calculations = new Calculations(this.settings);
        return calculations.fromGregorian(date);
    }
    /**
     * Converts a Kollavarsham date (an instance of {@link kollavarshamDate}) to its equivalent Gregorian date, respecting the current configuration.
     * This method Will return {@link JulianDate} object for any date before 1st January 1583 AD and
     * [Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) objects for later dates.
     *
     *  **This API has not been implemented yet**
     *
     * @method toGregorianDate
     * @for Kollavarsham
     * @param date {kollavarshamDate} The Kollavarsham date to be converted to Gregorian
     * @returns {Date|JulianDate} Converted date
     * @throws **"When the API is implemented, will convert <date>"**
     */
    toGregorianDate(date) {
        //TODO: Implement this method
        throw new Error(`When the API is implemented, will convert ${date}`);
    }
    /**
     * Converts a Saka date (an instance of {@link sakaDate}) to its equivalent Gregorian date, respecting the current configuration.
     * This method Will return {@link JulianDate} object for any date before 1st January 1583 AD and
     * [Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) objects for later dates.
     *
     * @method toGregorianDateFromSaka
     * @for Kollavarsham
     * @param sakaDate {sakaDate} The Saka date to be converted to Gregorian
     * @returns {Date|JulianDate} Converted date
     */
    toGregorianDateFromSaka(sakaDate) {
        // TODO: Remove this method??
        // This is implemented specifically for the pancanga-nodejs cli (https://github.com/kollavarsham/pancanga-nodejs)
        // Could be removed when toGregorian has been implemented based on this
        if (!(sakaDate instanceof SakaDate)) {
            throw new Error('Parameter sakaDate should be an instance of the \'SakaDate\' class');
        }
        const calculations = new Calculations(this.settings);
        return calculations.toGregorianFromSaka(sakaDate);
    }
}
export * from './dates/index';