export function getDeliveryDate()

in src/weekly/WeeklyInput.ts [26:53]


export function getDeliveryDate(input: WeeklyInput) {
	if (input.deliveryDate) {
		const deliveryDate = moment(input.deliveryDate, 'YYYY-MM-DD');
		if (!deliveryDate.isValid()) {
			throw new Error('deliveryDate must be in the format "YYYY-MM-DD"');
		}
		return deliveryDate;
	}
	if (input.deliveryDayOfWeek && typeof input.minDaysInAdvance === 'number') {
		const dayOfWeek = input.deliveryDayOfWeek;
		const minDaysInAdvance = input.minDaysInAdvance;
		const dayOfWeekNum = weekDays.get(dayOfWeek.toUpperCase().trim());
		if (dayOfWeekNum === undefined || dayOfWeekNum == null) {
			throw new Error(`${dayOfWeek} is not a valid day of the week`);
		}
		const minDate = moment().startOf('day').add(minDaysInAdvance, 'days');
		const dayInWeek = minDate.clone().weekday(dayOfWeekNum);

		if (dayInWeek.isBefore(minDate)) {
			return dayInWeek.add(7, 'days');
		} else {
			return dayInWeek;
		}
	}
	throw new Error(
		'deliveryDate or (deliveryDayOfWeek and minDaysInAdvance) input params must be provided',
	);
}