nmce-func 1.4.0 → 1.5.0

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.
@@ -49,6 +49,10 @@ export declare class DateFunc {
49
49
  static getStartOfToday(): Date;
50
50
  static getDaysBetween(d1: Date | string | number, d2: Date | string | number): number;
51
51
  static addDays(dt: Date | string | number, days: number): Date;
52
+ static addMonths(dt: Date | string | number, months: number): Date;
53
+ static addYears(dt: Date | string | number, years: number): Date;
54
+ static addHours(dt: Date | string | number, hours: number): Date;
55
+ static addMinutes(dt: Date | string | number, minutes: number): Date;
52
56
  /**
53
57
  * Start of today
54
58
  */
@@ -149,18 +149,18 @@ class DateFunc {
149
149
  if (typeof dt === 'string') {
150
150
  const r = Date.parse(dt);
151
151
  if (isNaN(r)) {
152
- throw new RangeError('Invalid string for Date');
152
+ throw new RangeError($localize `Invalid string for Date`);
153
153
  }
154
154
  return new Date(r);
155
155
  }
156
156
  if (typeof dt === 'number') {
157
157
  const rd = new Date(dt);
158
158
  if (Number.isNaN(rd.valueOf())) {
159
- throw new RangeError('Invalid number for Date');
159
+ throw new RangeError($localize `Invalid number for Date`);
160
160
  }
161
161
  return rd;
162
162
  }
163
- throw new TypeError('Expect Date, string or number');
163
+ throw new TypeError($localize `Expect Date, string or number`);
164
164
  }
165
165
  /**
166
166
  * Similar to dateDataToDate, but allow null and defined semantically.
@@ -174,21 +174,21 @@ class DateFunc {
174
174
  if (typeof dt === 'string') {
175
175
  const r = Date.parse(dt);
176
176
  if (isNaN(r)) {
177
- throw new RangeError('Invalid string for Date');
177
+ throw new RangeError($localize `Invalid string for Date`);
178
178
  }
179
179
  return new Date(r);
180
180
  }
181
181
  if (typeof dt === 'number') {
182
182
  const rd = new Date(dt);
183
183
  if (Number.isNaN(rd.valueOf())) {
184
- throw new RangeError('Invalid number for Date');
184
+ throw new RangeError($localize `Invalid number for Date`);
185
185
  }
186
186
  return rd;
187
187
  }
188
188
  if (dt == null) {
189
189
  return dt;
190
190
  }
191
- throw new TypeError('Expect Date, string or number');
191
+ throw new TypeError($localize `Expect Date, string or number`);
192
192
  }
193
193
  /**
194
194
  * Transform UTC DateTime to local date without H, M and S. For example, the month day of 2018-01-23T22:00:00Z is 24 in Australia.
@@ -286,6 +286,26 @@ class DateFunc {
286
286
  const r = dat.plus({ days: days });
287
287
  return r.toJSDate();
288
288
  }
289
+ static addMonths(dt, months) {
290
+ const dat = DateTime.fromJSDate(this.dateDataToDate(dt));
291
+ const r = dat.plus({ months: months });
292
+ return r.toJSDate();
293
+ }
294
+ static addYears(dt, years) {
295
+ const dat = DateTime.fromJSDate(this.dateDataToDate(dt));
296
+ const r = dat.plus({ years: years });
297
+ return r.toJSDate();
298
+ }
299
+ static addHours(dt, hours) {
300
+ const dat = DateTime.fromJSDate(this.dateDataToDate(dt));
301
+ const r = dat.plus({ hours: hours });
302
+ return r.toJSDate();
303
+ }
304
+ static addMinutes(dt, minutes) {
305
+ const dat = DateTime.fromJSDate(this.dateDataToDate(dt));
306
+ const r = dat.plus({ minutes: minutes });
307
+ return r.toJSDate();
308
+ }
289
309
  /**
290
310
  * Start of today
291
311
  */
@@ -424,7 +444,7 @@ class DateFunc {
424
444
  */
425
445
  static getHMFromMins(minutes) {
426
446
  if (minutes >= 24 * 60 || minutes < 0) {
427
- throw new RangeError('Valid input should be greater than or equal to 0 and less than 1440.');
447
+ throw new RangeError($localize `Valid input should be greater than or equal to 0 and less than 1440.`);
428
448
  }
429
449
  const h = minutes / 60 | 0, m = minutes % 60 | 0;
430
450
  return DateTime.utc().set({ hour: h, minute: m }).toFormat('HH:mm');
@@ -882,10 +902,6 @@ class UuidFunc {
882
902
  }
883
903
  }
884
904
 
885
- /*
886
- * Public API Surface of nmce-func
887
- */
888
-
889
905
  /**
890
906
  * Generated bundle index. Do not edit.
891
907
  */
@@ -1 +1 @@
1
- {"version":3,"file":"nmce-func.mjs","sources":["../../../projects/nmce-func/src/_func/addressFunc.ts","../../../projects/nmce-func/src/_func/currencyFunc.ts","../../../projects/nmce-func/src/_func/dateFunc.ts","../../../projects/nmce-func/src/_func/htmlPrintFunc.ts","../../../projects/nmce-func/src/_func/javascriptFunc.ts","../../../projects/nmce-func/src/_func/jsonFunc.ts","../../../projects/nmce-func/src/_func/stringAusFunc.ts","../../../projects/nmce-func/src/_func/stringFunc.ts","../../../projects/nmce-func/src/_func/uuidFunc.ts","../../../projects/nmce-func/src/public-api.ts","../../../projects/nmce-func/src/nmce-func.ts"],"sourcesContent":["export class AddressFunc {\r\n\t/**\r\n\t * Compose to one line separated by comma\r\n\t * @param st1\r\n\t * @param st2\r\n\t * @param city\r\n\t * @param state\r\n\t * @param postcode\r\n\t */\r\n\tstatic composeOneLineAddress(st1: string | undefined, st2: string | undefined, city: string | undefined, state: string | undefined, postcode: string | undefined): string {\r\n\t\treturn AddressFunc.composeAddress(st1, st2, city, state, postcode, ', ');\r\n\t}\r\n\r\n\t/**\r\n\t * Compose to multiple separated by \\n\r\n\t * @param st1\r\n\t * @param st2\r\n\t * @param city\r\n\t * @param state\r\n\t * @param postcode\r\n\t */\r\n\tstatic composeMultiLineAddress(st1: string | undefined, st2: string | undefined, city: string | undefined, state: string | undefined, postcode: string | undefined): string {\r\n\t\treturn AddressFunc.composeAddress(st1, st2, city, state, postcode, '\\n');\r\n\t}\r\n\r\n\t/**\r\n\t * Compose with separator\r\n\t * @param st1\r\n\t * @param st2\r\n\t * @param city\r\n\t * @param state\r\n\t * @param postcode\r\n\t * @param sep\r\n\t */\r\n\tstatic composeAddress(st1: string | undefined, st2: string | undefined, city: string | undefined, state: string | undefined, postcode: string | undefined, sep: string | undefined): string {\r\n\t\tconst r = (st1 ? (st1 + sep) : '') + (st2 ? (st2 + sep) : '') + (city ? (city + sep) : '') + (state ? (state + ' ') : '') + (postcode ? postcode : '');\r\n\t\treturn r;\r\n\t}\r\n\r\n\tstatic composeGoogleMapsAuUrl(st1: string | undefined, st2: string | undefined, city: string | undefined, state: string | undefined, country: string | undefined): string {\r\n\t\tconst googleBaseUrl = 'https://www.google.com.au/maps?hl=en&q=';\r\n\t\tconst fff = (s: string | undefined): string => {\r\n\t\t\tif (!s) {\r\n\t\t\t\treturn '';\r\n\t\t\t}\r\n\r\n\t\t\treturn '+' + encodeURIComponent(s.replace(' ', '+')) + ',';\r\n\t\t};\r\n\r\n\t\tconst ss = fff(st1) + fff(st2) + fff(city) + fff(state) + fff(country);\r\n\t\treturn googleBaseUrl + ss;\r\n\t}\r\n\r\n}\r\n","/**\r\n * Currency calculations. Undefined input of number is considered zero, just like null.\r\n * Simple functions for currency before you decide to use more comprehensive ones:\r\n * https://github.com/scurker/currency.js\r\n * https://github.com/dinerojs/dinero.js Up to date and popular\r\n */\r\nexport class CurrencyFunc {\r\n\tprivate static DECIMAL_SEPARATOR = '.';\r\n\tprivate static THOUSANDS_SEPARATOR = ',';\r\n\r\n\tprivate static PADDING = '000000';\r\n\r\n\t/**\r\n\t * Banker rounding\r\n\t * @param num\r\n\t * @param decimalPlace default 0\r\n\t */\r\n\tstatic bankerRound(num: number | null | undefined, decimalPlace?: number): number {\r\n\t\tif (!num) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tconst d = decimalPlace || 0;\r\n\t\tconst m = Math.pow(10, d);\r\n\t\tconst n = +(d ? num * m : num).toFixed(8); // Avoid rounding errors\r\n\t\tconst i = Math.floor(n), f = n - i;\r\n\t\tconst e = 1e-8; // Allow for rounding errors in f\r\n\t\tconst r = (f > 0.5 - e && f < 0.5 + e) ?\r\n\t\t\t((i % 2 === 0) ? i : i + 1) : Math.round(n);\r\n\t\treturn d ? r / m : r;\r\n\t\t// http://stackoverflow.com/questions/3108986/gaussian-bankers-rounding-in-javascript\r\n\t}\r\n\r\n\t/**\r\n\t * Banker rounding to 5 cents\r\n\t * @param num \r\n\t * @returns \r\n\t */\r\n\tstatic bankerRoundTo5cents(num: number | null | undefined): number {\r\n\t\tif (!num) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tconst r = this.bankerRound(Math.round(num / 0.05) * 0.05, 2);\r\n\t\treturn r;\r\n\t}\r\n\r\n\t// static transformCurrency(value: number | string | undefined, fractionSize: number = 2): string { In favour of dinerojs\r\n\t// \tlet [integer, fraction = ''] = (value || '').toString()\r\n\t// \t\t.split(this.DECIMAL_SEPARATOR);\r\n\r\n\t// \tfraction = fractionSize > 0\r\n\t// \t\t? this.DECIMAL_SEPARATOR + (fraction + this.PADDING).substring(0, fractionSize)\r\n\t// \t\t: '';\r\n\r\n\t// \tinteger = integer.replace(/\\B(?=(\\d{3})+(?!\\d))/g, this.THOUSANDS_SEPARATOR);\r\n\r\n\t// \treturn integer + fraction;\r\n\t// }\r\n\r\n\t// static parseCurrency(value: string | undefined, fractionSize: number = 2): string {\r\n\t// \tlet [integer, fraction = ''] = (value || '').split(this.DECIMAL_SEPARATOR);\r\n\r\n\t// \tinteger = integer.replace(new RegExp(this.THOUSANDS_SEPARATOR, 'g'), '');\r\n\r\n\t// \tfraction = parseInt(fraction, 10) > 0 && fractionSize > 0\r\n\t// \t\t? this.DECIMAL_SEPARATOR + (fraction + this.PADDING).substring(0, fractionSize)\r\n\t// \t\t: '';\r\n\r\n\t// \treturn integer + fraction;\r\n\t// }\r\n\r\n\r\n\t//http://stackoverflow.com/questions/2998784/how-to-output-integers-with-leading-zeros-in-javascript\r\n\tstatic pad(num: number | null | undefined, size: number): string {\r\n\t\tif (num == null){\r\n\t\t\t return '';\r\n\t\t}\r\n\r\n\t\tif (num ===0){\r\n\t\t\treturn '0';\r\n\t\t}\r\n\r\n\t\tconst numText = num.toString();\r\n\t\tlet s = numText + '';\r\n\t\twhile (s.length < size) { s = '0' + s; }\r\n\t\treturn s;\r\n\t}\r\n\r\n\t/**\r\n\t * Sum array of numbers\r\n\t * @param ns \r\n\t * @returns \r\n\t */\r\n\tstatic sum(ns: (number | null | undefined)[]): number {\r\n\t\tconst r = <number>ns.reduce((a, b) => (a ?? 0) + (b ?? 0), 0);\r\n\t\treturn r;\r\n\t}\r\n\r\n}\r\n","import { DateTime, Duration, Settings } from 'luxon';\r\n\r\nexport class DateFunc {\r\n\t/**\r\n\t * At runtime, there's no simple guarantee that the input is Date. Sometimes you codes expect date, but the response from the Web service may give you string or number.\r\n\t * This function give you safe parse of date data from I/O, not of your control.\r\n\t * If the data is invalid, throws RangeError or TypeError.\r\n\t * @param dt \r\n\t * @returns \r\n\t */\r\n\tstatic dateDataToDate(dt: Date | string | number) : Date {\r\n\t\tif (dt instanceof Date){\r\n\t\t\treturn dt;\r\n\t\t}\r\n\r\n\t\tif (typeof dt === 'string'){\r\n\t\t\tconst r = Date.parse(dt);\r\n\t\t\tif (isNaN(r)){\r\n\t\t\t\tthrow new RangeError('Invalid string for Date');\r\n\t\t\t}\r\n\r\n\t\t\treturn new Date(r);\r\n\t\t}\r\n\r\n\t\tif (typeof dt === 'number'){\r\n\t\t\tconst rd = new Date(dt)\r\n\t\t\tif (Number.isNaN(rd.valueOf())){\r\n\t\t\t\tthrow new RangeError('Invalid number for Date');\r\n\t\t\t}\r\n\r\n\t\t\treturn rd;\r\n\t\t}\r\n\r\n\t\tthrow new TypeError('Expect Date, string or number');\r\n\t}\r\n\r\n\t/**\r\n\t * Similar to dateDataToDate, but allow null and defined semantically.\r\n\t * @param dt \r\n\t * @returns \r\n\t */\r\n\tstatic dateDataToDateOrNull(dt: Date | string | number | null | undefined) : Date | null | undefined {\r\n\t\tif (dt instanceof Date){\r\n\t\t\treturn dt;\r\n\t\t}\r\n\r\n\t\tif (typeof dt === 'string'){\r\n\t\t\tconst r = Date.parse(dt);\r\n\t\t\tif (isNaN(r)){\r\n\t\t\t\tthrow new RangeError('Invalid string for Date');\r\n\t\t\t}\r\n\r\n\t\t\treturn new Date(r);\r\n\t\t}\r\n\r\n\t\tif (typeof dt === 'number'){\r\n\t\t\tconst rd = new Date(dt)\r\n\t\t\tif (Number.isNaN(rd.valueOf())){\r\n\t\t\t\tthrow new RangeError('Invalid number for Date');\r\n\t\t\t}\r\n\r\n\t\t\treturn rd;\r\n\t\t}\r\n\r\n\t\tif (dt == null){ \r\n\t\t\treturn dt;\r\n\t\t}\r\n\r\n\t\tthrow new TypeError('Expect Date, string or number');\r\n\t}\r\n\r\n\t/**\r\n\t * Transform UTC DateTime to local date without H, M and S. For example, the month day of 2018-01-23T22:00:00Z is 24 in Australia.\r\n\t * @param dtUtc\r\n\t */\r\n\tstatic dateTimeUtcToLocalDateNumber(dtUtc: Date | string | number | null | undefined): number | null | undefined {\r\n\t\tif (dtUtc == null) {\r\n\t\t\treturn dtUtc;\r\n\t\t}\r\n\r\n\t\tconst localDt = this.dateDataToDate(dtUtc);\r\n\t\tconst localDNum = localDt.setHours(0, 0, 0, 0);\r\n\r\n\t\treturn localDNum;\r\n\t}\r\n\r\n\t/**\r\n\t * Date only. However, the date may still be in UTC.\r\n\t * @param dtUtc\r\n\t * @returns new Date object.\r\n\t */\r\n\tstatic dateTimeUtcToLocalDate(dtUtc: Date | string | number | null | undefined): Date | null | undefined {\r\n\t\tif (dtUtc == null) {\r\n\t\t\treturn dtUtc;\r\n\t\t}\r\n\r\n\t\tconst localDt = this.dateDataToDate(dtUtc);\r\n\t\tconst localNum = localDt.setHours(0, 0, 0, 0);\r\n\t\treturn new Date(localNum);\r\n\t}\r\n\r\n\t/**\r\n\t * '2018-01-23T22:00:00Z' will become '2018-01-24' in Australia.\r\n\t * @param dtUtc \r\n\t * @returns new Date object.\r\n\t */\r\n\tstatic localISODateString(dtUtc: Date | string | number | null | undefined): string | null | undefined {\t\t\r\n\t const dt = this.dateTimeUtcToLocalDate(dtUtc);\r\n\t\tif (dt == null) {\r\n\t\t\treturn dt;\r\n\t\t}\r\n\r\n\t\tconst d= DateTime.fromJSDate(dt);\r\n\t\treturn d.toISODate();\r\n\t}\r\n\r\n\t/**\r\n\t * local date ONLY (no time) to UTC date.\r\n\t * The input could be a string of yyyy-MM-dd, or a Date Object.\r\n\t * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date\r\n\t * While the time value at the heart of a Date object is UTC, the basic methods to fetch the date and time \r\n\t * or its components all work in the local (i.e. host system) time zone and offset.\r\n\t * @param dt if dt contain time info, it will become dt.setHours(0, 0, 0, 0)\r\n\t */\r\n\tstatic localDateToUtc(d: Date | string | number | null | undefined | string): Date | null | undefined {\r\n\t\tif (d == null) {\r\n\t\t\treturn d;\r\n\t\t}\r\n\r\n\t\tconst dt = this.dateDataToDate(d);\r\n\t\tconst n = dt.setHours(0, 0, 0, 0);\r\n\t\tconst offset = dt.getTimezoneOffset() * 60000;\r\n\t\treturn new Date(n + offset);\r\n\t}\r\n\r\n\tstatic getEndOfWeek(dt: Date | string | number) : Date {\r\n\t\tconst dateTime = DateTime.fromJSDate(this.dateDataToDate(dt));\r\n\t\treturn dateTime.endOf('week').toJSDate();\r\n\t}\r\n\r\n\tstatic getStartOfWeek(dt: Date | string | number) : Date {\r\n\t\tconst dateTime = DateTime.fromJSDate(this.dateDataToDate(dt));\r\n\t\treturn dateTime.startOf('week').toJSDate();\r\n\t}\r\n\r\n\tstatic getEndOfMonth(dt: Date | string | number) : Date {\r\n\t\tconst dateTime = DateTime.fromJSDate(this.dateDataToDate(dt));\r\n\t\treturn dateTime.endOf('month').toJSDate();\r\n\t}\r\n\r\n\tstatic getStartOfMonth(dt: Date | string | number) : Date {\r\n\t\tconst dateTime = DateTime.fromJSDate(this.dateDataToDate(dt));\r\n\t\treturn dateTime.startOf('month').toJSDate();\r\n\t}\r\n\r\n\tstatic getEndOfDate(dt: Date | string | number): Date {\r\n\t\tconst dateTime = DateTime.fromJSDate(this.dateDataToDate(dt));\r\n\t\treturn dateTime.endOf('day').toJSDate();\r\n\t}\r\n\r\n\tstatic getStartOfDate(dt: Date | string | number): Date {\r\n\t\tconst dateTime = DateTime.fromJSDate(this.dateDataToDate(dt));\r\n\t\treturn dateTime.startOf('day').toJSDate();\r\n\t}\r\n\r\n\tstatic getEndOfToday(): Date | null | undefined {\r\n\t\treturn this.getEndOfDate(Date.now());\r\n\r\n\t}\r\n\r\n\tstatic getStartOfToday(): Date {\r\n\t\treturn this.getStartOfDate(Date.now());\r\n\t}\r\n\r\n\tstatic getDaysBetween(d1: Date | string | number, d2: Date | string | number): number {\r\n\t\tconst dm1 = DateTime.fromJSDate(this.dateDataToDate(d1));\r\n\t\tconst dm2 = DateTime.fromJSDate(this.dateDataToDate(d1));\r\n\t\treturn dm2.diff(dm1, 'days').days;\r\n\t}\r\n\r\n\t//inspired https://stackoverflow.com/questions/563406/add-days-to-javascript-date\r\n\tstatic addDays(dt: Date | string | number, days: number) : Date {\r\n\t\tconst dat = DateTime.fromJSDate(this.dateDataToDate(dt));\r\n\t\tconst r = dat.plus({days: days});\r\n\t\treturn r.toJSDate();\r\n\t}\r\n\r\n\t/**\r\n\t * Start of today\r\n\t */\r\n\tstatic get today(): Date {\r\n\t\treturn this.getStartOfToday();\r\n\t}\r\n\r\n\tstatic get now(): Date {\r\n\t\treturn new Date(Date.now());\r\n\t}\r\n\r\n\t/**\r\n\t * From now, next 5 minute mark. For example 2:23:44 will be 2:25:00;\r\n\t * @returns \r\n\t */\r\n\tstatic getNext5MinuteMark(): Date {\r\n\t\tconst m = DateTime.now().set({second: 0, millisecond:0});\r\n\t\tconst minute = m.minute;\r\n\t\tconst mod = minute % 5;\r\n\t\tif (mod) {\r\n\t\t\tconst delta = 5 - mod;\r\n\t\t\treturn m.plus({minutes: delta}).toJSDate();\r\n\t\t}\r\n\r\n\t\treturn m.toJSDate();\r\n\t}\r\n\r\n\tstatic getYMD(d: Date | string | number) {\r\n\t\tconst dt = DateTime.fromJSDate(this.dateDataToDate(d));\r\n\t\treturn dt.toFormat('yyyyMMdd');\r\n\t}\r\n\r\n\tstatic getDMYWithSlash(d: Date | string | number) {\r\n\t\tconst dt = DateTime.fromJSDate(this.dateDataToDate(d));\r\n\t\treturn dt.toFormat('dd/MM/yyyy');\r\n\t}\r\n\r\n\tstatic getDMYHmWithSlash(d: Date | string | number) {\r\n\t\tconst dt = DateTime.fromJSDate(this.dateDataToDate(d));\r\n\t\treturn dt.toFormat('dd/MM/yyyy HH:mm');\r\n\t}\r\n\r\n\t/**\r\n\t * \r\n\t * @param dtUtc In 24 hour format, and the date separator depending on the system or Luxon default locale\r\n\t * @returns \r\n\t */\r\n\tstatic getDateTime24Simple(dtUtc: Date | string | number | null | undefined) {\r\n\t\tif (dtUtc == null) {\r\n\t\t\treturn dtUtc;\r\n\t\t}\r\n\t\t\r\n\t\tconst d = this.dateDataToDate(dtUtc);\r\n\t\tconst dt = DateTime.fromJSDate(d);\r\n\t\treturn dt.toLocaleString(DateTime.DATE_SHORT) + ' ' + dt.toLocaleString(DateTime.TIME_24_SIMPLE);\r\n\t}\r\n\r\n\tstatic setDefaultLocale(locale: string){\r\n\t\tSettings.defaultLocale=locale;\r\n\t}\r\n\r\n\tstatic getDefaultLocale(){\r\n\t\treturn Settings.defaultLocale;\r\n\t}\r\n\r\n\tstatic setDefaultZone(zone: string){\r\n\t\tSettings.defaultZone=zone;\r\n\t}\r\n\r\n\tstatic getDefaultZone() : string {\r\n\t\treturn Settings.defaultZone.name;\r\n\t}\r\n\r\n\tstatic isZoneValid(): boolean{\r\n\t\treturn Settings.defaultZone.isValid;\r\n\t}\r\n\r\n\t/**\r\n\t * For example, in AEST, it is -600.\r\n\t * @returns \r\n\t */\r\n\tstatic getLocalTimezoneOffset(): number {\r\n\t\tconst dt = new Date(Date.now());\r\n\t\treturn dt.getTimezoneOffset();\r\n\t}\r\n\r\n\t/**\r\n\t * Get hour of the date. If Date is not defined, the hour will be current hour.\r\n\t * @param dtUtc\r\n\t */\r\n\tstatic getHour(dtUtc: Date | string | number): number {\r\n\t\tconst dt = DateTime.fromJSDate(this.dateDataToDate(dtUtc));\r\n\t\treturn dt.hour;\r\n\t}\r\n\r\n\tstatic getMinute(dtUtc: Date | string | number): number {\r\n\t\tconst dt = DateTime.fromJSDate(this.dateDataToDate(dtUtc));\r\n\t\treturn dt.minute;\r\n\t}\r\n\r\n\tstatic GetHM(dtUtc: Date | string | number): {h: number, m: number}{\r\n\t\tconst dt = DateTime.fromJSDate(this.dateDataToDate(dtUtc));\r\n\t\treturn {h: dt.hour, m: dt.minute};\r\n\t}\r\n\r\n\tstatic composeDateTime(dt: Date | string | number, h: number = 0, minute: number = 0, second: number = 0): Date {\r\n\t\treturn new Date( this.dateDataToDate(dt).setHours(h, minute, second, 0));\r\n\t}\r\n\r\n\tstatic olderThan24Hours(d: Date | string | number): boolean {\r\n\t\tconst m = DateTime.fromJSDate(this.dateDataToDate(d));\r\n\t\treturn DateTime.now().diff(m, 'hours') >= Duration.fromISO('PT24H');\r\n\t}\r\n\r\n\tstatic olderThanHours(d: Date | string | number, hours: number) : boolean {\r\n\t\tconst m = DateTime.fromJSDate(this.dateDataToDate(d));\r\n\t\tconst diff = DateTime.now().diff(m, 'hours'); \r\n\t\tconst duration = Duration.fromISO(`PT${hours}H`);\r\n\t\tconsole.debug('diff: ' + diff.hours + ' duration: ' + duration.hours);\r\n\t\treturn diff.hours >= duration.hours;\r\n\t}\r\n\r\n\tstatic olderThanMinutes(d: Date | string | number, minutes: number) {\r\n\t\tconst m = DateTime.fromJSDate(this.dateDataToDate(d));\r\n\t\treturn DateTime.now().diff(m, 'minutes') >= Duration.fromMillis(minutes*60*1000);\r\n\t}\r\n\r\n\t/**\r\n\t * It could be 11PM yesterday, and 1 AM today. Actually based on local today.\r\n\t */\r\n\tstatic olderThan1Day(dtUtc: Date | string | number): boolean {\r\n\t\treturn DateFunc.getDayAge(dtUtc) > 0;\r\n\t}\r\n\r\n\tstatic getHourAge(d: Date | string | number) {\r\n\t\tconst m = DateTime.fromJSDate(this.dateDataToDate(d));\r\n\t\treturn DateTime.now().diff(m, 'hours').hours;\r\n\t}\r\n\r\n\t/**\r\n\t * Compare date with now.\r\n\t * @param dtUtc\r\n\t */\r\n\tstatic getDayAge(d: Date | string | number) {\r\n\t\tconst m = DateTime.fromJSDate(this.dateDataToDate(d));\r\n\t\treturn DateTime.now().diff(m, 'days').days;\r\n\t}\r\n\r\n\t/**\r\n\t * How many years from now.\r\n\t * @param d\r\n\t * @returns\r\n\t */\r\n\tstatic getAge(d: Date | string | number) {\r\n\t\tconst m = DateTime.fromJSDate(this.dateDataToDate(d));\r\n\t\treturn DateTime.now().diff(m, 'years').years;\r\n\t}\r\n\r\n\t/**\r\n\t * Convert minutes from midnight to HH:mm text\r\n\t * @param minutes\r\n\t */\r\n\tstatic getHMFromMins(minutes: number): string {\r\n\t\tif (minutes >= 24 * 60 || minutes < 0) {\r\n\t\t\tthrow new RangeError('Valid input should be greater than or equal to 0 and less than 1440.');\r\n\t\t}\r\n\t\tconst h = minutes / 60 | 0,\r\n\t\t\tm = minutes % 60 | 0;\r\n\t\treturn DateTime.utc().set({hour: h, minute: m}).toFormat('HH:mm');\r\n\t}\r\n\r\n\tstatic getMinutesSinceMidnight(d: Date | string | number) {\r\n\t\tconst dt = DateTime.fromJSDate(this.dateDataToDate(d));\r\n\t\tconst midnight = dt.startOf('day');\r\n\t\treturn dt.diff(midnight, 'minutes').minutes;\r\n\t}\r\n\r\n\tstatic getMinutesBetween(start: Date | string | number, end: Date | string | number) {\r\n\t\tconst m = DateTime.fromJSDate(this.dateDataToDate(start));\r\n\t\tconst m2 = DateTime.fromJSDate(this.dateDataToDate(end));\r\n\t\treturn m2.diff(m, 'minutes').minutes;\r\n\t}\r\n}\r\n\r\n","export class HtmlPrintFunc {\r\n\t/**\r\n\t * Print with CSS for internal reports\r\n\t * @param htmlTags\r\n\t * @param cssUrl\r\n\t */\r\n\tstatic printWithCSS(htmlTags: string, cssUrl: string) {\r\n\t\tif (window) {\r\n\t\t\tconst htmlToPrint = `<html><head>\r\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\"/>\r\n<link rel=\"stylesheet\" type=\"text/css\" href=\"${cssUrl}\" media=\"screen,print\"/>\r\n</head><body onload=\"window.print()\">${htmlTags}</body></html>`;\r\n\r\n\t\t\tconst popup = window.open('', '_blank', 'width=1024,height=768');\r\n\t\t\tpopup?.document.open();\r\n\t\t\tpopup?.document.write(htmlToPrint);\r\n\r\n\t\t\tpopup?.document.close();\r\n\t\t}\r\n\t\treturn true;\r\n\t}\r\n\r\n\t/**\r\n\t * Print for external documents.\r\n\t * @param htmlTags\r\n\t */\r\n\tstatic print(htmlTags: string) {\r\n\t\tif (window) {\r\n\t\t\tconst htmlToPrint = `<html><head>\r\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\"/>\r\n</head><body onload=\"window.print()\">${htmlTags}</body></html>`;\r\n\r\n\t\t\tconst popup = window.open('', '_blank', 'width=1024,height=768');\r\n\t\t\tpopup?.document.open();\r\n\t\t\tpopup?.document.write(htmlToPrint);\r\n\r\n\t\t\tpopup?.document.close();\r\n\t\t}\r\n\t\treturn true;\r\n\t}\r\n\r\n\t/**\r\n\t * Print image url through html img.\r\n\t * @param url \r\n\t */\r\n\tstatic printImage(url: string) {\r\n\t\tconst imageTags = `<img src=\"${url}\" alt=\"Image from URL\"/>`;\r\n\t\tHtmlPrintFunc.print(imageTags);\r\n\t}\r\n}\r\n","export class JavaScriptFunc {\r\n\t/**\r\n\t * Some business functions depend on external JavaScript libraries. Lazy loading of respective business modules is good, \r\n\t * and this function supports lazy loading of JS libraries.\r\n\t * @param scriptUrl \r\n\t * @param type things like module.\r\n\t * @returns Promise for subsequent JS function calls.\r\n\t */\r\n\tstatic loadExternalScript(scriptUrl: string, type?: string) {\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tconst scriptElement = document.createElement('script');\r\n\t\t\tif (type){\r\n\t\t\t\tscriptElement.type=type;\r\n\t\t\t}\r\n\r\n\t\t\tscriptElement.src = scriptUrl;\r\n\t\t\tscriptElement.onload = resolve;\r\n\t\t\tdocument.body.appendChild(scriptElement);\r\n\t\t});\r\n\t}\r\n}\r\n","import { DateFunc } from './dateFunc';\r\n\r\n/**\r\n * Basic JSON functions\r\n */\r\nexport class JsonFunc {\r\n\t/**\r\n\t * \r\n\t * @param array Group by a property of array element.\r\n\t * @param propertyName \r\n\t * @returns \r\n\t */\r\n\tstatic groupBy<T>(array: Array<T>, propertyName: string) {\r\n\t\treturn array.reduce(function (acc: any, obj: any) {\r\n\t\t\tconst key = obj[propertyName];\r\n\t\t\tif (!acc[key]) {\r\n\t\t\t\tacc[key] = [];\r\n\t\t\t}\r\n\t\t\tacc[key].push(obj);\r\n\t\t\treturn acc;\r\n\t\t}, {});\r\n\t}\r\n\r\n\t/**\r\n\t * Group by a date property. The key is always of string type and representing milliseconds. \r\n\t * The client should convert the string to number.\r\n\t * Angular date pipe could actually consume such string without explicitly converting to number.\r\n\t * @param array\r\n\t * @param propertyName\r\n\t */\r\n\tstatic groupByDate<T>(array: Array<T>, propertyName: string) {\r\n\t\treturn array.reduce(function (acc: any, obj: any) {\r\n\t\t\tconst key = DateFunc.dateTimeUtcToLocalDateNumber(obj[propertyName]);\r\n\t\t\tif (key != null) {\r\n\t\t\t\tif (!acc[key]) {\r\n\t\t\t\t\tacc[key] = [];\r\n\t\t\t\t}\r\n\t\t\t\tacc[key].push(obj);\r\n\t\t\t}\r\n\t\t\treturn acc;\r\n\t\t}, {});\r\n\t}\r\n\r\n\t/**\r\n\t * Remove null or empty fields including those in nested objects.\r\n\t * This is useful for reducing payload of AJAX serialization.\r\n\t * @param obj \r\n\t */\r\n\tstatic removeNullOrEmptyFields(obj: any) {\r\n\t\tfor (const f in obj) {\r\n\t\t\tlet p = obj[f];\r\n\t\t\tif (p === null || p === '') {\r\n\t\t\t\tdelete obj[f];\r\n\t\t\t} else if (typeof p === 'object' && p !== null) {\r\n\t\t\t\tthis.removeNullOrEmptyFields(p);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * \r\n\t * @param obj Remove null fields of object at only the 1st level.\r\n\t */\r\n\tstatic removeNullFields(obj: any) {\r\n\t\tfor (const f in obj) {\r\n\t\t\tif (obj[f] === null) {\r\n\t\t\t\tdelete obj[f];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n}\r\n","/**\r\n * String functions specific to Australia\r\n */\r\nexport class StringAusFunc {\r\n\r\n\t//thanks to https://github.com/sidorares/australian-business-number/blob/0591475f5978fd122b472edcdc7efe6d96d56f26/index.js\r\n\tprivate static acnWeights = [8, 7, 6, 5, 4, 3, 2, 1];\r\n\tprivate static weights = [10, 1, 3, 5, 7, 9, 11, 13, 15, 17, 19];\r\n\r\n\tprivate static suggestLookup: number[] = StringAusFunc.generateLookup();\r\n\r\n\t/**\r\n\t * Validate medicare number\r\n\t * @param n\r\n\t * @returns validation error message\r\n\t */\r\n\tstatic validateMedicare(n: string | null | undefined): { code: number, message: string } | null {\r\n\t\tif (!n) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tif (n && n.length === 10) {\r\n\t\t\tconst matches = n.match(/^(\\d{8})(\\d)/);\r\n\r\n\t\t\tif (!matches) {\r\n\t\t\t\treturn {\r\n\t\t\t\t\tcode: 2, message: 'Medicare number should be all digit.'\r\n\t\t\t\t};\r\n\t\t\t}\r\n\r\n\t\t\tconst base = matches[1];\r\n\t\t\tconst checkDigit = matches[2];\r\n\t\t\tconst weights = [1, 3, 7, 9, 1, 3, 7, 9];\r\n\r\n\t\t\tlet sum = 0;\r\n\t\t\tfor (let i = 0; i < weights.length; i++) {\r\n\t\t\t\tsum += parseInt(base[i], 10) * weights[i];\r\n\t\t\t}\r\n\r\n\t\t\t//console.debug(`sum: ${sum} checkDigits: ${checkDigit}`);\r\n\t\t\tconst isValid = sum % 10 === parseInt(checkDigit, 10);\r\n\t\t\tif (!isValid) {\r\n\t\t\t\treturn {\r\n\t\t\t\t\tcode: 3, message: 'Checksum is incorrect.'\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\treturn { code: 1, message: 'Length should be 10.' };\r\n\t\t}\r\n\r\n\t\treturn null;\r\n\t}\r\n\r\n\tstatic validateMedicareProviderNumber(providerNumber: string | null | undefined): { code: number, message: string } | null {\r\n\t\tif (!providerNumber) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tif (!/^[0-9]{6}[0-9ABCDEFGHJKLMNPQRTUVWXY][ABFHJKLTWXY]/.test(providerNumber)) {\r\n\t\t\treturn { code: 1, message: 'Not matching provider number format.' };\r\n\t\t}\r\n\r\n\t\tconst practiceLocationValues = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'T', 'U', 'V', 'W', 'X', 'Y'];\r\n\t\tconst remainderValues = ['Y', 'X', 'W', 'T', 'L', 'K', 'J', 'H', 'F', 'B', 'A'];\r\n\t\tconst stemWeights = [3, 5, 8, 4, 2, 1];\r\n\r\n\t\tconst stemNumbers = providerNumber.substr(0, 6).split('').map((char) => parseInt(char));\r\n\t\tconst practiceLoc = practiceLocationValues.findIndex((e) => e === providerNumber[6]);\r\n\t\tconst checksum = providerNumber[7];\r\n\r\n\t\tconst zipped = stemWeights.map((x, i) => [x, stemNumbers[i]]);\r\n\t\tconst sumWeights = zipped.map((y) => y[1] * y[0]).reduce((total, num) => total + num);\r\n\t\tconst remainder = (sumWeights + practiceLoc * 6) % 11;\r\n\r\n\t\tconst result = remainderValues[remainder];\r\n\r\n\t\tconst valid = result === checksum;\r\n\t\tif (!valid) {\r\n\t\t\treturn { code: 2, message: 'Checksum is incorrect.' };\r\n\t\t}\r\n\r\n\t\treturn null;\r\n\t}\r\n\r\n\tstatic validateDVAFileNumber(dva: string | null | undefined): { code: number, message: string } | null {\r\n\t\tif (!dva) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tconst states = ['N', 'V', 'Q', 'S', 'W', 'T'];\r\n\t\tconst warCodes = [' ', 'X', 'KM', 'SR', 'SS', 'SM', 'SWP', 'AGX', 'BW', 'GW', 'CGW', //Australian Forces\r\n\t\t\t'P', 'PX', 'PAD', 'PAM', 'PCA', 'PCR', 'PCV', 'PMS', 'PSW', 'PWO', 'HKX', 'MAL', //British Administration Group\r\n\t\t\t'CN', 'CNX', 'IV', 'NF', 'NG', 'RD', 'RDX', 'SA', 'SAX', 'A', //Other Overseas Forces\r\n\t\t\t'N', 'NX', 'NSW', 'NSM', //New Zealand Administration Group\r\n\t\t\t'BUR', 'CNK', 'CNS', 'FIJ', 'GHA', 'HKS', 'IND', 'KYA', 'MAU', 'MLS', 'MTX', 'MWI', 'NK', 'NGR', 'NRD', 'NSS', 'PK']//British Commonwealth Countries - SP Eligibility\r\n\r\n\t\tif (!states.includes(dva.charAt(0))) {\r\n\t\t\treturn { code: 1, message: 'State incorrect.' };\r\n\t\t}\r\n\r\n\t\tconst ns = dva.match(/\\d+/);\r\n\t\tif (!ns) {\r\n\t\t\treturn { code: 2, message: 'No number.' };\r\n\t\t}\r\n\r\n\t\tconst n = ns[0];\r\n\t\tconst idxOfN = dva.indexOf(n);\r\n\t\tconst warCode = dva.substring(1, idxOfN);\r\n\t\tif (!warCodes.includes(warCode)) {\r\n\t\t\treturn { code: 3, message: 'War code invalid.' }\r\n\t\t}\r\n\r\n\t\tconst lenOfN = n.length;\r\n\t\tconst lenOfWc = warCode.length;\r\n\t\tif (lenOfN + lenOfWc > 7) {\r\n\t\t\treturn { code: 4, message: 'File number length should not be greater 7.' }\r\n\t\t}\r\n\r\n\t\treturn null;\r\n\t}\r\n\r\n\tstatic validateTFN(n: string | null | undefined): { code: number, message: string } | null {\r\n\t\tif (!n) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tconst tfn = n.replace(/\\s+/g, '').replace(/[-]/g, '');\r\n\r\n\t\tconst isNumber = /^[0-9]+$/.test(tfn);\r\n\t\tif (!isNumber) {\r\n\t\t\treturn { code: 1, message: 'Invalid TFN, only numbers are allowed.' };\r\n\t\t}\r\n\r\n\t\tconst length = tfn.length;\r\n\t\tif (length !== 9) {\r\n\t\t\treturn {\r\n\t\t\t\tcode: 2, message: 'Invalid TFN, must have 9 digits.'\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\tconst digits = tfn.split('').map(d => parseInt(d));\r\n\r\n\t\tconst sum = (digits[0] * 1)\r\n\t\t\t+ (digits[1] * 4)\r\n\t\t\t+ (digits[2] * 3)\r\n\t\t\t+ (digits[3] * 7)\r\n\t\t\t+ (digits[4] * 5)\r\n\t\t\t+ (digits[5] * 8)\r\n\t\t\t+ (digits[6] * 6)\r\n\t\t\t+ (digits[7] * 9)\r\n\t\t\t+ (digits[8] * 10);\r\n\r\n\t\tconst remainder = sum % 11;\r\n\t\tconst valid = remainder === 0;\r\n\t\tif (!valid) {\r\n\t\t\treturn { code: 3, message: 'Checksum is incorrect.' };\r\n\t\t}\r\n\r\n\t\treturn null;\r\n\t}\r\n\r\n\tprivate static addWeighted(p: number, v: number, i: number) {\r\n\t\treturn p + v * StringAusFunc.weights[i];\r\n\t}\r\n\r\n\tprivate static addAcnWeighted(p: number, v: number, i: number) {\r\n\t\treturn p + v * StringAusFunc.acnWeights[i];\r\n\t}\r\n\r\n\tprivate static generateLookup(): number[] {\r\n\t\tconst ns: number[] = [];\r\n\t\tfor (let i = 0; i < 10; ++i) {\r\n\t\t\tns[i * 19 % 89] = i;\r\n\t\t}\r\n\r\n\t\treturn ns;\r\n\t}\r\n\r\n\tstatic validateABN(abn: string | null | undefined): { code: number, message: string } | null {\r\n\t\tif (!abn) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tconst digits = abn.replace(/[^\\d]/g, '').split('').map(Number);\r\n\t\tif (digits.length !== 11) {\r\n\t\t\treturn { code: 1, message: 'Expect 11-digit.' };\r\n\t\t}\r\n\r\n\t\tdigits[0] -= 1;\r\n\r\n\t\tconst sum = digits.reduce(StringAusFunc.addWeighted, 0);\r\n\r\n\t\tif (sum % 89 === 0) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tdigits[0] += 1;\r\n\r\n\t\tlet sum1 = sum - digits[10] * StringAusFunc.weights[10];\r\n\t\tlet digit = StringAusFunc.suggestLookup[89 - sum1 % 89];\r\n\t\tif (digit !== undefined) {\r\n\t\t\treturn {\r\n\t\t\t\tcode: 2,\r\n\t\t\t\tmessage: 'Checksum1 is incorrect.'\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tconst sum2 = sum1 - digits[9] * StringAusFunc.weights[9];\r\n\t\t\tfor (let i = 0; i < 10; ++i) {\r\n\t\t\t\tsum1 = sum2 + i * StringAusFunc.weights[9];\r\n\t\t\t\tdigit = StringAusFunc.suggestLookup[89 - sum1 % 89];\r\n\t\t\t\tif (digit !== undefined) {\r\n\t\t\t\t\treturn {\r\n\t\t\t\t\t\tcode: 3,\r\n\t\t\t\t\t\tmessage: 'Checksum2 is incorrect.'\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn null\r\n\t}\r\n\r\n\tstatic validateACN(acn: string | null | undefined): { code: number, message: string } | null {\r\n\t\tif (!acn) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tconst digits = acn.replace(/[^\\d]/g, '').split('').map(Number);\r\n\t\tconsole.log(digits);\r\n\t\tif (digits.length !== 9) {\r\n\t\t\treturn { code: 1, message: 'Expect 9-digit.' };\r\n\t\t}\r\n\r\n\r\n\t\tconst sum = digits.slice(0, 8).reduce(StringAusFunc.addAcnWeighted, 0);\r\n\t\tconst lastDigit = 10 - sum % 10;\r\n\t\tif (lastDigit === digits[8]) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\tcode: 2,\r\n\t\t\tmessage: 'Checksum is incorrect.'\r\n\t\t};\r\n\t}\r\n}\r\n","export class StringFunc {\r\n\r\n\t/**\r\n\t * Up to 2 letters. For John Smith, returns JS, for Huang, Zijian, returns ZH\r\n\t * @param s\r\n\t */\r\n\tstatic getAbbr(s: string | null | undefined) {\r\n\t\tif (!s) {\r\n\t\t\treturn '';\r\n\t\t}\r\n\r\n\t\tconst sArray = s.split(/[\\s,]+/);\r\n\t\tconst comma = s.indexOf(',') >= 0;\r\n\r\n\t\tif (sArray.length === 1) {\r\n\t\t\treturn sArray[0][0];\r\n\t\t}\r\n\r\n\t\treturn comma ? sArray[1][0] + sArray[0][0] : sArray[0][0] + sArray[1][0];\r\n\t}\r\n\r\n\t/**\r\n\t * A substring with line breaks replaced by space.\r\n\t * @param s\r\n\t * @param length\r\n\t * @returns result, or empty string if the input is empty, null or undefined\r\n\t */\r\n\tstatic getOneLineDigest(s: string | null | undefined, length: number) {\r\n\t\tif (!s) {\r\n\t\t\treturn '';\r\n\t\t}\r\n\r\n\t\tconst ss = s.substring(0, length);\r\n\t\tconst st = ss.replace(new RegExp('\\n', 'g'), ' ') + ((s.length > length) ? '...' : '');\r\n\t\treturn st.trim();\r\n\t}\r\n\r\n\t/**\r\n\t * Remove line breaks and econde with encodeURI() so the data could be saved in Azure as meta. If the string is truncated, the return will have ... suffix.\r\n\t * @param s\r\n\t * @param length\r\n\t * @returns result, or empty string if the input is empty, null or undefined\r\n\t */\r\n\tstatic getOneLineDigestOfHtml(s: string | null | undefined, length: number) {\r\n\t\tif (!s) {\r\n\t\t\treturn '';\r\n\t\t}\r\n\r\n\t\tconst ss = s.substring(0, length);\r\n\t\tconst st = ss.replace(new RegExp('\\n', 'g'), ' ') + ((s.length > length) ? '...' : '');\r\n\t\treturn encodeURI(st.trim()); //need to encode in order to save as meta in Azure.\r\n\t}\r\n\r\n\t/**\r\n\t * Pad number with zero\r\n\t * @param num \r\n\t * @param size \r\n\t * @returns \r\n\t */\r\n\tstatic pad(num: number | undefined, size: number): string {\r\n\t\tif (num == null) {\r\n\t\t\treturn '';\r\n\t\t}\r\n\r\n\t\tlet s = num + '';\r\n\t\twhile (s.length < size) { s = '0' + s; }\r\n\t\treturn s;\r\n\t}\r\n\r\n\t/**\r\n\t * get plain text of HTML content\r\n\t * @param s\r\n\t * @returns result. If input is empty, null, or undefined, return the same.\r\n\t */\r\n\tstatic getHtmlPlainText(s: string | null | undefined): string | null {\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tconst parser = new DOMParser();\r\n\t\tconst html = parser.parseFromString(s, 'text/html');\r\n\t\treturn html.body.textContent;\r\n\t}\r\n\r\n\t/**\r\n\t *\r\n\t * @param s\r\n\t * @returns result. If input is empty, null, or undefined, return the same.\r\n\t */\r\n\tstatic capitalizeWords(s: string | null | undefined): string | null | undefined { // thanks to https://stackoverflow.com/questions/2332811/capitalize-words-in-string\r\n\t\tif (!s) {\r\n\t\t\treturn s;\r\n\t\t}\r\n\r\n\t\treturn s.replace(/(?:^|\\s)\\S/g, (a) => a.toUpperCase());\r\n\t}\r\n\r\n\tstatic validateEmail(email: string | null | undefined): boolean {\r\n\t\tif (!email) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tconst re = /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\r\n\t\treturn re.test(email.toLowerCase());\r\n\t}\r\n}\r\n","import { v4 as uuid } from 'uuid'; //todo: somehow the system could not recognize v5.\r\n// https://github.com/DefinitelyTyped/DefinitelyTyped/pull/28439\r\n\r\nexport class UuidFunc {\r\n\t/**\r\n\t * 36 UUID string including 4 hyphens. MySql stores GUID as 36 bytes anyway rather than 16bytes.\r\n\t */\r\n\tstatic newUUID(): string {\r\n\t\treturn uuid();\r\n\t}\r\n\r\n\tstatic newUUIDStartWith0() {\r\n\t\tconst s = uuid();\r\n\t\treturn '0000' + s.slice(4);\r\n\t}\r\n}\r\n","/*\r\n * Public API Surface of nmce-func\r\n */\r\n\r\nexport * from './_func/index';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["uuid"],"mappings":"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"}
1
+ {"version":3,"file":"nmce-func.mjs","sources":["../../../projects/nmce-func/src/_func/addressFunc.ts","../../../projects/nmce-func/src/_func/currencyFunc.ts","../../../projects/nmce-func/src/_func/dateFunc.ts","../../../projects/nmce-func/src/_func/htmlPrintFunc.ts","../../../projects/nmce-func/src/_func/javascriptFunc.ts","../../../projects/nmce-func/src/_func/jsonFunc.ts","../../../projects/nmce-func/src/_func/stringAusFunc.ts","../../../projects/nmce-func/src/_func/stringFunc.ts","../../../projects/nmce-func/src/_func/uuidFunc.ts","../../../projects/nmce-func/src/nmce-func.ts"],"sourcesContent":["export class AddressFunc {\r\n\t/**\r\n\t * Compose to one line separated by comma\r\n\t * @param st1\r\n\t * @param st2\r\n\t * @param city\r\n\t * @param state\r\n\t * @param postcode\r\n\t */\r\n\tstatic composeOneLineAddress(st1: string | undefined, st2: string | undefined, city: string | undefined, state: string | undefined, postcode: string | undefined): string {\r\n\t\treturn AddressFunc.composeAddress(st1, st2, city, state, postcode, ', ');\r\n\t}\r\n\r\n\t/**\r\n\t * Compose to multiple separated by \\n\r\n\t * @param st1\r\n\t * @param st2\r\n\t * @param city\r\n\t * @param state\r\n\t * @param postcode\r\n\t */\r\n\tstatic composeMultiLineAddress(st1: string | undefined, st2: string | undefined, city: string | undefined, state: string | undefined, postcode: string | undefined): string {\r\n\t\treturn AddressFunc.composeAddress(st1, st2, city, state, postcode, '\\n');\r\n\t}\r\n\r\n\t/**\r\n\t * Compose with separator\r\n\t * @param st1\r\n\t * @param st2\r\n\t * @param city\r\n\t * @param state\r\n\t * @param postcode\r\n\t * @param sep\r\n\t */\r\n\tstatic composeAddress(st1: string | undefined, st2: string | undefined, city: string | undefined, state: string | undefined, postcode: string | undefined, sep: string | undefined): string {\r\n\t\tconst r = (st1 ? (st1 + sep) : '') + (st2 ? (st2 + sep) : '') + (city ? (city + sep) : '') + (state ? (state + ' ') : '') + (postcode ? postcode : '');\r\n\t\treturn r;\r\n\t}\r\n\r\n\tstatic composeGoogleMapsAuUrl(st1: string | undefined, st2: string | undefined, city: string | undefined, state: string | undefined, country: string | undefined): string {\r\n\t\tconst googleBaseUrl = 'https://www.google.com.au/maps?hl=en&q=';\r\n\t\tconst fff = (s: string | undefined): string => {\r\n\t\t\tif (!s) {\r\n\t\t\t\treturn '';\r\n\t\t\t}\r\n\r\n\t\t\treturn '+' + encodeURIComponent(s.replace(' ', '+')) + ',';\r\n\t\t};\r\n\r\n\t\tconst ss = fff(st1) + fff(st2) + fff(city) + fff(state) + fff(country);\r\n\t\treturn googleBaseUrl + ss;\r\n\t}\r\n\r\n}\r\n","/**\r\n * Currency calculations. Undefined input of number is considered zero, just like null.\r\n * Simple functions for currency before you decide to use more comprehensive ones:\r\n * https://github.com/scurker/currency.js\r\n * https://github.com/dinerojs/dinero.js Up to date and popular\r\n */\r\nexport class CurrencyFunc {\r\n\tprivate static DECIMAL_SEPARATOR = '.';\r\n\tprivate static THOUSANDS_SEPARATOR = ',';\r\n\r\n\tprivate static PADDING = '000000';\r\n\r\n\t/**\r\n\t * Banker rounding\r\n\t * @param num\r\n\t * @param decimalPlace default 0\r\n\t */\r\n\tstatic bankerRound(num: number | null | undefined, decimalPlace?: number): number {\r\n\t\tif (!num) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tconst d = decimalPlace || 0;\r\n\t\tconst m = Math.pow(10, d);\r\n\t\tconst n = +(d ? num * m : num).toFixed(8); // Avoid rounding errors\r\n\t\tconst i = Math.floor(n), f = n - i;\r\n\t\tconst e = 1e-8; // Allow for rounding errors in f\r\n\t\tconst r = (f > 0.5 - e && f < 0.5 + e) ?\r\n\t\t\t((i % 2 === 0) ? i : i + 1) : Math.round(n);\r\n\t\treturn d ? r / m : r;\r\n\t\t// http://stackoverflow.com/questions/3108986/gaussian-bankers-rounding-in-javascript\r\n\t}\r\n\r\n\t/**\r\n\t * Banker rounding to 5 cents\r\n\t * @param num \r\n\t * @returns \r\n\t */\r\n\tstatic bankerRoundTo5cents(num: number | null | undefined): number {\r\n\t\tif (!num) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tconst r = this.bankerRound(Math.round(num / 0.05) * 0.05, 2);\r\n\t\treturn r;\r\n\t}\r\n\r\n\t// static transformCurrency(value: number | string | undefined, fractionSize: number = 2): string { In favour of dinerojs\r\n\t// \tlet [integer, fraction = ''] = (value || '').toString()\r\n\t// \t\t.split(this.DECIMAL_SEPARATOR);\r\n\r\n\t// \tfraction = fractionSize > 0\r\n\t// \t\t? this.DECIMAL_SEPARATOR + (fraction + this.PADDING).substring(0, fractionSize)\r\n\t// \t\t: '';\r\n\r\n\t// \tinteger = integer.replace(/\\B(?=(\\d{3})+(?!\\d))/g, this.THOUSANDS_SEPARATOR);\r\n\r\n\t// \treturn integer + fraction;\r\n\t// }\r\n\r\n\t// static parseCurrency(value: string | undefined, fractionSize: number = 2): string {\r\n\t// \tlet [integer, fraction = ''] = (value || '').split(this.DECIMAL_SEPARATOR);\r\n\r\n\t// \tinteger = integer.replace(new RegExp(this.THOUSANDS_SEPARATOR, 'g'), '');\r\n\r\n\t// \tfraction = parseInt(fraction, 10) > 0 && fractionSize > 0\r\n\t// \t\t? this.DECIMAL_SEPARATOR + (fraction + this.PADDING).substring(0, fractionSize)\r\n\t// \t\t: '';\r\n\r\n\t// \treturn integer + fraction;\r\n\t// }\r\n\r\n\r\n\t//http://stackoverflow.com/questions/2998784/how-to-output-integers-with-leading-zeros-in-javascript\r\n\tstatic pad(num: number | null | undefined, size: number): string {\r\n\t\tif (num == null){\r\n\t\t\t return '';\r\n\t\t}\r\n\r\n\t\tif (num ===0){\r\n\t\t\treturn '0';\r\n\t\t}\r\n\r\n\t\tconst numText = num.toString();\r\n\t\tlet s = numText + '';\r\n\t\twhile (s.length < size) { s = '0' + s; }\r\n\t\treturn s;\r\n\t}\r\n\r\n\t/**\r\n\t * Sum array of numbers\r\n\t * @param ns \r\n\t * @returns \r\n\t */\r\n\tstatic sum(ns: (number | null | undefined)[]): number {\r\n\t\tconst r = <number>ns.reduce((a, b) => (a ?? 0) + (b ?? 0), 0);\r\n\t\treturn r;\r\n\t}\r\n\r\n}\r\n","import { DateTime, Duration, Settings } from 'luxon';\r\n\r\nexport class DateFunc {\r\n\t/**\r\n\t * At runtime, there's no simple guarantee that the input is Date. Sometimes you codes expect date, but the response from the Web service may give you string or number.\r\n\t * This function give you safe parse of date data from I/O, not of your control.\r\n\t * If the data is invalid, throws RangeError or TypeError.\r\n\t * @param dt \r\n\t * @returns \r\n\t */\r\n\tstatic dateDataToDate(dt: Date | string | number) : Date {\r\n\t\tif (dt instanceof Date){\r\n\t\t\treturn dt;\r\n\t\t}\r\n\r\n\t\tif (typeof dt === 'string'){\r\n\t\t\tconst r = Date.parse(dt);\r\n\t\t\tif (isNaN(r)){\r\n\t\t\t\tthrow new RangeError($localize`Invalid string for Date`);\r\n\t\t\t}\r\n\r\n\t\t\treturn new Date(r);\r\n\t\t}\r\n\r\n\t\tif (typeof dt === 'number'){\r\n\t\t\tconst rd = new Date(dt)\r\n\t\t\tif (Number.isNaN(rd.valueOf())){\r\n\t\t\t\tthrow new RangeError($localize`Invalid number for Date`);\r\n\t\t\t}\r\n\r\n\t\t\treturn rd;\r\n\t\t}\r\n\r\n\t\tthrow new TypeError($localize`Expect Date, string or number`);\r\n\t}\r\n\r\n\t/**\r\n\t * Similar to dateDataToDate, but allow null and defined semantically.\r\n\t * @param dt \r\n\t * @returns \r\n\t */\r\n\tstatic dateDataToDateOrNull(dt: Date | string | number | null | undefined) : Date | null | undefined {\r\n\t\tif (dt instanceof Date){\r\n\t\t\treturn dt;\r\n\t\t}\r\n\r\n\t\tif (typeof dt === 'string'){\r\n\t\t\tconst r = Date.parse(dt);\r\n\t\t\tif (isNaN(r)){\r\n\t\t\t\tthrow new RangeError($localize`Invalid string for Date`);\r\n\t\t\t}\r\n\r\n\t\t\treturn new Date(r);\r\n\t\t}\r\n\r\n\t\tif (typeof dt === 'number'){\r\n\t\t\tconst rd = new Date(dt)\r\n\t\t\tif (Number.isNaN(rd.valueOf())){\r\n\t\t\t\tthrow new RangeError($localize`Invalid number for Date`);\r\n\t\t\t}\r\n\r\n\t\t\treturn rd;\r\n\t\t}\r\n\r\n\t\tif (dt == null){ \r\n\t\t\treturn dt;\r\n\t\t}\r\n\r\n\t\tthrow new TypeError($localize`Expect Date, string or number`);\r\n\t}\r\n\r\n\t/**\r\n\t * Transform UTC DateTime to local date without H, M and S. For example, the month day of 2018-01-23T22:00:00Z is 24 in Australia.\r\n\t * @param dtUtc\r\n\t */\r\n\tstatic dateTimeUtcToLocalDateNumber(dtUtc: Date | string | number | null | undefined): number | null | undefined {\r\n\t\tif (dtUtc == null) {\r\n\t\t\treturn dtUtc;\r\n\t\t}\r\n\r\n\t\tconst localDt = this.dateDataToDate(dtUtc);\r\n\t\tconst localDNum = localDt.setHours(0, 0, 0, 0);\r\n\r\n\t\treturn localDNum;\r\n\t}\r\n\r\n\t/**\r\n\t * Date only. However, the date may still be in UTC.\r\n\t * @param dtUtc\r\n\t * @returns new Date object.\r\n\t */\r\n\tstatic dateTimeUtcToLocalDate(dtUtc: Date | string | number | null | undefined): Date | null | undefined {\r\n\t\tif (dtUtc == null) {\r\n\t\t\treturn dtUtc;\r\n\t\t}\r\n\r\n\t\tconst localDt = this.dateDataToDate(dtUtc);\r\n\t\tconst localNum = localDt.setHours(0, 0, 0, 0);\r\n\t\treturn new Date(localNum);\r\n\t}\r\n\r\n\t/**\r\n\t * '2018-01-23T22:00:00Z' will become '2018-01-24' in Australia.\r\n\t * @param dtUtc \r\n\t * @returns new Date object.\r\n\t */\r\n\tstatic localISODateString(dtUtc: Date | string | number | null | undefined): string | null | undefined {\t\t\r\n\t const dt = this.dateTimeUtcToLocalDate(dtUtc);\r\n\t\tif (dt == null) {\r\n\t\t\treturn dt;\r\n\t\t}\r\n\r\n\t\tconst d= DateTime.fromJSDate(dt);\r\n\t\treturn d.toISODate();\r\n\t}\r\n\r\n\t/**\r\n\t * local date ONLY (no time) to UTC date.\r\n\t * The input could be a string of yyyy-MM-dd, or a Date Object.\r\n\t * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date\r\n\t * While the time value at the heart of a Date object is UTC, the basic methods to fetch the date and time \r\n\t * or its components all work in the local (i.e. host system) time zone and offset.\r\n\t * @param dt if dt contain time info, it will become dt.setHours(0, 0, 0, 0)\r\n\t */\r\n\tstatic localDateToUtc(d: Date | string | number | null | undefined | string): Date | null | undefined {\r\n\t\tif (d == null) {\r\n\t\t\treturn d;\r\n\t\t}\r\n\r\n\t\tconst dt = this.dateDataToDate(d);\r\n\t\tconst n = dt.setHours(0, 0, 0, 0);\r\n\t\tconst offset = dt.getTimezoneOffset() * 60000;\r\n\t\treturn new Date(n + offset);\r\n\t}\r\n\r\n\tstatic getEndOfWeek(dt: Date | string | number) : Date {\r\n\t\tconst dateTime = DateTime.fromJSDate(this.dateDataToDate(dt));\r\n\t\treturn dateTime.endOf('week').toJSDate();\r\n\t}\r\n\r\n\tstatic getStartOfWeek(dt: Date | string | number) : Date {\r\n\t\tconst dateTime = DateTime.fromJSDate(this.dateDataToDate(dt));\r\n\t\treturn dateTime.startOf('week').toJSDate();\r\n\t}\r\n\r\n\tstatic getEndOfMonth(dt: Date | string | number) : Date {\r\n\t\tconst dateTime = DateTime.fromJSDate(this.dateDataToDate(dt));\r\n\t\treturn dateTime.endOf('month').toJSDate();\r\n\t}\r\n\r\n\tstatic getStartOfMonth(dt: Date | string | number) : Date {\r\n\t\tconst dateTime = DateTime.fromJSDate(this.dateDataToDate(dt));\r\n\t\treturn dateTime.startOf('month').toJSDate();\r\n\t}\r\n\r\n\tstatic getEndOfDate(dt: Date | string | number): Date {\r\n\t\tconst dateTime = DateTime.fromJSDate(this.dateDataToDate(dt));\r\n\t\treturn dateTime.endOf('day').toJSDate();\r\n\t}\r\n\r\n\tstatic getStartOfDate(dt: Date | string | number): Date {\r\n\t\tconst dateTime = DateTime.fromJSDate(this.dateDataToDate(dt));\r\n\t\treturn dateTime.startOf('day').toJSDate();\r\n\t}\r\n\r\n\tstatic getEndOfToday(): Date | null | undefined {\r\n\t\treturn this.getEndOfDate(Date.now());\r\n\r\n\t}\r\n\r\n\tstatic getStartOfToday(): Date {\r\n\t\treturn this.getStartOfDate(Date.now());\r\n\t}\r\n\r\n\tstatic getDaysBetween(d1: Date | string | number, d2: Date | string | number): number {\r\n\t\tconst dm1 = DateTime.fromJSDate(this.dateDataToDate(d1));\r\n\t\tconst dm2 = DateTime.fromJSDate(this.dateDataToDate(d1));\r\n\t\treturn dm2.diff(dm1, 'days').days;\r\n\t}\r\n\r\n\t//inspired https://stackoverflow.com/questions/563406/add-days-to-javascript-date\r\n\tstatic addDays(dt: Date | string | number, days: number) : Date {\r\n\t\tconst dat = DateTime.fromJSDate(this.dateDataToDate(dt));\r\n\t\tconst r = dat.plus({days: days});\r\n\t\treturn r.toJSDate();\r\n\t}\r\n\r\n\tstatic addMonths(dt: Date | string | number, months: number) : Date {\r\n\t\tconst dat = DateTime.fromJSDate(this.dateDataToDate(dt));\r\n\t\tconst r = dat.plus({months: months});\r\n\t\treturn r.toJSDate();\r\n\t}\r\n\r\n\tstatic addYears(dt: Date | string | number, years: number) : Date {\r\n\t\tconst dat = DateTime.fromJSDate(this.dateDataToDate(dt));\r\n\t\tconst r = dat.plus({years: years});\r\n\t\treturn r.toJSDate();\r\n\t}\r\n\r\n\tstatic addHours(dt: Date | string | number, hours: number) : Date {\r\n\t\tconst dat = DateTime.fromJSDate(this.dateDataToDate(dt));\r\n\t\tconst r = dat.plus({hours: hours});\r\n\t\treturn r.toJSDate();\r\n\t}\r\n\r\n\tstatic addMinutes(dt: Date | string | number, minutes: number) : Date {\r\n\t\tconst dat = DateTime.fromJSDate(this.dateDataToDate(dt));\r\n\t\tconst r = dat.plus({minutes: minutes});\r\n\t\treturn r.toJSDate();\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Start of today\r\n\t */\r\n\tstatic get today(): Date {\r\n\t\treturn this.getStartOfToday();\r\n\t}\r\n\r\n\tstatic get now(): Date {\r\n\t\treturn new Date(Date.now());\r\n\t}\r\n\r\n\t/**\r\n\t * From now, next 5 minute mark. For example 2:23:44 will be 2:25:00;\r\n\t * @returns \r\n\t */\r\n\tstatic getNext5MinuteMark(): Date {\r\n\t\tconst m = DateTime.now().set({second: 0, millisecond:0});\r\n\t\tconst minute = m.minute;\r\n\t\tconst mod = minute % 5;\r\n\t\tif (mod) {\r\n\t\t\tconst delta = 5 - mod;\r\n\t\t\treturn m.plus({minutes: delta}).toJSDate();\r\n\t\t}\r\n\r\n\t\treturn m.toJSDate();\r\n\t}\r\n\r\n\tstatic getYMD(d: Date | string | number) {\r\n\t\tconst dt = DateTime.fromJSDate(this.dateDataToDate(d));\r\n\t\treturn dt.toFormat('yyyyMMdd');\r\n\t}\r\n\r\n\tstatic getDMYWithSlash(d: Date | string | number) {\r\n\t\tconst dt = DateTime.fromJSDate(this.dateDataToDate(d));\r\n\t\treturn dt.toFormat('dd/MM/yyyy');\r\n\t}\r\n\r\n\tstatic getDMYHmWithSlash(d: Date | string | number) {\r\n\t\tconst dt = DateTime.fromJSDate(this.dateDataToDate(d));\r\n\t\treturn dt.toFormat('dd/MM/yyyy HH:mm');\r\n\t}\r\n\r\n\t/**\r\n\t * \r\n\t * @param dtUtc In 24 hour format, and the date separator depending on the system or Luxon default locale\r\n\t * @returns \r\n\t */\r\n\tstatic getDateTime24Simple(dtUtc: Date | string | number | null | undefined) {\r\n\t\tif (dtUtc == null) {\r\n\t\t\treturn dtUtc;\r\n\t\t}\r\n\t\t\r\n\t\tconst d = this.dateDataToDate(dtUtc);\r\n\t\tconst dt = DateTime.fromJSDate(d);\r\n\t\treturn dt.toLocaleString(DateTime.DATE_SHORT) + ' ' + dt.toLocaleString(DateTime.TIME_24_SIMPLE);\r\n\t}\r\n\r\n\tstatic setDefaultLocale(locale: string){\r\n\t\tSettings.defaultLocale=locale;\r\n\t}\r\n\r\n\tstatic getDefaultLocale(){\r\n\t\treturn Settings.defaultLocale;\r\n\t}\r\n\r\n\tstatic setDefaultZone(zone: string){\r\n\t\tSettings.defaultZone=zone;\r\n\t}\r\n\r\n\tstatic getDefaultZone() : string {\r\n\t\treturn Settings.defaultZone.name;\r\n\t}\r\n\r\n\tstatic isZoneValid(): boolean{\r\n\t\treturn Settings.defaultZone.isValid;\r\n\t}\r\n\r\n\t/**\r\n\t * For example, in AEST, it is -600.\r\n\t * @returns \r\n\t */\r\n\tstatic getLocalTimezoneOffset(): number {\r\n\t\tconst dt = new Date(Date.now());\r\n\t\treturn dt.getTimezoneOffset();\r\n\t}\r\n\r\n\t/**\r\n\t * Get hour of the date. If Date is not defined, the hour will be current hour.\r\n\t * @param dtUtc\r\n\t */\r\n\tstatic getHour(dtUtc: Date | string | number): number {\r\n\t\tconst dt = DateTime.fromJSDate(this.dateDataToDate(dtUtc));\r\n\t\treturn dt.hour;\r\n\t}\r\n\r\n\tstatic getMinute(dtUtc: Date | string | number): number {\r\n\t\tconst dt = DateTime.fromJSDate(this.dateDataToDate(dtUtc));\r\n\t\treturn dt.minute;\r\n\t}\r\n\r\n\tstatic GetHM(dtUtc: Date | string | number): {h: number, m: number}{\r\n\t\tconst dt = DateTime.fromJSDate(this.dateDataToDate(dtUtc));\r\n\t\treturn {h: dt.hour, m: dt.minute};\r\n\t}\r\n\r\n\tstatic composeDateTime(dt: Date | string | number, h: number = 0, minute: number = 0, second: number = 0): Date {\r\n\t\treturn new Date( this.dateDataToDate(dt).setHours(h, minute, second, 0));\r\n\t}\r\n\r\n\tstatic olderThan24Hours(d: Date | string | number): boolean {\r\n\t\tconst m = DateTime.fromJSDate(this.dateDataToDate(d));\r\n\t\treturn DateTime.now().diff(m, 'hours') >= Duration.fromISO('PT24H');\r\n\t}\r\n\r\n\tstatic olderThanHours(d: Date | string | number, hours: number) : boolean {\r\n\t\tconst m = DateTime.fromJSDate(this.dateDataToDate(d));\r\n\t\tconst diff = DateTime.now().diff(m, 'hours'); \r\n\t\tconst duration = Duration.fromISO(`PT${hours}H`);\r\n\t\tconsole.debug('diff: ' + diff.hours + ' duration: ' + duration.hours);\r\n\t\treturn diff.hours >= duration.hours;\r\n\t}\r\n\r\n\tstatic olderThanMinutes(d: Date | string | number, minutes: number) {\r\n\t\tconst m = DateTime.fromJSDate(this.dateDataToDate(d));\r\n\t\treturn DateTime.now().diff(m, 'minutes') >= Duration.fromMillis(minutes*60*1000);\r\n\t}\r\n\r\n\t/**\r\n\t * It could be 11PM yesterday, and 1 AM today. Actually based on local today.\r\n\t */\r\n\tstatic olderThan1Day(dtUtc: Date | string | number): boolean {\r\n\t\treturn DateFunc.getDayAge(dtUtc) > 0;\r\n\t}\r\n\r\n\tstatic getHourAge(d: Date | string | number) {\r\n\t\tconst m = DateTime.fromJSDate(this.dateDataToDate(d));\r\n\t\treturn DateTime.now().diff(m, 'hours').hours;\r\n\t}\r\n\r\n\t/**\r\n\t * Compare date with now.\r\n\t * @param dtUtc\r\n\t */\r\n\tstatic getDayAge(d: Date | string | number) {\r\n\t\tconst m = DateTime.fromJSDate(this.dateDataToDate(d));\r\n\t\treturn DateTime.now().diff(m, 'days').days;\r\n\t}\r\n\r\n\t/**\r\n\t * How many years from now.\r\n\t * @param d\r\n\t * @returns\r\n\t */\r\n\tstatic getAge(d: Date | string | number) {\r\n\t\tconst m = DateTime.fromJSDate(this.dateDataToDate(d));\r\n\t\treturn DateTime.now().diff(m, 'years').years;\r\n\t}\r\n\r\n\t/**\r\n\t * Convert minutes from midnight to HH:mm text\r\n\t * @param minutes\r\n\t */\r\n\tstatic getHMFromMins(minutes: number): string {\r\n\t\tif (minutes >= 24 * 60 || minutes < 0) {\r\n\t\t\tthrow new RangeError($localize`Valid input should be greater than or equal to 0 and less than 1440.`);\r\n\t\t}\r\n\t\tconst h = minutes / 60 | 0,\r\n\t\t\tm = minutes % 60 | 0;\r\n\t\treturn DateTime.utc().set({hour: h, minute: m}).toFormat('HH:mm');\r\n\t}\r\n\r\n\tstatic getMinutesSinceMidnight(d: Date | string | number) {\r\n\t\tconst dt = DateTime.fromJSDate(this.dateDataToDate(d));\r\n\t\tconst midnight = dt.startOf('day');\r\n\t\treturn dt.diff(midnight, 'minutes').minutes;\r\n\t}\r\n\r\n\tstatic getMinutesBetween(start: Date | string | number, end: Date | string | number) {\r\n\t\tconst m = DateTime.fromJSDate(this.dateDataToDate(start));\r\n\t\tconst m2 = DateTime.fromJSDate(this.dateDataToDate(end));\r\n\t\treturn m2.diff(m, 'minutes').minutes;\r\n\t}\r\n}\r\n\r\n","export class HtmlPrintFunc {\r\n\t/**\r\n\t * Print with CSS for internal reports\r\n\t * @param htmlTags\r\n\t * @param cssUrl\r\n\t */\r\n\tstatic printWithCSS(htmlTags: string, cssUrl: string) {\r\n\t\tif (window) {\r\n\t\t\tconst htmlToPrint = `<html><head>\r\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\"/>\r\n<link rel=\"stylesheet\" type=\"text/css\" href=\"${cssUrl}\" media=\"screen,print\"/>\r\n</head><body onload=\"window.print()\">${htmlTags}</body></html>`;\r\n\r\n\t\t\tconst popup = window.open('', '_blank', 'width=1024,height=768');\r\n\t\t\tpopup?.document.open();\r\n\t\t\tpopup?.document.write(htmlToPrint);\r\n\r\n\t\t\tpopup?.document.close();\r\n\t\t}\r\n\t\treturn true;\r\n\t}\r\n\r\n\t/**\r\n\t * Print for external documents.\r\n\t * @param htmlTags\r\n\t */\r\n\tstatic print(htmlTags: string) {\r\n\t\tif (window) {\r\n\t\t\tconst htmlToPrint = `<html><head>\r\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\"/>\r\n</head><body onload=\"window.print()\">${htmlTags}</body></html>`;\r\n\r\n\t\t\tconst popup = window.open('', '_blank', 'width=1024,height=768');\r\n\t\t\tpopup?.document.open();\r\n\t\t\tpopup?.document.write(htmlToPrint);\r\n\r\n\t\t\tpopup?.document.close();\r\n\t\t}\r\n\t\treturn true;\r\n\t}\r\n\r\n\t/**\r\n\t * Print image url through html img.\r\n\t * @param url \r\n\t */\r\n\tstatic printImage(url: string) {\r\n\t\tconst imageTags = `<img src=\"${url}\" alt=\"Image from URL\"/>`;\r\n\t\tHtmlPrintFunc.print(imageTags);\r\n\t}\r\n}\r\n","export class JavaScriptFunc {\r\n\t/**\r\n\t * Some business functions depend on external JavaScript libraries. Lazy loading of respective business modules is good, \r\n\t * and this function supports lazy loading of JS libraries.\r\n\t * @param scriptUrl \r\n\t * @param type things like module.\r\n\t * @returns Promise for subsequent JS function calls.\r\n\t */\r\n\tstatic loadExternalScript(scriptUrl: string, type?: string) {\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tconst scriptElement = document.createElement('script');\r\n\t\t\tif (type){\r\n\t\t\t\tscriptElement.type=type;\r\n\t\t\t}\r\n\r\n\t\t\tscriptElement.src = scriptUrl;\r\n\t\t\tscriptElement.onload = resolve;\r\n\t\t\tdocument.body.appendChild(scriptElement);\r\n\t\t});\r\n\t}\r\n}\r\n","import { DateFunc } from './dateFunc';\r\n\r\n/**\r\n * Basic JSON functions\r\n */\r\nexport class JsonFunc {\r\n\t/**\r\n\t * \r\n\t * @param array Group by a property of array element.\r\n\t * @param propertyName \r\n\t * @returns \r\n\t */\r\n\tstatic groupBy<T>(array: Array<T>, propertyName: string) {\r\n\t\treturn array.reduce(function (acc: any, obj: any) {\r\n\t\t\tconst key = obj[propertyName];\r\n\t\t\tif (!acc[key]) {\r\n\t\t\t\tacc[key] = [];\r\n\t\t\t}\r\n\t\t\tacc[key].push(obj);\r\n\t\t\treturn acc;\r\n\t\t}, {});\r\n\t}\r\n\r\n\t/**\r\n\t * Group by a date property. The key is always of string type and representing milliseconds. \r\n\t * The client should convert the string to number.\r\n\t * Angular date pipe could actually consume such string without explicitly converting to number.\r\n\t * @param array\r\n\t * @param propertyName\r\n\t */\r\n\tstatic groupByDate<T>(array: Array<T>, propertyName: string) {\r\n\t\treturn array.reduce(function (acc: any, obj: any) {\r\n\t\t\tconst key = DateFunc.dateTimeUtcToLocalDateNumber(obj[propertyName]);\r\n\t\t\tif (key != null) {\r\n\t\t\t\tif (!acc[key]) {\r\n\t\t\t\t\tacc[key] = [];\r\n\t\t\t\t}\r\n\t\t\t\tacc[key].push(obj);\r\n\t\t\t}\r\n\t\t\treturn acc;\r\n\t\t}, {});\r\n\t}\r\n\r\n\t/**\r\n\t * Remove null or empty fields including those in nested objects.\r\n\t * This is useful for reducing payload of AJAX serialization.\r\n\t * @param obj \r\n\t */\r\n\tstatic removeNullOrEmptyFields(obj: any) {\r\n\t\tfor (const f in obj) {\r\n\t\t\tlet p = obj[f];\r\n\t\t\tif (p === null || p === '') {\r\n\t\t\t\tdelete obj[f];\r\n\t\t\t} else if (typeof p === 'object' && p !== null) {\r\n\t\t\t\tthis.removeNullOrEmptyFields(p);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * \r\n\t * @param obj Remove null fields of object at only the 1st level.\r\n\t */\r\n\tstatic removeNullFields(obj: any) {\r\n\t\tfor (const f in obj) {\r\n\t\t\tif (obj[f] === null) {\r\n\t\t\t\tdelete obj[f];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n}\r\n","/**\r\n * String functions specific to Australia\r\n */\r\nexport class StringAusFunc {\r\n\r\n\t//thanks to https://github.com/sidorares/australian-business-number/blob/0591475f5978fd122b472edcdc7efe6d96d56f26/index.js\r\n\tprivate static acnWeights = [8, 7, 6, 5, 4, 3, 2, 1];\r\n\tprivate static weights = [10, 1, 3, 5, 7, 9, 11, 13, 15, 17, 19];\r\n\r\n\tprivate static suggestLookup: number[] = StringAusFunc.generateLookup();\r\n\r\n\t/**\r\n\t * Validate medicare number\r\n\t * @param n\r\n\t * @returns validation error message\r\n\t */\r\n\tstatic validateMedicare(n: string | null | undefined): { code: number, message: string } | null {\r\n\t\tif (!n) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tif (n && n.length === 10) {\r\n\t\t\tconst matches = n.match(/^(\\d{8})(\\d)/);\r\n\r\n\t\t\tif (!matches) {\r\n\t\t\t\treturn {\r\n\t\t\t\t\tcode: 2, message: 'Medicare number should be all digit.'\r\n\t\t\t\t};\r\n\t\t\t}\r\n\r\n\t\t\tconst base = matches[1];\r\n\t\t\tconst checkDigit = matches[2];\r\n\t\t\tconst weights = [1, 3, 7, 9, 1, 3, 7, 9];\r\n\r\n\t\t\tlet sum = 0;\r\n\t\t\tfor (let i = 0; i < weights.length; i++) {\r\n\t\t\t\tsum += parseInt(base[i], 10) * weights[i];\r\n\t\t\t}\r\n\r\n\t\t\t//console.debug(`sum: ${sum} checkDigits: ${checkDigit}`);\r\n\t\t\tconst isValid = sum % 10 === parseInt(checkDigit, 10);\r\n\t\t\tif (!isValid) {\r\n\t\t\t\treturn {\r\n\t\t\t\t\tcode: 3, message: 'Checksum is incorrect.'\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\treturn { code: 1, message: 'Length should be 10.' };\r\n\t\t}\r\n\r\n\t\treturn null;\r\n\t}\r\n\r\n\tstatic validateMedicareProviderNumber(providerNumber: string | null | undefined): { code: number, message: string } | null {\r\n\t\tif (!providerNumber) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tif (!/^[0-9]{6}[0-9ABCDEFGHJKLMNPQRTUVWXY][ABFHJKLTWXY]/.test(providerNumber)) {\r\n\t\t\treturn { code: 1, message: 'Not matching provider number format.' };\r\n\t\t}\r\n\r\n\t\tconst practiceLocationValues = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'T', 'U', 'V', 'W', 'X', 'Y'];\r\n\t\tconst remainderValues = ['Y', 'X', 'W', 'T', 'L', 'K', 'J', 'H', 'F', 'B', 'A'];\r\n\t\tconst stemWeights = [3, 5, 8, 4, 2, 1];\r\n\r\n\t\tconst stemNumbers = providerNumber.substr(0, 6).split('').map((char) => parseInt(char));\r\n\t\tconst practiceLoc = practiceLocationValues.findIndex((e) => e === providerNumber[6]);\r\n\t\tconst checksum = providerNumber[7];\r\n\r\n\t\tconst zipped = stemWeights.map((x, i) => [x, stemNumbers[i]]);\r\n\t\tconst sumWeights = zipped.map((y) => y[1] * y[0]).reduce((total, num) => total + num);\r\n\t\tconst remainder = (sumWeights + practiceLoc * 6) % 11;\r\n\r\n\t\tconst result = remainderValues[remainder];\r\n\r\n\t\tconst valid = result === checksum;\r\n\t\tif (!valid) {\r\n\t\t\treturn { code: 2, message: 'Checksum is incorrect.' };\r\n\t\t}\r\n\r\n\t\treturn null;\r\n\t}\r\n\r\n\tstatic validateDVAFileNumber(dva: string | null | undefined): { code: number, message: string } | null {\r\n\t\tif (!dva) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tconst states = ['N', 'V', 'Q', 'S', 'W', 'T'];\r\n\t\tconst warCodes = [' ', 'X', 'KM', 'SR', 'SS', 'SM', 'SWP', 'AGX', 'BW', 'GW', 'CGW', //Australian Forces\r\n\t\t\t'P', 'PX', 'PAD', 'PAM', 'PCA', 'PCR', 'PCV', 'PMS', 'PSW', 'PWO', 'HKX', 'MAL', //British Administration Group\r\n\t\t\t'CN', 'CNX', 'IV', 'NF', 'NG', 'RD', 'RDX', 'SA', 'SAX', 'A', //Other Overseas Forces\r\n\t\t\t'N', 'NX', 'NSW', 'NSM', //New Zealand Administration Group\r\n\t\t\t'BUR', 'CNK', 'CNS', 'FIJ', 'GHA', 'HKS', 'IND', 'KYA', 'MAU', 'MLS', 'MTX', 'MWI', 'NK', 'NGR', 'NRD', 'NSS', 'PK']//British Commonwealth Countries - SP Eligibility\r\n\r\n\t\tif (!states.includes(dva.charAt(0))) {\r\n\t\t\treturn { code: 1, message: 'State incorrect.' };\r\n\t\t}\r\n\r\n\t\tconst ns = dva.match(/\\d+/);\r\n\t\tif (!ns) {\r\n\t\t\treturn { code: 2, message: 'No number.' };\r\n\t\t}\r\n\r\n\t\tconst n = ns[0];\r\n\t\tconst idxOfN = dva.indexOf(n);\r\n\t\tconst warCode = dva.substring(1, idxOfN);\r\n\t\tif (!warCodes.includes(warCode)) {\r\n\t\t\treturn { code: 3, message: 'War code invalid.' }\r\n\t\t}\r\n\r\n\t\tconst lenOfN = n.length;\r\n\t\tconst lenOfWc = warCode.length;\r\n\t\tif (lenOfN + lenOfWc > 7) {\r\n\t\t\treturn { code: 4, message: 'File number length should not be greater 7.' }\r\n\t\t}\r\n\r\n\t\treturn null;\r\n\t}\r\n\r\n\tstatic validateTFN(n: string | null | undefined): { code: number, message: string } | null {\r\n\t\tif (!n) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tconst tfn = n.replace(/\\s+/g, '').replace(/[-]/g, '');\r\n\r\n\t\tconst isNumber = /^[0-9]+$/.test(tfn);\r\n\t\tif (!isNumber) {\r\n\t\t\treturn { code: 1, message: 'Invalid TFN, only numbers are allowed.' };\r\n\t\t}\r\n\r\n\t\tconst length = tfn.length;\r\n\t\tif (length !== 9) {\r\n\t\t\treturn {\r\n\t\t\t\tcode: 2, message: 'Invalid TFN, must have 9 digits.'\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\tconst digits = tfn.split('').map(d => parseInt(d));\r\n\r\n\t\tconst sum = (digits[0] * 1)\r\n\t\t\t+ (digits[1] * 4)\r\n\t\t\t+ (digits[2] * 3)\r\n\t\t\t+ (digits[3] * 7)\r\n\t\t\t+ (digits[4] * 5)\r\n\t\t\t+ (digits[5] * 8)\r\n\t\t\t+ (digits[6] * 6)\r\n\t\t\t+ (digits[7] * 9)\r\n\t\t\t+ (digits[8] * 10);\r\n\r\n\t\tconst remainder = sum % 11;\r\n\t\tconst valid = remainder === 0;\r\n\t\tif (!valid) {\r\n\t\t\treturn { code: 3, message: 'Checksum is incorrect.' };\r\n\t\t}\r\n\r\n\t\treturn null;\r\n\t}\r\n\r\n\tprivate static addWeighted(p: number, v: number, i: number) {\r\n\t\treturn p + v * StringAusFunc.weights[i];\r\n\t}\r\n\r\n\tprivate static addAcnWeighted(p: number, v: number, i: number) {\r\n\t\treturn p + v * StringAusFunc.acnWeights[i];\r\n\t}\r\n\r\n\tprivate static generateLookup(): number[] {\r\n\t\tconst ns: number[] = [];\r\n\t\tfor (let i = 0; i < 10; ++i) {\r\n\t\t\tns[i * 19 % 89] = i;\r\n\t\t}\r\n\r\n\t\treturn ns;\r\n\t}\r\n\r\n\tstatic validateABN(abn: string | null | undefined): { code: number, message: string } | null {\r\n\t\tif (!abn) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tconst digits = abn.replace(/[^\\d]/g, '').split('').map(Number);\r\n\t\tif (digits.length !== 11) {\r\n\t\t\treturn { code: 1, message: 'Expect 11-digit.' };\r\n\t\t}\r\n\r\n\t\tdigits[0] -= 1;\r\n\r\n\t\tconst sum = digits.reduce(StringAusFunc.addWeighted, 0);\r\n\r\n\t\tif (sum % 89 === 0) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tdigits[0] += 1;\r\n\r\n\t\tlet sum1 = sum - digits[10] * StringAusFunc.weights[10];\r\n\t\tlet digit = StringAusFunc.suggestLookup[89 - sum1 % 89];\r\n\t\tif (digit !== undefined) {\r\n\t\t\treturn {\r\n\t\t\t\tcode: 2,\r\n\t\t\t\tmessage: 'Checksum1 is incorrect.'\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tconst sum2 = sum1 - digits[9] * StringAusFunc.weights[9];\r\n\t\t\tfor (let i = 0; i < 10; ++i) {\r\n\t\t\t\tsum1 = sum2 + i * StringAusFunc.weights[9];\r\n\t\t\t\tdigit = StringAusFunc.suggestLookup[89 - sum1 % 89];\r\n\t\t\t\tif (digit !== undefined) {\r\n\t\t\t\t\treturn {\r\n\t\t\t\t\t\tcode: 3,\r\n\t\t\t\t\t\tmessage: 'Checksum2 is incorrect.'\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn null\r\n\t}\r\n\r\n\tstatic validateACN(acn: string | null | undefined): { code: number, message: string } | null {\r\n\t\tif (!acn) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tconst digits = acn.replace(/[^\\d]/g, '').split('').map(Number);\r\n\t\tconsole.log(digits);\r\n\t\tif (digits.length !== 9) {\r\n\t\t\treturn { code: 1, message: 'Expect 9-digit.' };\r\n\t\t}\r\n\r\n\r\n\t\tconst sum = digits.slice(0, 8).reduce(StringAusFunc.addAcnWeighted, 0);\r\n\t\tconst lastDigit = 10 - sum % 10;\r\n\t\tif (lastDigit === digits[8]) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\tcode: 2,\r\n\t\t\tmessage: 'Checksum is incorrect.'\r\n\t\t};\r\n\t}\r\n}\r\n","export class StringFunc {\r\n\r\n\t/**\r\n\t * Up to 2 letters. For John Smith, returns JS, for Huang, Zijian, returns ZH\r\n\t * @param s\r\n\t */\r\n\tstatic getAbbr(s: string | null | undefined) {\r\n\t\tif (!s) {\r\n\t\t\treturn '';\r\n\t\t}\r\n\r\n\t\tconst sArray = s.split(/[\\s,]+/);\r\n\t\tconst comma = s.indexOf(',') >= 0;\r\n\r\n\t\tif (sArray.length === 1) {\r\n\t\t\treturn sArray[0][0];\r\n\t\t}\r\n\r\n\t\treturn comma ? sArray[1][0] + sArray[0][0] : sArray[0][0] + sArray[1][0];\r\n\t}\r\n\r\n\t/**\r\n\t * A substring with line breaks replaced by space.\r\n\t * @param s\r\n\t * @param length\r\n\t * @returns result, or empty string if the input is empty, null or undefined\r\n\t */\r\n\tstatic getOneLineDigest(s: string | null | undefined, length: number) {\r\n\t\tif (!s) {\r\n\t\t\treturn '';\r\n\t\t}\r\n\r\n\t\tconst ss = s.substring(0, length);\r\n\t\tconst st = ss.replace(new RegExp('\\n', 'g'), ' ') + ((s.length > length) ? '...' : '');\r\n\t\treturn st.trim();\r\n\t}\r\n\r\n\t/**\r\n\t * Remove line breaks and econde with encodeURI() so the data could be saved in Azure as meta. If the string is truncated, the return will have ... suffix.\r\n\t * @param s\r\n\t * @param length\r\n\t * @returns result, or empty string if the input is empty, null or undefined\r\n\t */\r\n\tstatic getOneLineDigestOfHtml(s: string | null | undefined, length: number) {\r\n\t\tif (!s) {\r\n\t\t\treturn '';\r\n\t\t}\r\n\r\n\t\tconst ss = s.substring(0, length);\r\n\t\tconst st = ss.replace(new RegExp('\\n', 'g'), ' ') + ((s.length > length) ? '...' : '');\r\n\t\treturn encodeURI(st.trim()); //need to encode in order to save as meta in Azure.\r\n\t}\r\n\r\n\t/**\r\n\t * Pad number with zero\r\n\t * @param num \r\n\t * @param size \r\n\t * @returns \r\n\t */\r\n\tstatic pad(num: number | undefined, size: number): string {\r\n\t\tif (num == null) {\r\n\t\t\treturn '';\r\n\t\t}\r\n\r\n\t\tlet s = num + '';\r\n\t\twhile (s.length < size) { s = '0' + s; }\r\n\t\treturn s;\r\n\t}\r\n\r\n\t/**\r\n\t * get plain text of HTML content\r\n\t * @param s\r\n\t * @returns result. If input is empty, null, or undefined, return the same.\r\n\t */\r\n\tstatic getHtmlPlainText(s: string | null | undefined): string | null {\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tconst parser = new DOMParser();\r\n\t\tconst html = parser.parseFromString(s, 'text/html');\r\n\t\treturn html.body.textContent;\r\n\t}\r\n\r\n\t/**\r\n\t *\r\n\t * @param s\r\n\t * @returns result. If input is empty, null, or undefined, return the same.\r\n\t */\r\n\tstatic capitalizeWords(s: string | null | undefined): string | null | undefined { // thanks to https://stackoverflow.com/questions/2332811/capitalize-words-in-string\r\n\t\tif (!s) {\r\n\t\t\treturn s;\r\n\t\t}\r\n\r\n\t\treturn s.replace(/(?:^|\\s)\\S/g, (a) => a.toUpperCase());\r\n\t}\r\n\r\n\tstatic validateEmail(email: string | null | undefined): boolean {\r\n\t\tif (!email) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tconst re = /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\r\n\t\treturn re.test(email.toLowerCase());\r\n\t}\r\n}\r\n","import { v4 as uuid } from 'uuid'; //todo: somehow the system could not recognize v5.\r\n// https://github.com/DefinitelyTyped/DefinitelyTyped/pull/28439\r\n\r\nexport class UuidFunc {\r\n\t/**\r\n\t * 36 UUID string including 4 hyphens. MySql stores GUID as 36 bytes anyway rather than 16bytes.\r\n\t */\r\n\tstatic newUUID(): string {\r\n\t\treturn uuid();\r\n\t}\r\n\r\n\tstatic newUUIDStartWith0() {\r\n\t\tconst s = uuid();\r\n\t\treturn '0000' + s.slice(4);\r\n\t}\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["uuid"],"mappings":"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"}
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "nmce-func",
3
- "version": "1.4.0",
3
+ "version": "1.5.0",
4
4
  "author": {
5
5
  "name": "Z"
6
6
  },
7
7
  "description": "Common simple functions used in business applications.",
8
8
  "license": "MIT",
9
9
  "repository": {
10
- "url": "https://github.com/zijianhuang/nmce"
10
+ "url": "https://github.com/zijianhuang/nmce.git"
11
11
  },
12
12
  "keywords": [
13
13
  "angular"
@@ -20,8 +20,6 @@
20
20
  },
21
21
  ".": {
22
22
  "types": "./index.d.ts",
23
- "esm2022": "./esm2022/nmce-func.mjs",
24
- "esm": "./esm2022/nmce-func.mjs",
25
23
  "default": "./fesm2022/nmce-func.mjs"
26
24
  }
27
25
  },
@@ -1,49 +0,0 @@
1
- export class AddressFunc {
2
- /**
3
- * Compose to one line separated by comma
4
- * @param st1
5
- * @param st2
6
- * @param city
7
- * @param state
8
- * @param postcode
9
- */
10
- static composeOneLineAddress(st1, st2, city, state, postcode) {
11
- return AddressFunc.composeAddress(st1, st2, city, state, postcode, ', ');
12
- }
13
- /**
14
- * Compose to multiple separated by \n
15
- * @param st1
16
- * @param st2
17
- * @param city
18
- * @param state
19
- * @param postcode
20
- */
21
- static composeMultiLineAddress(st1, st2, city, state, postcode) {
22
- return AddressFunc.composeAddress(st1, st2, city, state, postcode, '\n');
23
- }
24
- /**
25
- * Compose with separator
26
- * @param st1
27
- * @param st2
28
- * @param city
29
- * @param state
30
- * @param postcode
31
- * @param sep
32
- */
33
- static composeAddress(st1, st2, city, state, postcode, sep) {
34
- const r = (st1 ? (st1 + sep) : '') + (st2 ? (st2 + sep) : '') + (city ? (city + sep) : '') + (state ? (state + ' ') : '') + (postcode ? postcode : '');
35
- return r;
36
- }
37
- static composeGoogleMapsAuUrl(st1, st2, city, state, country) {
38
- const googleBaseUrl = 'https://www.google.com.au/maps?hl=en&q=';
39
- const fff = (s) => {
40
- if (!s) {
41
- return '';
42
- }
43
- return '+' + encodeURIComponent(s.replace(' ', '+')) + ',';
44
- };
45
- const ss = fff(st1) + fff(st2) + fff(city) + fff(state) + fff(country);
46
- return googleBaseUrl + ss;
47
- }
48
- }
49
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkcmVzc0Z1bmMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9ubWNlLWZ1bmMvc3JjL19mdW5jL2FkZHJlc3NGdW5jLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sT0FBTyxXQUFXO0lBQ3ZCOzs7Ozs7O09BT0c7SUFDSCxNQUFNLENBQUMscUJBQXFCLENBQUMsR0FBdUIsRUFBRSxHQUF1QixFQUFFLElBQXdCLEVBQUUsS0FBeUIsRUFBRSxRQUE0QjtRQUMvSixPQUFPLFdBQVcsQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxHQUF1QixFQUFFLEdBQXVCLEVBQUUsSUFBd0IsRUFBRSxLQUF5QixFQUFFLFFBQTRCO1FBQ2pLLE9BQU8sV0FBVyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNILE1BQU0sQ0FBQyxjQUFjLENBQUMsR0FBdUIsRUFBRSxHQUF1QixFQUFFLElBQXdCLEVBQUUsS0FBeUIsRUFBRSxRQUE0QixFQUFFLEdBQXVCO1FBQ2pMLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdkosT0FBTyxDQUFDLENBQUM7SUFDVixDQUFDO0lBRUQsTUFBTSxDQUFDLHNCQUFzQixDQUFDLEdBQXVCLEVBQUUsR0FBdUIsRUFBRSxJQUF3QixFQUFFLEtBQXlCLEVBQUUsT0FBMkI7UUFDL0osTUFBTSxhQUFhLEdBQUcseUNBQXlDLENBQUM7UUFDaEUsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFxQixFQUFVLEVBQUU7WUFDN0MsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNSLE9BQU8sRUFBRSxDQUFDO1lBQ1gsQ0FBQztZQUVELE9BQU8sR0FBRyxHQUFHLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQzVELENBQUMsQ0FBQztRQUVGLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdkUsT0FBTyxhQUFhLEdBQUcsRUFBRSxDQUFDO0lBQzNCLENBQUM7Q0FFRCIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjbGFzcyBBZGRyZXNzRnVuYyB7XHJcblx0LyoqXHJcblx0ICogQ29tcG9zZSB0byBvbmUgbGluZSBzZXBhcmF0ZWQgYnkgY29tbWFcclxuXHQgKiBAcGFyYW0gc3QxXHJcblx0ICogQHBhcmFtIHN0MlxyXG5cdCAqIEBwYXJhbSBjaXR5XHJcblx0ICogQHBhcmFtIHN0YXRlXHJcblx0ICogQHBhcmFtIHBvc3Rjb2RlXHJcblx0ICovXHJcblx0c3RhdGljIGNvbXBvc2VPbmVMaW5lQWRkcmVzcyhzdDE6IHN0cmluZyB8IHVuZGVmaW5lZCwgc3QyOiBzdHJpbmcgfCB1bmRlZmluZWQsIGNpdHk6IHN0cmluZyB8IHVuZGVmaW5lZCwgc3RhdGU6IHN0cmluZyB8IHVuZGVmaW5lZCwgcG9zdGNvZGU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XHJcblx0XHRyZXR1cm4gQWRkcmVzc0Z1bmMuY29tcG9zZUFkZHJlc3Moc3QxLCBzdDIsIGNpdHksIHN0YXRlLCBwb3N0Y29kZSwgJywgJyk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBDb21wb3NlIHRvIG11bHRpcGxlIHNlcGFyYXRlZCBieSBcXG5cclxuXHQgKiBAcGFyYW0gc3QxXHJcblx0ICogQHBhcmFtIHN0MlxyXG5cdCAqIEBwYXJhbSBjaXR5XHJcblx0ICogQHBhcmFtIHN0YXRlXHJcblx0ICogQHBhcmFtIHBvc3Rjb2RlXHJcblx0ICovXHJcblx0c3RhdGljIGNvbXBvc2VNdWx0aUxpbmVBZGRyZXNzKHN0MTogc3RyaW5nIHwgdW5kZWZpbmVkLCBzdDI6IHN0cmluZyB8IHVuZGVmaW5lZCwgY2l0eTogc3RyaW5nIHwgdW5kZWZpbmVkLCBzdGF0ZTogc3RyaW5nIHwgdW5kZWZpbmVkLCBwb3N0Y29kZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcclxuXHRcdHJldHVybiBBZGRyZXNzRnVuYy5jb21wb3NlQWRkcmVzcyhzdDEsIHN0MiwgY2l0eSwgc3RhdGUsIHBvc3Rjb2RlLCAnXFxuJyk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBDb21wb3NlIHdpdGggc2VwYXJhdG9yXHJcblx0ICogQHBhcmFtIHN0MVxyXG5cdCAqIEBwYXJhbSBzdDJcclxuXHQgKiBAcGFyYW0gY2l0eVxyXG5cdCAqIEBwYXJhbSBzdGF0ZVxyXG5cdCAqIEBwYXJhbSBwb3N0Y29kZVxyXG5cdCAqIEBwYXJhbSBzZXBcclxuXHQgKi9cclxuXHRzdGF0aWMgY29tcG9zZUFkZHJlc3Moc3QxOiBzdHJpbmcgfCB1bmRlZmluZWQsIHN0Mjogc3RyaW5nIHwgdW5kZWZpbmVkLCBjaXR5OiBzdHJpbmcgfCB1bmRlZmluZWQsIHN0YXRlOiBzdHJpbmcgfCB1bmRlZmluZWQsIHBvc3Rjb2RlOiBzdHJpbmcgfCB1bmRlZmluZWQsIHNlcDogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcclxuXHRcdGNvbnN0IHIgPSAoc3QxID8gKHN0MSArIHNlcCkgOiAnJykgKyAoc3QyID8gKHN0MiArIHNlcCkgOiAnJykgKyAoY2l0eSA/IChjaXR5ICsgc2VwKSA6ICcnKSArIChzdGF0ZSA/IChzdGF0ZSArICcgJykgOiAnJykgKyAocG9zdGNvZGUgPyBwb3N0Y29kZSA6ICcnKTtcclxuXHRcdHJldHVybiByO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGNvbXBvc2VHb29nbGVNYXBzQXVVcmwoc3QxOiBzdHJpbmcgfCB1bmRlZmluZWQsIHN0Mjogc3RyaW5nIHwgdW5kZWZpbmVkLCBjaXR5OiBzdHJpbmcgfCB1bmRlZmluZWQsIHN0YXRlOiBzdHJpbmcgfCB1bmRlZmluZWQsIGNvdW50cnk6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XHJcblx0XHRjb25zdCBnb29nbGVCYXNlVXJsID0gJ2h0dHBzOi8vd3d3Lmdvb2dsZS5jb20uYXUvbWFwcz9obD1lbiZxPSc7XHJcblx0XHRjb25zdCBmZmYgPSAoczogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nID0+IHtcclxuXHRcdFx0aWYgKCFzKSB7XHJcblx0XHRcdFx0cmV0dXJuICcnO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyZXR1cm4gJysnICsgZW5jb2RlVVJJQ29tcG9uZW50KHMucmVwbGFjZSgnICcsICcrJykpICsgJywnO1xyXG5cdFx0fTtcclxuXHJcblx0XHRjb25zdCBzcyA9IGZmZihzdDEpICsgZmZmKHN0MikgKyBmZmYoY2l0eSkgKyBmZmYoc3RhdGUpICsgZmZmKGNvdW50cnkpO1xyXG5cdFx0cmV0dXJuIGdvb2dsZUJhc2VVcmwgKyBzcztcclxuXHR9XHJcblxyXG59XHJcbiJdfQ==
@@ -1,84 +0,0 @@
1
- /**
2
- * Currency calculations. Undefined input of number is considered zero, just like null.
3
- * Simple functions for currency before you decide to use more comprehensive ones:
4
- * https://github.com/scurker/currency.js
5
- * https://github.com/dinerojs/dinero.js Up to date and popular
6
- */
7
- export class CurrencyFunc {
8
- static DECIMAL_SEPARATOR = '.';
9
- static THOUSANDS_SEPARATOR = ',';
10
- static PADDING = '000000';
11
- /**
12
- * Banker rounding
13
- * @param num
14
- * @param decimalPlace default 0
15
- */
16
- static bankerRound(num, decimalPlace) {
17
- if (!num) {
18
- return 0;
19
- }
20
- const d = decimalPlace || 0;
21
- const m = Math.pow(10, d);
22
- const n = +(d ? num * m : num).toFixed(8); // Avoid rounding errors
23
- const i = Math.floor(n), f = n - i;
24
- const e = 1e-8; // Allow for rounding errors in f
25
- const r = (f > 0.5 - e && f < 0.5 + e) ?
26
- ((i % 2 === 0) ? i : i + 1) : Math.round(n);
27
- return d ? r / m : r;
28
- // http://stackoverflow.com/questions/3108986/gaussian-bankers-rounding-in-javascript
29
- }
30
- /**
31
- * Banker rounding to 5 cents
32
- * @param num
33
- * @returns
34
- */
35
- static bankerRoundTo5cents(num) {
36
- if (!num) {
37
- return 0;
38
- }
39
- const r = this.bankerRound(Math.round(num / 0.05) * 0.05, 2);
40
- return r;
41
- }
42
- // static transformCurrency(value: number | string | undefined, fractionSize: number = 2): string { In favour of dinerojs
43
- // let [integer, fraction = ''] = (value || '').toString()
44
- // .split(this.DECIMAL_SEPARATOR);
45
- // fraction = fractionSize > 0
46
- // ? this.DECIMAL_SEPARATOR + (fraction + this.PADDING).substring(0, fractionSize)
47
- // : '';
48
- // integer = integer.replace(/\B(?=(\d{3})+(?!\d))/g, this.THOUSANDS_SEPARATOR);
49
- // return integer + fraction;
50
- // }
51
- // static parseCurrency(value: string | undefined, fractionSize: number = 2): string {
52
- // let [integer, fraction = ''] = (value || '').split(this.DECIMAL_SEPARATOR);
53
- // integer = integer.replace(new RegExp(this.THOUSANDS_SEPARATOR, 'g'), '');
54
- // fraction = parseInt(fraction, 10) > 0 && fractionSize > 0
55
- // ? this.DECIMAL_SEPARATOR + (fraction + this.PADDING).substring(0, fractionSize)
56
- // : '';
57
- // return integer + fraction;
58
- // }
59
- //http://stackoverflow.com/questions/2998784/how-to-output-integers-with-leading-zeros-in-javascript
60
- static pad(num, size) {
61
- if (num == null) {
62
- return '';
63
- }
64
- if (num === 0) {
65
- return '0';
66
- }
67
- const numText = num.toString();
68
- let s = numText + '';
69
- while (s.length < size) {
70
- s = '0' + s;
71
- }
72
- return s;
73
- }
74
- /**
75
- * Sum array of numbers
76
- * @param ns
77
- * @returns
78
- */
79
- static sum(ns) {
80
- const r = ns.reduce((a, b) => (a ?? 0) + (b ?? 0), 0);
81
- return r;
82
- }
83
- }
84
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VycmVuY3lGdW5jLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbm1jZS1mdW5jL3NyYy9fZnVuYy9jdXJyZW5jeUZ1bmMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFDSCxNQUFNLE9BQU8sWUFBWTtJQUNoQixNQUFNLENBQUMsaUJBQWlCLEdBQUcsR0FBRyxDQUFDO0lBQy9CLE1BQU0sQ0FBQyxtQkFBbUIsR0FBRyxHQUFHLENBQUM7SUFFakMsTUFBTSxDQUFDLE9BQU8sR0FBRyxRQUFRLENBQUM7SUFFbEM7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxXQUFXLENBQUMsR0FBOEIsRUFBRSxZQUFxQjtRQUN2RSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDVixPQUFPLENBQUMsQ0FBQztRQUNWLENBQUM7UUFFRCxNQUFNLENBQUMsR0FBRyxZQUFZLElBQUksQ0FBQyxDQUFDO1FBQzVCLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzFCLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLHdCQUF3QjtRQUNuRSxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25DLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLGlDQUFpQztRQUNqRCxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN2QyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0MsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyQixxRkFBcUY7SUFDdEYsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsbUJBQW1CLENBQUMsR0FBOEI7UUFDeEQsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ1YsT0FBTyxDQUFDLENBQUM7UUFDVixDQUFDO1FBRUQsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDN0QsT0FBTyxDQUFDLENBQUM7SUFDVixDQUFDO0lBRUQseUhBQXlIO0lBQ3pILDJEQUEyRDtJQUMzRCxvQ0FBb0M7SUFFcEMsK0JBQStCO0lBQy9CLG9GQUFvRjtJQUNwRixVQUFVO0lBRVYsaUZBQWlGO0lBRWpGLDhCQUE4QjtJQUM5QixJQUFJO0lBRUosc0ZBQXNGO0lBQ3RGLCtFQUErRTtJQUUvRSw2RUFBNkU7SUFFN0UsNkRBQTZEO0lBQzdELG9GQUFvRjtJQUNwRixVQUFVO0lBRVYsOEJBQThCO0lBQzlCLElBQUk7SUFHSixvR0FBb0c7SUFDcEcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUE4QixFQUFFLElBQVk7UUFDdEQsSUFBSSxHQUFHLElBQUksSUFBSSxFQUFDLENBQUM7WUFDZixPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7UUFFRCxJQUFJLEdBQUcsS0FBSSxDQUFDLEVBQUMsQ0FBQztZQUNiLE9BQU8sR0FBRyxDQUFDO1FBQ1osQ0FBQztRQUVELE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMsR0FBRyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLE9BQU8sQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLEVBQUUsQ0FBQztZQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQUMsQ0FBQztRQUN4QyxPQUFPLENBQUMsQ0FBQztJQUNWLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFpQztRQUMzQyxNQUFNLENBQUMsR0FBVyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDOUQsT0FBTyxDQUFDLENBQUM7SUFDVixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEN1cnJlbmN5IGNhbGN1bGF0aW9ucy4gVW5kZWZpbmVkIGlucHV0IG9mIG51bWJlciBpcyBjb25zaWRlcmVkIHplcm8sIGp1c3QgbGlrZSBudWxsLlxyXG4gKiBTaW1wbGUgZnVuY3Rpb25zIGZvciBjdXJyZW5jeSBiZWZvcmUgeW91IGRlY2lkZSB0byB1c2UgbW9yZSBjb21wcmVoZW5zaXZlIG9uZXM6XHJcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9zY3Vya2VyL2N1cnJlbmN5LmpzXHJcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9kaW5lcm9qcy9kaW5lcm8uanMgVXAgdG8gZGF0ZSBhbmQgcG9wdWxhclxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEN1cnJlbmN5RnVuYyB7XHJcblx0cHJpdmF0ZSBzdGF0aWMgREVDSU1BTF9TRVBBUkFUT1IgPSAnLic7XHJcblx0cHJpdmF0ZSBzdGF0aWMgVEhPVVNBTkRTX1NFUEFSQVRPUiA9ICcsJztcclxuXHJcblx0cHJpdmF0ZSBzdGF0aWMgUEFERElORyA9ICcwMDAwMDAnO1xyXG5cclxuXHQvKipcclxuXHQgKiBCYW5rZXIgcm91bmRpbmdcclxuXHQgKiBAcGFyYW0gbnVtXHJcblx0ICogQHBhcmFtIGRlY2ltYWxQbGFjZSBkZWZhdWx0IDBcclxuXHQgKi9cclxuXHRzdGF0aWMgYmFua2VyUm91bmQobnVtOiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkLCBkZWNpbWFsUGxhY2U/OiBudW1iZXIpOiBudW1iZXIge1xyXG5cdFx0aWYgKCFudW0pIHtcclxuXHRcdFx0cmV0dXJuIDA7XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgZCA9IGRlY2ltYWxQbGFjZSB8fCAwO1xyXG5cdFx0Y29uc3QgbSA9IE1hdGgucG93KDEwLCBkKTtcclxuXHRcdGNvbnN0IG4gPSArKGQgPyBudW0gKiBtIDogbnVtKS50b0ZpeGVkKDgpOyAvLyBBdm9pZCByb3VuZGluZyBlcnJvcnNcclxuXHRcdGNvbnN0IGkgPSBNYXRoLmZsb29yKG4pLCBmID0gbiAtIGk7XHJcblx0XHRjb25zdCBlID0gMWUtODsgLy8gQWxsb3cgZm9yIHJvdW5kaW5nIGVycm9ycyBpbiBmXHJcblx0XHRjb25zdCByID0gKGYgPiAwLjUgLSBlICYmIGYgPCAwLjUgKyBlKSA/XHJcblx0XHRcdCgoaSAlIDIgPT09IDApID8gaSA6IGkgKyAxKSA6IE1hdGgucm91bmQobik7XHJcblx0XHRyZXR1cm4gZCA/IHIgLyBtIDogcjtcclxuXHRcdC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzEwODk4Ni9nYXVzc2lhbi1iYW5rZXJzLXJvdW5kaW5nLWluLWphdmFzY3JpcHRcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEJhbmtlciByb3VuZGluZyB0byA1IGNlbnRzXHJcblx0ICogQHBhcmFtIG51bSBcclxuXHQgKiBAcmV0dXJucyBcclxuXHQgKi9cclxuXHRzdGF0aWMgYmFua2VyUm91bmRUbzVjZW50cyhudW06IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQpOiBudW1iZXIge1xyXG5cdFx0aWYgKCFudW0pIHtcclxuXHRcdFx0cmV0dXJuIDA7XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgciA9IHRoaXMuYmFua2VyUm91bmQoTWF0aC5yb3VuZChudW0gLyAwLjA1KSAqIDAuMDUsIDIpO1xyXG5cdFx0cmV0dXJuIHI7XHJcblx0fVxyXG5cclxuXHQvLyBzdGF0aWMgdHJhbnNmb3JtQ3VycmVuY3kodmFsdWU6IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZCwgZnJhY3Rpb25TaXplOiBudW1iZXIgPSAyKTogc3RyaW5nIHsgSW4gZmF2b3VyIG9mIGRpbmVyb2pzXHJcblx0Ly8gXHRsZXQgW2ludGVnZXIsIGZyYWN0aW9uID0gJyddID0gKHZhbHVlIHx8ICcnKS50b1N0cmluZygpXHJcblx0Ly8gXHRcdC5zcGxpdCh0aGlzLkRFQ0lNQUxfU0VQQVJBVE9SKTtcclxuXHJcblx0Ly8gXHRmcmFjdGlvbiA9IGZyYWN0aW9uU2l6ZSA+IDBcclxuXHQvLyBcdFx0PyB0aGlzLkRFQ0lNQUxfU0VQQVJBVE9SICsgKGZyYWN0aW9uICsgdGhpcy5QQURESU5HKS5zdWJzdHJpbmcoMCwgZnJhY3Rpb25TaXplKVxyXG5cdC8vIFx0XHQ6ICcnO1xyXG5cclxuXHQvLyBcdGludGVnZXIgPSBpbnRlZ2VyLnJlcGxhY2UoL1xcQig/PShcXGR7M30pKyg/IVxcZCkpL2csIHRoaXMuVEhPVVNBTkRTX1NFUEFSQVRPUik7XHJcblxyXG5cdC8vIFx0cmV0dXJuIGludGVnZXIgKyBmcmFjdGlvbjtcclxuXHQvLyB9XHJcblxyXG5cdC8vIHN0YXRpYyBwYXJzZUN1cnJlbmN5KHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQsIGZyYWN0aW9uU2l6ZTogbnVtYmVyID0gMik6IHN0cmluZyB7XHJcblx0Ly8gXHRsZXQgW2ludGVnZXIsIGZyYWN0aW9uID0gJyddID0gKHZhbHVlIHx8ICcnKS5zcGxpdCh0aGlzLkRFQ0lNQUxfU0VQQVJBVE9SKTtcclxuXHJcblx0Ly8gXHRpbnRlZ2VyID0gaW50ZWdlci5yZXBsYWNlKG5ldyBSZWdFeHAodGhpcy5USE9VU0FORFNfU0VQQVJBVE9SLCAnZycpLCAnJyk7XHJcblxyXG5cdC8vIFx0ZnJhY3Rpb24gPSBwYXJzZUludChmcmFjdGlvbiwgMTApID4gMCAmJiBmcmFjdGlvblNpemUgPiAwXHJcblx0Ly8gXHRcdD8gdGhpcy5ERUNJTUFMX1NFUEFSQVRPUiArIChmcmFjdGlvbiArIHRoaXMuUEFERElORykuc3Vic3RyaW5nKDAsIGZyYWN0aW9uU2l6ZSlcclxuXHQvLyBcdFx0OiAnJztcclxuXHJcblx0Ly8gXHRyZXR1cm4gaW50ZWdlciArIGZyYWN0aW9uO1xyXG5cdC8vIH1cclxuXHJcblxyXG5cdC8vaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yOTk4Nzg0L2hvdy10by1vdXRwdXQtaW50ZWdlcnMtd2l0aC1sZWFkaW5nLXplcm9zLWluLWphdmFzY3JpcHRcclxuXHRzdGF0aWMgcGFkKG51bTogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCwgc2l6ZTogbnVtYmVyKTogc3RyaW5nIHtcclxuXHRcdGlmIChudW0gPT0gbnVsbCl7XHJcblx0XHRcdCByZXR1cm4gJyc7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKG51bSA9PT0wKXtcclxuXHRcdFx0cmV0dXJuICcwJztcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBudW1UZXh0ID0gbnVtLnRvU3RyaW5nKCk7XHJcblx0XHRsZXQgcyA9IG51bVRleHQgKyAnJztcclxuXHRcdHdoaWxlIChzLmxlbmd0aCA8IHNpemUpIHsgcyA9ICcwJyArIHM7IH1cclxuXHRcdHJldHVybiBzO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogU3VtIGFycmF5IG9mIG51bWJlcnNcclxuXHQgKiBAcGFyYW0gbnMgXHJcblx0ICogQHJldHVybnMgXHJcblx0ICovXHJcblx0c3RhdGljIHN1bShuczogKG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQpW10pOiBudW1iZXIge1xyXG5cdFx0Y29uc3QgciA9IDxudW1iZXI+bnMucmVkdWNlKChhLCBiKSA9PiAoYSA/PyAwKSArIChiID8/IDApLCAwKTtcclxuXHRcdHJldHVybiByO1xyXG5cdH1cclxuXHJcbn1cclxuIl19