@omegagrid/core 0.6.111 → 0.6.113

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -9,7 +9,14 @@ export type DateFormatterFunction = (date: number | string | Date, format?: stri
9
9
  * @return string
10
10
  */
11
11
  export declare function detectFormat(date: string, locale: string): "MM/dd/yyyy" | "dd.MM.yyyy" | "yyyy-MM-dd";
12
+ export declare function isISODate(date: string): boolean;
12
13
  export declare function detectDefaultFormat(locale?: string): string;
14
+ export type DateFormatOptions = {
15
+ locale?: string;
16
+ withTime?: boolean;
17
+ };
18
+ export declare function getDateFormat(opt?: DateFormatOptions): DateFormatString;
19
+ export declare function format(date: number | string | Date, format?: DateFormatString, locale?: string): string;
13
20
  export declare function parse(date: string, locale: string): Date;
14
21
  export declare function getDateFormatter(locale: string, format?: DateFormatString): DateFormatterFunction;
15
22
  export declare function getDateLocale(code: string): Locale;
@@ -1 +1 @@
1
- {"version":3,"file":"dates.d.ts","sourceRoot":"","sources":["../../src/common/dates.ts"],"names":[],"mappings":"AAAA,OAAO,EAEK,MAAM,EACjB,MAAM,UAAU,CAAC;AASlB,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,QAEhD;AAKD,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC;AACtC,MAAM,MAAM,qBAAqB,GAAG,CAAC,IAAI,EAAE,MAAM,GAAC,MAAM,GAAC,IAAI,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;AAM1F;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,8CAUxD;AAGD,wBAAgB,mBAAmB,CAAC,MAAM,CAAC,EAAE,MAAM,UAclD;AAED,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAGjD;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,gBAAgB,GAAI,qBAAqB,CAKlG;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,UAKzC;AAGD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,gBAAgB,GAAI,qBAAqB,CAS5G;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,UAM5D;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,UAG/D;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,IAAI,QAMnC;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAIjF;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,SAAI,EAAE,cAAc,SAAI,GAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CA2BnG;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,IAAI,UAE1C;AAID,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,QAM1C;AAED,wBAAgB,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,UAarE"}
1
+ {"version":3,"file":"dates.d.ts","sourceRoot":"","sources":["../../src/common/dates.ts"],"names":[],"mappings":"AAAA,OAAO,EAEK,MAAM,EACjB,MAAM,UAAU,CAAC;AASlB,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,QAEhD;AAKD,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC;AACtC,MAAM,MAAM,qBAAqB,GAAG,CAAC,IAAI,EAAE,MAAM,GAAC,MAAM,GAAC,IAAI,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;AAM1F;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,8CAUxD;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,WAErC;AAGD,wBAAgB,mBAAmB,CAAC,MAAM,CAAC,EAAE,MAAM,UAclD;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACnB,CAAA;AAED,wBAAgB,aAAa,CAAC,GAAG,CAAC,EAAE,iBAAiB,GAAG,gBAAgB,CAMvE;AAED,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAC,MAAM,GAAC,IAAI,EAAE,MAAM,CAAC,EAAE,gBAAgB,EAAE,MAAM,CAAC,EAAE,MAAM,UAE1F;AAED,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAGjD;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,gBAAgB,GAAI,qBAAqB,CAKlG;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,UAKzC;AAGD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,gBAAgB,GAAI,qBAAqB,CAY5G;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,UAM5D;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,UAG/D;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,IAAI,QAMnC;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAIjF;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,SAAI,EAAE,cAAc,SAAI,GAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CA2BnG;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,IAAI,UAE1C;AAID,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,QAM1C;AAED,wBAAgB,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,UAarE"}
@@ -1,4 +1,4 @@
1
- import { addMonths, compareAsc, differenceInDays, endOfMonth, format, getISODay, parse as fnsParse, subDays, subMonths, subYears, intlFormat, startOfDay } from 'date-fns';
1
+ import { addMonths, compareAsc, differenceInDays, endOfMonth, format as fnsFormat, parseISO, getISODay, parse as fnsParse, subDays, subMonths, subYears, intlFormat, startOfDay } from 'date-fns';
2
2
  import { mod } from './numbers';
3
3
  import { isString } from './utils';
4
4
  import { enUS } from 'date-fns/locale/en-US';
@@ -31,6 +31,9 @@ export function detectFormat(date, locale) {
31
31
  return 'yyyy-MM-dd';
32
32
  }
33
33
  }
34
+ export function isISODate(date) {
35
+ return date.length >= 10 && date[4] === '-' && date[7] === '-';
36
+ }
34
37
  let defaultFormats;
35
38
  export function detectDefaultFormat(locale) {
36
39
  locale = locale ?? getLocale();
@@ -48,6 +51,16 @@ export function detectDefaultFormat(locale) {
48
51
  defaultFormats.set(locale, format);
49
52
  return format;
50
53
  }
54
+ export function getDateFormat(opt) {
55
+ let format = detectDefaultFormat(opt?.locale);
56
+ if (opt?.withTime) {
57
+ format += ' HH:mm:ss';
58
+ }
59
+ return format;
60
+ }
61
+ export function format(date, format, locale) {
62
+ return getDateFormatter(locale ?? getLocale(), format)(date);
63
+ }
51
64
  export function parse(date, locale) {
52
65
  const d = fnsParse(date, detectFormat(date, locale), new Date());
53
66
  return isNaN(d.getTime()) ? null : d;
@@ -71,13 +84,15 @@ export function getDateLocale(code) {
71
84
  export function createDateFormatter(locale, defaultFormat) {
72
85
  defaultFormat = defaultFormat ?? detectDefaultFormat(locale);
73
86
  return (date, strFormat) => {
74
- if (isString(date))
75
- date = parse(date, locale); //parseISO(date as string);
76
- else if (!(date instanceof Date) && !isNaN(date))
87
+ if (isString(date)) {
88
+ date = isISODate(date) ? parseISO(date) : parse(date, locale);
89
+ }
90
+ else if (!(date instanceof Date) && !isNaN(date)) {
77
91
  date = serialDateToDate(date);
92
+ }
78
93
  if (date == null)
79
94
  return '';
80
- return format(date, strFormat || defaultFormat, { locale: getDateLocale(locale) });
95
+ return fnsFormat(date, strFormat || defaultFormat, { locale: getDateLocale(locale) });
81
96
  };
82
97
  }
83
98
  export function getFiscalYear(date, monthOffset) {
@@ -1 +1 @@
1
- {"version":3,"file":"dates.js","sourceRoot":"","sources":["../../src/common/dates.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,SAAS,EAAE,UAAU,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,EAC3D,SAAS,EAAU,KAAK,IAAI,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAC1F,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAC7C,OAAO,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAElE,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAC;AAE5C,MAAM,UAAU,kBAAkB,CAAC,MAAc;IAChD,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AACpC,CAAC;AAED,kBAAkB,CAAC,IAAI,CAAC,CAAC;AACzB,kBAAkB,CAAC,EAAE,CAAC,CAAC;AAKvB,MAAM,YAAY,GAAG,IAAI,GAAG,EAAwD,CAAC;AAErF,MAAM,eAAe,GAAG,qCAAqC,CAAC;AAE9D;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,MAAc;IACxD,IAAI,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC;QACnD,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YAChD,OAAO,YAAY,CAAC;QACrB,CAAC;aAAM,CAAC;YACP,OAAO,YAAY,CAAC;QACrB,CAAC;IACF,CAAC;SAAM,CAAC;QACP,OAAO,YAAY,CAAC;IACrB,CAAC;AACF,CAAC;AAED,IAAI,cAAmC,CAAC;AACxC,MAAM,UAAU,mBAAmB,CAAC,MAAe;IAClD,MAAM,GAAG,MAAM,IAAI,SAAS,EAAE,CAAC;IAC/B,cAAc,GAAG,cAAc,IAAI,IAAI,GAAG,EAAE,CAAC;IAC7C,IAAI,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC;QAAE,OAAO,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAElE,IAAI,MAAc,CAAC;IACnB,IAAI,CAAC;QACJ,MAAM,OAAO,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;QACzC,MAAM,GAAG,YAAY,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,EAAC,MAAM,EAAE,OAAO,EAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACvF,CAAC;IAAC,OAAO,MAAM,EAAE,CAAC;QACjB,MAAM,GAAG,YAAY,CAAC;IACvB,CAAC;IACD,cAAc,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,OAAO,MAAM,CAAC;AACf,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,IAAY,EAAE,MAAc;IACjD,MAAM,CAAC,GAAG,QAAQ,CAAC,IAAc,EAAE,YAAY,CAAC,IAAc,EAAE,MAAM,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;IACrF,OAAO,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAAc,EAAE,MAAyB;IACzE,MAAM,GAAG,MAAM,IAAI,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC/C,MAAM,GAAG,GAAG,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAClH,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC;QAAE,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC3E,OAAO,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY;IACzC,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACpD,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1B,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACpD,OAAO,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAC/B,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,mBAAmB,CAAC,MAAc,EAAE,aAAgC;IACnF,aAAa,GAAG,aAAa,IAAI,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC7D,OAAO,CAAC,IAAwB,EAAE,SAAkB,EAAE,EAAE;QACvD,IAAI,QAAQ,CAAC,IAAI,CAAC;YAAE,IAAI,GAAG,KAAK,CAAC,IAAc,EAAE,MAAM,CAAC,CAAC,CAAC,2BAA2B;aAChF,IAAI,CAAC,CAAC,IAAI,YAAY,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAc,CAAC;YAAE,IAAI,GAAG,gBAAgB,CAAC,IAAc,CAAC,CAAC;QAEpG,IAAI,IAAI,IAAI,IAAI;YAAE,OAAO,EAAE,CAAC;QAC5B,OAAO,MAAM,CAAC,IAAY,EAAE,SAAS,IAAI,aAAa,EAAE,EAAC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,EAAC,CAAC,CAAC;IAC1F,CAAC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAU,EAAE,WAAmB;IAC5D,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IAC7B,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IAC9B,OAAO,WAAW,IAAI,CAAC;QACtB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QAC7C,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,WAAW,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAU,EAAE,WAAmB;IAC/D,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,WAAW,EAAE,EAAE,CAAC,CAAC;IACjD,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAU;IACnC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACjB,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IACnB,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IACnB,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IACxB,OAAO,IAAI,CAAC;AACb,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,IAAU,EAAE,WAAmB;IAClE,IAAI,GAAG,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAChE,IAAI,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC;QAAE,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IACtD,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACnE,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAU,EAAE,WAAW,GAAG,CAAC,EAAE,cAAc,GAAG,CAAC;IAC/E,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,mBAAmB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAC9D,MAAM,GAAG,GAAG,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9C,MAAM,GAAG,GAAG,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,cAAc,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;IAC7D,IAAI,EAAE,GAAG,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAE1C,+FAA+F;IAC/F,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAEzC,6DAA6D;IAC7D,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACZ,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACtC,MAAM,cAAc,GAAG,gBAAgB,CAAC,WAAW,EAAE,SAAS,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;QAC/E,MAAM,cAAc,GAAG,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG,cAAc,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QACzE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,cAAc,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;QAC3D,EAAE,EAAE,CAAC;IACN,CAAC;SAAM,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;QACnB,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACtC,MAAM,cAAc,GAAG,gBAAgB,CAAC,WAAW,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;QAChE,MAAM,cAAc,GAAG,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG,cAAc,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QACzE,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,cAAc,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YAChE,CAAC,GAAG,CAAC,CAAC;YACN,EAAE,EAAE,CAAC;QACN,CAAC;IACF,CAAC;IAED,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAU;IAC1C,OAAO,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;AACtG,CAAC;AAGD,uCAAuC;AACvC,MAAM,UAAU,gBAAgB,CAAC,EAAU;IAC1C,yBAAyB;IACzB,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IAExC,0BAA0B;IAC1B,oDAAoD;AACrD,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,EAAU,EAAE,KAAa,EAAE,QAAmB;IACrE,MAAM,IAAI,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;IAClC,IAAI,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;IACvB,IAAI,UAA+B,CAAC;IACpC,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;QAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAEjF,OAAO,KAAK,GAAG,CAAC,EAAE,CAAC;QAClB,EAAE,EAAE,CAAC;QACL,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACzB,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAAE,EAAE,KAAK,CAAC;IAC7D,CAAC;IAED,OAAO,EAAE,CAAC;AACX,CAAC","sourcesContent":["import { \n\taddMonths, compareAsc, differenceInDays, endOfMonth, format,\n\tgetISODay, Locale, parse as fnsParse, subDays, subMonths, subYears, intlFormat, startOfDay \n} from 'date-fns';\nimport { mod } from './numbers';\nimport { isString } from './utils';\nimport { enUS } from 'date-fns/locale/en-US';\nimport { cs } from 'date-fns/locale/cs';\nimport { getLocale, getRegionISOCode } from '@omegagrid/localize';\n\nconst localeMap = new Map<string, Locale>();\n\nexport function registerDateLocale(locale: Locale) {\n\tlocaleMap.set(locale.code, locale);\n}\n\nregisterDateLocale(enUS);\nregisterDateLocale(cs);\n\nexport type DateFormatString = string;\nexport type DateFormatterFunction = (date: number|string|Date, format?: string) => string;\n\nconst formatterMap = new Map<string, Map<DateFormatString, DateFormatterFunction>>();\n\nconst DETECTION_REGEX = /^(\\d{1,2})[./](\\d{1,2})[./](\\d{4})$/;\n\n/**\n * Primitive way to guess date format from string\n * @param date \n * @param locale \n * @return string\n */\nexport function detectFormat(date: string, locale: string) {\n\tif (DETECTION_REGEX.test(date.replace(/\\s/g, ''))) {\n\t\tif (locale.startsWith('en') && date[2] === '/') {\n\t\t\treturn 'MM/dd/yyyy';\n\t\t} else {\n\t\t\treturn 'dd.MM.yyyy';\n\t\t}\n\t} else {\n\t\treturn 'yyyy-MM-dd';\n\t}\n}\n\nlet defaultFormats: Map<string, string>;\nexport function detectDefaultFormat(locale?: string) {\n\tlocale = locale ?? getLocale();\n\tdefaultFormats = defaultFormats ?? new Map();\n\tif (defaultFormats.has(locale)) return defaultFormats.get(locale);\n\t\n\tlet format: string;\n\ttry {\n\t\tconst isoCode = getRegionISOCode(locale);\n\t\tformat = detectFormat(intlFormat(startOfDay(new Date()), {locale: isoCode}), isoCode);\n\t} catch (_error) {\n\t\tformat = 'yyyy-MM-dd';\n\t}\n\tdefaultFormats.set(locale, format);\n\treturn format;\n}\n\nexport function parse(date: string, locale: string) {\n\tconst d = fnsParse(date as string, detectFormat(date as string, locale), new Date());\n\treturn isNaN(d.getTime()) ? null : d;\n}\n\nexport function getDateFormatter(locale: string, format?: DateFormatString) : DateFormatterFunction {\n\tformat = format ?? detectDefaultFormat(locale);\n\tconst map = formatterMap.has(locale) ? formatterMap.get(locale) : formatterMap.set(locale, new Map()).get(locale);\n\tif (!map.has(format)) map.set(format, createDateFormatter(locale, format));\n\treturn map.get(format);\n}\n\nexport function getDateLocale(code: string) {\n\tif (localeMap.has(code)) return localeMap.get(code);\n\tcode = code.split('-')[0];\n\tif (localeMap.has(code)) return localeMap.get(code);\n\treturn localeMap.get('en-US');\n}\n\n// https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\nexport function createDateFormatter(locale: string, defaultFormat?: DateFormatString) : DateFormatterFunction {\n\tdefaultFormat = defaultFormat ?? detectDefaultFormat(locale);\n\treturn (date: number|string|Date, strFormat?: string) => {\n\t\tif (isString(date)) date = parse(date as string, locale); //parseISO(date as string);\n\t\telse if (!(date instanceof Date) && !isNaN(date as number)) date = serialDateToDate(date as number);\n\t\t\n\t\tif (date == null) return '';\n\t\treturn format(date as Date, strFormat || defaultFormat, {locale: getDateLocale(locale)});\n\t};\n}\n\nexport function getFiscalYear(date: Date, monthOffset: number) {\n\tconst y = date.getFullYear();\n\tconst m = date.getMonth() + 1;\n\treturn monthOffset >= 0\n\t\t? y - Math.floor((12 - m + monthOffset) / 12)\n\t\t: y + Math.floor((m - monthOffset - 1) / 12);\n}\n\nexport function getFiscalQuarter(date: Date, monthOffset: number) {\n\tconst m = mod(date.getMonth() - monthOffset, 12);\n\treturn Math.floor(m / 3) + 1;\n}\n\nexport function stripTime(date: Date) {\n\tdate.setHours(0);\n\tdate.setMinutes(0);\n\tdate.setSeconds(0);\n\tdate.setMilliseconds(0);\n\treturn date;\n}\n\nexport function getFiscalYearBounds(date: Date, monthOffset: number): [Date, Date] {\n\tlet min = new Date(date.getFullYear(), mod(monthOffset, 12), 1);\n\tif (compareAsc(date, min) < 0) min = subYears(min, 1);\n\treturn [min, stripTime(endOfMonth(addMonths(new Date(min), 11)))];\n}\n\nexport function getFiscalISOWeek(date: Date, monthOffset = 0, firstDayOfWeek = 1) : [number, number] {\n\tconst [fyMin, fyMax] = getFiscalYearBounds(date, monthOffset);\n\tconst doy = differenceInDays(date, fyMin) + 1;\n\tconst dow = ((getISODay(date) + firstDayOfWeek - 2) % 7) + 1;\n\tlet fy = getFiscalYear(date, monthOffset);\n\n\t// https://en.wikipedia.org/wiki/ISO_week_date#Calculating_the_week_number_from_an_ordinal_date\n\tlet w = Math.floor((10 + doy - dow) / 7);\n\n\t// https://en.wikipedia.org/wiki/ISO_week_date#Weeks_per_year\n\tif (w == 0) {\n\t\tconst lastWeekDay = subDays(fyMin, 4); \n\t\tconst doyLastWeekDay = differenceInDays(lastWeekDay, subMonths(fyMin, 12)) + 1;\n\t\tconst dowLastWeekDay = (getISODay(lastWeekDay) + firstDayOfWeek - 1) % 7;\n\t\tw = Math.floor((10 + doyLastWeekDay - dowLastWeekDay) / 7);\n\t\t--fy;\n\t} else if (w > 52) {\n\t\tconst lastWeekDay = subDays(fyMax, 3); \n\t\tconst doyLastWeekDay = differenceInDays(lastWeekDay, fyMin) + 1;\n\t\tconst dowLastWeekDay = (getISODay(lastWeekDay) + firstDayOfWeek - 1) % 7;\n\t\tif (w > Math.floor((10 + doyLastWeekDay - dowLastWeekDay) / 7)) {\n\t\t\tw = 1;\n\t\t\t++fy;\n\t\t}\n\t}\n\n\treturn [w, fy];\n}\n\nexport function dateToSerialDate(date: Date) {\n\treturn 25569.0 + ((date.getTime() - (date.getTimezoneOffset() * 60 * 1000)) / (1000 * 60 * 60 * 24));\n}\n\n\n// https://stackoverflow.com/a/67130235\nexport function serialDateToDate(sn: number) {\n\t// for dates > 1900-02-28\n\treturn new Date(Date.UTC(0, 0, sn - 1));\n\n\t// for dates <= 1900-02-28\n\t// return new Date(Date.UTC(0, 0, excelSerialDate));\n}\n\nexport function workday(sn: number, count: number, holidays?: number[]) {\n\tconst date = serialDateToDate(sn);\n\tlet wd = date.getDay();\n\tlet holidayMap: Map<number, number>;\n\tif (holidays && holidays.length > 0) holidays.forEach(h => holidayMap.set(h, h));\n\n\twhile (count > 0) {\n\t\t++sn;\n\t\twd = (++wd > 7 ? 1 : wd);\n\t\tif (wd < 6 && (!holidayMap || !holidayMap.has(sn))) --count;\n\t}\n\t\n\treturn sn;\n}"]}
1
+ {"version":3,"file":"dates.js","sourceRoot":"","sources":["../../src/common/dates.ts"],"names":[],"mappings":"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","sourcesContent":["import { \n\taddMonths, compareAsc, differenceInDays, endOfMonth, format as fnsFormat, parseISO,\n\tgetISODay, Locale, parse as fnsParse, subDays, subMonths, subYears, intlFormat, startOfDay\n} from 'date-fns';\nimport { mod } from './numbers';\nimport { isString } from './utils';\nimport { enUS } from 'date-fns/locale/en-US';\nimport { cs } from 'date-fns/locale/cs';\nimport { getLocale, getRegionISOCode } from '@omegagrid/localize';\n\nconst localeMap = new Map<string, Locale>();\n\nexport function registerDateLocale(locale: Locale) {\n\tlocaleMap.set(locale.code, locale);\n}\n\nregisterDateLocale(enUS);\nregisterDateLocale(cs);\n\nexport type DateFormatString = string;\nexport type DateFormatterFunction = (date: number|string|Date, format?: string) => string;\n\nconst formatterMap = new Map<string, Map<DateFormatString, DateFormatterFunction>>();\n\nconst DETECTION_REGEX = /^(\\d{1,2})[./](\\d{1,2})[./](\\d{4})$/;\n\n/**\n * Primitive way to guess date format from string\n * @param date \n * @param locale \n * @return string\n */\nexport function detectFormat(date: string, locale: string) {\n\tif (DETECTION_REGEX.test(date.replace(/\\s/g, ''))) {\n\t\tif (locale.startsWith('en') && date[2] === '/') {\n\t\t\treturn 'MM/dd/yyyy';\n\t\t} else {\n\t\t\treturn 'dd.MM.yyyy';\n\t\t}\n\t} else {\n\t\treturn 'yyyy-MM-dd';\n\t}\n}\n\nexport function isISODate(date: string) {\n\treturn date.length >= 10 && date[4] === '-' && date[7] === '-';\n}\n\nlet defaultFormats: Map<string, string>;\nexport function detectDefaultFormat(locale?: string) {\n\tlocale = locale ?? getLocale();\n\tdefaultFormats = defaultFormats ?? new Map();\n\tif (defaultFormats.has(locale)) return defaultFormats.get(locale);\n\t\n\tlet format: string;\n\ttry {\n\t\tconst isoCode = getRegionISOCode(locale);\n\t\tformat = detectFormat(intlFormat(startOfDay(new Date()), {locale: isoCode}), isoCode);\n\t} catch (_error) {\n\t\tformat = 'yyyy-MM-dd';\n\t}\n\tdefaultFormats.set(locale, format);\n\treturn format;\n}\n\nexport type DateFormatOptions = {\n\tlocale?: string;\n\twithTime?: boolean;\n}\n\nexport function getDateFormat(opt?: DateFormatOptions): DateFormatString {\n\tlet format = detectDefaultFormat(opt?.locale);\n\tif (opt?.withTime) {\n\t\tformat += ' HH:mm:ss';\n\t}\n\treturn format;\n}\n\nexport function format(date: number|string|Date, format?: DateFormatString, locale?: string) {\n\treturn getDateFormatter(locale ?? getLocale(), format)(date as number|string|Date);\n}\n\nexport function parse(date: string, locale: string) {\n\tconst d = fnsParse(date as string, detectFormat(date as string, locale), new Date());\n\treturn isNaN(d.getTime()) ? null : d;\n}\n\nexport function getDateFormatter(locale: string, format?: DateFormatString) : DateFormatterFunction {\n\tformat = format ?? detectDefaultFormat(locale);\n\tconst map = formatterMap.has(locale) ? formatterMap.get(locale) : formatterMap.set(locale, new Map()).get(locale);\n\tif (!map.has(format)) map.set(format, createDateFormatter(locale, format));\n\treturn map.get(format);\n}\n\nexport function getDateLocale(code: string) {\n\tif (localeMap.has(code)) return localeMap.get(code);\n\tcode = code.split('-')[0];\n\tif (localeMap.has(code)) return localeMap.get(code);\n\treturn localeMap.get('en-US');\n}\n\n// https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\nexport function createDateFormatter(locale: string, defaultFormat?: DateFormatString) : DateFormatterFunction {\n\tdefaultFormat = defaultFormat ?? detectDefaultFormat(locale);\n\treturn (date: number|string|Date, strFormat?: string) => {\n\t\tif (isString(date)) {\n\t\t\tdate = isISODate(date) ? parseISO(date as string) : parse(date as string, locale);\n\t\t} else if (!(date instanceof Date) && !isNaN(date as number)) {\n\t\t\tdate = serialDateToDate(date as number);\n\t\t}\n\t\t\n\t\tif (date == null) return '';\n\t\treturn fnsFormat(date as Date, strFormat || defaultFormat, {locale: getDateLocale(locale)});\n\t};\n}\n\nexport function getFiscalYear(date: Date, monthOffset: number) {\n\tconst y = date.getFullYear();\n\tconst m = date.getMonth() + 1;\n\treturn monthOffset >= 0\n\t\t? y - Math.floor((12 - m + monthOffset) / 12)\n\t\t: y + Math.floor((m - monthOffset - 1) / 12);\n}\n\nexport function getFiscalQuarter(date: Date, monthOffset: number) {\n\tconst m = mod(date.getMonth() - monthOffset, 12);\n\treturn Math.floor(m / 3) + 1;\n}\n\nexport function stripTime(date: Date) {\n\tdate.setHours(0);\n\tdate.setMinutes(0);\n\tdate.setSeconds(0);\n\tdate.setMilliseconds(0);\n\treturn date;\n}\n\nexport function getFiscalYearBounds(date: Date, monthOffset: number): [Date, Date] {\n\tlet min = new Date(date.getFullYear(), mod(monthOffset, 12), 1);\n\tif (compareAsc(date, min) < 0) min = subYears(min, 1);\n\treturn [min, stripTime(endOfMonth(addMonths(new Date(min), 11)))];\n}\n\nexport function getFiscalISOWeek(date: Date, monthOffset = 0, firstDayOfWeek = 1) : [number, number] {\n\tconst [fyMin, fyMax] = getFiscalYearBounds(date, monthOffset);\n\tconst doy = differenceInDays(date, fyMin) + 1;\n\tconst dow = ((getISODay(date) + firstDayOfWeek - 2) % 7) + 1;\n\tlet fy = getFiscalYear(date, monthOffset);\n\n\t// https://en.wikipedia.org/wiki/ISO_week_date#Calculating_the_week_number_from_an_ordinal_date\n\tlet w = Math.floor((10 + doy - dow) / 7);\n\n\t// https://en.wikipedia.org/wiki/ISO_week_date#Weeks_per_year\n\tif (w == 0) {\n\t\tconst lastWeekDay = subDays(fyMin, 4); \n\t\tconst doyLastWeekDay = differenceInDays(lastWeekDay, subMonths(fyMin, 12)) + 1;\n\t\tconst dowLastWeekDay = (getISODay(lastWeekDay) + firstDayOfWeek - 1) % 7;\n\t\tw = Math.floor((10 + doyLastWeekDay - dowLastWeekDay) / 7);\n\t\t--fy;\n\t} else if (w > 52) {\n\t\tconst lastWeekDay = subDays(fyMax, 3); \n\t\tconst doyLastWeekDay = differenceInDays(lastWeekDay, fyMin) + 1;\n\t\tconst dowLastWeekDay = (getISODay(lastWeekDay) + firstDayOfWeek - 1) % 7;\n\t\tif (w > Math.floor((10 + doyLastWeekDay - dowLastWeekDay) / 7)) {\n\t\t\tw = 1;\n\t\t\t++fy;\n\t\t}\n\t}\n\n\treturn [w, fy];\n}\n\nexport function dateToSerialDate(date: Date) {\n\treturn 25569.0 + ((date.getTime() - (date.getTimezoneOffset() * 60 * 1000)) / (1000 * 60 * 60 * 24));\n}\n\n\n// https://stackoverflow.com/a/67130235\nexport function serialDateToDate(sn: number) {\n\t// for dates > 1900-02-28\n\treturn new Date(Date.UTC(0, 0, sn - 1));\n\n\t// for dates <= 1900-02-28\n\t// return new Date(Date.UTC(0, 0, excelSerialDate));\n}\n\nexport function workday(sn: number, count: number, holidays?: number[]) {\n\tconst date = serialDateToDate(sn);\n\tlet wd = date.getDay();\n\tlet holidayMap: Map<number, number>;\n\tif (holidays && holidays.length > 0) holidays.forEach(h => holidayMap.set(h, h));\n\n\twhile (count > 0) {\n\t\t++sn;\n\t\twd = (++wd > 7 ? 1 : wd);\n\t\tif (wd < 6 && (!holidayMap || !holidayMap.has(sn))) --count;\n\t}\n\t\n\treturn sn;\n}"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@omegagrid/core",
3
- "version": "0.6.111",
3
+ "version": "0.6.113",
4
4
  "license": "UNLICENSED",
5
5
  "description": "Core components",
6
6
  "main": "./dist/index.js",
@@ -36,7 +36,7 @@
36
36
  },
37
37
  "dependencies": {
38
38
  "@fortawesome/fontawesome-svg-core": "6.4.2",
39
- "@omegagrid/localize": "^0.6.111",
39
+ "@omegagrid/localize": "^0.6.113",
40
40
  "@riovir/wc-fontawesome": "^0.1.9",
41
41
  "color": "^4.2.3",
42
42
  "date-fns": "^3.2.0",