Source: setDateObj.js

import { getDateObj } from './getDateObj.js';
import { getDateArr } from './getDateArr.js';
import { getDateStr } from './getDateStr.js';
import { getDateRepr } from './getDateRepr.js';
import { getDateDate } from './getDateDate.js';

/**
 * Creates an object expressing a date ({ year:, month:, day: }).
 * 
 * @param { ( Object | Object[] | string | Date ) } value A date value
 * 
 * @returns { ( Object | null ) } An object ({ year:, month:, day: }) or null in case of invalid param
 * 
 * @example
 * setDateObj( { year: 2021, month: 1, day: 31 } ); // returns { year: 2021, month: 1, day: 31 }
 * setDateObj( [ 2021, 1, 31 ] ); // returns { year: 2021, month: 1, day: 31 }
 * setDateObj( '20210131' ); // returns { year: 2021, month: 1, day: 31 }
 * setDateObj( '31/01/2021' ); // returns { year: 2021, month: 1, day: 31 }
 * setDateObj( new Date( 2021, 0, 31 ) ); // returns { year: 2021, month: 1, day: 31 }
 * setDateObj(); // returns null
 * 
 * - - -
 * @memberof A.set
 */

const setDateObj = value => {
    let result = getDateObj( value );

    if ( result === null ) {
        result = getDateArr( value );

        if ( result === null ) {
            result = getDateStr( value );

            if ( result === null ) {
                result = getDateRepr( value );

                if ( result === null ) {
                    result = getDateDate( value );
                }
            }
        }
    }

    return result;
}

export default setDateObj;
export { setDateObj };