nmce-func 0.0.6 → 0.1.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.
- package/_func/authentication.service.d.ts +8 -5
- package/_func/dateFunc.d.ts +11 -1
- package/_func/htmlPrintFunc.d.ts +18 -0
- package/_func/index.d.ts +5 -3
- package/_func/javascriptFunc.d.ts +9 -0
- package/_func/{jsFunc.d.ts → jsonFunc.d.ts} +17 -2
- package/_func/stringAusFunc.d.ts +40 -0
- package/_func/stringFunc.d.ts +7 -36
- package/_func/{helperFunc.d.ts → uuidFunc.d.ts} +1 -2
- package/{esm2015/_func/addressFunc.js → esm2020/_func/addressFunc.mjs} +0 -0
- package/esm2020/_func/authentication.service.mjs +43 -0
- package/{esm2015/_func/currencyFunc.js → esm2020/_func/currencyFunc.mjs} +2 -2
- package/esm2020/_func/dateFunc.mjs +316 -0
- package/esm2020/_func/htmlPrintFunc.mjs +45 -0
- package/esm2020/_func/index.mjs +11 -0
- package/esm2020/_func/javascriptFunc.mjs +17 -0
- package/esm2020/_func/jsonFunc.mjs +67 -0
- package/esm2020/_func/stringAusFunc.mjs +200 -0
- package/esm2020/_func/stringFunc.mjs +93 -0
- package/esm2020/_func/uuidFunc.mjs +17 -0
- package/{esm2015/nmce-func.js → esm2020/nmce-func.mjs} +0 -0
- package/{esm2015/public-api.js → esm2020/public-api.mjs} +0 -0
- package/fesm2015/{nmce-func.js → nmce-func.mjs} +189 -137
- package/fesm2015/nmce-func.mjs.map +1 -0
- package/fesm2020/nmce-func.mjs +929 -0
- package/fesm2020/nmce-func.mjs.map +1 -0
- package/nmce-func.d.ts +1 -0
- package/package.json +22 -10
- package/_func/htmlFunc.d.ts +0 -14
- package/bundles/nmce-func.umd.js +0 -1238
- package/bundles/nmce-func.umd.js.map +0 -1
- package/bundles/nmce-func.umd.min.js +0 -2
- package/bundles/nmce-func.umd.min.js.map +0 -1
- package/esm2015/_func/authentication.service.js +0 -41
- package/esm2015/_func/dateFunc.js +0 -306
- package/esm2015/_func/helperFunc.js +0 -25
- package/esm2015/_func/htmlFunc.js +0 -41
- package/esm2015/_func/index.js +0 -9
- package/esm2015/_func/jsFunc.js +0 -52
- package/esm2015/_func/stringFunc.js +0 -283
- package/fesm2015/nmce-func.js.map +0 -1
- package/nmce-func.metadata.json +0 -1
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
2
|
import { Injectable, Inject } from '@angular/core';
|
|
3
3
|
import { map } from 'rxjs/operators';
|
|
4
|
+
import * as i1 from '@angular/common/http';
|
|
4
5
|
import moment from 'moment';
|
|
5
6
|
import { v4 } from 'uuid';
|
|
6
7
|
|
|
@@ -83,13 +84,16 @@ class AuthenticationService {
|
|
|
83
84
|
}));
|
|
84
85
|
}
|
|
85
86
|
}
|
|
86
|
-
AuthenticationService
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
87
|
+
AuthenticationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: AuthenticationService, deps: [{ token: 'auth.tokenUrl' }, { token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
88
|
+
AuthenticationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: AuthenticationService });
|
|
89
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: AuthenticationService, decorators: [{
|
|
90
|
+
type: Injectable
|
|
91
|
+
}], ctorParameters: function () {
|
|
92
|
+
return [{ type: undefined, decorators: [{
|
|
93
|
+
type: Inject,
|
|
94
|
+
args: ['auth.tokenUrl']
|
|
95
|
+
}] }, { type: i1.HttpClient }];
|
|
96
|
+
} });
|
|
93
97
|
|
|
94
98
|
/**
|
|
95
99
|
* Currency calculations. Undefined input of number is considered zero, just like null.
|
|
@@ -367,10 +371,20 @@ class DateFunc {
|
|
|
367
371
|
const m = moment.utc(dtUtc);
|
|
368
372
|
return moment.utc().diff(m, 'days');
|
|
369
373
|
}
|
|
374
|
+
/**
|
|
375
|
+
* How many years from now.
|
|
376
|
+
* @param d
|
|
377
|
+
* @returns
|
|
378
|
+
*/
|
|
370
379
|
static getAge(d) {
|
|
371
380
|
const m = moment(d);
|
|
372
381
|
return moment().diff(m, 'years');
|
|
373
382
|
}
|
|
383
|
+
/**
|
|
384
|
+
* Year of date.
|
|
385
|
+
* @param d
|
|
386
|
+
* @returns
|
|
387
|
+
*/
|
|
374
388
|
static getYear(d) {
|
|
375
389
|
const m = moment(d);
|
|
376
390
|
return m.year();
|
|
@@ -468,41 +482,17 @@ class DateFunc {
|
|
|
468
482
|
}
|
|
469
483
|
}
|
|
470
484
|
|
|
471
|
-
|
|
472
|
-
// https://github.com/DefinitelyTyped/DefinitelyTyped/pull/28439
|
|
473
|
-
class HelperFunc {
|
|
474
|
-
static loadExternalScript(scriptUrl) {
|
|
475
|
-
return new Promise((resolve, reject) => {
|
|
476
|
-
const scriptElement = document.createElement('script');
|
|
477
|
-
scriptElement.src = scriptUrl;
|
|
478
|
-
scriptElement.onload = resolve;
|
|
479
|
-
document.body.appendChild(scriptElement);
|
|
480
|
-
});
|
|
481
|
-
}
|
|
485
|
+
class HtmlPrintFunc {
|
|
482
486
|
/**
|
|
483
|
-
*
|
|
484
|
-
*/
|
|
485
|
-
static newUUID() {
|
|
486
|
-
// return uuid('medilink.com.au', 'apscloud');
|
|
487
|
-
return v4();
|
|
488
|
-
}
|
|
489
|
-
static newUUIDStartWith0() {
|
|
490
|
-
const s = v4();
|
|
491
|
-
return '0000' + s.slice(4);
|
|
492
|
-
}
|
|
493
|
-
}
|
|
494
|
-
|
|
495
|
-
class HtmlFunc {
|
|
496
|
-
/**
|
|
497
|
-
* Print with buillt-in CSS for internal reports
|
|
487
|
+
* Print with CSS for internal reports
|
|
498
488
|
* @param htmlTags
|
|
499
|
-
* @param
|
|
489
|
+
* @param cssUrl
|
|
500
490
|
*/
|
|
501
|
-
static printWithCSS(htmlTags,
|
|
491
|
+
static printWithCSS(htmlTags, cssUrl) {
|
|
502
492
|
if (window) {
|
|
503
493
|
const htmlToPrint = `<html><head>
|
|
504
494
|
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
|
|
505
|
-
<link rel="stylesheet" type="text/css" href="${
|
|
495
|
+
<link rel="stylesheet" type="text/css" href="${cssUrl}" media="screen,print"/>
|
|
506
496
|
</head><body onload="window.print()">${htmlTags}</body></html>`;
|
|
507
497
|
const popup = window.open('', '_blank', 'width=1024,height=768');
|
|
508
498
|
popup === null || popup === void 0 ? void 0 : popup.document.open();
|
|
@@ -527,13 +517,43 @@ class HtmlFunc {
|
|
|
527
517
|
}
|
|
528
518
|
return true;
|
|
529
519
|
}
|
|
520
|
+
/**
|
|
521
|
+
* Print image url through html img.
|
|
522
|
+
* @param url
|
|
523
|
+
*/
|
|
530
524
|
static printImage(url) {
|
|
531
525
|
const imageTags = `<img src="${url}" alt="Image from URL"/>`;
|
|
532
|
-
|
|
526
|
+
HtmlPrintFunc.print(imageTags);
|
|
533
527
|
}
|
|
534
528
|
}
|
|
535
529
|
|
|
536
|
-
class
|
|
530
|
+
class JavaScriptFunc {
|
|
531
|
+
/**
|
|
532
|
+
* Some business functions depend on external JavaScript libraries. Lazy loading of respective business modules is good,
|
|
533
|
+
* and this function supports lazy loading of JS libraries.
|
|
534
|
+
* @param scriptUrl
|
|
535
|
+
* @returns Promise for subsequent JS function calls.
|
|
536
|
+
*/
|
|
537
|
+
static loadExternalScript(scriptUrl) {
|
|
538
|
+
return new Promise((resolve, reject) => {
|
|
539
|
+
const scriptElement = document.createElement('script');
|
|
540
|
+
scriptElement.src = scriptUrl;
|
|
541
|
+
scriptElement.onload = resolve;
|
|
542
|
+
document.body.appendChild(scriptElement);
|
|
543
|
+
});
|
|
544
|
+
}
|
|
545
|
+
}
|
|
546
|
+
|
|
547
|
+
/**
|
|
548
|
+
* Basic JSON functions
|
|
549
|
+
*/
|
|
550
|
+
class JsonFunc {
|
|
551
|
+
/**
|
|
552
|
+
*
|
|
553
|
+
* @param array Group by a property of array element.
|
|
554
|
+
* @param propertyName
|
|
555
|
+
* @returns
|
|
556
|
+
*/
|
|
537
557
|
static groupBy(array, propertyName) {
|
|
538
558
|
return array.reduce(function (acc, obj) {
|
|
539
559
|
const key = obj[propertyName];
|
|
@@ -545,7 +565,8 @@ class JSFunc {
|
|
|
545
565
|
}, {});
|
|
546
566
|
}
|
|
547
567
|
/**
|
|
548
|
-
* Group by a date property. The key is always of string type and representing milliseconds.
|
|
568
|
+
* Group by a date property. The key is always of string type and representing milliseconds.
|
|
569
|
+
* The client should convert the string to number.
|
|
549
570
|
* Angular date pipe could actually consume such string without explicitly converting to number.
|
|
550
571
|
* @param array
|
|
551
572
|
* @param propertyName
|
|
@@ -562,6 +583,7 @@ class JSFunc {
|
|
|
562
583
|
}
|
|
563
584
|
/**
|
|
564
585
|
* Remove null or empty fields including those in nested objects.
|
|
586
|
+
* This is useful for reducing payload of AJAX serialization.
|
|
565
587
|
* @param obj
|
|
566
588
|
*/
|
|
567
589
|
static removeNullOrEmptyFields(obj) {
|
|
@@ -575,6 +597,10 @@ class JSFunc {
|
|
|
575
597
|
}
|
|
576
598
|
}
|
|
577
599
|
}
|
|
600
|
+
/**
|
|
601
|
+
*
|
|
602
|
+
* @param obj Remove null fields of object at only the 1st level.
|
|
603
|
+
*/
|
|
578
604
|
static removeNullFields(obj) {
|
|
579
605
|
for (const f in obj) {
|
|
580
606
|
if (obj[f] === null) {
|
|
@@ -584,86 +610,10 @@ class JSFunc {
|
|
|
584
610
|
}
|
|
585
611
|
}
|
|
586
612
|
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
* Up to 2 letters. For John Smith, returns JS, for Huang, Zijian, returns ZH
|
|
592
|
-
* @param s
|
|
593
|
-
*/
|
|
594
|
-
static getAbbr(s) {
|
|
595
|
-
if (!s) {
|
|
596
|
-
return '';
|
|
597
|
-
}
|
|
598
|
-
const sArray = s.split(/[\s,]+/);
|
|
599
|
-
const comma = s.indexOf(',') >= 0;
|
|
600
|
-
if (sArray.length === 1) {
|
|
601
|
-
return sArray[0][0];
|
|
602
|
-
}
|
|
603
|
-
return comma ? sArray[1][0] + sArray[0][0] : sArray[0][0] + sArray[1][0];
|
|
604
|
-
}
|
|
605
|
-
/**
|
|
606
|
-
* A substring with line breaks replaced by space.
|
|
607
|
-
* @param s
|
|
608
|
-
* @param length
|
|
609
|
-
* @returns result, or empty string if the input is empty, null or undefined
|
|
610
|
-
*/
|
|
611
|
-
static getOneLineDigest(s, length) {
|
|
612
|
-
if (!s) {
|
|
613
|
-
return '';
|
|
614
|
-
}
|
|
615
|
-
const ss = s.substring(0, length);
|
|
616
|
-
const st = ss.replace(new RegExp('\n', 'g'), ' ') + ((s.length > length) ? '...' : '');
|
|
617
|
-
return st.trim();
|
|
618
|
-
}
|
|
619
|
-
/**
|
|
620
|
-
* 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.
|
|
621
|
-
* @param s
|
|
622
|
-
* @param length
|
|
623
|
-
* @returns result, or empty string if the input is empty, null or undefined
|
|
624
|
-
*/
|
|
625
|
-
static getOneLineDigestOfHtml(s, length) {
|
|
626
|
-
if (!s) {
|
|
627
|
-
return '';
|
|
628
|
-
}
|
|
629
|
-
const ss = s.substring(0, length);
|
|
630
|
-
const st = ss.replace(new RegExp('\n', 'g'), ' ') + ((s.length > length) ? '...' : '');
|
|
631
|
-
return encodeURI(st.trim()); //need to encode in order to save as meta in Azure.
|
|
632
|
-
}
|
|
633
|
-
static pad(num, size) {
|
|
634
|
-
if (num == null) {
|
|
635
|
-
return '';
|
|
636
|
-
}
|
|
637
|
-
let s = num + '';
|
|
638
|
-
while (s.length < size) {
|
|
639
|
-
s = '0' + s;
|
|
640
|
-
}
|
|
641
|
-
return s;
|
|
642
|
-
}
|
|
643
|
-
/**
|
|
644
|
-
* get plain text of HTML content
|
|
645
|
-
* @param s
|
|
646
|
-
* @returns result. If input is empty, null, or undefined, return the same.
|
|
647
|
-
*/
|
|
648
|
-
static getHtmlPlainText(s) {
|
|
649
|
-
if (!s) {
|
|
650
|
-
return null;
|
|
651
|
-
}
|
|
652
|
-
const parser = new DOMParser();
|
|
653
|
-
const html = parser.parseFromString(s, 'text/html');
|
|
654
|
-
return html.body.textContent;
|
|
655
|
-
}
|
|
656
|
-
/**
|
|
657
|
-
*
|
|
658
|
-
* @param s
|
|
659
|
-
* @returns result. If input is empty, null, or undefined, return the same.
|
|
660
|
-
*/
|
|
661
|
-
static capitalizeWords(s) {
|
|
662
|
-
if (!s) {
|
|
663
|
-
return s;
|
|
664
|
-
}
|
|
665
|
-
return s.replace(/(?:^|\s)\S/g, (a) => a.toUpperCase());
|
|
666
|
-
}
|
|
613
|
+
/**
|
|
614
|
+
* String functions specific to Australia
|
|
615
|
+
*/
|
|
616
|
+
class StringAusFunc {
|
|
667
617
|
/**
|
|
668
618
|
* Validate medicare number
|
|
669
619
|
* @param n
|
|
@@ -786,10 +736,10 @@ class StringFunc {
|
|
|
786
736
|
return null;
|
|
787
737
|
}
|
|
788
738
|
static addWeighted(p, v, i) {
|
|
789
|
-
return p + v *
|
|
739
|
+
return p + v * StringAusFunc.weights[i];
|
|
790
740
|
}
|
|
791
741
|
static addAcnWeighted(p, v, i) {
|
|
792
|
-
return p + v *
|
|
742
|
+
return p + v * StringAusFunc.acnWeights[i];
|
|
793
743
|
}
|
|
794
744
|
static generateLookup() {
|
|
795
745
|
const ns = [];
|
|
@@ -807,13 +757,13 @@ class StringFunc {
|
|
|
807
757
|
return { code: 1, message: 'Expect 11-digit.' };
|
|
808
758
|
}
|
|
809
759
|
digits[0] -= 1;
|
|
810
|
-
const sum = digits.reduce(
|
|
760
|
+
const sum = digits.reduce(StringAusFunc.addWeighted, 0);
|
|
811
761
|
if (sum % 89 === 0) {
|
|
812
762
|
return null;
|
|
813
763
|
}
|
|
814
764
|
digits[0] += 1;
|
|
815
|
-
let sum1 = sum - digits[10] *
|
|
816
|
-
let digit =
|
|
765
|
+
let sum1 = sum - digits[10] * StringAusFunc.weights[10];
|
|
766
|
+
let digit = StringAusFunc.suggestLookup[89 - sum1 % 89];
|
|
817
767
|
if (digit !== undefined) {
|
|
818
768
|
return {
|
|
819
769
|
code: 2,
|
|
@@ -821,10 +771,10 @@ class StringFunc {
|
|
|
821
771
|
};
|
|
822
772
|
}
|
|
823
773
|
else {
|
|
824
|
-
const sum2 = sum1 - digits[9] *
|
|
774
|
+
const sum2 = sum1 - digits[9] * StringAusFunc.weights[9];
|
|
825
775
|
for (let i = 0; i < 10; ++i) {
|
|
826
|
-
sum1 = sum2 + i *
|
|
827
|
-
digit =
|
|
776
|
+
sum1 = sum2 + i * StringAusFunc.weights[9];
|
|
777
|
+
digit = StringAusFunc.suggestLookup[89 - sum1 % 89];
|
|
828
778
|
if (digit !== undefined) {
|
|
829
779
|
return {
|
|
830
780
|
code: 3,
|
|
@@ -844,7 +794,7 @@ class StringFunc {
|
|
|
844
794
|
if (digits.length !== 9) {
|
|
845
795
|
return { code: 1, message: 'Expect 9-digit.' };
|
|
846
796
|
}
|
|
847
|
-
const sum = digits.slice(0, 8).reduce(
|
|
797
|
+
const sum = digits.slice(0, 8).reduce(StringAusFunc.addAcnWeighted, 0);
|
|
848
798
|
const lastDigit = 10 - sum % 10;
|
|
849
799
|
if (lastDigit === digits[8]) {
|
|
850
800
|
return null;
|
|
@@ -854,18 +804,120 @@ class StringFunc {
|
|
|
854
804
|
message: 'Checksum is incorrect.'
|
|
855
805
|
};
|
|
856
806
|
}
|
|
857
|
-
|
|
807
|
+
}
|
|
808
|
+
//thanks to https://github.com/sidorares/australian-business-number/blob/0591475f5978fd122b472edcdc7efe6d96d56f26/index.js
|
|
809
|
+
StringAusFunc.acnWeights = [8, 7, 6, 5, 4, 3, 2, 1];
|
|
810
|
+
StringAusFunc.weights = [10, 1, 3, 5, 7, 9, 11, 13, 15, 17, 19];
|
|
811
|
+
StringAusFunc.suggestLookup = StringAusFunc.generateLookup();
|
|
812
|
+
|
|
813
|
+
class StringFunc {
|
|
814
|
+
/**
|
|
815
|
+
* Up to 2 letters. For John Smith, returns JS, for Huang, Zijian, returns ZH
|
|
816
|
+
* @param s
|
|
817
|
+
*/
|
|
818
|
+
static getAbbr(s) {
|
|
819
|
+
if (!s) {
|
|
820
|
+
return '';
|
|
821
|
+
}
|
|
822
|
+
const sArray = s.split(/[\s,]+/);
|
|
823
|
+
const comma = s.indexOf(',') >= 0;
|
|
824
|
+
if (sArray.length === 1) {
|
|
825
|
+
return sArray[0][0];
|
|
826
|
+
}
|
|
827
|
+
return comma ? sArray[1][0] + sArray[0][0] : sArray[0][0] + sArray[1][0];
|
|
828
|
+
}
|
|
829
|
+
/**
|
|
830
|
+
* A substring with line breaks replaced by space.
|
|
831
|
+
* @param s
|
|
832
|
+
* @param length
|
|
833
|
+
* @returns result, or empty string if the input is empty, null or undefined
|
|
834
|
+
*/
|
|
835
|
+
static getOneLineDigest(s, length) {
|
|
836
|
+
if (!s) {
|
|
837
|
+
return '';
|
|
838
|
+
}
|
|
839
|
+
const ss = s.substring(0, length);
|
|
840
|
+
const st = ss.replace(new RegExp('\n', 'g'), ' ') + ((s.length > length) ? '...' : '');
|
|
841
|
+
return st.trim();
|
|
842
|
+
}
|
|
843
|
+
/**
|
|
844
|
+
* 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.
|
|
845
|
+
* @param s
|
|
846
|
+
* @param length
|
|
847
|
+
* @returns result, or empty string if the input is empty, null or undefined
|
|
848
|
+
*/
|
|
849
|
+
static getOneLineDigestOfHtml(s, length) {
|
|
850
|
+
if (!s) {
|
|
851
|
+
return '';
|
|
852
|
+
}
|
|
853
|
+
const ss = s.substring(0, length);
|
|
854
|
+
const st = ss.replace(new RegExp('\n', 'g'), ' ') + ((s.length > length) ? '...' : '');
|
|
855
|
+
return encodeURI(st.trim()); //need to encode in order to save as meta in Azure.
|
|
856
|
+
}
|
|
857
|
+
/**
|
|
858
|
+
* Pad number with zero
|
|
859
|
+
* @param num
|
|
860
|
+
* @param size
|
|
861
|
+
* @returns
|
|
862
|
+
*/
|
|
863
|
+
static pad(num, size) {
|
|
864
|
+
if (num == null) {
|
|
865
|
+
return '';
|
|
866
|
+
}
|
|
867
|
+
let s = num + '';
|
|
868
|
+
while (s.length < size) {
|
|
869
|
+
s = '0' + s;
|
|
870
|
+
}
|
|
871
|
+
return s;
|
|
872
|
+
}
|
|
873
|
+
/**
|
|
874
|
+
* get plain text of HTML content
|
|
875
|
+
* @param s
|
|
876
|
+
* @returns result. If input is empty, null, or undefined, return the same.
|
|
877
|
+
*/
|
|
878
|
+
static getHtmlPlainText(s) {
|
|
879
|
+
if (!s) {
|
|
880
|
+
return null;
|
|
881
|
+
}
|
|
882
|
+
const parser = new DOMParser();
|
|
883
|
+
const html = parser.parseFromString(s, 'text/html');
|
|
884
|
+
return html.body.textContent;
|
|
885
|
+
}
|
|
886
|
+
/**
|
|
887
|
+
*
|
|
888
|
+
* @param s
|
|
889
|
+
* @returns result. If input is empty, null, or undefined, return the same.
|
|
890
|
+
*/
|
|
891
|
+
static capitalizeWords(s) {
|
|
892
|
+
if (!s) {
|
|
893
|
+
return s;
|
|
894
|
+
}
|
|
895
|
+
return s.replace(/(?:^|\s)\S/g, (a) => a.toUpperCase());
|
|
896
|
+
}
|
|
897
|
+
static validateEmail(email) {
|
|
858
898
|
if (!email) {
|
|
859
899
|
return true;
|
|
860
900
|
}
|
|
861
901
|
const 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,}))$/;
|
|
862
902
|
return re.test(email.toLowerCase());
|
|
863
903
|
}
|
|
864
|
-
}
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
904
|
+
}
|
|
905
|
+
|
|
906
|
+
// import { v5 as uuid } from 'uuid/v5 causes ERROR in src / app / _func / helperFunc.ts(1, 10): error TS2305: Module '"C:/VSProjects/ApsCloudTrunk/APS.WebPos.NGCli/NGSource/node_modules/@types/uuid/v5"' has no exported member 'v5'
|
|
907
|
+
// https://github.com/DefinitelyTyped/DefinitelyTyped/pull/28439
|
|
908
|
+
class UuidFunc {
|
|
909
|
+
/**
|
|
910
|
+
* 36 UUID string including 4 hyphens. MySql stores GUID as 36 bytes anyway rather than 16bytes.
|
|
911
|
+
*/
|
|
912
|
+
static newUUID() {
|
|
913
|
+
// return uuid('medilink.com.au', 'apscloud');
|
|
914
|
+
return v4();
|
|
915
|
+
}
|
|
916
|
+
static newUUIDStartWith0() {
|
|
917
|
+
const s = v4();
|
|
918
|
+
return '0000' + s.slice(4);
|
|
919
|
+
}
|
|
920
|
+
}
|
|
869
921
|
|
|
870
922
|
/*
|
|
871
923
|
* Public API Surface of nmce-func
|
|
@@ -875,5 +927,5 @@ StringFunc.suggestLookup = StringFunc.generateLookup();
|
|
|
875
927
|
* Generated bundle index. Do not edit.
|
|
876
928
|
*/
|
|
877
929
|
|
|
878
|
-
export { AddressFunc, AuthenticationService, CurrencyFunc, DateFunc,
|
|
879
|
-
//# sourceMappingURL=nmce-func.
|
|
930
|
+
export { AddressFunc, AuthenticationService, CurrencyFunc, DateFunc, HtmlPrintFunc, JavaScriptFunc, JsonFunc, StringAusFunc, StringFunc, UuidFunc };
|
|
931
|
+
//# sourceMappingURL=nmce-func.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nmce-func.mjs","sources":["../../../projects/nmce-func/src/_func/addressFunc.ts","../../../projects/nmce-func/src/_func/authentication.service.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","import { HttpClient } from '@angular/common/http';\r\nimport { Inject, Injectable } from '@angular/core';\r\nimport { map } from 'rxjs/operators';\r\n\r\n/**\r\n * Login and saving tokens in sessionStorage.\r\n * App needs to provide constant 'auth.tokenUrl'.\r\n */\r\n@Injectable()\r\nexport class AuthenticationService {\r\n\tuserName: string;\r\n\r\n\tconstructor(@Inject('auth.tokenUrl') private authUri: string, private http: HttpClient) {\r\n\t}\r\n\r\n\t/**\r\n\t * Login and save tokens to sessionStorage then return an observable.\r\n\t * @param username\r\n\t * @param password\r\n\t */\r\n\tlogin(username: string, password: string) {\r\n\t\tconst body = 'username=' + username + '&password=' + password + '&grant_type=password';\r\n\t\tconst options = { headers: { 'content-type': 'application/x-www-form-urlencoded; charset=UTF-8' } };\r\n\t\treturn this.http.post<{\r\n\t\t\taccess_token: string;\r\n\t\t\texpires: string;\r\n\t\t\texpires_in: number;\r\n\t\t\tissued: string;\r\n\t\t\ttoken_type: string;\r\n\t\t\tusername: string;\r\n\t\t}>(this.authUri, body, options)\r\n\t\t\t.pipe(map(\r\n\t\t\t\tresponse => {\r\n\t\t\t\t\t//sessionStorage.setItem('access_token', response.access_token); The client code is response to doing these.\r\n\t\t\t\t\t//sessionStorage.setItem('expires_in', response.expires_in.toString());\r\n\t\t\t\t\t//sessionStorage.setItem('token_type', response.token_type);\r\n\t\t\t\t\t//sessionStorage.setItem('issued', response.issued);\r\n\t\t\t\t\t//sessionStorage.setItem('expires', response.expires); // often up to 2 weeks by default in Asp.net identity 2.\r\n\t\t\t\t\tthis.userName = response.username;\r\n\t\t\t\t\t//APP_STATUSES.userName = this.userName;\r\n\t\t\t\t\treturn response;\r\n\t\t\t\t}\r\n\r\n\t\t\t));\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 */\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 *\r\n\t * @param num\r\n\t * @param decimalPlaces default 0\r\n\t */\r\n\tstatic bankerRound(num: number | null | undefined, decimalPlaces?: number): number {//http://stackoverflow.com/questions/3108986/gaussian-bankers-rounding-in-javascript\r\n\t\tif (!num) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tconst d = decimalPlaces || 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}\r\n\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.ceil(num * 20 - 0.5) / 20, 2);\r\n\t\treturn r;\r\n\t}\r\n\r\n\tstatic ceilTo5cents(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.ceil(num * 20) / 20, 4);\r\n\t\tconst roundup = Math.ceil(r * 10000) / 10000;\r\n\t\treturn roundup;\r\n\t}\r\n\r\n\tstatic transformCurrency(value: number | string | undefined, fractionSize: number = 2): string {\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\tstatic 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\r\n\t\tnum = null;\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\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 moment from 'moment';\r\n\r\nexport class DateFunc {\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 * @param offsetMinutes if not defined, it will be new Date().getTimezoneOffset(). //https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getTimezoneOffset\r\n\t */\r\n\tstatic dateTimeUtcToLocalDateNumber(dtUtc: Date | null | undefined): number {\r\n\t\tif (!dtUtc) {\r\n\t\t\treturn 0; //0 is better for calculation by the clients.\r\n\t\t}\r\n\r\n\t\tconst localDt = DateFunc.dateTimeUtcToLocalDateTime(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 */\r\n\tstatic dateTimeUtcToLocalDate(dtUtc: Date | null | undefined): Date {\r\n\t\tconst localDt = DateFunc.dateTimeUtcToLocalDateTime(dtUtc);\r\n\t\tconst localD = localDt.setHours(0, 0, 0, 0);\r\n\t\treturn new Date(localD);\r\n\t}\r\n\r\n\tstatic localISODateString(dtUtc: Date | null | undefined): string {\r\n\t\tconst dt = moment(dtUtc).local();\r\n\t\treturn dt.format('YYYY-MM-DD');\r\n\t}\r\n\r\n\t/**\r\n\t * locate date ONLY (no time) to UTC date.\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 | number | null | undefined | string): Date {\r\n\t\tconst dt = moment(d).toDate();\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 getTimezoneOffset(): number {\r\n\t\tconst dt = this.today;\r\n\t\treturn dt.getTimezoneOffset();\r\n\t}\r\n\r\n\t/**\r\n\t * Transform UTC DateTime to local dateTime.\r\n\t * @param dtUtc\r\n\t * @param offsetMinutes if not defined, it will be new Date().getTimezoneOffset(). //https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getTimezoneOffset\r\n\t */\r\n\tstatic dateTimeUtcToLocalDateTime(dtUtc: Date | null | undefined): Date {\r\n\t\tconst stillUtc = moment.utc(dtUtc).toDate();\r\n\t\treturn moment(stillUtc).local().toDate();\r\n\t}\r\n\r\n\tstatic dateTimeUtcToLocaMoment(dtUtc: Date | null | undefined): moment.Moment {\r\n\t\tconst stillUtc = moment.utc(dtUtc);\r\n\t\treturn stillUtc.local();\r\n\t}\r\n\r\n\tstatic getEndOfWeek(dt: Date | null | undefined | number) {\r\n\t\treturn moment(dt).endOf('isoWeek').toDate();\r\n\t}\r\n\r\n\tstatic getStartOfWeek(dt: Date | null | undefined | number) {\r\n\t\treturn moment(dt).startOf('isoWeek').toDate();\r\n\t}\r\n\r\n\tstatic getEndOfMonth(dt: Date | null | undefined | number) {\r\n\t\t// return new Date(dt.getFullYear(), dt.getMonth() + 1, 0, 23, 59, 59, 999);\r\n\t\treturn moment(dt).endOf('month').toDate();\r\n\t}\r\n\r\n\tstatic getStartOfMonth(dt: Date | null | undefined | number) {\r\n\t\treturn moment(dt).startOf('month').toDate();\r\n\t}\r\n\r\n\tstatic getDaysBetweenDates(dt1: Date | null | undefined, dt2: Date | null | undefined) {\r\n\t\treturn this.getDaysBetween(dt1, dt2);\r\n\t}\r\n\r\n\tstatic getEndOfDate(dt: Date | null | undefined): Date {\r\n\t\treturn dt ? new Date(dt.setHours(23, 59, 59, 999)) :\r\n\t\t\tnew Date(this.now.setHours(23, 59, 59, 999));\r\n\t}\r\n\r\n\tstatic getStartOfDate(dt: Date | null | undefined): Date {\r\n\t\treturn moment(dt).startOf('day').toDate();\r\n\t}\r\n\r\n\tstatic getEndOfToday(): Date {\r\n\t\t//\treturn new Date((new Date(Date.now())).setHours(23, 59, 59, 999));\r\n\t\treturn moment(Date.now()).endOf('day').toDate();\r\n\r\n\t}\r\n\r\n\tstatic getStartOfToday(): Date {\r\n\t\t//\treturn new Date((new Date(Date.now())).setHours(0, 0, 0, 0));\r\n\t\treturn moment(Date.now()).startOf('day').toDate();\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 | null | undefined, days: number = 0) {\r\n\t\tconst dat = moment(dt);\r\n\t\tdat.add(days, 'days');\r\n\t\treturn dat.toDate();\r\n\t}\r\n\r\n\tstatic subtractDays(dt: Date | null | undefined, days: number = 0) {\r\n\t\tconst dat = moment(dt);\r\n\t\tdat.subtract(days, 'days');\r\n\t\treturn dat.toDate();\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\tstatic getNext5MinuteMark(): Date {\r\n\t\tconst m = moment().set('second', 0).set('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.add(delta, 'm').toDate();\r\n\t\t}\r\n\r\n\t\treturn m.toDate();\r\n\t}\r\n\r\n\tstatic getYMD(d: Date) {\r\n\t\treturn moment(d).format('YYYYMMDD');\r\n\t}\r\n\r\n\tstatic getDMYWithSlash(d: Date) {\r\n\t\treturn moment(d).format('DD/MM/YYYY');\r\n\t}\r\n\r\n\tstatic getDMYHmWithSlash(d: Date) {\r\n\t\treturn moment(d).format('DD/MM/YYYY HH:mm');\r\n\t}\r\n\r\n\tstatic getMcpTime(dt: Date | null | undefined) {\r\n\t\treturn moment(dt).format('HH:mm:ss.SSSZ');\r\n\t}\r\n\r\n\t/**\r\n\t * In 24 hour format\r\n\t * @param dtUtc\r\n\t */\r\n\tstatic getLocalDMYHmWithSlash(dtUtc: Date | null | undefined) {\r\n\t\tconst d = DateFunc.dateTimeUtcToLocalDateTime(dtUtc);\r\n\t\treturn moment(d).format('DD/MM/YYYY HH:mm');\r\n\t}\r\n\r\n\t/**\r\n\t * Offset minutes comparing with today\r\n\t */\r\n\tstatic getOffsetMinutes(dtUtc: Date | null | undefined | number): number {\r\n\t\tconst dm1 = moment(dtUtc);\r\n\t\tconst dm2 = moment(new Date().setHours(0, 0, 0, 0));\r\n\t\treturn dm1.diff(dm2, 'minutes');\r\n\t}\r\n\r\n\tstatic getDaysBetween(d1?: Date | number | null | undefined, d2?: Date | number | null | undefined): number {\r\n\t\tconst dm1 = moment(d1);\r\n\t\tconst dm2 = moment(d2);\r\n\t\treturn dm2.diff(dm1, 'days');\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 | null | undefined | number): number {\r\n\t\tconst m = moment(dtUtc);\r\n\t\treturn m.hours();\r\n\t}\r\n\r\n\tstatic getMinute(dtUtc: Date | null | undefined | number): number {\r\n\t\tconst m = moment(dtUtc);\r\n\t\treturn m.minutes();\r\n\t}\r\n\r\n\tstatic composeDateTime(dt: Date | null | undefined, h: number = 0, minute: number = 0): Date {\r\n\t\tconst mt = moment(dt);\r\n\t\treturn new Date(mt.toDate().setHours(h, minute, 0, 0));\r\n\t}\r\n\r\n\tstatic olderThan24Hours(d: Date | null | undefined): boolean {\r\n\t\tconst m = moment(d);\r\n\t\treturn moment().diff(m, 'hours') >= 24;\r\n\t}\r\n\r\n\tstatic olderThan24HoursUtc(dtUtc: Date | null | undefined): boolean {\r\n\t\treturn DateFunc.getHourAgeUtc(dtUtc) >= 24;\r\n\t}\r\n\r\n\tstatic olderThanHours(d: Date, hours: number) {\r\n\t\tconst m = moment(d);\r\n\t\treturn moment().diff(m, 'hours') >= hours;\r\n\t}\r\n\r\n\tstatic olderThanHoursUtc(dtUtc: Date | null | undefined, hours: number): boolean {\r\n\t\treturn DateFunc.getHourAgeUtc(dtUtc) >= hours;\r\n\t}\r\n\r\n\tstatic olderThanMinutes(d: Date, minutes: number) {\r\n\t\tconst m = moment(d);\r\n\t\treturn moment().diff(m, 'minutes') >= minutes;\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 | null | undefined): boolean {\r\n\t\treturn DateFunc.getDayAgeUtc(dtUtc) > 0;\r\n\t}\r\n\r\n\tstatic getHourAge(d: Date) {\r\n\t\tconst m = moment(d);\r\n\t\treturn moment().diff(m, 'hours');\r\n\t}\r\n\r\n\tstatic getHourAgeUtc(dtUtc: Date | null | undefined) {\r\n\t\tconst m = moment.utc(dtUtc);\r\n\t\treturn moment.utc().diff(m, 'hours');\r\n\t}\r\n\r\n\t/**\r\n\t * Compare utc date with utc now.\r\n\t * @param dtUtc\r\n\t */\r\n\tstatic getDayAgeUtc(dtUtc: Date | null | undefined) {\r\n\t\tconst m = moment.utc(dtUtc);\r\n\t\treturn moment.utc().diff(m, '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) {\r\n\t\tconst m = moment(d);\r\n\t\treturn moment().diff(m, 'years');\r\n\t}\r\n\r\n\t/**\r\n\t * Year of date.\r\n\t * @param d \r\n\t * @returns \r\n\t */\r\n\tstatic getYear(d: Date) {\r\n\t\tconst m = moment(d);\r\n\t\treturn m.year();\r\n\t}\r\n\r\n\tstatic getUtcNow(): Date {\r\n\t\treturn moment.utc().toDate();\r\n\t}\r\n\r\n\tstatic addMinutes(d: Date, m: number): Date {\r\n\t\treturn moment(d).add(m, 'm').toDate();\r\n\t}\r\n\r\n\tstatic addMonth(d: Date, m: number): Date {\r\n\t\treturn moment(d).add(m, 'M').toDate();\r\n\t}\r\n\r\n\tstatic getDuration(d1: Date, d2: Date) {\r\n\t\tconst md1 = moment(d1);\r\n\t\tconst md2 = moment(d2);\r\n\t\treturn moment.duration(md2.diff(md1));\r\n\t}\r\n\r\n\t/**\r\n\t * Convert minutes from midnight to HH:mm text\r\n\t * @param mins\r\n\t */\r\n\tstatic getHMFromMins(mins: number): string {\r\n\t\t// do not include the first validation check if you want, for example,\r\n\t\t// getTimeFromMins(1530) to equal getTimeFromMins(90) (i.e. mins rollover)\r\n\t\tif (mins >= 24 * 60 || mins < 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 = mins / 60 | 0,\r\n\t\t\tm = mins % 60 | 0;\r\n\t\treturn moment.utc().hours(h).minutes(m).format('HH:mm');\r\n\t}\r\n\r\n\tstatic getMinutesSinceMidnight(d: Date | null | undefined) {\r\n\t\tconst m = moment(d);\r\n\t\tconst midnight = moment(d).startOf('day'); //Mutates the original moment by setting it to the start of a unit of time. So I have better not to use m which wil be changed by calling this function\r\n\t\treturn m.diff(midnight, 'minutes');\r\n\t}\r\n\r\n\tstatic getMinutesBetween(start: Date | null | undefined, end: Date | null | undefined) {\r\n\t\tconst m = moment(start);\r\n\t\tconst m2 = moment(end);\r\n\t\treturn m2.diff(m, 'minutes');\r\n\t}\r\n\r\n\t/**\r\n\t * Parse json string with date serialized into string, and get proper date object back\r\n\t * @param s\r\n\t */\r\n\tstatic dateSafeJsonParse(s: string) {\r\n\t\treturn JSON.parse(s, this.dateReviver);\r\n\t}\r\n\r\n\tprivate static dateReviver(key: string, value: any) {\r\n\t\tif (DateFunc.isSerializedDate(value)) {\r\n\t\t\treturn (new Date(value));\r\n\t\t}\r\n\r\n\t\t// If it's not a date-string, we want to return the value as-is. If we fail to return\r\n\t\t// a value, it will be omitted from the resultant data structure.\r\n\t\treturn (value);\r\n\r\n\t}\r\n\r\n\r\n\t// I determine if the given value is a string that matches the serialized-date pattern.\r\n\tprivate static isSerializedDate(value: any): boolean {\r\n\t\t// Dates are serialized in TZ format, example: '1981-12-20T04:00:14.000Z'.\r\n\t\tconst datePattern = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$/;\r\n\t\treturn (DateFunc.isString(value) && datePattern.test(value));\r\n\t}\r\n\r\n\r\n\t// I determine if the given value is a String.\r\n\tprivate static isString(value: any): boolean {\r\n\t\treturn ({}.toString.call(value) === '[object String]');\r\n\t}\r\n\r\n\tstatic dateSafeParse(s: string | Date) {\r\n\t\tconst m = moment(s);\r\n\t\treturn m.toDate();\r\n\t}\r\n\r\n\tstatic composeDateWithMinutes(d: Date, minute: number): Date {\r\n\t\tconst m = moment(d);\r\n\t\tconst midnight = moment(d).startOf('day'); // Mutates the original moment by setting it to the start of a unit of time. So I have better not to use m which wil be changed by calling this function\r\n\t\tmidnight.add(minute, 'minutes');\r\n\t\treturn midnight.toDate();\r\n\t}\r\n\r\n\t/**\r\n\t * Safe compare since date data may be considered as string rather than date.\r\n\t * @param d1\r\n\t * @param d2\r\n\t */\r\n\tstatic compare(d1: Date | undefined, d2: Date | undefined): number {\r\n\t\tif (!d1 && !d2) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tif (!d1) {\r\n\t\t\treturn -NaN\r\n\t\t}\r\n\r\n\t\tif (!d2) {\r\n\t\t\treturn NaN;\r\n\t\t}\r\n\r\n\t\tconst dd1 = (new Date(d1)).valueOf();\r\n\t\tconst dd2 = (new Date(d2)).valueOf();\r\n\t\treturn dd1 - dd2;\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 * @returns Promise for subsequent JS function calls.\r\n\t */\r\n\tstatic loadExternalScript(scriptUrl: string) {\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tconst scriptElement = document.createElement('script');\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 (!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 * 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// import { v5 as uuid } from 'uuid/v5 causes ERROR in src / app / _func / helperFunc.ts(1, 10): error TS2305: Module '\"C:/VSProjects/ApsCloudTrunk/APS.WebPos.NGCli/NGSource/node_modules/@types/uuid/v5\"' has no exported member '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('medilink.com.au', 'apscloud');\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 * Public API Surface of nmce-func\n */\n\nexport * from './_func/index';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["uuid"],"mappings":"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"}
|