nmce-func 0.0.8 → 0.1.2

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.
@@ -15,11 +15,11 @@ export declare class AuthenticationService {
15
15
  * @param password
16
16
  */
17
17
  login(username: string, password: string): import("rxjs").Observable<{
18
- access_token?: string | undefined;
19
- expires?: string | undefined;
20
- expires_in?: number | undefined;
21
- issued?: string | undefined;
22
- token_type?: string | undefined;
18
+ access_token: string;
19
+ expires: string;
20
+ expires_in: number;
21
+ issued: string;
22
+ token_type: string;
23
23
  username: string;
24
24
  }>;
25
25
  static ɵfac: i0.ɵɵFactoryDeclaration<AuthenticationService, never>;
@@ -32,12 +32,12 @@ export class AuthenticationService {
32
32
  }));
33
33
  }
34
34
  }
35
- AuthenticationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: AuthenticationService, deps: [{ token: 'auth.tokenUrl' }, { token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
36
- AuthenticationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: AuthenticationService });
37
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: AuthenticationService, decorators: [{
35
+ AuthenticationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: AuthenticationService, deps: [{ token: 'auth.tokenUrl' }, { token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
36
+ AuthenticationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: AuthenticationService });
37
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: AuthenticationService, decorators: [{
38
38
  type: Injectable
39
39
  }], ctorParameters: function () { return [{ type: undefined, decorators: [{
40
40
  type: Inject,
41
41
  args: ['auth.tokenUrl']
42
42
  }] }, { type: i1.HttpClient }]; } });
43
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aGVudGljYXRpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25tY2UtZnVuYy9zcmMvX2Z1bmMvYXV0aGVudGljYXRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7OztBQUVyQzs7O0dBR0c7QUFFSCxNQUFNLE9BQU8scUJBQXFCO0lBR2pDLFlBQTZDLE9BQWUsRUFBVSxJQUFnQjtRQUF6QyxZQUFPLEdBQVAsT0FBTyxDQUFRO1FBQVUsU0FBSSxHQUFKLElBQUksQ0FBWTtJQUN0RixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxRQUFnQixFQUFFLFFBQWdCO1FBQ3ZDLE1BQU0sSUFBSSxHQUFHLFdBQVcsR0FBRyxRQUFRLEdBQUcsWUFBWSxHQUFHLFFBQVEsR0FBRyxzQkFBc0IsQ0FBQztRQUN2RixNQUFNLE9BQU8sR0FBRyxFQUFFLE9BQU8sRUFBRSxFQUFFLGNBQWMsRUFBRSxrREFBa0QsRUFBRSxFQUFFLENBQUM7UUFDcEcsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FPbEIsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDO2FBQzdCLElBQUksQ0FBQyxHQUFHLENBQ1IsUUFBUSxDQUFDLEVBQUU7WUFDViw0R0FBNEc7WUFDNUcsdUVBQXVFO1lBQ3ZFLDREQUE0RDtZQUM1RCxvREFBb0Q7WUFDcEQsK0dBQStHO1lBQy9HLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQztZQUNsQyx3Q0FBd0M7WUFDeEMsT0FBTyxRQUFRLENBQUM7UUFDakIsQ0FBQyxDQUVELENBQUMsQ0FBQztJQUNMLENBQUM7O2tIQW5DVyxxQkFBcUIsa0JBR2IsZUFBZTtzSEFIdkIscUJBQXFCOzJGQUFyQixxQkFBcUI7a0JBRGpDLFVBQVU7OzBCQUlHLE1BQU07MkJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG4vKipcclxuICogTG9naW4gYW5kIHNhdmluZyB0b2tlbnMgaW4gc2Vzc2lvblN0b3JhZ2UuXHJcbiAqIEFwcCBuZWVkcyB0byBwcm92aWRlIGNvbnN0YW50ICdhdXRoLnRva2VuVXJsJy5cclxuICovXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEF1dGhlbnRpY2F0aW9uU2VydmljZSB7XHJcblx0dXNlck5hbWU6IHN0cmluZztcclxuXHJcblx0Y29uc3RydWN0b3IoQEluamVjdCgnYXV0aC50b2tlblVybCcpIHByaXZhdGUgYXV0aFVyaTogc3RyaW5nLCBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQpIHtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIExvZ2luIGFuZCBzYXZlIHRva2VucyB0byBzZXNzaW9uU3RvcmFnZSB0aGVuIHJldHVybiBhbiBvYnNlcnZhYmxlLlxyXG5cdCAqIEBwYXJhbSB1c2VybmFtZVxyXG5cdCAqIEBwYXJhbSBwYXNzd29yZFxyXG5cdCAqL1xyXG5cdGxvZ2luKHVzZXJuYW1lOiBzdHJpbmcsIHBhc3N3b3JkOiBzdHJpbmcpIHtcclxuXHRcdGNvbnN0IGJvZHkgPSAndXNlcm5hbWU9JyArIHVzZXJuYW1lICsgJyZwYXNzd29yZD0nICsgcGFzc3dvcmQgKyAnJmdyYW50X3R5cGU9cGFzc3dvcmQnO1xyXG5cdFx0Y29uc3Qgb3B0aW9ucyA9IHsgaGVhZGVyczogeyAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDsgY2hhcnNldD1VVEYtOCcgfSB9O1xyXG5cdFx0cmV0dXJuIHRoaXMuaHR0cC5wb3N0PHtcclxuXHRcdFx0YWNjZXNzX3Rva2VuPzogc3RyaW5nO1xyXG5cdFx0XHRleHBpcmVzPzogc3RyaW5nO1xyXG5cdFx0XHRleHBpcmVzX2luPzogbnVtYmVyO1xyXG5cdFx0XHRpc3N1ZWQ/OiBzdHJpbmc7XHJcblx0XHRcdHRva2VuX3R5cGU/OiBzdHJpbmc7XHJcblx0XHRcdHVzZXJuYW1lOiBzdHJpbmc7XHJcblx0XHR9Pih0aGlzLmF1dGhVcmksIGJvZHksIG9wdGlvbnMpXHJcblx0XHRcdC5waXBlKG1hcChcclxuXHRcdFx0XHRyZXNwb25zZSA9PiB7XHJcblx0XHRcdFx0XHQvL3Nlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ2FjY2Vzc190b2tlbicsIHJlc3BvbnNlLmFjY2Vzc190b2tlbik7IFRoZSBjbGllbnQgY29kZSBpcyByZXNwb25zZSB0byBkb2luZyB0aGVzZS5cclxuXHRcdFx0XHRcdC8vc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnZXhwaXJlc19pbicsIHJlc3BvbnNlLmV4cGlyZXNfaW4udG9TdHJpbmcoKSk7XHJcblx0XHRcdFx0XHQvL3Nlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ3Rva2VuX3R5cGUnLCByZXNwb25zZS50b2tlbl90eXBlKTtcclxuXHRcdFx0XHRcdC8vc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnaXNzdWVkJywgcmVzcG9uc2UuaXNzdWVkKTtcclxuXHRcdFx0XHRcdC8vc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnZXhwaXJlcycsIHJlc3BvbnNlLmV4cGlyZXMpOyAvLyBvZnRlbiB1cCB0byAyIHdlZWtzIGJ5IGRlZmF1bHQgaW4gQXNwLm5ldCBpZGVudGl0eSAyLlxyXG5cdFx0XHRcdFx0dGhpcy51c2VyTmFtZSA9IHJlc3BvbnNlLnVzZXJuYW1lO1xyXG5cdFx0XHRcdFx0Ly9BUFBfU1RBVFVTRVMudXNlck5hbWUgPSB0aGlzLnVzZXJOYW1lO1xyXG5cdFx0XHRcdFx0cmV0dXJuIHJlc3BvbnNlO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdCkpO1xyXG5cdH1cclxuXHJcbn1cclxuIl19
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aGVudGljYXRpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25tY2UtZnVuYy9zcmMvX2Z1bmMvYXV0aGVudGljYXRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7OztBQUVyQzs7O0dBR0c7QUFFSCxNQUFNLE9BQU8scUJBQXFCO0lBR2pDLFlBQTZDLE9BQWUsRUFBVSxJQUFnQjtRQUF6QyxZQUFPLEdBQVAsT0FBTyxDQUFRO1FBQVUsU0FBSSxHQUFKLElBQUksQ0FBWTtJQUN0RixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxRQUFnQixFQUFFLFFBQWdCO1FBQ3ZDLE1BQU0sSUFBSSxHQUFHLFdBQVcsR0FBRyxRQUFRLEdBQUcsWUFBWSxHQUFHLFFBQVEsR0FBRyxzQkFBc0IsQ0FBQztRQUN2RixNQUFNLE9BQU8sR0FBRyxFQUFFLE9BQU8sRUFBRSxFQUFFLGNBQWMsRUFBRSxrREFBa0QsRUFBRSxFQUFFLENBQUM7UUFDcEcsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FPbEIsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDO2FBQzdCLElBQUksQ0FBQyxHQUFHLENBQ1IsUUFBUSxDQUFDLEVBQUU7WUFDViw0R0FBNEc7WUFDNUcsdUVBQXVFO1lBQ3ZFLDREQUE0RDtZQUM1RCxvREFBb0Q7WUFDcEQsK0dBQStHO1lBQy9HLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQztZQUNsQyx3Q0FBd0M7WUFDeEMsT0FBTyxRQUFRLENBQUM7UUFDakIsQ0FBQyxDQUVELENBQUMsQ0FBQztJQUNMLENBQUM7O2tIQW5DVyxxQkFBcUIsa0JBR2IsZUFBZTtzSEFIdkIscUJBQXFCOzJGQUFyQixxQkFBcUI7a0JBRGpDLFVBQVU7OzBCQUlHLE1BQU07MkJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG4vKipcclxuICogTG9naW4gYW5kIHNhdmluZyB0b2tlbnMgaW4gc2Vzc2lvblN0b3JhZ2UuXHJcbiAqIEFwcCBuZWVkcyB0byBwcm92aWRlIGNvbnN0YW50ICdhdXRoLnRva2VuVXJsJy5cclxuICovXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEF1dGhlbnRpY2F0aW9uU2VydmljZSB7XHJcblx0dXNlck5hbWU6IHN0cmluZztcclxuXHJcblx0Y29uc3RydWN0b3IoQEluamVjdCgnYXV0aC50b2tlblVybCcpIHByaXZhdGUgYXV0aFVyaTogc3RyaW5nLCBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQpIHtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIExvZ2luIGFuZCBzYXZlIHRva2VucyB0byBzZXNzaW9uU3RvcmFnZSB0aGVuIHJldHVybiBhbiBvYnNlcnZhYmxlLlxyXG5cdCAqIEBwYXJhbSB1c2VybmFtZVxyXG5cdCAqIEBwYXJhbSBwYXNzd29yZFxyXG5cdCAqL1xyXG5cdGxvZ2luKHVzZXJuYW1lOiBzdHJpbmcsIHBhc3N3b3JkOiBzdHJpbmcpIHtcclxuXHRcdGNvbnN0IGJvZHkgPSAndXNlcm5hbWU9JyArIHVzZXJuYW1lICsgJyZwYXNzd29yZD0nICsgcGFzc3dvcmQgKyAnJmdyYW50X3R5cGU9cGFzc3dvcmQnO1xyXG5cdFx0Y29uc3Qgb3B0aW9ucyA9IHsgaGVhZGVyczogeyAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDsgY2hhcnNldD1VVEYtOCcgfSB9O1xyXG5cdFx0cmV0dXJuIHRoaXMuaHR0cC5wb3N0PHtcclxuXHRcdFx0YWNjZXNzX3Rva2VuOiBzdHJpbmc7XHJcblx0XHRcdGV4cGlyZXM6IHN0cmluZztcclxuXHRcdFx0ZXhwaXJlc19pbjogbnVtYmVyO1xyXG5cdFx0XHRpc3N1ZWQ6IHN0cmluZztcclxuXHRcdFx0dG9rZW5fdHlwZTogc3RyaW5nO1xyXG5cdFx0XHR1c2VybmFtZTogc3RyaW5nO1xyXG5cdFx0fT4odGhpcy5hdXRoVXJpLCBib2R5LCBvcHRpb25zKVxyXG5cdFx0XHQucGlwZShtYXAoXHJcblx0XHRcdFx0cmVzcG9uc2UgPT4ge1xyXG5cdFx0XHRcdFx0Ly9zZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdhY2Nlc3NfdG9rZW4nLCByZXNwb25zZS5hY2Nlc3NfdG9rZW4pOyBUaGUgY2xpZW50IGNvZGUgaXMgcmVzcG9uc2UgdG8gZG9pbmcgdGhlc2UuXHJcblx0XHRcdFx0XHQvL3Nlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ2V4cGlyZXNfaW4nLCByZXNwb25zZS5leHBpcmVzX2luLnRvU3RyaW5nKCkpO1xyXG5cdFx0XHRcdFx0Ly9zZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCd0b2tlbl90eXBlJywgcmVzcG9uc2UudG9rZW5fdHlwZSk7XHJcblx0XHRcdFx0XHQvL3Nlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ2lzc3VlZCcsIHJlc3BvbnNlLmlzc3VlZCk7XHJcblx0XHRcdFx0XHQvL3Nlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ2V4cGlyZXMnLCByZXNwb25zZS5leHBpcmVzKTsgLy8gb2Z0ZW4gdXAgdG8gMiB3ZWVrcyBieSBkZWZhdWx0IGluIEFzcC5uZXQgaWRlbnRpdHkgMi5cclxuXHRcdFx0XHRcdHRoaXMudXNlck5hbWUgPSByZXNwb25zZS51c2VybmFtZTtcclxuXHRcdFx0XHRcdC8vQVBQX1NUQVRVU0VTLnVzZXJOYW1lID0gdGhpcy51c2VyTmFtZTtcclxuXHRcdFx0XHRcdHJldHVybiByZXNwb25zZTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHQpKTtcclxuXHR9XHJcblxyXG59XHJcbiJdfQ==
@@ -84,9 +84,9 @@ class AuthenticationService {
84
84
  }));
85
85
  }
86
86
  }
87
- AuthenticationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", 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.1.1", ngImport: i0, type: AuthenticationService });
89
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: AuthenticationService, decorators: [{
87
+ AuthenticationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", 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: "14.1.3", ngImport: i0, type: AuthenticationService });
89
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: AuthenticationService, decorators: [{
90
90
  type: Injectable
91
91
  }], ctorParameters: function () {
92
92
  return [{ type: undefined, decorators: [{
@@ -1 +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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"}
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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"}
@@ -84,9 +84,9 @@ class AuthenticationService {
84
84
  }));
85
85
  }
86
86
  }
87
- AuthenticationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", 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.1.1", ngImport: i0, type: AuthenticationService });
89
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: AuthenticationService, decorators: [{
87
+ AuthenticationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", 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: "14.1.3", ngImport: i0, type: AuthenticationService });
89
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: AuthenticationService, decorators: [{
90
90
  type: Injectable
91
91
  }], ctorParameters: function () { return [{ type: undefined, decorators: [{
92
92
  type: Inject,
@@ -1 +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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"}
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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"}
File without changes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nmce-func",
3
- "version": "0.0.8",
3
+ "version": "0.1.2",
4
4
  "author": {
5
5
  "name": "Z"
6
6
  },
@@ -10,11 +10,11 @@
10
10
  "url": "https://github.com/zijianhuang/nmce"
11
11
  },
12
12
  "peerDependencies": {
13
- "@angular/common": "^13.1.1",
14
- "@angular/core": "^13.1.1"
13
+ "@angular/common": "^14.0.0",
14
+ "@angular/core": "^14.0.0"
15
15
  },
16
16
  "dependencies": {
17
- "tslib": "^2.3.1"
17
+ "tslib": "^2.4.0"
18
18
  },
19
19
  "keywords": [
20
20
  "angular"
@@ -24,13 +24,13 @@
24
24
  "esm2020": "esm2020/nmce-func.mjs",
25
25
  "fesm2020": "fesm2020/nmce-func.mjs",
26
26
  "fesm2015": "fesm2015/nmce-func.mjs",
27
- "typings": "nmce-func.d.ts",
27
+ "typings": "index.d.ts",
28
28
  "exports": {
29
29
  "./package.json": {
30
30
  "default": "./package.json"
31
31
  },
32
32
  ".": {
33
- "types": "./nmce-func.d.ts",
33
+ "types": "./index.d.ts",
34
34
  "esm2020": "./esm2020/nmce-func.mjs",
35
35
  "es2020": "./fesm2020/nmce-func.mjs",
36
36
  "es2015": "./fesm2015/nmce-func.mjs",