{"version":3,"file":"webresto-worktime.mjs","sources":["../../src/lib/locale_data_core.ts","../../src/lib/locale_data_api.ts","../../src/lib/formatDate.ts","../../src/lib/tz.ts","../../src/lib/worktime.validator.ts","../../src/lib/scheduleGenerator.ts","../../src/webresto-worktime.ts"],"sourcesContent":["function plural(n: number): number {\n  const i = Math.floor(Math.abs(n));\n  const v = n.toString().replace(/^[^.]*\\.?/, '').length;\n  if (i === 1 && v === 0) { return 1; }\n  return 5;\n}\n\nfunction normalizeLocale(locale: string): string {\n  return locale.toLowerCase().replace(/_/g, '-');\n}\n\nconst u = undefined;\nconst LOCALE_DATA: { [localeId: string]: any } = {};\n\nfunction getLocaleData(normalizedLocale: string): any {\n  return LOCALE_DATA[normalizedLocale];\n}\n\nconst localeEn = [\n  'en',\n  [['a', 'p'], ['AM', 'PM'], u],\n  [['AM', 'PM'], u, u],\n  [\n    ['S', 'M', 'T', 'W', 'T', 'F', 'S'], ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n    ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n    ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa']\n  ],\n  u,\n  [\n    ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'],\n    ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n    [\n      'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September',\n      'October', 'November', 'December'\n    ]\n  ],\n  u,\n  [['B', 'A'], ['BC', 'AD'], ['Before Christ', 'Anno Domini']],\n  0,\n  [6, 0],\n  ['M/d/yy', 'MMM d, y', 'MMMM d, y', 'EEEE, MMMM d, y'],\n  ['h:mm a', 'h:mm:ss a', 'h:mm:ss a z', 'h:mm:ss a zzzz'],\n  ['{1}, {0}', u, '{1} \\'at\\' {0}', u],\n  ['.', ',', ';', '%', '+', '-', 'E', '×', '‰', '∞', 'NaN', ':'],\n  ['#,##0.###', '#,##0%', '¤#,##0.00', '#E0'],\n  'USD',\n  '$',\n  'US Dollar',\n  {},\n  'ltr',\n  plural\n];\n\nexport function ɵfindLocaleData(locale: string): any {\n  const normalizedLocale = normalizeLocale(locale);\n\n  let match = getLocaleData(normalizedLocale);\n  if (match) {\n    return match;\n  }\n\n  // let's try to find a parent locale\n  const parentLocale = normalizedLocale.split('-')[0];\n  match = getLocaleData(parentLocale);\n  if (match) {\n    return match;\n  }\n\n  if (parentLocale === 'en') {\n    return localeEn;\n  }\n\n  throw new Error(`Missing locale data for the locale \"${locale}\".`);\n}\n\nexport enum ɵLocaleDataIndex {\n  LocaleId = 0,\n  DayPeriodsFormat,\n  DayPeriodsStandalone,\n  DaysFormat,\n  DaysStandalone,\n  MonthsFormat,\n  MonthsStandalone,\n  Eras,\n  FirstDayOfWeek,\n  WeekendRange,\n  DateFormat,\n  TimeFormat,\n  DateTimeFormat,\n  NumberSymbols,\n  NumberFormats,\n  CurrencyCode,\n  CurrencySymbol,\n  CurrencyName,\n  Currencies,\n  Directionality,\n  PluralCase,\n  ExtraData\n}\n","import { ɵfindLocaleData, ɵLocaleDataIndex } from './locale_data_core';\n\ntype Time = {\n  hours: number,\n  minutes: number\n};\n\nconst enum ɵExtraLocaleDataIndex {\n  ExtraDayPeriodFormats = 0,\n  ExtraDayPeriodStandalone,\n  ExtraDayPeriodsRules\n}\n\nfunction getLastDefinedValue<T>(data: T[], index: number): T {\n  for (let i = index; i > -1; i--) {\n    if (typeof data[i] !== 'undefined') {\n      return data[i];\n    }\n  }\n  throw new Error('Locale data API: locale data undefined');\n}\n\nfunction checkFullData(data: any): void {\n  if (!data[ɵLocaleDataIndex.ExtraData]) {\n    throw new Error(`Missing extra locale data for the locale \"${data[ɵLocaleDataIndex\n      .LocaleId]}\". Use \"registerLocaleData\" to load new data. See the \"I18n guide\" on angular.io to know more.`);\n  }\n}\n\nfunction extractTime(time: string): Time {\n  const [h, m] = time.split(':');\n  return { hours: +h, minutes: +m };\n}\n\nexport enum FormatWidth {\n  /**\n   * For `en-US`, 'M/d/yy, h:mm a'`\n   * (Example: `6/15/15, 9:03 AM`)\n   */\n  Short,\n  /**\n   * For `en-US`, `'MMM d, y, h:mm:ss a'`\n   * (Example: `Jun 15, 2015, 9:03:01 AM`)\n   */\n  Medium,\n  /**\n   * For `en-US`, `'MMMM d, y, h:mm:ss a z'`\n   * (Example: `June 15, 2015 at 9:03:01 AM GMT+1`)\n   */\n  Long,\n  /**\n   * For `en-US`, `'EEEE, MMMM d, y, h:mm:ss a zzzz'`\n   * (Example: `Monday, June 15, 2015 at 9:03:01 AM GMT+01:00`)\n   */\n  Full\n}\n\nexport enum FormStyle {\n  Format,\n  Standalone\n}\n\nexport function getLocaleId(locale: string): string {\n  return ɵfindLocaleData(locale)[ɵLocaleDataIndex.LocaleId];\n}\n\nexport function getLocaleDateFormat(locale: string, width: FormatWidth): string {\n  const data = ɵfindLocaleData(locale);\n  return getLastDefinedValue(data[ɵLocaleDataIndex.DateFormat], width);\n}\n\nexport function getLocaleTimeFormat(locale: string, width: FormatWidth): string {\n  const data = ɵfindLocaleData(locale);\n  return getLastDefinedValue(data[ɵLocaleDataIndex.TimeFormat], width);\n}\n\nexport function getLocaleDateTimeFormat(locale: string, width: FormatWidth): string {\n  const data = ɵfindLocaleData(locale);\n  const dateTimeFormatData = data[ɵLocaleDataIndex.DateTimeFormat] as string[];\n  return getLastDefinedValue(dateTimeFormatData, width);\n}\n\nexport function getLocaleMonthNames(\n  locale: string, formStyle: FormStyle, width: TranslationWidth): ReadonlyArray<string> {\n  const data = ɵfindLocaleData(locale);\n  const monthsData =\n    [data[ɵLocaleDataIndex.MonthsFormat], data[ɵLocaleDataIndex.MonthsStandalone]] as string[][][];\n  const months = getLastDefinedValue(monthsData, formStyle);\n  return getLastDefinedValue(months, width);\n}\n\nexport function getLocaleDayNames(\n  locale: string, formStyle: FormStyle, width: TranslationWidth): ReadonlyArray<string> {\n  const data = ɵfindLocaleData(locale);\n  const daysData =\n    [data[ɵLocaleDataIndex.DaysFormat], data[ɵLocaleDataIndex.DaysStandalone]] as string[][][];\n  const days = getLastDefinedValue(daysData, formStyle);\n  return getLastDefinedValue(days, width);\n}\n\nexport function getLocaleEraNames(\n  locale: string, width: TranslationWidth): Readonly<[string, string]> {\n  const data = ɵfindLocaleData(locale);\n  const erasData = data[ɵLocaleDataIndex.Eras] as [string, string][];\n  return getLastDefinedValue(erasData, width);\n}\n\nexport function getLocaleDayPeriods(\n  locale: string, formStyle: FormStyle, width: TranslationWidth): Readonly<[string, string]> {\n  const data = ɵfindLocaleData(locale);\n  const amPmData = [\n    data[ɵLocaleDataIndex.DayPeriodsFormat], data[ɵLocaleDataIndex.DayPeriodsStandalone]\n  ] as [string, string][][];\n  const amPm = getLastDefinedValue(amPmData, formStyle);\n  return getLastDefinedValue(amPm, width);\n}\n\nexport function getLocaleExtraDayPeriods(\n  locale: string, formStyle: FormStyle, width: TranslationWidth): string[] {\n  const data = ɵfindLocaleData(locale);\n  checkFullData(data);\n  const dayPeriodsData = [\n    data[ɵLocaleDataIndex.ExtraData][ɵExtraLocaleDataIndex.ExtraDayPeriodFormats],\n    data[ɵLocaleDataIndex.ExtraData][ɵExtraLocaleDataIndex.ExtraDayPeriodStandalone]\n  ] as string[][][];\n  const dayPeriods = getLastDefinedValue(dayPeriodsData, formStyle) || [];\n  return getLastDefinedValue(dayPeriods, width) || [];\n}\n\nexport function getLocaleExtraDayPeriodRules(locale: string): (Time | [Time, Time])[] {\n  const data = ɵfindLocaleData(locale);\n  checkFullData(data);\n  const rules = data[ɵLocaleDataIndex.ExtraData][ɵExtraLocaleDataIndex.ExtraDayPeriodsRules] || [];\n  return rules.map((rule: string | [string, string]) => {\n    if (typeof rule === 'string') {\n      return extractTime(rule);\n    }\n    return [extractTime(rule[0]), extractTime(rule[1])];\n  });\n}\n\nexport function getLocaleNumberSymbol(locale: string, symbol: NumberSymbol): string {\n  const data = ɵfindLocaleData(locale);\n  const res = data[ɵLocaleDataIndex.NumberSymbols][symbol];\n  if (typeof res === 'undefined') {\n    if (symbol === NumberSymbol.CurrencyDecimal) {\n      return data[ɵLocaleDataIndex.NumberSymbols][NumberSymbol.Decimal];\n    } else if (symbol === NumberSymbol.CurrencyGroup) {\n      return data[ɵLocaleDataIndex.NumberSymbols][NumberSymbol.Group];\n    }\n  }\n  return res;\n}\n\nexport enum TranslationWidth {\n  /** 1 character for `en-US`. For example: 'S' */\n  Narrow,\n  /** 3 characters for `en-US`. For example: 'Sun' */\n  Abbreviated,\n  /** Full length for `en-US`. For example: \"Sunday\" */\n  Wide,\n  /** 2 characters for `en-US`, For example: \"Su\" */\n  Short\n}\n\nexport enum NumberSymbol {\n  /**\n   * Decimal separator.\n   * For `en-US`, the dot character.\n   * Example : 2,345`.`67\n   */\n  Decimal,\n  /**\n   * Grouping separator, typically for thousands.\n   * For `en-US`, the comma character.\n   * Example: 2`,`345.67\n   */\n  Group,\n  /**\n   * List-item separator.\n   * Example: \"one, two, and three\"\n   */\n  List,\n  /**\n   * Sign for percentage (out of 100).\n   * Example: 23.4%\n   */\n  PercentSign,\n  /**\n   * Sign for positive numbers.\n   * Example: +23\n   */\n  PlusSign,\n  /**\n   * Sign for negative numbers.\n   * Example: -23\n   */\n  MinusSign,\n  /**\n   * Computer notation for exponential value (n times a power of 10).\n   * Example: 1.2E3\n   */\n  Exponential,\n  /**\n   * Human-readable format of exponential.\n   * Example: 1.2x103\n   */\n  SuperscriptingExponent,\n  /**\n   * Sign for permille (out of 1000).\n   * Example: 23.4‰\n   */\n  PerMille,\n  /**\n   * Infinity, can be used with plus and minus.\n   * Example: ∞, +∞, -∞\n   */\n  Infinity,\n  /**\n   * Not a number.\n   * Example: NaN\n   */\n  NaN,\n  /**\n   * Symbol used between time units.\n   * Example: 10:52\n   */\n  TimeSeparator,\n  /**\n   * Decimal separator for currency values (fallback to `Decimal`).\n   * Example: $2,345.67\n   */\n  CurrencyDecimal,\n  /**\n   * Group separator for currency values (fallback to `Group`).\n   * Example: $2,345.67\n   */\n  CurrencyGroup\n}\n","import { FormatWidth, FormStyle, getLocaleDateFormat, getLocaleDateTimeFormat, getLocaleDayNames, getLocaleDayPeriods, getLocaleEraNames, getLocaleExtraDayPeriodRules, getLocaleExtraDayPeriods, getLocaleId, getLocaleMonthNames, getLocaleNumberSymbol, getLocaleTimeFormat, NumberSymbol, TranslationWidth } from './locale_data_api';\n\nconst ISO8601_DATE_REGEX = /^(\\d{4})-?(\\d\\d)-?(\\d\\d)(?:T(\\d\\d)(?::?(\\d\\d)(?::?(\\d\\d)(?:\\.(\\d+))?)?)?(Z|([+-])(\\d\\d):?(\\d\\d))?)?$/;\nconst NAMED_FORMATS: { [localeId: string]: { [format: string]: string } } = {};\nconst DATE_FORMATS_SPLIT = /((?:[^GyYMLwWdEabBhHmsSzZO']+)|(?:'(?:[^']|'')*')|(?:G{1,5}|y{1,4}|Y{1,4}|M{1,5}|L{1,5}|w{1,2}|W{1}|d{1,2}|E{1,6}|a{1,5}|b{1,5}|B{1,5}|h{1,2}|H{1,2}|m{1,2}|s{1,2}|S{1,3}|z{1,4}|Z{1,5}|O{1,4}))([\\s\\S]*)/;\n\nenum TranslationType {\n  DayPeriods,\n  Days,\n  Months,\n  Eras\n}\n\nenum ZoneWidth {\n  Short,\n  ShortGMT,\n  Long,\n  Extended\n}\n\nenum DateType {\n  FullYear,\n  Month,\n  Date,\n  Hours,\n  Minutes,\n  Seconds,\n  FractionalSeconds,\n  Day\n}\n\ntype DateFormatter = (date: Date, locale: string, offset: number) => string;\n\n/**\n * Formats a date according to locale rules.\n *\n * @param value The date to format, as a Date, or a number (milliseconds since UTC epoch)\n * or an [ISO date-time string](https://www.w3.org/TR/NOTE-datetime).\n * @param format The date-time components to include. See `DatePipe` for details.\n * @param locale A locale code for the locale format rules to use.\n * @param timezone The time zone. A time zone offset from GMT (such as `'+0430'`),\n * or a standard UTC/GMT or continental US time zone abbreviation.\n * If not specified, uses host system settings.\n *\n * @returns The formatted date string.\n *\n */\nexport function formatDate(\n  value: string | number | Date, format: string, locale: string, timezone?: string): string {\n  let date = toDate(value);\n  const namedFormat = getNamedFormat(locale, format);\n  format = namedFormat || format;\n\n  let parts: string[] = [];\n  let match;\n  while (format) {\n    match = DATE_FORMATS_SPLIT.exec(format);\n    if (match) {\n      parts = parts.concat(match.slice(1));\n      const part = parts.pop();\n      if (!part) {\n        break;\n      }\n      format = part;\n    } else {\n      parts.push(format);\n      break;\n    }\n  }\n\n  let dateTimezoneOffset = date.getTimezoneOffset();\n  if (timezone) {\n    dateTimezoneOffset = timezoneToOffset(timezone, dateTimezoneOffset);\n    date = convertTimezoneToLocal(date, timezone, true);\n  }\n\n  let text = '';\n  parts.forEach(partValue => {\n    const dateFormatter = getDateFormatter(partValue);\n    text += dateFormatter ?\n      dateFormatter(date, locale, dateTimezoneOffset) :\n      value === '\\'\\'' ? '\\'' : partValue.replace(/(^'|'$)/g, '').replace(/''/g, '\\'');\n  });\n\n  return text;\n}\n\n/**\n * Функция проверяет корректность переданного объекта Date.\n * @param value\n */\nexport function isDate(value: any): value is Date {\n  return value instanceof Date && !isNaN(value.valueOf());\n}\n\nfunction toDate(value: string | number | Date): Date {\n  if (isDate(value)) {\n    return value;\n  }\n\n  if (typeof value === 'number' && !isNaN(value)) {\n    return new Date(value);\n  }\n\n  if (typeof value === 'string') {\n    value = value.trim();\n\n    if (/^(\\d{4}(-\\d{1,2}(-\\d{1,2})?)?)$/.test(value)) {\n      /* For ISO Strings without time the day, month and year must be extracted from the ISO String\n      before Date creation to avoid time offset and errors in the new Date.\n      If we only replace '-' with ',' in the ISO String (\"2015,01,01\"), and try to create a new\n      date, some browsers (e.g. IE 9) will throw an invalid Date error.\n      If we leave the '-' (\"2015-01-01\") and try to create a new Date(\"2015-01-01\") the timeoffset\n      is applied.\n      Note: ISO months are 0 for January, 1 for February, ... */\n      const [y, m = 1, d = 1] = value.split('-').map((val: string) => +val);\n      return new Date(y, m - 1, d);\n    }\n\n    const parsedNb = parseFloat(value);\n\n    // any string that only contains numbers, like \"1234\" but not like \"1234hello\"\n    if (!isNaN(value as any - parsedNb)) {\n      return new Date(parsedNb);\n    }\n\n    const match: RegExpMatchArray | null = value.match(ISO8601_DATE_REGEX);\n    if (match) {\n      return isoStringToDate(match);\n    }\n  }\n\n  const date = new Date(value as any);\n  if (!isDate(date)) {\n    throw new Error(`Unable to convert \"${value}\" into a date`);\n  }\n  return date;\n}\n\nfunction getNamedFormat(locale: string, format: string): string {\n  const localeId = getLocaleId(locale);\n  NAMED_FORMATS[localeId] = NAMED_FORMATS[localeId] || {};\n\n  if (NAMED_FORMATS[localeId][format]) {\n    return NAMED_FORMATS[localeId][format];\n  }\n\n  let formatValue = '';\n  switch (format) {\n    case 'shortDate':\n      formatValue = getLocaleDateFormat(locale, FormatWidth.Short);\n      break;\n    case 'mediumDate':\n      formatValue = getLocaleDateFormat(locale, FormatWidth.Medium);\n      break;\n    case 'longDate':\n      formatValue = getLocaleDateFormat(locale, FormatWidth.Long);\n      break;\n    case 'fullDate':\n      formatValue = getLocaleDateFormat(locale, FormatWidth.Full);\n      break;\n    case 'shortTime':\n      formatValue = getLocaleTimeFormat(locale, FormatWidth.Short);\n      break;\n    case 'mediumTime':\n      formatValue = getLocaleTimeFormat(locale, FormatWidth.Medium);\n      break;\n    case 'longTime':\n      formatValue = getLocaleTimeFormat(locale, FormatWidth.Long);\n      break;\n    case 'fullTime':\n      formatValue = getLocaleTimeFormat(locale, FormatWidth.Full);\n      break;\n    case 'short':\n      const shortTime = getNamedFormat(locale, 'shortTime');\n      const shortDate = getNamedFormat(locale, 'shortDate');\n      formatValue = formatDateTime(\n        getLocaleDateTimeFormat(locale, FormatWidth.Short), [shortTime, shortDate]);\n      break;\n    case 'medium':\n      const mediumTime = getNamedFormat(locale, 'mediumTime');\n      const mediumDate = getNamedFormat(locale, 'mediumDate');\n      formatValue = formatDateTime(\n        getLocaleDateTimeFormat(locale, FormatWidth.Medium), [mediumTime, mediumDate]);\n      break;\n    case 'long':\n      const longTime = getNamedFormat(locale, 'longTime');\n      const longDate = getNamedFormat(locale, 'longDate');\n      formatValue =\n        formatDateTime(getLocaleDateTimeFormat(locale, FormatWidth.Long), [longTime, longDate]);\n      break;\n    case 'full':\n      const fullTime = getNamedFormat(locale, 'fullTime');\n      const fullDate = getNamedFormat(locale, 'fullDate');\n      formatValue =\n        formatDateTime(getLocaleDateTimeFormat(locale, FormatWidth.Full), [fullTime, fullDate]);\n      break;\n  }\n  if (formatValue) {\n    NAMED_FORMATS[localeId][format] = formatValue;\n  }\n  return formatValue;\n}\n\nconst DATE_FORMATS: { [format: string]: DateFormatter } = {};\n\n\nfunction getDateFormatter(format: string): DateFormatter | null {\n  if (DATE_FORMATS[format]) {\n    return DATE_FORMATS[format];\n  }\n  let formatter;\n  switch (format) {\n    // Era name (AD/BC)\n    case 'G':\n    case 'GG':\n    case 'GGG':\n      formatter = dateStrGetter(TranslationType.Eras, TranslationWidth.Abbreviated);\n      break;\n    case 'GGGG':\n      formatter = dateStrGetter(TranslationType.Eras, TranslationWidth.Wide);\n      break;\n    case 'GGGGG':\n      formatter = dateStrGetter(TranslationType.Eras, TranslationWidth.Narrow);\n      break;\n\n    // 1 digit representation of the year, e.g. (AD 1 => 1, AD 199 => 199)\n    case 'y':\n      formatter = dateGetter(DateType.FullYear, 1, 0, false, true);\n      break;\n    // 2 digit representation of the year, padded (00-99). (e.g. AD 2001 => 01, AD 2010 => 10)\n    case 'yy':\n      formatter = dateGetter(DateType.FullYear, 2, 0, true, true);\n      break;\n    // 3 digit representation of the year, padded (000-999). (e.g. AD 2001 => 01, AD 2010 => 10)\n    case 'yyy':\n      formatter = dateGetter(DateType.FullYear, 3, 0, false, true);\n      break;\n    // 4 digit representation of the year (e.g. AD 1 => 0001, AD 2010 => 2010)\n    case 'yyyy':\n      formatter = dateGetter(DateType.FullYear, 4, 0, false, true);\n      break;\n\n    // 1 digit representation of the week-numbering year, e.g. (AD 1 => 1, AD 199 => 199)\n    case 'Y':\n      formatter = weekNumberingYearGetter(1);\n      break;\n    // 2 digit representation of the week-numbering year, padded (00-99). (e.g. AD 2001 => 01, AD\n    // 2010 => 10)\n    case 'YY':\n      formatter = weekNumberingYearGetter(2, true);\n      break;\n    // 3 digit representation of the week-numbering year, padded (000-999). (e.g. AD 1 => 001, AD\n    // 2010 => 2010)\n    case 'YYY':\n      formatter = weekNumberingYearGetter(3);\n      break;\n    // 4 digit representation of the week-numbering year (e.g. AD 1 => 0001, AD 2010 => 2010)\n    case 'YYYY':\n      formatter = weekNumberingYearGetter(4);\n      break;\n\n    // Month of the year (1-12), numeric\n    case 'M':\n    case 'L':\n      formatter = dateGetter(DateType.Month, 1, 1);\n      break;\n    case 'MM':\n    case 'LL':\n      formatter = dateGetter(DateType.Month, 2, 1);\n      break;\n\n    // Month of the year (January, ...), string, format\n    case 'MMM':\n      formatter = dateStrGetter(TranslationType.Months, TranslationWidth.Abbreviated);\n      break;\n    case 'MMMM':\n      formatter = dateStrGetter(TranslationType.Months, TranslationWidth.Wide);\n      break;\n    case 'MMMMM':\n      formatter = dateStrGetter(TranslationType.Months, TranslationWidth.Narrow);\n      break;\n\n    // Month of the year (January, ...), string, standalone\n    case 'LLL':\n      formatter =\n        dateStrGetter(TranslationType.Months, TranslationWidth.Abbreviated, FormStyle.Standalone);\n      break;\n    case 'LLLL':\n      formatter =\n        dateStrGetter(TranslationType.Months, TranslationWidth.Wide, FormStyle.Standalone);\n      break;\n    case 'LLLLL':\n      formatter =\n        dateStrGetter(TranslationType.Months, TranslationWidth.Narrow, FormStyle.Standalone);\n      break;\n\n    // Week of the year (1, ... 52)\n    case 'w':\n      formatter = weekGetter(1);\n      break;\n    case 'ww':\n      formatter = weekGetter(2);\n      break;\n\n    // Week of the month (1, ...)\n    case 'W':\n      formatter = weekGetter(1, true);\n      break;\n\n    // Day of the month (1-31)\n    case 'd':\n      formatter = dateGetter(DateType.Date, 1);\n      break;\n    case 'dd':\n      formatter = dateGetter(DateType.Date, 2);\n      break;\n\n    // Day of the Week\n    case 'E':\n    case 'EE':\n    case 'EEE':\n      formatter = dateStrGetter(TranslationType.Days, TranslationWidth.Abbreviated);\n      break;\n    case 'EEEE':\n      formatter = dateStrGetter(TranslationType.Days, TranslationWidth.Wide);\n      break;\n    case 'EEEEE':\n      formatter = dateStrGetter(TranslationType.Days, TranslationWidth.Narrow);\n      break;\n    case 'EEEEEE':\n      formatter = dateStrGetter(TranslationType.Days, TranslationWidth.Short);\n      break;\n\n    // Generic period of the day (am-pm)\n    case 'a':\n    case 'aa':\n    case 'aaa':\n      formatter = dateStrGetter(TranslationType.DayPeriods, TranslationWidth.Abbreviated);\n      break;\n    case 'aaaa':\n      formatter = dateStrGetter(TranslationType.DayPeriods, TranslationWidth.Wide);\n      break;\n    case 'aaaaa':\n      formatter = dateStrGetter(TranslationType.DayPeriods, TranslationWidth.Narrow);\n      break;\n\n    // Extended period of the day (midnight, at night, ...), standalone\n    case 'b':\n    case 'bb':\n    case 'bbb':\n      formatter = dateStrGetter(\n        TranslationType.DayPeriods, TranslationWidth.Abbreviated, FormStyle.Standalone, true);\n      break;\n    case 'bbbb':\n      formatter = dateStrGetter(\n        TranslationType.DayPeriods, TranslationWidth.Wide, FormStyle.Standalone, true);\n      break;\n    case 'bbbbb':\n      formatter = dateStrGetter(\n        TranslationType.DayPeriods, TranslationWidth.Narrow, FormStyle.Standalone, true);\n      break;\n\n    // Extended period of the day (midnight, night, ...), standalone\n    case 'B':\n    case 'BB':\n    case 'BBB':\n      formatter = dateStrGetter(\n        TranslationType.DayPeriods, TranslationWidth.Abbreviated, FormStyle.Format, true);\n      break;\n    case 'BBBB':\n      formatter =\n        dateStrGetter(TranslationType.DayPeriods, TranslationWidth.Wide, FormStyle.Format, true);\n      break;\n    case 'BBBBB':\n      formatter = dateStrGetter(\n        TranslationType.DayPeriods, TranslationWidth.Narrow, FormStyle.Format, true);\n      break;\n\n    // Hour in AM/PM, (1-12)\n    case 'h':\n      formatter = dateGetter(DateType.Hours, 1, -12);\n      break;\n    case 'hh':\n      formatter = dateGetter(DateType.Hours, 2, -12);\n      break;\n\n    // Hour of the day (0-23)\n    case 'H':\n      formatter = dateGetter(DateType.Hours, 1);\n      break;\n    // Hour in day, padded (00-23)\n    case 'HH':\n      formatter = dateGetter(DateType.Hours, 2);\n      break;\n\n    // Minute of the hour (0-59)\n    case 'm':\n      formatter = dateGetter(DateType.Minutes, 1);\n      break;\n    case 'mm':\n      formatter = dateGetter(DateType.Minutes, 2);\n      break;\n\n    // Second of the minute (0-59)\n    case 's':\n      formatter = dateGetter(DateType.Seconds, 1);\n      break;\n    case 'ss':\n      formatter = dateGetter(DateType.Seconds, 2);\n      break;\n\n    // Fractional second\n    case 'S':\n      formatter = dateGetter(DateType.FractionalSeconds, 1);\n      break;\n    case 'SS':\n      formatter = dateGetter(DateType.FractionalSeconds, 2);\n      break;\n    case 'SSS':\n      formatter = dateGetter(DateType.FractionalSeconds, 3);\n      break;\n\n\n    // Timezone ISO8601 short format (-0430)\n    case 'Z':\n    case 'ZZ':\n    case 'ZZZ':\n      formatter = timeZoneGetter(ZoneWidth.Short);\n      break;\n    // Timezone ISO8601 extended format (-04:30)\n    case 'ZZZZZ':\n      formatter = timeZoneGetter(ZoneWidth.Extended);\n      break;\n\n    // Timezone GMT short format (GMT+4)\n    case 'O':\n    case 'OO':\n    case 'OOO':\n    // Should be location, but fallback to format O instead because we don't have the data yet\n    case 'z':\n    case 'zz':\n    case 'zzz':\n      formatter = timeZoneGetter(ZoneWidth.ShortGMT);\n      break;\n    // Timezone GMT long format (GMT+0430)\n    case 'OOOO':\n    case 'ZZZZ':\n    // Should be location, but fallback to format O instead because we don't have the data yet\n    case 'zzzz':\n      formatter = timeZoneGetter(ZoneWidth.Long);\n      break;\n    default:\n      return null;\n  }\n  DATE_FORMATS[format] = formatter;\n  return formatter;\n}\n\nfunction dateStrGetter(\n  name: TranslationType, width: TranslationWidth, form: FormStyle = FormStyle.Format,\n  extended = false): DateFormatter {\n  return function(date: Date, locale: string): string {\n    return getDateTranslation(date, locale, name, width, form, extended);\n  };\n}\n\nfunction dateGetter(\n  name: DateType, size: number, offset: number = 0, trim = false,\n  negWrap = false): DateFormatter {\n  return function(date: Date, locale: string): string {\n    let part = getDatePart(name, date);\n    if (offset > 0 || part > -offset) {\n      part += offset;\n    }\n\n    if (name === DateType.Hours) {\n      if (part === 0 && offset === -12) {\n        part = 12;\n      }\n    } else if (name === DateType.FractionalSeconds) {\n      return formatFractionalSeconds(part, size);\n    }\n\n    const localeMinus = getLocaleNumberSymbol(locale, NumberSymbol.MinusSign);\n    return padNumber(part, size, localeMinus, trim, negWrap);\n  };\n}\n\nfunction getDateTranslation(\n  date: Date, locale: string, name: TranslationType, width: TranslationWidth, form: FormStyle,\n  extended: boolean): string {\n  switch (name) {\n    case TranslationType.Months:\n      return getLocaleMonthNames(locale, form, width)[date.getMonth()];\n    case TranslationType.Days:\n      return getLocaleDayNames(locale, form, width)[date.getDay()];\n    case TranslationType.DayPeriods:\n      const currentHours = date.getHours();\n      const currentMinutes = date.getMinutes();\n      if (extended) {\n        const rules = getLocaleExtraDayPeriodRules(locale);\n        const dayPeriods = getLocaleExtraDayPeriods(locale, form, width);\n        const index = rules.findIndex(rule => {\n          if (Array.isArray(rule)) {\n            // morning, afternoon, evening, night\n            const [from, to] = rule;\n            const afterFrom = currentHours >= from.hours && currentMinutes >= from.minutes;\n            const beforeTo =\n              (currentHours < to.hours ||\n                (currentHours === to.hours && currentMinutes < to.minutes));\n            // We must account for normal rules that span a period during the day (e.g. 6am-9am)\n            // where `from` is less (earlier) than `to`. But also rules that span midnight (e.g.\n            // 10pm - 5am) where `from` is greater (later!) than `to`.\n            //\n            // In the first case the current time must be BOTH after `from` AND before `to`\n            // (e.g. 8am is after 6am AND before 10am).\n            //\n            // In the second case the current time must be EITHER after `from` OR before `to`\n            // (e.g. 4am is before 5am but not after 10pm; and 11pm is not before 5am but it is\n            // after 10pm).\n            if (from.hours < to.hours) {\n              if (afterFrom && beforeTo) {\n                return true;\n              }\n            } else if (afterFrom || beforeTo) {\n              return true;\n            }\n          } else {  // noon or midnight\n            if (rule.hours === currentHours && rule.minutes === currentMinutes) {\n              return true;\n            }\n          }\n          return false;\n        });\n        if (index !== -1) {\n          return dayPeriods[index];\n        }\n      }\n      // if no rules for the day periods, we use am/pm by default\n      return getLocaleDayPeriods(locale, form, width as TranslationWidth)[currentHours < 12 ? 0 : 1];\n    case TranslationType.Eras:\n      return getLocaleEraNames(locale, width as TranslationWidth)[date.getFullYear() <= 0 ? 0 : 1];\n    default:\n      // This default case is not needed by TypeScript compiler, as the switch is exhaustive.\n      // However Closure Compiler does not understand that and reports an error in typed mode.\n      // The `throw new Error` below works around the problem, and the unexpected: never variable\n      // makes sure tsc still checks this code is unreachable.\n      const unexpected: never = name;\n      throw new Error(`unexpected translation type ${unexpected}`);\n  }\n}\n\nfunction timezoneToOffset(timezone: string, fallback: number): number {\n  // Support: IE 11 only, Edge 13-15+\n  // IE/Edge do not \"understand\" colon (`:`) in timezone\n  timezone = timezone.replace(/:/g, '');\n  const requestedTimezoneOffset = Date.parse('Jan 01, 1970 00:00:00 ' + timezone) / 60000;\n  return isNaN(requestedTimezoneOffset) ? fallback : requestedTimezoneOffset;\n}\n\nfunction addDateMinutes(date: Date, minutes: number): Date {\n  date = new Date(date.getTime());\n  date.setMinutes(date.getMinutes() + minutes);\n  return date;\n}\n\nfunction convertTimezoneToLocal(date: Date, timezone: string, reverse: boolean): Date {\n  const reverseValue = reverse ? -1 : 1;\n  const dateTimezoneOffset = date.getTimezoneOffset();\n  const timezoneOffset = timezoneToOffset(timezone, dateTimezoneOffset);\n  return addDateMinutes(date, reverseValue * (timezoneOffset - dateTimezoneOffset));\n}\n\nfunction isoStringToDate(match: RegExpMatchArray): Date {\n  const date = new Date(0);\n  let tzHour = 0;\n  let tzMin = 0;\n\n  // match[8] means that the string contains \"Z\" (UTC) or a timezone like \"+01:00\" or \"+0100\"\n  const dateSetter = match[8] ? date.setUTCFullYear : date.setFullYear;\n  const timeSetter = match[8] ? date.setUTCHours : date.setHours;\n\n  // if there is a timezone defined like \"+01:00\" or \"+0100\"\n  if (match[9]) {\n    tzHour = Number(match[9] + match[10]);\n    tzMin = Number(match[9] + match[11]);\n  }\n  dateSetter.call(date, Number(match[1]), Number(match[2]) - 1, Number(match[3]));\n  const h = Number(match[4] || 0) - tzHour;\n  const m = Number(match[5] || 0) - tzMin;\n  const s = Number(match[6] || 0);\n  // The ECMAScript specification (https://www.ecma-international.org/ecma-262/5.1/#sec-15.9.1.11)\n  // defines that `DateTime` milliseconds should always be rounded down, so that `999.9ms`\n  // becomes `999ms`.\n  const ms = Math.floor(parseFloat('0.' + (match[7] || 0)) * 1000);\n  timeSetter.call(date, h, m, s, ms);\n  return date;\n}\n\nfunction formatDateTime(str: string, optValues: string[]): string {\n  if (optValues) {\n    str = str.replace(/\\{([^}]+)}/g, function(match: string, key): string {\n      return (optValues != null && key in optValues) ? optValues[key] : match;\n    });\n  }\n  return str;\n}\n\n\n\nconst JANUARY = 0;\nconst THURSDAY = 4;\n\nfunction weekNumberingYearGetter(size: number, trim = false): DateFormatter {\n  return function(date: Date, locale: string): string {\n    const thisThurs = getThursdayThisWeek(date);\n    const weekNumberingYear = thisThurs.getFullYear();\n    return padNumber(\n      weekNumberingYear, size, getLocaleNumberSymbol(locale, NumberSymbol.MinusSign), trim);\n  };\n}\n\nfunction weekGetter(size: number, monthBased = false): DateFormatter {\n  return function(date: Date, locale: string): string {\n    let result;\n    if (monthBased) {\n      const nbDaysBefore1stDayOfMonth =\n        new Date(date.getFullYear(), date.getMonth(), 1).getDay() - 1;\n      const today = date.getDate();\n      result = 1 + Math.floor((today + nbDaysBefore1stDayOfMonth) / 7);\n    } else {\n      const thisThurs = getThursdayThisWeek(date);\n      // Some days of a year are part of next year according to ISO 8601.\n      // Compute the firstThurs from the year of this week's Thursday\n      const firstThurs = getFirstThursdayOfYear(thisThurs.getFullYear());\n      const diff = thisThurs.getTime() - firstThurs.getTime();\n      result = 1 + Math.round(diff / 6.048e8);  // 6.048e8 ms per week\n    }\n\n    return padNumber(result, size, getLocaleNumberSymbol(locale, NumberSymbol.MinusSign));\n  };\n}\n\nfunction timeZoneGetter(width: ZoneWidth): DateFormatter {\n  return function(date: Date, locale: string, offset: number): string {\n    const zone = -1 * offset;\n    const minusSign = getLocaleNumberSymbol(locale, NumberSymbol.MinusSign);\n    const hours = zone > 0 ? Math.floor(zone / 60) : Math.ceil(zone / 60);\n    switch (width) {\n      case ZoneWidth.Short:\n        return ((zone >= 0) ? '+' : '') + padNumber(hours, 2, minusSign) +\n          padNumber(Math.abs(zone % 60), 2, minusSign);\n      case ZoneWidth.ShortGMT:\n        return 'GMT' + ((zone >= 0) ? '+' : '') + padNumber(hours, 1, minusSign);\n      case ZoneWidth.Long:\n        return 'GMT' + ((zone >= 0) ? '+' : '') + padNumber(hours, 2, minusSign) + ':' +\n          padNumber(Math.abs(zone % 60), 2, minusSign);\n      case ZoneWidth.Extended:\n        if (offset === 0) {\n          return 'Z';\n        } else {\n          return ((zone >= 0) ? '+' : '') + padNumber(hours, 2, minusSign) + ':' +\n            padNumber(Math.abs(zone % 60), 2, minusSign);\n        }\n      default:\n        throw new Error(`Unknown zone width \"${width}\"`);\n    }\n  };\n}\n\nfunction padNumber(\n  num: number, digits: number, minusSign = '-', trim?: boolean, negWrap?: boolean): string {\n  let neg = '';\n  if (num < 0 || (negWrap && num <= 0)) {\n    if (negWrap) {\n      num = -num + 1;\n    } else {\n      num = -num;\n      neg = minusSign;\n    }\n  }\n  let strNum = String(num);\n  while (strNum.length < digits) {\n    strNum = '0' + strNum;\n  }\n  if (trim) {\n    strNum = strNum.substr(strNum.length - digits);\n  }\n  return neg + strNum;\n}\n\nfunction getDatePart(part: DateType, date: Date): number {\n  switch (part) {\n    case DateType.FullYear:\n      return date.getFullYear();\n    case DateType.Month:\n      return date.getMonth();\n    case DateType.Date:\n      return date.getDate();\n    case DateType.Hours:\n      return date.getHours();\n    case DateType.Minutes:\n      return date.getMinutes();\n    case DateType.Seconds:\n      return date.getSeconds();\n    case DateType.FractionalSeconds:\n      return date.getMilliseconds();\n    case DateType.Day:\n      return date.getDay();\n    default:\n      throw new Error(`Unknown DateType value \"${part}\".`);\n  }\n}\n\nfunction formatFractionalSeconds(milliseconds: number, digits: number): string {\n  const strMs = padNumber(milliseconds, 3);\n  return strMs.substr(0, digits);\n}\n\n\n\n\nfunction getFirstThursdayOfYear(year: number): Date {\n  const firstDayOfYear = (new Date(year, JANUARY, 1)).getDay();\n  return new Date(\n    year, 0, 1 + ((firstDayOfYear <= THURSDAY) ? THURSDAY : THURSDAY + 7) - firstDayOfYear);\n}\n\nfunction getThursdayThisWeek(datetime: Date): Date {\n  return new Date(\n    datetime.getFullYear(), datetime.getMonth(),\n    datetime.getDate() + (THURSDAY - datetime.getDay()));\n}\n","// Kept as an exported alias for backward compatibility with existing type imports.\nexport type TimeZoneString = string;\n\n/**\n *Класс, содержащий статический метод, определяющий смещение часового пояса относительно GMT (+00:00) по переданной строке с названием таймзоны.\n *Создавать новый объект этого класса для использования метода не требуется.\n */\nexport class TimeZoneIdentifier {\n\n/**\n * Converts a time zone offset string in the format \"+hh:mm\" or \"-hh:mm\" to seconds.\n * @param offset The time zone offset string (e.g., \"+03:00\" or \"-05:30\").\n * @returns The time zone offset in seconds. Positive for offsets ahead of GMT, negative for offsets behind GMT.\n *\n * Example:\n * const offsetInSeconds = TimeZoneIdentifier.getTimeZoneOffsetInSeconds('+03:00');\n * console.log(offsetInSeconds); // 10800 (3 hours ahead of GMT)\n */\n  static getTimeZoneOffsetInSeconds(zone?: TimeZoneString): number {\n    const offset = TimeZoneIdentifier.getTimeZoneGMTOffset(zone)\n    const [hoursStr, minutesStr] = offset.substring(1).split(':'); // Remove the '+' or '-' sign\n    const hours = parseInt(hoursStr, 10);\n    const minutes = parseInt(minutesStr, 10);\n    const totalSeconds = (hours * 60 + minutes) * 60;\n    return offset.startsWith('-') ? -totalSeconds : totalSeconds;\n  }\n\n  /**\n   * @deprecated please use `getTimeZoneGMTOffset` or `getTimeZoneOffsetInSeconds`\n   */\n  static getTimeZoneGMTOffsetfromNameZone(zone?: TimeZoneString): string {\n    return TimeZoneIdentifier.getTimeZoneGMTOffset(zone)\n  }\n\n  /**\n *The method determines the time zone offset relative to GMT (+00:00) using the transmitted string with the name of the time zone.\n *@param zone - A string with the name of the time zone (for example 'America/New_York').\n *@return  - A string representing the offset relative to GMT.\n *\n *Example :\n *const offset = TimeZoneIdentifier.getTimeZoneGMTOffset('Europe/Moscow');\n *console.log(offset) /// \"+03:00\"\n *\n * */\n  static getTimeZoneGMTOffset(zone?: TimeZoneString): string {\n    if (!zone) {\n      if (typeof process !== 'undefined' && process.env?.TZ) {\n        zone = process.env.TZ;\n      } else {\n        zone = Intl.DateTimeFormat().resolvedOptions().timeZone;\n      }\n    }\n\n    // ✅ Проверка если zone уже в формате смещения +HH:MM или -HH:MM\n    if (/^[+-]\\d{2}:\\d{2}$/.test(zone)) {\n      return zone;\n    }\n\n    switch (zone) {\n      case 'Etc/GMT+12': return '-12:00';\n      case 'Etc/GMT+11': return '-11:00';\n      case 'Pacific/Midway': return '-11:00';\n      case 'Pacific/Niue': return '-11:00';\n      case 'Pacific/Pago_Pago': return '-11:00';\n      case 'America/Adak': return '-10:00';\n      case 'Etc/GMT+10': return '-10:00';\n      case 'Pacific/Honolulu': return '-10:00';\n      case 'Pacific/Rarotonga': return '-10:00';\n      case 'Pacific/Tahiti': return '-10:00';\n      case 'Pacific/Marquesas': return '-09:30';\n      case 'America/Anchorage': return '-09:00';\n      case 'America/Juneau': return '-09:00';\n      case 'America/Metlakatla': return '-09:00';\n      case 'America/Nome': return '-09:00';\n      case 'America/Sitka': return '-09:00';\n      case 'America/Yakutat': return '-09:00';\n      case 'Etc/GMT+9': return '-09:00';\n      case 'Pacific/Gambier': return '-09:00';\n      case 'America/Los_Angeles': return '-08:00';\n      case 'America/Tijuana': return '-08:00';\n      case 'America/Vancouver': return '-08:00';\n      case 'Etc/GMT+8': return '-08:00';\n      case 'Pacific/Pitcairn': return '-08:00';\n      case 'America/Boise': return '-07:00';\n      case 'America/Cambridge_Bay': return '-07:00';\n      case 'America/Chihuahua': return '-07:00';\n      case 'America/Creston': return '-07:00';\n      case 'America/Dawson': return '-07:00';\n      case 'America/Dawson_Creek': return '-07:00';\n      case 'America/Denver': return '-07:00';\n      case 'America/Edmonton': return '-07:00';\n      case 'America/Fort_Nelson': return '-07:00';\n      case 'America/Hermosillo': return '-07:00';\n      case 'America/Inuvik': return '-07:00';\n      case 'America/Mazatlan': return '-07:00';\n      case 'America/Ojinaga': return '-07:00';\n      case 'America/Phoenix': return '-07:00';\n      case 'America/Whitehorse': return '-07:00';\n      case 'America/Yellowknife': return '-07:00';\n      case 'Etc/GMT+7': return '-07:00';\n      case 'America/Bahia_Banderas': return '-06:00';\n      case 'America/Belize': return '-06:00';\n      case 'America/Chicago': return '-06:00';\n      case 'America/Costa_Rica': return '-06:00';\n      case 'America/El_Salvador': return '-06:00';\n      case 'America/Guatemala': return '-06:00';\n      case 'America/Indiana/Knox': return '-06:00';\n      case 'America/Indiana/Tell_City': return '-06:00';\n      case 'America/Managua': return '-06:00';\n      case 'America/Matamoros': return '-06:00';\n      case 'America/Menominee': return '-06:00';\n      case 'America/Merida': return '-06:00';\n      case 'America/Mexico_City': return '-06:00';\n      case 'America/Monterrey': return '-06:00';\n      case 'America/North_Dakota/Beulah': return '-06:00';\n      case 'America/North_Dakota/Center': return '-06:00';\n      case 'America/North_Dakota/New_Salem': return '-06:00';\n      case 'America/Rainy_River': return '-06:00';\n      case 'America/Rankin_Inlet': return '-06:00';\n      case 'America/Regina': return '-06:00';\n      case 'America/Resolute': return '-06:00';\n      case 'America/Swift_Current': return '-06:00';\n      case 'America/Tegucigalpa': return '-06:00';\n      case 'America/Winnipeg': return '-06:00';\n      case 'Etc/GMT+6': return '-06:00';\n      case 'Pacific/Easter': return '-06:00';\n      case 'Pacific/Galapagos': return '-06:00';\n      case 'America/Atikokan': return '-05:00';\n      case 'America/Bogota': return '-05:00';\n      case 'America/Cancun': return '-05:00';\n      case 'America/Cayman': return '-05:00';\n      case 'America/Detroit': return '-05:00';\n      case 'America/Eirunepe': return '-05:00';\n      case 'America/Grand_Turk': return '-05:00';\n      case 'America/Guayaquil': return '-05:00';\n      case 'America/Havana': return '-05:00';\n      case 'America/Indiana/Indianapolis': return '-05:00';\n      case 'America/Indiana/Marengo': return '-05:00';\n      case 'America/Indiana/Petersburg': return '-05:00';\n      case 'America/Indiana/Vevay': return '-05:00';\n      case 'America/Indiana/Vincennes': return '-05:00';\n      case 'America/Indiana/Winamac': return '-05:00';\n      case 'America/Iqaluit': return '-05:00';\n      case 'America/Jamaica': return '-05:00';\n      case 'America/Kentucky/Louisville': return '-05:00';\n      case 'America/Kentucky/Monticello': return '-05:00';\n      case 'America/Lima': return '-05:00';\n      case 'America/Nassau': return '-05:00';\n      case 'America/New_York': return '-05:00';\n      case 'America/Nipigon': return '-05:00';\n      case 'America/Panama': return '-05:00';\n      case 'America/Pangnirtung': return '-05:00';\n      case 'America/Port-au-Prince': return '-05:00';\n      case 'America/Rio_Branco': return '-05:00';\n      case 'America/Thunder_Bay': return '-05:00';\n      case 'America/Toronto': return '-05:00';\n      case 'Etc/GMT+5': return '-05:00';\n      case 'America/Anguilla': return '-04:00';\n      case 'America/Antigua': return '-04:00';\n      case 'America/Aruba': return '-04:00';\n      case 'America/Asuncion': return '-04:00';\n      case 'America/Barbados': return '-04:00';\n      case 'America/Blanc-Sablon': return '-04:00';\n      case 'America/Boa_Vista': return '-04:00';\n      case 'America/Campo_Grande': return '-04:00';\n      case 'America/Caracas': return '-04:00';\n      case 'America/Cuiaba': return '-04:00';\n      case 'America/Curacao': return '-04:00';\n      case 'America/Dominica': return '-04:00';\n      case 'America/Glace_Bay': return '-04:00';\n      case 'America/Goose_Bay': return '-04:00';\n      case 'America/Grenada': return '-04:00';\n      case 'America/Guadeloupe': return '-04:00';\n      case 'America/Guyana': return '-04:00';\n      case 'America/Halifax': return '-04:00';\n      case 'America/Kralendijk': return '-04:00';\n      case 'America/La_Paz': return '-04:00';\n      case 'America/Lower_Princes': return '-04:00';\n      case 'America/Manaus': return '-04:00';\n      case 'America/Marigot': return '-04:00';\n      case 'America/Martinique': return '-04:00';\n      case 'America/Moncton': return '-04:00';\n      case 'America/Montserrat': return '-04:00';\n      case 'America/Port_of_Spain': return '-04:00';\n      case 'America/Porto_Velho': return '-04:00';\n      case 'America/Puerto_Rico': return '-04:00';\n      case 'America/Santiago': return '-04:00';\n      case 'America/Santo_Domingo': return '-04:00';\n      case 'America/St_Barthelemy': return '-04:00';\n      case 'America/St_Kitts': return '-04:00';\n      case 'America/St_Lucia': return '-04:00';\n      case 'America/St_Thomas': return '-04:00';\n      case 'America/St_Vincent': return '-04:00';\n      case 'America/Thule': return '-04:00';\n      case 'America/Tortola': return '-04:00';\n      case 'Atlantic/Bermuda': return '-04:00';\n      case 'Etc/GMT+4': return '-04:00';\n      case 'America/St_Johns': return '-03:30';\n      case 'America/Araguaina': return '-03:00';\n      case 'America/Argentina/Buenos_Aires': return '-03:00';\n      case 'America/Argentina/Catamarca': return '-03:00';\n      case 'America/Argentina/Cordoba': return '-03:00';\n      case 'America/Argentina/Jujuy': return '-03:00';\n      case 'America/Argentina/La_Rioja': return '-03:00';\n      case 'America/Argentina/Mendoza': return '-03:00';\n      case 'America/Argentina/Rio_Gallegos': return '-03:00';\n      case 'America/Argentina/Salta': return '-03:00';\n      case 'America/Argentina/San_Juan': return '-03:00';\n      case 'America/Argentina/San_Luis': return '-03:00';\n      case 'America/Argentina/Tucuman': return '-03:00';\n      case 'America/Argentina/Ushuaia': return '-03:00';\n      case 'America/Bahia': return '-03:00';\n      case 'America/Belem': return '-03:00';\n      case 'America/Cayenne': return '-03:00';\n      case 'America/Fortaleza': return '-03:00';\n      case 'America/Maceio': return '-03:00';\n      case 'America/Miquelon': return '-03:00';\n      case 'America/Montevideo': return '-03:00';\n      case 'America/Nuuk': return '-03:00';\n      case 'America/Paramaribo': return '-03:00';\n      case 'America/Punta_Arenas': return '-03:00';\n      case 'America/Recife': return '-03:00';\n      case 'America/Santarem': return '-03:00';\n      case 'America/Sao_Paulo': return '-03:00';\n      case 'Antarctica/Palmer': return '-03:00';\n      case 'Antarctica/Rothera': return '-03:00';\n      case 'Atlantic/Stanley': return '-03:00';\n      case 'Etc/GMT+3': return '-03:00';\n      case 'America/Noronha': return '-02:00';\n      case 'Atlantic/South_Georgia': return '-02:00';\n      case 'Etc/GMT+2': return '-02:00';\n      case 'America/Scoresbysund': return '-01:00';\n      case 'Atlantic/Azores': return '-01:00';\n      case 'Atlantic/Cape_Verde': return '-01:00';\n      case 'Etc/GMT+1': return '-01:00';\n      case 'Africa/Abidjan': return '+00:00';\n      case 'Africa/Accra': return '+00:00';\n      case 'Africa/Bamako': return '+00:00';\n      case 'Africa/Banjul': return '+00:00';\n      case 'Africa/Bissau': return '+00:00';\n      case 'Africa/Conakry': return '+00:00';\n      case 'Africa/Dakar': return '+00:00';\n      case 'Africa/Freetown': return '+00:00';\n      case 'Africa/Lome': return '+00:00';\n      case 'Africa/Monrovia': return '+00:00';\n      case 'Africa/Nouakchott': return '+00:00';\n      case 'Africa/Ouagadougou': return '+00:00';\n      case 'Africa/Sao_Tome': return '+00:00';\n      case 'America/Danmarkshavn': return '+00:00';\n      case 'Antarctica/Troll': return '+00:00';\n      case 'Atlantic/Canary': return '+00:00';\n      case 'Atlantic/Faroe': return '+00:00';\n      case 'Atlantic/Madeira': return '+00:00';\n      case 'Atlantic/Reykjavik': return '+00:00';\n      case 'Atlantic/St_Helena': return '+00:00';\n      case 'Etc/GMT': return '+00:00';\n      case 'Etc/GMT+0': return '+00:00';\n      case 'Etc/GMT-0': return '+00:00';\n      case 'Etc/GMT0': return '+00:00';\n      case 'Etc/UTC': return '+00:00';\n      case 'Europe/Guernsey': return '+00:00';\n      case 'Europe/Isle_of_Man': return '+00:00';\n      case 'Europe/Jersey': return '+00:00';\n      case 'Europe/Lisbon': return '+00:00';\n      case 'Europe/London': return '+00:00';\n      case 'Factory': return '+00:00';\n      case 'GMT': return '+00:00';\n      case 'UTC': return '+00:00';\n      case 'Africa/Algiers': return '+01:00';\n      case 'Africa/Bangui': return '+01:00';\n      case 'Africa/Brazzaville': return '+01:00';\n      case 'Africa/Casablanca': return '+01:00';\n      case 'Africa/Ceuta': return '+01:00';\n      case 'Africa/Douala': return '+01:00';\n      case 'Africa/El_Aaiun': return '+01:00';\n      case 'Africa/Kinshasa': return '+01:00';\n      case 'Africa/Lagos': return '+01:00';\n      case 'Africa/Libreville': return '+01:00';\n      case 'Africa/Luanda': return '+01:00';\n      case 'Africa/Malabo': return '+01:00';\n      case 'Africa/Ndjamena': return '+01:00';\n      case 'Africa/Niamey': return '+01:00';\n      case 'Africa/Porto-Novo': return '+01:00';\n      case 'Africa/Tunis': return '+01:00';\n      case 'Arctic/Longyearbyen': return '+01:00';\n      case 'Etc/GMT-1': return '+01:00';\n      case 'Europe/Amsterdam': return '+01:00';\n      case 'Europe/Andorra': return '+01:00';\n      case 'Europe/Belgrade': return '+01:00';\n      case 'Europe/Berlin': return '+01:00';\n      case 'Europe/Bratislava': return '+01:00';\n      case 'Europe/Brussels': return '+01:00';\n      case 'Europe/Budapest': return '+01:00';\n      case 'Europe/Busingen': return '+01:00';\n      case 'Europe/Copenhagen': return '+01:00';\n      case 'Europe/Dublin': return '+01:00';\n      case 'Europe/Gibraltar': return '+01:00';\n      case 'Europe/Ljubljana': return '+01:00';\n      case 'Europe/Luxembourg': return '+01:00';\n      case 'Europe/Madrid': return '+01:00';\n      case 'Europe/Malta': return '+01:00';\n      case 'Europe/Monaco': return '+01:00';\n      case 'Europe/Oslo': return '+01:00';\n      case 'Europe/Paris': return '+01:00';\n      case 'Europe/Podgorica': return '+01:00';\n      case 'Europe/Prague': return '+01:00';\n      case 'Europe/Rome': return '+01:00';\n      case 'Europe/San_Marino': return '+01:00';\n      case 'Europe/Sarajevo': return '+01:00';\n      case 'Europe/Skopje': return '+01:00';\n      case 'Europe/Stockholm': return '+01:00';\n      case 'Europe/Tirane': return '+01:00';\n      case 'Europe/Vaduz': return '+01:00';\n      case 'Europe/Vatican': return '+01:00';\n      case 'Europe/Vienna': return '+01:00';\n      case 'Europe/Warsaw': return '+01:00';\n      case 'Europe/Zagreb': return '+01:00';\n      case 'Europe/Zurich': return '+01:00';\n      case 'Africa/Blantyre': return '+02:00';\n      case 'Africa/Bujumbura': return '+02:00';\n      case 'Africa/Cairo': return '+02:00';\n      case 'Africa/Gaborone': return '+02:00';\n      case 'Africa/Harare': return '+02:00';\n      case 'Africa/Johannesburg': return '+02:00';\n      case 'Africa/Khartoum': return '+02:00';\n      case 'Africa/Kigali': return '+02:00';\n      case 'Africa/Lubumbashi': return '+02:00';\n      case 'Africa/Lusaka': return '+02:00';\n      case 'Africa/Maputo': return '+02:00';\n      case 'Africa/Maseru': return '+02:00';\n      case 'Africa/Mbabane': return '+02:00';\n      case 'Africa/Tripoli': return '+02:00';\n      case 'Africa/Windhoek': return '+02:00';\n      case 'Asia/Amman': return '+02:00';\n      case 'Asia/Beirut': return '+02:00';\n      case 'Asia/Damascus': return '+02:00';\n      case 'Asia/Famagusta': return '+02:00';\n      case 'Asia/Gaza': return '+02:00';\n      case 'Asia/Hebron': return '+02:00';\n      case 'Asia/Jerusalem': return '+02:00';\n      case 'Asia/Nicosia': return '+02:00';\n      case 'Etc/GMT-2': return '+02:00';\n      case 'Europe/Athens': return '+02:00';\n      case 'Europe/Bucharest': return '+02:00';\n      case 'Europe/Chisinau': return '+02:00';\n      case 'Europe/Helsinki': return '+02:00';\n      case 'Europe/Kaliningrad': return '+02:00';\n      case 'Europe/Kiev': return '+02:00';\n      case 'Europe/Mariehamn': return '+02:00';\n      case 'Europe/Nicosia': return '+02:00';\n      case 'Europe/Riga': return '+02:00';\n      case 'Europe/Sofia': return '+02:00';\n      case 'Europe/Tallinn': return '+02:00';\n      case 'Europe/Uzhgorod': return '+02:00';\n      case 'Europe/Vilnius': return '+02:00';\n      case 'Europe/Zaporozhye': return '+02:00';\n      case 'Africa/Addis_Ababa': return '+03:00';\n      case 'Africa/Asmara': return '+03:00';\n      case 'Africa/Dar_es_Salaam': return '+03:00';\n      case 'Africa/Djibouti': return '+03:00';\n      case 'Africa/Juba': return '+03:00';\n      case 'Africa/Kampala': return '+03:00';\n      case 'Africa/Mogadishu': return '+03:00';\n      case 'Africa/Nairobi': return '+03:00';\n      case 'Antarctica/Syowa': return '+03:00';\n      case 'Asia/Aden': return '+03:00';\n      case 'Asia/Baghdad': return '+03:00';\n      case 'Asia/Bahrain': return '+03:00';\n      case 'Asia/Istanbul': return '+03:00';\n      case 'Asia/Kuwait': return '+03:00';\n      case 'Asia/Qatar': return '+03:00';\n      case 'Asia/Riyadh': return '+03:00';\n      case 'Etc/GMT-3': return '+03:00';\n      case 'Europe/Istanbul': return '+03:00';\n      case 'Europe/Kirov': return '+03:00';\n      case 'Europe/Minsk': return '+03:00';\n      case 'Europe/Moscow': return '+03:00';\n      case 'Europe/Simferopol': return '+03:00';\n      case 'Europe/Volgograd': return '+03:00';\n      case 'Indian/Antananarivo': return '+03:00';\n      case 'Indian/Comoro': return '+03:00';\n      case 'Indian/Mayotte': return '+03:00';\n      case 'Asia/Tehran': return '+03:30';\n      case 'Asia/Baku': return '+04:00';\n      case 'Asia/Dubai': return '+04:00';\n      case 'Asia/Muscat': return '+04:00';\n      case 'Asia/Tbilisi': return '+04:00';\n      case 'Asia/Yerevan': return '+04:00';\n      case 'Etc/GMT-4': return '+04:00';\n      case 'Europe/Astrakhan': return '+04:00';\n      case 'Europe/Samara': return '+04:00';\n      case 'Europe/Saratov': return '+04:00';\n      case 'Europe/Ulyanovsk': return '+04:00';\n      case 'Indian/Mahe': return '+04:00';\n      case 'Indian/Mauritius': return '+04:00';\n      case 'Indian/Reunion': return '+04:00';\n      case 'Asia/Kabul': return '+04:30';\n      case 'Antarctica/Mawson': return '+05:00';\n      case 'Asia/Aqtau': return '+05:00';\n      case 'Asia/Aqtobe': return '+05:00';\n      case 'Asia/Ashgabat': return '+05:00';\n      case 'Asia/Atyrau': return '+05:00';\n      case 'Asia/Dushanbe': return '+05:00';\n      case 'Asia/Karachi': return '+05:00';\n      case 'Asia/Oral': return '+05:00';\n      case 'Asia/Qyzylorda': return '+05:00';\n      case 'Asia/Samarkand': return '+05:00';\n      case 'Asia/Tashkent': return '+05:00';\n      case 'Asia/Yekaterinburg': return '+05:00';\n      case 'Etc/GMT-5': return '+05:00';\n      case 'Indian/Kerguelen': return '+05:00';\n      case 'Indian/Maldives': return '+05:00';\n      case 'Asia/Colombo': return '+05:30';\n      case 'Asia/Kolkata': return '+05:30';\n      case 'Asia/Kathmandu': return '+05:45';\n      case 'Antarctica/Vostok': return '+06:00';\n      case 'Asia/Almaty': return '+06:00';\n      case 'Asia/Bishkek': return '+06:00';\n      case 'Asia/Dhaka': return '+06:00';\n      case 'Asia/Omsk': return '+06:00';\n      case 'Asia/Qostanay': return '+06:00';\n      case 'Asia/Thimphu': return '+06:00';\n      case 'Asia/Urumqi': return '+06:00';\n      case 'Etc/GMT-6': return '+06:00';\n      case 'Indian/Chagos': return '+06:00';\n      case 'Asia/Yangon': return '+06:30';\n      case 'Indian/Cocos': return '+06:30';\n      case 'Antarctica/Davis': return '+07:00';\n      case 'Asia/Bangkok': return '+07:00';\n      case 'Asia/Barnaul': return '+07:00';\n      case 'Asia/Ho_Chi_Minh': return '+07:00';\n      case 'Asia/Hovd': return '+07:00';\n      case 'Asia/Jakarta': return '+07:00';\n      case 'Asia/Krasnoyarsk': return '+07:00';\n      case 'Asia/Novokuznetsk': return '+07:00';\n      case 'Asia/Novosibirsk': return '+07:00';\n      case 'Asia/Phnom_Penh': return '+07:00';\n      case 'Asia/Pontianak': return '+07:00';\n      case 'Asia/Tomsk': return '+07:00';\n      case 'Asia/Vientiane': return '+07:00';\n      case 'Etc/GMT-7': return '+07:00';\n      case 'Indian/Christmas': return '+07:00';\n      case 'Asia/Brunei': return '+08:00';\n      case 'Asia/Choibalsan': return '+08:00';\n      case 'Asia/Hong_Kong': return '+08:00';\n      case 'Asia/Irkutsk': return '+08:00';\n      case 'Asia/Kuala_Lumpur': return '+08:00';\n      case 'Asia/Kuching': return '+08:00';\n      case 'Asia/Macau': return '+08:00';\n      case 'Asia/Makassar': return '+08:00';\n      case 'Asia/Manila': return '+08:00';\n      case 'Asia/Shanghai': return '+08:00';\n      case 'Asia/Singapore': return '+08:00';\n      case 'Asia/Taipei': return '+08:00';\n      case 'Asia/Ulaanbaatar': return '+08:00';\n      case 'Australia/Perth': return '+08:00';\n      case 'Etc/GMT-8': return '+08:00';\n      case 'Australia/Eucla': return '+08:45';\n      case 'Asia/Chita': return '+09:00';\n      case 'Asia/Dili': return '+09:00';\n      case 'Asia/Jayapura': return '+09:00';\n      case 'Asia/Khandyga': return '+09:00';\n      case 'Asia/Pyongyang': return '+09:00';\n      case 'Asia/Seoul': return '+09:00';\n      case 'Asia/Tokyo': return '+09:00';\n      case 'Asia/Yakutsk': return '+09:00';\n      case 'Etc/GMT-9': return '+09:00';\n      case 'Pacific/Palau': return '+09:00';\n      case 'Australia/Adelaide': return '+09:30';\n      case 'Australia/Broken_Hill': return '+09:30';\n      case 'Australia/Darwin': return '+09:30';\n      case 'Antarctica/DumontDUrville': return '+10:00';\n      case 'Antarctica/Macquarie': return '+10:00';\n      case 'Asia/Ust-Nera': return '+10:00';\n      case 'Asia/Vladivostok': return '+10:00';\n      case 'Australia/Brisbane': return '+10:00';\n      case 'Australia/Hobart': return '+10:00';\n      case 'Australia/Lindeman': return '+10:00';\n      case 'Australia/Melbourne': return '+10:00';\n      case 'Australia/Sydney': return '+10:00';\n      case 'Etc/GMT-10': return '+10:00';\n      case 'Pacific/Chuuk': return '+10:00';\n      case 'Pacific/Guam': return '+10:00';\n      case 'Pacific/Port_Moresby': return '+10:00';\n      case 'Pacific/Saipan': return '+10:00';\n      case 'Australia/Lord_Howe': return '+10:30';\n      case 'Antarctica/Casey': return '+11:00';\n      case 'Asia/Magadan': return '+11:00';\n      case 'Asia/Sakhalin': return '+11:00';\n      case 'Asia/Srednekolymsk': return '+11:00';\n      case 'Etc/GMT-11': return '+11:00';\n      case 'Pacific/Bougainville': return '+11:00';\n      case 'Pacific/Efate': return '+11:00';\n      case 'Pacific/Guadalcanal': return '+11:00';\n      case 'Pacific/Kosrae': return '+11:00';\n      case 'Pacific/Norfolk': return '+11:00';\n      case 'Pacific/Noumea': return '+11:00';\n      case 'Pacific/Pohnpei': return '+11:00';\n      case 'Antarctica/McMurdo': return '+12:00';\n      case 'Asia/Anadyr': return '+12:00';\n      case 'Asia/Kamchatka': return '+12:00';\n      case 'Etc/GMT-12': return '+12:00';\n      case 'Pacific/Auckland': return '+12:00';\n      case 'Pacific/Fiji': return '+12:00';\n      case 'Pacific/Funafuti': return '+12:00';\n      case 'Pacific/Kwajalein': return '+12:00';\n      case 'Pacific/Majuro': return '+12:00';\n      case 'Pacific/Nauru': return '+12:00';\n      case 'Pacific/Tarawa': return '+12:00';\n      case 'Pacific/Wake': return '+12:00';\n      case 'Pacific/Wallis': return '+12:00';\n      case 'Pacific/Chatham': return '+12:45';\n      case 'Etc/GMT-13': return '+13:00';\n      case 'Pacific/Apia': return '+13:00';\n      case 'Pacific/Enderbury': return '+13:00';\n      case 'Pacific/Fakaofo': return '+13:00';\n      case 'Pacific/Tongatapu': return '+13:00';\n      case 'Etc/GMT-14': return '+14:00';\n      case 'Pacific/Kiritimati': return '+14:00';\n      default:\n        // Treat any non-Node runtime (browsers, web workers) as eligible\n        // to use Intl for dynamic offset calculation.\n        const isNode = typeof process !== 'undefined' && !!(process.versions && process.versions.node);\n        if (!isNode) {\n          try {\n            const offsetMinutes = TimeZoneIdentifier.getTimezoneOffsetInBrowser(zone);\n            const sign = offsetMinutes >= 0 ? '+' : '-';\n            const hours = Math.floor(Math.abs(offsetMinutes) / 60);\n            const minutes = Math.abs(offsetMinutes) % 60;\n            return `${sign}${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}`;\n          } catch (e) {\n            const reason = e instanceof Error ? `: ${e.message}` : '';\n            throw Error(`Unknown or unsupported timezone \\`${zone}\\`${reason}`);\n          }\n        }\n        // Backend: do not attempt to resolve via Intl\n        throw Error(`Unknown timezone \\`${zone}\\``);\n    }\n  }\n\n  private static getTimezoneOffsetInBrowser(zone: string): number {\n    const date = new Date();\n    const utcDate = new Date(date.toLocaleString('en-US', { timeZone: 'UTC' }));\n    const tzDate = new Date(date.toLocaleString('en-US', { timeZone: zone }));\n    return (tzDate.getTime() - utcDate.getTime()) / 60000;\n  }\n}\n","import { formatDate, isDate } from './formatDate';\nimport { TimeZoneIdentifier , TimeZoneString} from './tz';\n\n/**\n * Базовые данные о времени работы - служебный интерфейс.\n */\nexport interface WorkTimeBase {\n  /** время начала рабочего дня*/\n  start: TimeString;\n\n  /** время окончания рабочего дня*/\n  stop: TimeString;\n\n  /** перерыв на обед*/\n  break?: `${number}${number}:${number}${number}-${number}${number}:${number}${number}`;\n}\n\n\ntype Day = \"monday\" | \"tuesday\" | \"wednesday\" | \"thursday\" | \"friday\" | \"saturday\" | \"sunday\"\n\n\n\n/**\n * Информация о времени работы предприятия - служебный интерфейс.\n */\nexport interface WorkTime extends WorkTimeBase {\n  /** день недели, к которому применяется это время */\n  dayOfWeek: Day[];\n\n  /** \n   * @deprecated \n   * ограничения по времени работы для самовывоза\n  */\n  selfService?: WorkTimeBase;\n}\n\n/**\n * Интерфейс объекта, получаемого от API @webresto/core и содержащего текущие данные о рабочем времени предприятия\n */\nexport interface Restrictions {\n  /** temporary zone of the enterprise */\n  timezone: TimeZoneString;\n  utcOffsetInSeconds: number;\n\n  /**  массив ограничений по времени работы предприятия для разных дней недели. */\n  worktime: WorkTime[];\n}\n\nexport interface HtmlFormField {\n  id: string;\n  type: string;\n  label: string;\n  description: string;\n  required: boolean;\n  regex: string;\n}\n\nexport interface City {\n  name: string\n  slug: string\n  url: string\n  id: string  \n  /** Id in external system */\n  externalId:  string,\n  boundingBox: [[number, number], [number, number]],\n  customData: Record<string,any>,\n}\n\nexport interface Country {\n  phoneCode: string;\n  iso: string;\n  name: string;\n  nativeCountryName: string;\n  language: string[];\n  currency: string;\n  currencySymbol: string;\n  currencyISO: string;\n  currencyUnit: string;\n  currencyDenomination: number;\n  phoneMask: string[];\n  flag: string;\n}\n\n/** Данные о модели авторизации пользователей на сайте предприятия */\n/**\n * @deprecated нужно вынести из либы работы с расписаниями\n */\nexport type UserRestrictions<T extends {} = {}> = {\n  /** Показывает, какой вид данных используется пользователем для авторизации */\n  loginField: string;\n  /**\n   * Zodiac sign, Human desing type, Best Friend, referal link etc\n   */\n  customFields?: HtmlFormField[] | null;\n  /**\n   * possible 3 variants ['required', 'from_otp', 'disabled'] by default: `from_otp` it means what need only OTP, for next logins  passwordRequired, disabled is means password forbidden and you need all time get OTP password\n   */\n  passwordPolicy: 'required' | 'from_otp' | 'disabled';\n  /**\n   * by default = false\n   */\n  loginOTPRequired: boolean;\n  /**\n   * Список стран, телефонные коды которых доступны для указания в номере телефона пользователя\n   */\n  allowedPhoneCountries: Country[];\n  /**\n   * Ссылка на политику обработки персональных данных\n   */\n  linkToProcessingPersonalData: string;\n  /**\n   * Ссылка на пользовательское соглашение\n   */\n  linkToUserAgreement: string;\n  /**\n   * Длина кода подтверждения OTP\n   */\n  OTPlength: number;\n\n  /**\n   * Allow spending bonuses\n   */\n  allowBonusSpending: boolean\n} & T;\n\n/**\n * @deprecated Это нужно перенести из либы worktime в ngGQL потомучто тут очень много всего что не относится к ворктайму\n */\nexport interface RestrictionsOrder<T extends {} = {}> extends Restrictions {\n\n  /**\n   * GraphQL schema backward compatibility version\n   */\n  graphqlSchemaBackwardCompatibilityVersion: number\n\n  /** минимальное время доставки*/\n  minDeliveryTimeInMinutes: string;\n\n  /** ограничение максимальной даты заказа в будущем (в минутах)*/\n  possibleToOrderInMinutes: number;\n\n  /**  установлено ли на текущий момент ограничение доставки на определенное время */\n  deliveryToTimeEnabled?: boolean;\n\n  /** Дополнительный комментарий по доставке */\n  deliveryDescription?: string;\n\n  /** Бекенд пропускает при ошибке доставки */\n  softDeliveryCalculation?:boolean\n\n  /** Краткое описание условий доставки */\n  deliveryTerms: string | null;\n\n  /** Строгая валидация телефона по маске */\n  strictPhoneInput?: boolean;\n  \n  /** Разновидность вводимой капчи */\n  captchaType?: string | null;\n\n  multipleCities?: boolean | null;\n\n  city?: City | null\n\n  /** Поля обязательные при создании корзины */\n  fieldsForOrderInitialization: string[] | null;\n\n  /** Данные о модели авторизации пользователей на сайте предприятия */\n  user?: UserRestrictions<T> | null;\n}\n\nexport interface ValidatorResult {\n  workNow: boolean;\n  isNewDay?: boolean;\n  currentTime?: number;\n  curentDayStartTime?: number;\n  curentDayStopTime?: number;\n}\n\ntype HoursDigits = `${number}${number}`\ntype MinuteDigits = `${number}${number}`\nexport type TimeString = `${HoursDigits}:${MinuteDigits}`;\n\n/** Функция-хелпер для проверки, что переданное значение не является null или undefined */\nfunction isValue<T extends any>(\n  value: T | null | undefined\n): value is NonNullable<T> {\n  return value !== null && value !== undefined;\n}\n\n/**\n * Функция валидации переданного объекта restriction на соответствие интерфейсу Restrictions\n * @param restriction - проверяемый объект, содержащий информацию о рабочем времени и временной зоне.\n */\nfunction isValidRestriction(restriction: unknown): restriction is Restrictions {\n  return (\n    typeof restriction === 'object' &&\n    isValue(restriction) &&\n    'timezone' in restriction &&\n    'worktime' in restriction &&\n    isValue(restriction.timezone) &&\n    isValue(restriction.worktime)\n  );\n}\n\n/**\n * Функция валидации переданного объекта restriction на соответствие минимальным данным для заказа\n * @param restriction - объект, содержащий информацию о рабочем времени предприятия и ограничениях даты/времени доставки.\n */\nfunction isValidRestrictionOrder(\n  restriction: RestrictionsOrder\n): restriction is RestrictionsOrder {\n  return (\n    isValidRestriction(restriction) &&\n    'minDeliveryTimeInMinutes' in restriction &&\n    'possibleToOrderInMinutes' in restriction &&\n    isValue(restriction.minDeliveryTimeInMinutes) &&\n    isValue(restriction.possibleToOrderInMinutes)\n  );\n}\n\n/**\n * Класс, содержащий статические методы, необходимые для работы с ограничениями рабочего времени предприятия.\n * Создавать новый экземпляр этого класса для использования статических методов не требуется.\n *\n * При этом при создании экземпляра класса у объекта также будут доступны собственные реализации\n * всех статических методов.\n * Эти реализации отличаются от вызовов статических методов только мемоизацией выполненных расчетов.\n *\n */\nexport class WorkTimeValidator {\n  /**\n   * @deprecated Будет перемещена из либы\n   * Метод возвращает максимальную возможную дату, на которую можно заказать доставку.\n   * @param restriction - объект, содержащий информацию о рабочем времени предприятия и ограничениях даты/времени доставки.\n   * @return Строка, представляющая максимальную доступную дату доставки в формате yyyy-MM-dd.\n   */\n  static getMaxOrderDate(\n    restriction: RestrictionsOrder,\n    currentdate: Date\n  ): string {\n    if (\n      isValue(restriction) &&\n      isValidRestrictionOrder(restriction) &&\n      isDate(currentdate)\n    ) {\n      return formatDate(\n        currentdate.getTime() + restriction.possibleToOrderInMinutes * 60000,\n        'yyyy-MM-dd',\n        'en'\n      );\n    } else {\n      throw new Error(\n        isDate(currentdate)\n          ? 'Не передан корректный объект даты'\n          : !isValue(restriction)\n            ? 'Не передан объект restrictions'\n            : 'Передан невалидный обьект restrictions'\n      );\n    }\n  }\n\n  /**\n   * Метод считает, сколько минут от начала дня (00:00) прошло для переданного времени.\n   * @param time - строка в формате HH:mm -`(00-24 часа):(0-59 минут)` - время.\n   * @return кол-во минут.\n   */\n  static getTimeFromString(time: TimeString): number {\n    if (!isValue(time)) {\n      throw 'Не передана строка с преобразуемым временем в формате HH:mm';\n    } else {\n      const regExp = new RegExp(\n        /^(00|01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|16|17|18|19|20|21|22|23)+:([0-5]\\d)+/\n      );\n      let checkedTime = time.trim();\n\n      if (checkedTime.includes(' ') || checkedTime.includes('T')) {\n        checkedTime = checkedTime.split(\n          checkedTime.includes(' ') ? ' ' : 'T'\n        )[1];\n      }\n\n      if (regExp.test(checkedTime)) {\n        return +checkedTime.split(':')[0] * 60 + +checkedTime.split(':')[1];\n      } else {\n        throw 'Переданная строка не соответствует формату HH:mm -`(00-24 часа):(0-59 минут)`';\n      }\n    }\n  }\n\n\n  /**\n   * Метод конвертирует переданное кол-во минут в строкове представление времени в формате HH:mm - `(00-24 часа):(0-59 минут)`.\n   * Например:\n   *\n   * const a = convertMinutesToTime(50) // a = '00:50'\n   * const b = convertMinutesToTime(1200) // b = '20:00'\n   *\n   * @param time - Число в диапазоне от 0 до 1440 (так как максимум в 1 сутках = 1440 минут).\n   * При передаче в time отрицательного значения, знак будет \"отобршен\", а для метод вернет результат, рассчитанный для полученного положительного значения.\n   * Если в time будет передано значение больше 1440 - метод вернет результат для значения без учета \"превышающих суток\" (т.е. с кратным вычетом 1440 минут)\n   *\n   * Например:\n   *\n   * const a = convertMinutesToTime(60) // a = '01:00'\n   * const b = convertMinutesToTime(1500) // b = '01:00' (1440 минут \"целых\" суток были \"отброшены\")\n   *\n   * @returns\n   */\n  static convertMinutesToTime(time: number): TimeString {\n    if (time < 1441) {\n      const hour = Math.floor(time / 60);\n      const hourStr: HoursDigits = <HoursDigits>(\n        (hour <= 9 ? `0${String(hour)}` : String(hour))\n      );\n      const minutes = String(time - hour * 60);\n      const minutesStr: MinuteDigits = <MinuteDigits>(\n        `${minutes.length == 1 ? '0' : ''}${minutes}`\n      );\n      return `${hourStr}:${minutesStr}`;\n    } else {\n      return WorkTimeValidator.convertMinutesToTime(time - 1440);\n    }\n  }\n\n  /**\n   * Метод проверяет, доступна ли возможность доставки на ближайшее время.\n   * @param restriction - объект, содержащий информацию о рабочем времени предприятия и ограничениях даты/времени доставки.\n   * @param currentdate - объект Date, представляющий локальные дату и время пользователя, для которых и проверяется возможность доставки\n   * @return Обьект, содержащий информацию:\n   * {\n        isWorkNow:boolean - Возможна ли доставка в ближайшее время\n        isNewDay:boolean - Служебный параметр для внутреннего использования.\n          Представляет признак, что из-за разницы часовых поясов расчет даты \"перепрыгнул\" на новый день.\n        currentTime:number - Служебный параметр для внутреннего использования.\n          Представляет проверяемое методом время в минутах от 00:00 в часовом поясе предприятия.\n        curentDayStartTime:number - Служебный параметр для внутреннего использования.\n          Представляет время начала рабочего дня в минутах от 00:00 в часовом поясе предприятия.\n        curentDayStopTime:number - Служебный параметр для внутреннего использования.\n          Представляет время окончания рабочего дня в минутах от 00:00 в часовом поясе предприятия.\n      }\n   */\n  static isWorkNow(\n    restriction: Restrictions | RestrictionsOrder,\n    currentdate: Date = new Date()\n  ): ValidatorResult {\n    // Если испольняется в NodeJS\n    if (\n      isValue(restriction) &&\n      !isValue(restriction.timezone) &&\n      typeof process !== 'undefined'\n    ) {\n      restriction.timezone =\n        process?.env?.TZ as TimeZoneString ?? Intl.DateTimeFormat().resolvedOptions().timeZone as TimeZoneString;\n    }\n\n    if (!isValue(restriction) || !isValidRestriction(restriction)) {\n      throw new Error(\n        !isDate(currentdate)\n          ? 'Не передан корректный объект даты'\n          : !isValue(restriction)\n            ? 'Не передан объект restrictions'\n            : 'Передан невалидный обьект restrictions'\n      );\n    } else {\n      if (\n        !isValue(restriction.worktime) ||\n        !Object.keys(restriction.worktime).length\n      ) {\n        return {\n          workNow: true,\n        };\n      }\n\n      const companyLocalTimeZone =\n        TimeZoneIdentifier.getTimeZoneGMTOffset(\n          restriction.timezone\n        ).split(':');\n      const companyLocalTimeZoneDelta =\n        +companyLocalTimeZone[0] * 60 + +companyLocalTimeZone[1];\n      const lokalTimeDelta =\n        companyLocalTimeZoneDelta + currentdate.getTimezoneOffset(); // смещение времени пользователя относительно времени торговой точки\n      const currentTimeInMinutesWithLocalDelta =\n        WorkTimeValidator.getTimeFromString(\n          <TimeString>formatDate(currentdate, 'HH:mm', 'en')\n        ) + lokalTimeDelta;\n      /**\n       * текущее время в минутах с начала дня (600 = 10:00. 1200 = 20:00)\n       * если из-за разницы поясов расчет перепрыгнул на новый день, то приводим время к правильному значению в диапазоне 24 часов\n       * */\n      const currentTime =\n        currentTimeInMinutesWithLocalDelta > 1440\n          ? currentTimeInMinutesWithLocalDelta - 1440\n          : currentTimeInMinutesWithLocalDelta;\n\n      const currentDayWorkTime = WorkTimeValidator.getCurrentWorkTime(\n        restriction,\n        currentTimeInMinutesWithLocalDelta > 1440\n          ? new Date(currentdate.getTime() + 86400000)\n          : currentdate\n      ); // текущее рабочее время\n      const curentDayStartTime = WorkTimeValidator.getTimeFromString(\n        <TimeString>currentDayWorkTime.start\n      ); // текущее время начала рабочего дня в минутах\n      const curentDayStopTime = WorkTimeValidator.getTimeFromString(\n        <TimeString>currentDayWorkTime.stop\n      ); // текущее время окончания рабочего дня в минутах\n      return {\n        workNow:\n          currentTime < curentDayStopTime && currentTime > curentDayStartTime,\n        isNewDay: currentTimeInMinutesWithLocalDelta > 1440,\n        currentTime,\n        curentDayStartTime,\n        curentDayStopTime,\n      };\n    }\n  }\n\n  /**\n   * Метод возвращает ближайшую возможную дату-время заказа для способа доставки \"Доставка курьером\".\n   * @deprecated use getPossibleDelieveryOrderDateTime\n   * \n   * \n   * @param restriction - объект, содержащий информацию о рабочем времени предприятия и ограничениях даты/времени доставки.\n   * @param currentdate - объект Date, представляющий текущие локальные дату и время пользователя\n   */\n  static getPossibleDelieveryOrderDateTime(\n    restriction: RestrictionsOrder,\n    currentdate: Date\n  ): string {\n    return WorkTimeValidator.getPossibleMinDelieveryOrderDateTime(restriction, currentdate)\n  }\n  static getPossibleMinDelieveryOrderDateTime(\n    restriction: RestrictionsOrder,\n    currentdate: Date\n  ): string {\n    if (!isValidRestrictionOrder(restriction)) {\n      throw new Error('Не передан или передан невалидный объект restrictions');\n    }\n\n    const checkTime = WorkTimeValidator.isWorkNow(restriction, currentdate);\n\n    if (checkTime.workNow && isValue(checkTime.currentTime)) {\n      // console.log('Сейчас рабочее время. Расчет не требуется.');\n      const possibleTime =\n        checkTime.currentTime + (+restriction.minDeliveryTimeInMinutes || 0);\n      const possibleTimeStr =\n        WorkTimeValidator.convertMinutesToTime(possibleTime);\n      return formatDate(currentdate, `yyyy-MM-dd ${possibleTimeStr}`, 'en');\n    } else {\n      if (\n        isValue(checkTime.currentTime) &&\n        isValue(checkTime.curentDayStopTime)\n      ) {\n        const currentDayWorkTime = WorkTimeValidator.getCurrentWorkTime(\n          restriction,\n          checkTime.isNewDay\n            ? new Date(currentdate.getTime() + 86400000)\n            : currentdate\n        );\n        const time =\n          this.getTimeFromString(<TimeString>currentDayWorkTime.start) +\n          +restriction.minDeliveryTimeInMinutes;\n        const timeString = WorkTimeValidator.convertMinutesToTime(time);\n        return formatDate(\n          checkTime.isNewDay ||\n            checkTime.currentTime > checkTime.curentDayStopTime\n            ? currentdate.getTime() + 86400000\n            : currentdate,\n          `yyyy-MM-dd ${timeString}`,\n          'en'\n        );\n      } else {\n        throw 'Не удалось рассчитать currentTime и curentDayStopTime.';\n      }\n    }\n  }\n\n  /**\n   * Метод возвращает ближайшую возможную дату-время заказа для способа доставки \"Самовывоз\".\n   * @param restriction - объект, содержащий информацию о рабочем времени предприятия и ограничениях даты/времени доставки.\n   * @param currentdate - объект Date, представляющий текущие локальные дату и время пользователя\n   */\n  static getPossibleSelfServiceOrderDateTime(\n    restriction: RestrictionsOrder,\n    currentdate: Date\n  ): string {\n    if (!isValidRestrictionOrder(restriction)) {\n      throw new Error('Не передан или передан невалидный объект restrictions');\n    }\n\n    /**\n     * Для обеспечения иммутабельности данных создается новый обьект restrictions, идентичный полученному в параметрах, но с измененным массивом worktime.\n     * В массиве worktime обновляются ограничения времени работы с обычных на актуальные для самовывоза.\n     * */\n    const newRestriction = {\n      ...restriction,\n      worktime: (<WorkTime[]>restriction.worktime).map((worktime) => worktime)\n    };\n    return WorkTimeValidator.getPossibleDelieveryOrderDateTime(\n      newRestriction,\n      currentdate\n    );\n  }\n\n  /**\n   * Метод возвращает актуальные данные о времени работы из массива всех вариантов обьекта restriction.\n   * @param restriction - объект, содержащий информацию о рабочем времени предприятия и ограничениях даты/времени доставки.\n   * @param currentdate - объект Date, представляющий текущие локальные дату и время пользователя\n   */\n  static getCurrentWorkTime(\n    restriction: Restrictions,\n    currentdate: Date\n  ): WorkTime {\n    if (!isValidRestriction(restriction)) {\n      throw new Error('Не передан или передан невалидный объект restrictions');\n    }\n\n    let i = 0;\n    let result = null;\n\n    while (i < restriction.worktime.length && !isValue(result)) {\n      \n      if(restriction.worktime[i].dayOfWeek === undefined) {\n        throw `dayOfWeek is required`\n      }\n      if ((<string[]>restriction.worktime[i].dayOfWeek).includes(formatDate(currentdate, 'EEEE', 'en').toLowerCase())\n      ) {\n        result = restriction.worktime[i];\n      }\n      i += 1;\n    }\n\n    if (!isValue(result)) {\n      console.debug(\"getCurrentWorkTime > !isValue(result):\", result, restriction)\n      throw new Error('There is no current work schedule for the current day');\n    } else {\n      return result;\n    }\n  }\n\n  /**\n   * Логика ниже предназначена для использования экземпляра класса WorkTimeValidator\n   */\n\n  constructor() { }\n\n  private _memory: {\n    getMaxOrderDate: Map<string, string>;\n    getTimeFromString: Map<string, number>;\n    isWorkNow: Map<string, ValidatorResult>;\n    getPossibleDelieveryOrderDateTime: Map<string, string>;\n    getPossibleSelfServiceOrderDateTime: Map<string, string>;\n    getCurrentWorkTime: Map<string, WorkTime>;\n    convertMinutesToTime: Map<string, TimeString>;\n  } = {\n      getMaxOrderDate: new Map<string, string>(),\n      getTimeFromString: new Map<string, number>(),\n      isWorkNow: new Map<string, ValidatorResult>(),\n      getPossibleDelieveryOrderDateTime: new Map<string, string>(),\n      getPossibleSelfServiceOrderDateTime: new Map<string, string>(),\n      getCurrentWorkTime: new Map<string, WorkTime>(),\n      convertMinutesToTime: new Map<string, TimeString>(),\n    };\n\n  /**\n   * Метод возвращает максимальную возможную дату, на которую можно заказать доставку.\n   * @param restriction - объект, содержащий информацию о рабочем времени предприятия и ограничениях даты/времени доставки.\n   * @return :string - Строка, представляющая максимальную доступную дату доставки в формате yyyy-MM-dd.\n   */\n  getMaxOrderDate(restriction: RestrictionsOrder, currentdate: Date): string {\n    const memoryKey = JSON.stringify({ restriction, currentdate });\n    const checkMemory = this._memory.getMaxOrderDate.get(memoryKey);\n    if (isValue(checkMemory)) {\n      return checkMemory;\n    } else {\n      const result = WorkTimeValidator.getMaxOrderDate(\n        restriction,\n        currentdate\n      );\n      this._memory.getMaxOrderDate.set(memoryKey, result);\n      return result;\n    }\n  }\n\n  /**\n   * Метод считает, сколько минут от начала дня (00:00) прошло для переданного времени.\n   * @param time - строка в формате HH:mm - время.\n   * @return :number - кол-во минут.\n   */\n  getTimeFromString(time: string): number {\n    const memoryKey = JSON.stringify({ time });\n    const checkMemory = this._memory.getTimeFromString.get(memoryKey);\n    if (isValue(checkMemory)) {\n      return checkMemory;\n    } else {\n      const result = WorkTimeValidator.getTimeFromString(<TimeString>time);\n      this._memory.getTimeFromString.set(memoryKey, result);\n      return result;\n    }\n  }\n  /**\n   * Метод проверяет, доступна ли возможность доставки на ближайшее время.\n   * @param restriction - объект, содержащий информацию о рабочем времени предприятия и ограничениях даты/времени доставки.\n   * @param currentdate - объект Date, представляющий локальные дату и время пользователя, для которых и проверяется возможность доставки\n   * @return Обьект, содержащий информацию:\n   * {\n        isWorkNow:boolean - Возможна ли доставка в ближайшее время\n        isNewDay:boolean - Служебный параметр для внутреннего использования.\n          Представляет признак, что из-за разницы часовых поясов расчет даты \"перепрыгнул\" на новый день.\n        currentTime:number - Служебный параметр для внутреннего использования.\n          Представляет проверяемое методом время в минутах от 00:00 в часовом поясе предприятия.\n        curentDayStartTime:number - Служебный параметр для внутреннего использования.\n          Представляет время начала рабочего дня в минутах от 00:00 в часовом поясе предприятия.\n        curentDayStopTime:number - Служебный параметр для внутреннего использования.\n          Представляет время окончания рабочего дня в минутах от 00:00 в часовом поясе предприятия.\n      }\n   */\n  isWorkNow(\n    restriction: Restrictions | RestrictionsOrder,\n    currentdate?: Date\n  ): ValidatorResult {\n    const memoryKey = JSON.stringify({ restriction, currentdate });\n    const checkMemory = this._memory.isWorkNow.get(memoryKey);\n    if (isValue(checkMemory)) {\n      return checkMemory;\n    } else {\n      const result = WorkTimeValidator.isWorkNow(restriction, currentdate);\n      this._memory.isWorkNow.set(memoryKey, result);\n      return result;\n    }\n  }\n  /**\n   * Метод возвращает ближайшую возможную дату-время заказа для способа доставки \"Доставка курьером\".\n   * @param restriction - объект, содержащий информацию о рабочем времени предприятия и ограничениях даты/времени доставки.\n   * @param currentdate - объект Date, представляющий текущие локальные дату и время пользователя\n   */\n  getPossibleDelieveryOrderDateTime(\n    restriction: RestrictionsOrder,\n    currentdate: Date\n  ): string {\n    const memoryKey = JSON.stringify({ restriction, currentdate });\n    const checkMemory =\n      this._memory.getPossibleDelieveryOrderDateTime.get(memoryKey);\n    if (isValue(checkMemory)) {\n      return checkMemory;\n    } else {\n      const result = WorkTimeValidator.getPossibleDelieveryOrderDateTime(\n        restriction,\n        currentdate\n      );\n      this._memory.getPossibleDelieveryOrderDateTime.set(memoryKey, result);\n      return result;\n    }\n  }\n  /**\n   * Метод возвращает ближайшую возможную дату-время заказа для способа доставки \"Самовывоз\".\n   * @param restriction - объект, содержащий информацию о рабочем времени предприятия и ограничениях даты/времени доставки.\n   * @param currentdate - объект Date, представляющий текущие локальные дату и время пользователя\n   */\n  getPossibleSelfServiceOrderDateTime(\n    restriction: RestrictionsOrder,\n    currentdate: Date\n  ): string {\n    const memoryKey = JSON.stringify({ restriction, currentdate });\n    const checkMemory =\n      this._memory.getPossibleSelfServiceOrderDateTime.get(memoryKey);\n    if (isValue(checkMemory)) {\n      return checkMemory;\n    } else {\n      const result = WorkTimeValidator.getPossibleSelfServiceOrderDateTime(\n        restriction,\n        currentdate\n      );\n      this._memory.getPossibleSelfServiceOrderDateTime.set(memoryKey, result);\n      return result;\n    }\n  }\n  /**\n   * Метод возвращает актуальные данные о времени работы из массива всех вариантов обьекта restriction.\n   * @param restriction - объект, содержащий информацию о рабочем времени предприятия и ограничениях даты/времени доставки.\n   * @param currentdate - объект Date, представляющий текущие локальные дату и время пользователя\n   */\n  getCurrentWorkTime(restriction: Restrictions, currentdate: Date): WorkTime {\n    const memoryKey = JSON.stringify({ restriction, currentdate });\n    const checkMemory = this._memory.getCurrentWorkTime.get(memoryKey);\n    if (isValue(checkMemory)) {\n      return <WorkTime>checkMemory;\n    } else {\n      const result = WorkTimeValidator.getCurrentWorkTime(\n        restriction,\n        currentdate\n      );\n      this._memory.getCurrentWorkTime.set(memoryKey, result);\n      return result;\n    }\n  }\n\n  /**\n   * Метод конвертирует переданное кол-во минут в строкове представление времени в формате HH:mm - `(00-24 часа):(0-59 минут)`.\n   * Например:\n   *\n   * const a = convertMinutesToTime(50) // a = '00:50'\n   * const b = convertMinutesToTime(1200) // b = '20:00'\n   *\n   * @param time - Число в диапазоне от 0 до 1440 (так как максимум в 1 сутках = 1440 минут).\n   * При передаче в time отрицательного значения, знак будет \"отобршен\", а для метод вернет результат, рассчитанный для полученного положительного значения.\n   * Если в time будет передано значение больше 1440 - метод вернет результат для значения без учета \"превышающих суток\" (т.е. с кратным вычетом 1440 минут)\n   *\n   * Например:\n   *\n   * const a = convertMinutesToTime(60) // a = '01:00'\n   * const b = convertMinutesToTime(1500) // b = '01:00' (1440 минут \"целых\" суток были \"отброшены\")\n   *\n   * @returns\n   */\n  convertMinutesToTime(time: number): TimeString {\n    const memoryKey = JSON.stringify({ time });\n    const checkMemory = this._memory.convertMinutesToTime.get(memoryKey);\n    if (isValue(checkMemory)) {\n      return checkMemory;\n    } else {\n      const result = WorkTimeValidator.convertMinutesToTime(time);\n      this._memory.convertMinutesToTime.set(memoryKey, result);\n      return result;\n    }\n  }\n}\n","import { TimeZoneIdentifier, TimeZoneString } from \"./tz\";\nimport { WorkTime } from \"./worktime.validator\";\nexport type Schedule =  [number, number][]\nexport class ScheduleGenerator {\n    private days: Map<string, { start: number, stop: number }>;\n    private breaks: Map<string, { start: number, stop: number }>;\n\n\n    /**\n     * Constructor for the ScheduleGenerator class.\n     * Parses the given worktime array into days and breaks.\n     * @param worktime An array of WorkTime objects representing the work schedule.\n     */\n    constructor(worktime: WorkTime[]) {\n        const { days, breaks } = this.parseSchedule(worktime);\n        this.days = days;\n        this.breaks = breaks;\n    }\n\n    private timeToSeconds(time: string): number {\n        const [hours, minutes] = time.split(':').map(Number);\n        return hours * 3600 + minutes * 60;\n    }\n\n    private parseSchedule(worktime: any): { days: Map<string, { start: number, stop: number }>, breaks: Map<string, { start: number, stop: number }> } {\n        const days = new Map<string, { start: number, stop: number }>();\n        const breaks = new Map<string, { start: number, stop: number }>();\n\n        for (const rule of worktime) {\n            const { dayOfWeek, start, stop, break: breakTime } = rule;\n            const startSeconds = this.timeToSeconds(start);\n            const stopSeconds = this.timeToSeconds(stop);\n            const breakSeconds = breakTime !== \"00:00-00:00\" ? this.parseBreakTime(breakTime) : null;\n\n            for (const day of dayOfWeek) {\n                days.set(day.toLowerCase(), { start: startSeconds, stop: stopSeconds });\n                if (breakSeconds) breaks.set(day.toLowerCase(), breakSeconds);\n            }\n        }\n\n        return { days, breaks };\n    }\n\n    private parseBreakTime(breakTime: string): { start: number, stop: number } {\n        const [start, stop] = breakTime.split('-').map(time => this.timeToSeconds(time));\n        return { start, stop };\n    }\n\n    private getDatesInRange(startDate: Date, endDate: Date): Date[] {\n        const dates = [];\n        const currentDate = new Date(startDate);\n\n        while (currentDate <= endDate) {\n            dates.push(new Date(currentDate));\n            currentDate.setDate(currentDate.getDate() + 1);\n        }\n\n        return dates;\n    }\n\n    private filterWorkingDates(dates: Date[]): Date[] {\n        return dates.filter(date => {\n            const dayOfWeek = date.toLocaleString('en', { weekday: 'long' }).toLowerCase();\n            return this.days.has(dayOfWeek);\n        });\n    }\n\n    private createTimeIntervals(dates: Date[]): { start: number, stop: number }[] {\n        const intervals = [];\n\n        for (const date of dates) {\n            const dayOfWeek = date.toLocaleString('en', { weekday: 'long' }).toLowerCase();\n            const workingDay = this.days.get(dayOfWeek);\n\n            if (workingDay && workingDay.start !== null && workingDay.stop !== null) {\n                const { start, stop } = workingDay;\n\n                const intervalStart = new Date(date);\n                intervalStart.setHours(0, 0, start);\n                const intervalStop = new Date(date);\n                intervalStop.setHours(0, 0, stop);\n\n                const breakTime = this.breaks.get(dayOfWeek);\n                if (breakTime && breakTime.start < breakTime.stop) {\n                    const breakStart = new Date(date);\n                    breakStart.setHours(0, 0, breakTime.start);\n                    const breakStop = new Date(date);\n                    breakStop.setHours(0, 0, breakTime.stop);\n\n                    intervals.push({ start: Math.round(intervalStart.getTime() / 1000), stop: Math.round(breakStart.getTime() / 1000) });\n                    intervals.push({ start: Math.round(breakStop.getTime() / 1000), stop: Math.round(intervalStop.getTime() / 1000) });\n                } else {\n                    intervals.push({ start: Math.round(intervalStart.getTime() / 1000), stop: Math.round(intervalStop.getTime() / 1000) });\n                }\n            }\n        }\n\n        return intervals;\n    }\n\n    private adjustTimezone(intervals: { start: number, stop: number }[], timeZoneOffset: number): { start: number, stop: number }[] {\n        return intervals.map(interval => ({\n            start: interval.start + timeZoneOffset,\n            stop: interval.stop + timeZoneOffset\n        }));\n    }\n\n\n    /**\n     * Generates time intervals between the provided start and end dates.\n     * @param startDate The start date of the interval.\n     * @param endDate The end date of the interval.\n     * @param timeZone Optional: The time zone to consider for the dates. If not provided, assumes \"Etc/GMT+0\". It is not necessary because new Date() for startDate and endDate will already be offset\n     * @param compact Optional: Whether to output time intervals in a compact array format or an array of objects.\n     * @returns An array of time intervals between the start and end dates.\n     */\n    public generateTimeIntervals(startDate: Date, endDate: Date, timeZone?: TimeZoneString, compact?: true): [number, number][];\n    public generateTimeIntervals(startDate: Date, endDate: Date, timeZone?: TimeZoneString, compact?: false): { start: number, stop: number }[];\n    public generateTimeIntervals(startDate: Date, endDate: Date, timeZone?: TimeZoneString, compact?: true | false): { start: number, stop: number }[] | [number, number][] {\n        const datesInRange = this.getDatesInRange(startDate, endDate);\n        const workingDates = this.filterWorkingDates(datesInRange);\n        const timeIntervals = this.createTimeIntervals(workingDates);\n        \n        if(!timeZone) {\n            timeZone = \"Etc/GMT+0\"\n        }\n        \n        const timeZoneOffsetSeconds = TimeZoneIdentifier.getTimeZoneOffsetInSeconds(timeZone)\n        if(compact){\n            return this.compact(this.adjustTimezone(timeIntervals, timeZoneOffsetSeconds));\n        } else {\n            return this.adjustTimezone(timeIntervals, timeZoneOffsetSeconds);\n        }\n    }\n    \n\n    private compact(timeIntervals: { start: number, stop: number }[]): [number, number][] {\n        return timeIntervals.map(interval => [interval.start, interval.stop]);\n    }\n}\n\n\nexport class ScheduleValidator {\n    readonly schedule: Schedule | undefined;\n    \n    /**\n     * Constructor for ScheduleValidator class.\n     * @param schedule The schedule to be validated.\n     */\n    constructor(schedule: Schedule) {\n        this.schedule = schedule;\n    }\n\n    /**\n     * Checks if a given date falls within any of the intervals in the schedule.\n     * @param date The date to check.\n     * @returns A boolean indicating whether the date falls within the schedule.\n     */\n    doesTimeFallWithin(date: Date): boolean {\n        if (!this.schedule) return false;\n\n        const time = Math.round(date.getTime() / 1000); // Convert date to Unix timestamp\n\n        for (const interval of this.schedule) {\n            const [start, stop] = interval;\n            if (start <= time && time <= stop) {\n                return true;\n            }\n        }\n\n        return false;\n    }\n\n    /**\n     * Checks if a given duration starting from a specific date falls within any of the intervals in the schedule.\n     * @param startDateTime The start date and time.\n     * @param durationInSeconds The duration in seconds.\n     * @returns A boolean indicating whether the duration falls within the schedule.\n     */\n    doesDurationFallWithin(startDateTime: Date, durationInSeconds: number): boolean {\n        if (!this.schedule) return false;\n\n        const startTime = Math.round(startDateTime.getTime() / 1000);\n        const endTime = startTime + durationInSeconds;\n\n        for (const interval of this.schedule) {\n            const [start, stop] = interval;\n            if (start <= startTime && stop >= endTime) {\n                return true;\n            }\n        }\n\n        return false;\n    }\n\n    /**\n     * Finds the earliest or latest day limit in the schedule intervals.\n     * @param mode Determines whether to find the earliest or latest day limit.\n     * @returns The earliest or latest day limit within the schedule, or undefined if no such date exists.\n     */\n    findDayLimit(mode: \"earliest\"|\"latest\", timezone: TimeZoneString): string | undefined {\n    \n        if (!this.schedule || this.schedule.length === 0) return undefined;\n\n        let _day = this.schedule[0][0];\n\n        for (const interval of this.schedule) {\n            const [_start, _] = interval;\n            if(mode = \"earliest\") {\n                if (_start < _day) {\n                    _day = _start;\n                }\n            } else /** latest */ {\n                if (_start > _day) {\n                    _day = _start;\n                }\n            }\n        }\n\n        return new Date(_day * 1000).toLocaleDateString(undefined, {\n            timeZone: timezone,\n        });\n    }\n\n    /**\n     * Finds the latest end date for a given duration that fits within the schedule intervals.\n     * @param durationInSeconds The duration in seconds.\n     * @returns The latest end date that fits within the schedule, or undefined if no such date exists.\n     */\n    findLatestEndDate(): Date | undefined {\n\n        return undefined;\n    }\n\n}\n\n// function convertTimestampsToReadableDate(array: { start: number, stop: number }[]) {\n//     return array.map(item => {\n//         const startDate = new Date(item.start * 1000);\n//         const stopDate = new Date(item.stop * 1000);\n\n//         const startDateStr = startDate.toLocaleString('en-US', { timeZone: 'UTC' });\n//         const stopDateStr = stopDate.toLocaleString('en-US', { timeZone: 'UTC' });\n\n//         return { start: startDateStr, stop: stopDateStr };\n//     });\n// }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}