import { getDefaultOptions, setDefaultOptions as setInternalDefaultOptions, } from "./_lib/defaultOptions.mjs"; /** * @name setDefaultOptions * @category Common Helpers * @summary Set default options including locale. * @pure false * * @description * Sets the defaults for * `options.locale`, `options.weekStartsOn` and `options.firstWeekContainsDate` * arguments for all functions. * * @param options - An object with options * * @example * // Set global locale: * import { es } from 'date-fns/locale' * setDefaultOptions({ locale: es }) * const result = format(new Date(2014, 8, 2), 'PPPP') * //=> 'martes, 2 de septiembre de 2014' * * @example * // Start of the week for 2 September 2014: * const result = startOfWeek(new Date(2014, 8, 2)) * //=> Sun Aug 31 2014 00:00:00 * * @example * // Start of the week for 2 September 2014, * // when we set that week starts on Monday by default: * setDefaultOptions({ weekStartsOn: 1 }) * const result = startOfWeek(new Date(2014, 8, 2)) * //=> Mon Sep 01 2014 00:00:00 * * @example * // Manually set options take priority over default options: * setDefaultOptions({ weekStartsOn: 1 }) * const result = startOfWeek(new Date(2014, 8, 2), { weekStartsOn: 0 }) * //=> Sun Aug 31 2014 00:00:00 * * @example * // Remove the option by setting it to `undefined`: * setDefaultOptions({ weekStartsOn: 1 }) * setDefaultOptions({ weekStartsOn: undefined }) * const result = startOfWeek(new Date(2014, 8, 2)) * //=> Sun Aug 31 2014 00:00:00 */ export function setDefaultOptions(options) { const result = {}; const defaultOptions = getDefaultOptions(); for (const property in defaultOptions) { if (Object.prototype.hasOwnProperty.call(defaultOptions, property)) { // eslint-disable-next-line @typescript-eslint/no-explicit-any -- I challange you to fix the type result[property] = defaultOptions[property]; } } for (const property in options) { if (Object.prototype.hasOwnProperty.call(options, property)) { if (options[property] === undefined) { // eslint-disable-next-line @typescript-eslint/no-explicit-any -- I challange you to fix the type delete result[property]; } else { // eslint-disable-next-line @typescript-eslint/no-explicit-any -- I challange you to fix the type result[property] = options[property]; } } } setInternalDefaultOptions(result); } // Fallback for modularized imports: export default setDefaultOptions;