nmce-func 1.2.0 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/_func/addressFunc.d.ts +31 -31
- package/_func/authentication.service.d.ts +27 -27
- package/_func/currencyFunc.d.ts +20 -20
- package/_func/dateFunc.d.ts +121 -121
- package/_func/htmlPrintFunc.d.ts +18 -18
- package/_func/index.d.ts +10 -10
- package/_func/javascriptFunc.d.ts +10 -9
- package/_func/jsonFunc.d.ts +31 -31
- package/_func/stringAusFunc.d.ts +40 -40
- package/_func/stringFunc.d.ts +41 -41
- package/_func/uuidFunc.d.ts +7 -7
- package/{esm2020 → esm2022}/_func/addressFunc.mjs +48 -48
- package/esm2022/_func/authentication.service.mjs +48 -0
- package/esm2022/_func/currencyFunc.mjs +72 -0
- package/{esm2020 → esm2022}/_func/dateFunc.mjs +315 -315
- package/{esm2020 → esm2022}/_func/htmlPrintFunc.mjs +39 -39
- package/{esm2020 → esm2022}/_func/index.mjs +10 -10
- package/esm2022/_func/javascriptFunc.mjs +21 -0
- package/{esm2020 → esm2022}/_func/jsonFunc.mjs +66 -66
- package/esm2022/_func/stringAusFunc.mjs +200 -0
- package/{esm2020 → esm2022}/_func/stringFunc.mjs +92 -92
- package/{esm2020 → esm2022}/_func/uuidFunc.mjs +16 -16
- package/{esm2020 → esm2022}/nmce-func.mjs +4 -4
- package/{esm2020 → esm2022}/public-api.mjs +4 -4
- package/{fesm2020 → fesm2022}/nmce-func.mjs +902 -895
- package/{fesm2020 → fesm2022}/nmce-func.mjs.map +1 -1
- package/index.d.ts +5 -5
- package/package.json +5 -11
- package/public-api.d.ts +1 -1
- package/esm2020/_func/authentication.service.mjs +0 -45
- package/esm2020/_func/currencyFunc.mjs +0 -72
- package/esm2020/_func/javascriptFunc.mjs +0 -17
- package/esm2020/_func/stringAusFunc.mjs +0 -200
- package/fesm2015/nmce-func.mjs +0 -933
- package/fesm2015/nmce-func.mjs.map +0 -1
|
@@ -1,45 +1,45 @@
|
|
|
1
|
-
export class HtmlPrintFunc {
|
|
2
|
-
/**
|
|
3
|
-
* Print with CSS for internal reports
|
|
4
|
-
* @param htmlTags
|
|
5
|
-
* @param cssUrl
|
|
6
|
-
*/
|
|
7
|
-
static printWithCSS(htmlTags, cssUrl) {
|
|
8
|
-
if (window) {
|
|
1
|
+
export class HtmlPrintFunc {
|
|
2
|
+
/**
|
|
3
|
+
* Print with CSS for internal reports
|
|
4
|
+
* @param htmlTags
|
|
5
|
+
* @param cssUrl
|
|
6
|
+
*/
|
|
7
|
+
static printWithCSS(htmlTags, cssUrl) {
|
|
8
|
+
if (window) {
|
|
9
9
|
const htmlToPrint = `<html><head>
|
|
10
10
|
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
|
|
11
11
|
<link rel="stylesheet" type="text/css" href="${cssUrl}" media="screen,print"/>
|
|
12
|
-
</head><body onload="window.print()">${htmlTags}</body></html>`;
|
|
13
|
-
const popup = window.open('', '_blank', 'width=1024,height=768');
|
|
14
|
-
popup?.document.open();
|
|
15
|
-
popup?.document.write(htmlToPrint);
|
|
16
|
-
popup?.document.close();
|
|
17
|
-
}
|
|
18
|
-
return true;
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Print for external documents.
|
|
22
|
-
* @param htmlTags
|
|
23
|
-
*/
|
|
24
|
-
static print(htmlTags) {
|
|
25
|
-
if (window) {
|
|
12
|
+
</head><body onload="window.print()">${htmlTags}</body></html>`;
|
|
13
|
+
const popup = window.open('', '_blank', 'width=1024,height=768');
|
|
14
|
+
popup?.document.open();
|
|
15
|
+
popup?.document.write(htmlToPrint);
|
|
16
|
+
popup?.document.close();
|
|
17
|
+
}
|
|
18
|
+
return true;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Print for external documents.
|
|
22
|
+
* @param htmlTags
|
|
23
|
+
*/
|
|
24
|
+
static print(htmlTags) {
|
|
25
|
+
if (window) {
|
|
26
26
|
const htmlToPrint = `<html><head>
|
|
27
27
|
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
|
|
28
|
-
</head><body onload="window.print()">${htmlTags}</body></html>`;
|
|
29
|
-
const popup = window.open('', '_blank', 'width=1024,height=768');
|
|
30
|
-
popup?.document.open();
|
|
31
|
-
popup?.document.write(htmlToPrint);
|
|
32
|
-
popup?.document.close();
|
|
33
|
-
}
|
|
34
|
-
return true;
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Print image url through html img.
|
|
38
|
-
* @param url
|
|
39
|
-
*/
|
|
40
|
-
static printImage(url) {
|
|
41
|
-
const imageTags = `<img src="${url}" alt="Image from URL"/>`;
|
|
42
|
-
HtmlPrintFunc.print(imageTags);
|
|
43
|
-
}
|
|
44
|
-
}
|
|
28
|
+
</head><body onload="window.print()">${htmlTags}</body></html>`;
|
|
29
|
+
const popup = window.open('', '_blank', 'width=1024,height=768');
|
|
30
|
+
popup?.document.open();
|
|
31
|
+
popup?.document.write(htmlToPrint);
|
|
32
|
+
popup?.document.close();
|
|
33
|
+
}
|
|
34
|
+
return true;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Print image url through html img.
|
|
38
|
+
* @param url
|
|
39
|
+
*/
|
|
40
|
+
static printImage(url) {
|
|
41
|
+
const imageTags = `<img src="${url}" alt="Image from URL"/>`;
|
|
42
|
+
HtmlPrintFunc.print(imageTags);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
45
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHRtbFByaW50RnVuYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25tY2UtZnVuYy9zcmMvX2Z1bmMvaHRtbFByaW50RnVuYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8sYUFBYTtJQUN6Qjs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLFlBQVksQ0FBQyxRQUFnQixFQUFFLE1BQWM7UUFDbkQsSUFBSSxNQUFNLEVBQUU7WUFDWCxNQUFNLFdBQVcsR0FBRzs7K0NBRXdCLE1BQU07dUNBQ2QsUUFBUSxnQkFBZ0IsQ0FBQztZQUU3RCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztZQUNqRSxLQUFLLEVBQUUsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3ZCLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBRW5DLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDeEI7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNiLENBQUM7SUFFRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQWdCO1FBQzVCLElBQUksTUFBTSxFQUFFO1lBQ1gsTUFBTSxXQUFXLEdBQUc7O3VDQUVnQixRQUFRLGdCQUFnQixDQUFDO1lBRTdELE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO1lBQ2pFLEtBQUssRUFBRSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDdkIsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7WUFFbkMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUN4QjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2IsQ0FBQztJQUVEOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBVztRQUM1QixNQUFNLFNBQVMsR0FBRyxhQUFhLEdBQUcsMEJBQTBCLENBQUM7UUFDN0QsYUFBYSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNoQyxDQUFDO0NBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY2xhc3MgSHRtbFByaW50RnVuYyB7XHJcblx0LyoqXHJcblx0ICogUHJpbnQgd2l0aCBDU1MgZm9yIGludGVybmFsIHJlcG9ydHNcclxuXHQgKiBAcGFyYW0gaHRtbFRhZ3NcclxuXHQgKiBAcGFyYW0gY3NzVXJsXHJcblx0ICovXHJcblx0c3RhdGljIHByaW50V2l0aENTUyhodG1sVGFnczogc3RyaW5nLCBjc3NVcmw6IHN0cmluZykge1xyXG5cdFx0aWYgKHdpbmRvdykge1xyXG5cdFx0XHRjb25zdCBodG1sVG9QcmludCA9IGA8aHRtbD48aGVhZD5cclxuPG1ldGEgbmFtZT1cInZpZXdwb3J0XCIgY29udGVudD1cIndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLCBzaHJpbmstdG8tZml0PW5vXCIvPlxyXG48bGluayByZWw9XCJzdHlsZXNoZWV0XCIgdHlwZT1cInRleHQvY3NzXCIgaHJlZj1cIiR7Y3NzVXJsfVwiIG1lZGlhPVwic2NyZWVuLHByaW50XCIvPlxyXG48L2hlYWQ+PGJvZHkgb25sb2FkPVwid2luZG93LnByaW50KClcIj4ke2h0bWxUYWdzfTwvYm9keT48L2h0bWw+YDtcclxuXHJcblx0XHRcdGNvbnN0IHBvcHVwID0gd2luZG93Lm9wZW4oJycsICdfYmxhbmsnLCAnd2lkdGg9MTAyNCxoZWlnaHQ9NzY4Jyk7XHJcblx0XHRcdHBvcHVwPy5kb2N1bWVudC5vcGVuKCk7XHJcblx0XHRcdHBvcHVwPy5kb2N1bWVudC53cml0ZShodG1sVG9QcmludCk7XHJcblxyXG5cdFx0XHRwb3B1cD8uZG9jdW1lbnQuY2xvc2UoKTtcclxuXHRcdH1cclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUHJpbnQgZm9yIGV4dGVybmFsIGRvY3VtZW50cy5cclxuXHQgKiBAcGFyYW0gaHRtbFRhZ3NcclxuXHQgKi9cclxuXHRzdGF0aWMgcHJpbnQoaHRtbFRhZ3M6IHN0cmluZykge1xyXG5cdFx0aWYgKHdpbmRvdykge1xyXG5cdFx0XHRjb25zdCBodG1sVG9QcmludCA9IGA8aHRtbD48aGVhZD5cclxuPG1ldGEgbmFtZT1cInZpZXdwb3J0XCIgY29udGVudD1cIndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLCBzaHJpbmstdG8tZml0PW5vXCIvPlxyXG48L2hlYWQ+PGJvZHkgb25sb2FkPVwid2luZG93LnByaW50KClcIj4ke2h0bWxUYWdzfTwvYm9keT48L2h0bWw+YDtcclxuXHJcblx0XHRcdGNvbnN0IHBvcHVwID0gd2luZG93Lm9wZW4oJycsICdfYmxhbmsnLCAnd2lkdGg9MTAyNCxoZWlnaHQ9NzY4Jyk7XHJcblx0XHRcdHBvcHVwPy5kb2N1bWVudC5vcGVuKCk7XHJcblx0XHRcdHBvcHVwPy5kb2N1bWVudC53cml0ZShodG1sVG9QcmludCk7XHJcblxyXG5cdFx0XHRwb3B1cD8uZG9jdW1lbnQuY2xvc2UoKTtcclxuXHRcdH1cclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUHJpbnQgaW1hZ2UgdXJsIHRocm91Z2ggaHRtbCBpbWcuXHJcblx0ICogQHBhcmFtIHVybCBcclxuXHQgKi9cclxuXHRzdGF0aWMgcHJpbnRJbWFnZSh1cmw6IHN0cmluZykge1xyXG5cdFx0Y29uc3QgaW1hZ2VUYWdzID0gYDxpbWcgc3JjPVwiJHt1cmx9XCIgYWx0PVwiSW1hZ2UgZnJvbSBVUkxcIi8+YDtcclxuXHRcdEh0bWxQcmludEZ1bmMucHJpbnQoaW1hZ2VUYWdzKTtcclxuXHR9XHJcbn1cclxuIl19
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
export * from './addressFunc';
|
|
2
|
-
export * from './authentication.service';
|
|
3
|
-
export * from './currencyFunc';
|
|
4
|
-
export * from './dateFunc';
|
|
5
|
-
export * from './htmlPrintFunc';
|
|
6
|
-
export * from './javascriptFunc';
|
|
7
|
-
export * from './jsonFunc';
|
|
8
|
-
export * from './stringAusFunc';
|
|
9
|
-
export * from './stringFunc';
|
|
10
|
-
export * from './uuidFunc';
|
|
1
|
+
export * from './addressFunc';
|
|
2
|
+
export * from './authentication.service';
|
|
3
|
+
export * from './currencyFunc';
|
|
4
|
+
export * from './dateFunc';
|
|
5
|
+
export * from './htmlPrintFunc';
|
|
6
|
+
export * from './javascriptFunc';
|
|
7
|
+
export * from './jsonFunc';
|
|
8
|
+
export * from './stringAusFunc';
|
|
9
|
+
export * from './stringFunc';
|
|
10
|
+
export * from './uuidFunc';
|
|
11
11
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9ubWNlLWZ1bmMvc3JjL19mdW5jL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLFlBQVksQ0FBQztBQUMzQixjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLFlBQVksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYWRkcmVzc0Z1bmMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2F1dGhlbnRpY2F0aW9uLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2N1cnJlbmN5RnVuYyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vZGF0ZUZ1bmMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2h0bWxQcmludEZ1bmMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2phdmFzY3JpcHRGdW5jJztcclxuZXhwb3J0ICogZnJvbSAnLi9qc29uRnVuYyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vc3RyaW5nQXVzRnVuYyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vc3RyaW5nRnVuYyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vdXVpZEZ1bmMnO1xyXG5cclxuXHJcbiJdfQ==
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export class JavaScriptFunc {
|
|
2
|
+
/**
|
|
3
|
+
* Some business functions depend on external JavaScript libraries. Lazy loading of respective business modules is good,
|
|
4
|
+
* and this function supports lazy loading of JS libraries.
|
|
5
|
+
* @param scriptUrl
|
|
6
|
+
* @param type things like module.
|
|
7
|
+
* @returns Promise for subsequent JS function calls.
|
|
8
|
+
*/
|
|
9
|
+
static loadExternalScript(scriptUrl, type) {
|
|
10
|
+
return new Promise((resolve, reject) => {
|
|
11
|
+
const scriptElement = document.createElement('script');
|
|
12
|
+
if (type) {
|
|
13
|
+
scriptElement.type = type;
|
|
14
|
+
}
|
|
15
|
+
scriptElement.src = scriptUrl;
|
|
16
|
+
scriptElement.onload = resolve;
|
|
17
|
+
document.body.appendChild(scriptElement);
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamF2YXNjcmlwdEZ1bmMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9ubWNlLWZ1bmMvc3JjL19mdW5jL2phdmFzY3JpcHRGdW5jLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sT0FBTyxjQUFjO0lBQzFCOzs7Ozs7T0FNRztJQUNILE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxTQUFpQixFQUFFLElBQWE7UUFDekQsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUN0QyxNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3ZELElBQUksSUFBSSxFQUFDO2dCQUNSLGFBQWEsQ0FBQyxJQUFJLEdBQUMsSUFBSSxDQUFDO2FBQ3hCO1lBRUQsYUFBYSxDQUFDLEdBQUcsR0FBRyxTQUFTLENBQUM7WUFDOUIsYUFBYSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUM7WUFDL0IsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDMUMsQ0FBQyxDQUFDLENBQUM7SUFDSixDQUFDO0NBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY2xhc3MgSmF2YVNjcmlwdEZ1bmMge1xyXG5cdC8qKlxyXG5cdCAqIFNvbWUgYnVzaW5lc3MgZnVuY3Rpb25zIGRlcGVuZCBvbiBleHRlcm5hbCBKYXZhU2NyaXB0IGxpYnJhcmllcy4gTGF6eSBsb2FkaW5nIG9mIHJlc3BlY3RpdmUgYnVzaW5lc3MgbW9kdWxlcyBpcyBnb29kLCBcclxuXHQgKiBhbmQgdGhpcyBmdW5jdGlvbiBzdXBwb3J0cyBsYXp5IGxvYWRpbmcgb2YgSlMgbGlicmFyaWVzLlxyXG5cdCAqIEBwYXJhbSBzY3JpcHRVcmwgXHJcblx0ICogQHBhcmFtIHR5cGUgdGhpbmdzIGxpa2UgbW9kdWxlLlxyXG5cdCAqIEByZXR1cm5zIFByb21pc2UgZm9yIHN1YnNlcXVlbnQgSlMgZnVuY3Rpb24gY2FsbHMuXHJcblx0ICovXHJcblx0c3RhdGljIGxvYWRFeHRlcm5hbFNjcmlwdChzY3JpcHRVcmw6IHN0cmluZywgdHlwZT86IHN0cmluZykge1xyXG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuXHRcdFx0Y29uc3Qgc2NyaXB0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xyXG5cdFx0XHRpZiAodHlwZSl7XHJcblx0XHRcdFx0c2NyaXB0RWxlbWVudC50eXBlPXR5cGU7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHNjcmlwdEVsZW1lbnQuc3JjID0gc2NyaXB0VXJsO1xyXG5cdFx0XHRzY3JpcHRFbGVtZW50Lm9ubG9hZCA9IHJlc29sdmU7XHJcblx0XHRcdGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoc2NyaXB0RWxlbWVudCk7XHJcblx0XHR9KTtcclxuXHR9XHJcbn1cclxuIl19
|
|
@@ -1,67 +1,67 @@
|
|
|
1
|
-
import { DateFunc } from './dateFunc';
|
|
2
|
-
/**
|
|
3
|
-
* Basic JSON functions
|
|
4
|
-
*/
|
|
5
|
-
export class JsonFunc {
|
|
6
|
-
/**
|
|
7
|
-
*
|
|
8
|
-
* @param array Group by a property of array element.
|
|
9
|
-
* @param propertyName
|
|
10
|
-
* @returns
|
|
11
|
-
*/
|
|
12
|
-
static groupBy(array, propertyName) {
|
|
13
|
-
return array.reduce(function (acc, obj) {
|
|
14
|
-
const key = obj[propertyName];
|
|
15
|
-
if (!acc[key]) {
|
|
16
|
-
acc[key] = [];
|
|
17
|
-
}
|
|
18
|
-
acc[key].push(obj);
|
|
19
|
-
return acc;
|
|
20
|
-
}, {});
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Group by a date property. The key is always of string type and representing milliseconds.
|
|
24
|
-
* The client should convert the string to number.
|
|
25
|
-
* Angular date pipe could actually consume such string without explicitly converting to number.
|
|
26
|
-
* @param array
|
|
27
|
-
* @param propertyName
|
|
28
|
-
*/
|
|
29
|
-
static groupByDate(array, propertyName) {
|
|
30
|
-
return array.reduce(function (acc, obj) {
|
|
31
|
-
const key = DateFunc.dateTimeUtcToLocalDateNumber(obj[propertyName]);
|
|
32
|
-
if (!acc[key]) {
|
|
33
|
-
acc[key] = [];
|
|
34
|
-
}
|
|
35
|
-
acc[key].push(obj);
|
|
36
|
-
return acc;
|
|
37
|
-
}, {});
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* Remove null or empty fields including those in nested objects.
|
|
41
|
-
* This is useful for reducing payload of AJAX serialization.
|
|
42
|
-
* @param obj
|
|
43
|
-
*/
|
|
44
|
-
static removeNullOrEmptyFields(obj) {
|
|
45
|
-
for (const f in obj) {
|
|
46
|
-
let p = obj[f];
|
|
47
|
-
if (p === null || p === '') {
|
|
48
|
-
delete obj[f];
|
|
49
|
-
}
|
|
50
|
-
else if (typeof p === 'object' && p !== null) {
|
|
51
|
-
this.removeNullOrEmptyFields(p);
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
*
|
|
57
|
-
* @param obj Remove null fields of object at only the 1st level.
|
|
58
|
-
*/
|
|
59
|
-
static removeNullFields(obj) {
|
|
60
|
-
for (const f in obj) {
|
|
61
|
-
if (obj[f] === null) {
|
|
62
|
-
delete obj[f];
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
}
|
|
1
|
+
import { DateFunc } from './dateFunc';
|
|
2
|
+
/**
|
|
3
|
+
* Basic JSON functions
|
|
4
|
+
*/
|
|
5
|
+
export class JsonFunc {
|
|
6
|
+
/**
|
|
7
|
+
*
|
|
8
|
+
* @param array Group by a property of array element.
|
|
9
|
+
* @param propertyName
|
|
10
|
+
* @returns
|
|
11
|
+
*/
|
|
12
|
+
static groupBy(array, propertyName) {
|
|
13
|
+
return array.reduce(function (acc, obj) {
|
|
14
|
+
const key = obj[propertyName];
|
|
15
|
+
if (!acc[key]) {
|
|
16
|
+
acc[key] = [];
|
|
17
|
+
}
|
|
18
|
+
acc[key].push(obj);
|
|
19
|
+
return acc;
|
|
20
|
+
}, {});
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Group by a date property. The key is always of string type and representing milliseconds.
|
|
24
|
+
* The client should convert the string to number.
|
|
25
|
+
* Angular date pipe could actually consume such string without explicitly converting to number.
|
|
26
|
+
* @param array
|
|
27
|
+
* @param propertyName
|
|
28
|
+
*/
|
|
29
|
+
static groupByDate(array, propertyName) {
|
|
30
|
+
return array.reduce(function (acc, obj) {
|
|
31
|
+
const key = DateFunc.dateTimeUtcToLocalDateNumber(obj[propertyName]);
|
|
32
|
+
if (!acc[key]) {
|
|
33
|
+
acc[key] = [];
|
|
34
|
+
}
|
|
35
|
+
acc[key].push(obj);
|
|
36
|
+
return acc;
|
|
37
|
+
}, {});
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Remove null or empty fields including those in nested objects.
|
|
41
|
+
* This is useful for reducing payload of AJAX serialization.
|
|
42
|
+
* @param obj
|
|
43
|
+
*/
|
|
44
|
+
static removeNullOrEmptyFields(obj) {
|
|
45
|
+
for (const f in obj) {
|
|
46
|
+
let p = obj[f];
|
|
47
|
+
if (p === null || p === '') {
|
|
48
|
+
delete obj[f];
|
|
49
|
+
}
|
|
50
|
+
else if (typeof p === 'object' && p !== null) {
|
|
51
|
+
this.removeNullOrEmptyFields(p);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
*
|
|
57
|
+
* @param obj Remove null fields of object at only the 1st level.
|
|
58
|
+
*/
|
|
59
|
+
static removeNullFields(obj) {
|
|
60
|
+
for (const f in obj) {
|
|
61
|
+
if (obj[f] === null) {
|
|
62
|
+
delete obj[f];
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
67
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbkZ1bmMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9ubWNlLWZ1bmMvc3JjL19mdW5jL2pzb25GdW5jLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFdEM7O0dBRUc7QUFDSCxNQUFNLE9BQU8sUUFBUTtJQUNwQjs7Ozs7T0FLRztJQUNILE1BQU0sQ0FBQyxPQUFPLENBQUksS0FBZSxFQUFFLFlBQW9CO1FBQ3RELE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFTLEdBQVEsRUFBRSxHQUFRO1lBQzlDLE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUM5QixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUNkLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7YUFDZDtZQUNELEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbkIsT0FBTyxHQUFHLENBQUM7UUFDWixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDUixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsTUFBTSxDQUFDLFdBQVcsQ0FBSSxLQUFlLEVBQUUsWUFBb0I7UUFDMUQsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVMsR0FBUSxFQUFFLEdBQVE7WUFDOUMsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLDRCQUE0QixDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1lBQ3JFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ2QsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQzthQUNkO1lBQ0QsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNuQixPQUFPLEdBQUcsQ0FBQztRQUNaLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNSLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLHVCQUF1QixDQUFDLEdBQVE7UUFDdEMsS0FBSyxNQUFNLENBQUMsSUFBSSxHQUFHLEVBQUU7WUFDcEIsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2YsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQzNCLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2Q7aUJBQU0sSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRTtnQkFDL0MsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2hDO1NBQ0Q7SUFDRixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLGdCQUFnQixDQUFDLEdBQVE7UUFDL0IsS0FBSyxNQUFNLENBQUMsSUFBSSxHQUFHLEVBQUU7WUFDcEIsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFO2dCQUNwQixPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNkO1NBQ0Q7SUFDRixDQUFDO0NBRUQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRlRnVuYyB9IGZyb20gJy4vZGF0ZUZ1bmMnO1xyXG5cclxuLyoqXHJcbiAqIEJhc2ljIEpTT04gZnVuY3Rpb25zXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgSnNvbkZ1bmMge1xyXG5cdC8qKlxyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSBhcnJheSBHcm91cCBieSBhIHByb3BlcnR5IG9mIGFycmF5IGVsZW1lbnQuXHJcblx0ICogQHBhcmFtIHByb3BlcnR5TmFtZSBcclxuXHQgKiBAcmV0dXJucyBcclxuXHQgKi9cclxuXHRzdGF0aWMgZ3JvdXBCeTxUPihhcnJheTogQXJyYXk8VD4sIHByb3BlcnR5TmFtZTogc3RyaW5nKSB7XHJcblx0XHRyZXR1cm4gYXJyYXkucmVkdWNlKGZ1bmN0aW9uKGFjYzogYW55LCBvYmo6IGFueSkge1xyXG5cdFx0XHRjb25zdCBrZXkgPSBvYmpbcHJvcGVydHlOYW1lXTtcclxuXHRcdFx0aWYgKCFhY2Nba2V5XSkge1xyXG5cdFx0XHRcdGFjY1trZXldID0gW107XHJcblx0XHRcdH1cclxuXHRcdFx0YWNjW2tleV0ucHVzaChvYmopO1xyXG5cdFx0XHRyZXR1cm4gYWNjO1xyXG5cdFx0fSwge30pO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogR3JvdXAgYnkgYSBkYXRlIHByb3BlcnR5LiBUaGUga2V5IGlzIGFsd2F5cyBvZiBzdHJpbmcgdHlwZSBhbmQgcmVwcmVzZW50aW5nIG1pbGxpc2Vjb25kcy4gXHJcblx0ICogVGhlIGNsaWVudCBzaG91bGQgY29udmVydCB0aGUgc3RyaW5nIHRvIG51bWJlci5cclxuXHQgKiBBbmd1bGFyIGRhdGUgcGlwZSBjb3VsZCBhY3R1YWxseSBjb25zdW1lIHN1Y2ggc3RyaW5nIHdpdGhvdXQgZXhwbGljaXRseSBjb252ZXJ0aW5nIHRvIG51bWJlci5cclxuXHQgKiBAcGFyYW0gYXJyYXlcclxuXHQgKiBAcGFyYW0gcHJvcGVydHlOYW1lXHJcblx0ICovXHJcblx0c3RhdGljIGdyb3VwQnlEYXRlPFQ+KGFycmF5OiBBcnJheTxUPiwgcHJvcGVydHlOYW1lOiBzdHJpbmcpIHtcclxuXHRcdHJldHVybiBhcnJheS5yZWR1Y2UoZnVuY3Rpb24oYWNjOiBhbnksIG9iajogYW55KSB7XHJcblx0XHRcdGNvbnN0IGtleSA9IERhdGVGdW5jLmRhdGVUaW1lVXRjVG9Mb2NhbERhdGVOdW1iZXIob2JqW3Byb3BlcnR5TmFtZV0pO1xyXG5cdFx0XHRpZiAoIWFjY1trZXldKSB7XHJcblx0XHRcdFx0YWNjW2tleV0gPSBbXTtcclxuXHRcdFx0fVxyXG5cdFx0XHRhY2Nba2V5XS5wdXNoKG9iaik7XHJcblx0XHRcdHJldHVybiBhY2M7XHJcblx0XHR9LCB7fSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBSZW1vdmUgbnVsbCBvciBlbXB0eSBmaWVsZHMgaW5jbHVkaW5nIHRob3NlIGluIG5lc3RlZCBvYmplY3RzLlxyXG5cdCAqIFRoaXMgaXMgdXNlZnVsIGZvciByZWR1Y2luZyBwYXlsb2FkIG9mIEFKQVggc2VyaWFsaXphdGlvbi5cclxuXHQgKiBAcGFyYW0gb2JqIFxyXG5cdCAqL1xyXG5cdHN0YXRpYyByZW1vdmVOdWxsT3JFbXB0eUZpZWxkcyhvYmo6IGFueSkge1xyXG5cdFx0Zm9yIChjb25zdCBmIGluIG9iaikge1xyXG5cdFx0XHRsZXQgcCA9IG9ialtmXTtcclxuXHRcdFx0aWYgKHAgPT09IG51bGwgfHwgcCA9PT0gJycpIHtcclxuXHRcdFx0XHRkZWxldGUgb2JqW2ZdO1xyXG5cdFx0XHR9IGVsc2UgaWYgKHR5cGVvZiBwID09PSAnb2JqZWN0JyAmJiBwICE9PSBudWxsKSB7XHJcblx0XHRcdFx0dGhpcy5yZW1vdmVOdWxsT3JFbXB0eUZpZWxkcyhwKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogXHJcblx0ICogQHBhcmFtIG9iaiBSZW1vdmUgbnVsbCBmaWVsZHMgb2Ygb2JqZWN0IGF0IG9ubHkgdGhlIDFzdCBsZXZlbC5cclxuXHQgKi9cclxuXHRzdGF0aWMgcmVtb3ZlTnVsbEZpZWxkcyhvYmo6IGFueSkge1xyXG5cdFx0Zm9yIChjb25zdCBmIGluIG9iaikge1xyXG5cdFx0XHRpZiAob2JqW2ZdID09PSBudWxsKSB7XHJcblx0XHRcdFx0ZGVsZXRlIG9ialtmXTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcbn1cclxuIl19
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* String functions specific to Australia
|
|
3
|
+
*/
|
|
4
|
+
export class StringAusFunc {
|
|
5
|
+
//thanks to https://github.com/sidorares/australian-business-number/blob/0591475f5978fd122b472edcdc7efe6d96d56f26/index.js
|
|
6
|
+
static acnWeights = [8, 7, 6, 5, 4, 3, 2, 1];
|
|
7
|
+
static weights = [10, 1, 3, 5, 7, 9, 11, 13, 15, 17, 19];
|
|
8
|
+
static suggestLookup = StringAusFunc.generateLookup();
|
|
9
|
+
/**
|
|
10
|
+
* Validate medicare number
|
|
11
|
+
* @param n
|
|
12
|
+
* @returns validation error message
|
|
13
|
+
*/
|
|
14
|
+
static validateMedicare(n) {
|
|
15
|
+
if (!n) {
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
if (n && n.length === 10) {
|
|
19
|
+
const matches = n.match(/^(\d{8})(\d)/);
|
|
20
|
+
if (!matches) {
|
|
21
|
+
return {
|
|
22
|
+
code: 2, message: 'Medicare number should be all digit.'
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
const base = matches[1];
|
|
26
|
+
const checkDigit = matches[2];
|
|
27
|
+
const weights = [1, 3, 7, 9, 1, 3, 7, 9];
|
|
28
|
+
let sum = 0;
|
|
29
|
+
for (let i = 0; i < weights.length; i++) {
|
|
30
|
+
sum += parseInt(base[i], 10) * weights[i];
|
|
31
|
+
}
|
|
32
|
+
//console.debug(`sum: ${sum} checkDigits: ${checkDigit}`);
|
|
33
|
+
const isValid = sum % 10 === parseInt(checkDigit, 10);
|
|
34
|
+
if (!isValid) {
|
|
35
|
+
return {
|
|
36
|
+
code: 3, message: 'Checksum is incorrect.'
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
return { code: 1, message: 'Length should be 10.' };
|
|
42
|
+
}
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
static validateMedicareProviderNumber(providerNumber) {
|
|
46
|
+
if (!providerNumber) {
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
if (!/^[0-9]{6}[0-9ABCDEFGHJKLMNPQRTUVWXY][ABFHJKLTWXY]/.test(providerNumber)) {
|
|
50
|
+
return { code: 1, message: 'Not matching provider number format.' };
|
|
51
|
+
}
|
|
52
|
+
const 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'];
|
|
53
|
+
const remainderValues = ['Y', 'X', 'W', 'T', 'L', 'K', 'J', 'H', 'F', 'B', 'A'];
|
|
54
|
+
const stemWeights = [3, 5, 8, 4, 2, 1];
|
|
55
|
+
const stemNumbers = providerNumber.substr(0, 6).split('').map((char) => parseInt(char));
|
|
56
|
+
const practiceLoc = practiceLocationValues.findIndex((e) => e === providerNumber[6]);
|
|
57
|
+
const checksum = providerNumber[7];
|
|
58
|
+
const zipped = stemWeights.map((x, i) => [x, stemNumbers[i]]);
|
|
59
|
+
const sumWeights = zipped.map((y) => y[1] * y[0]).reduce((total, num) => total + num);
|
|
60
|
+
const remainder = (sumWeights + practiceLoc * 6) % 11;
|
|
61
|
+
const result = remainderValues[remainder];
|
|
62
|
+
const valid = result === checksum;
|
|
63
|
+
if (!valid) {
|
|
64
|
+
return { code: 2, message: 'Checksum is incorrect.' };
|
|
65
|
+
}
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
static validateDVAFileNumber(dva) {
|
|
69
|
+
if (!dva) {
|
|
70
|
+
return null;
|
|
71
|
+
}
|
|
72
|
+
const states = ['N', 'V', 'Q', 'S', 'W', 'T'];
|
|
73
|
+
const warCodes = [' ', 'X', 'KM', 'SR', 'SS', 'SM', 'SWP', 'AGX', 'BW', 'GW', 'CGW',
|
|
74
|
+
'P', 'PX', 'PAD', 'PAM', 'PCA', 'PCR', 'PCV', 'PMS', 'PSW', 'PWO', 'HKX', 'MAL',
|
|
75
|
+
'CN', 'CNX', 'IV', 'NF', 'NG', 'RD', 'RDX', 'SA', 'SAX', 'A',
|
|
76
|
+
'N', 'NX', 'NSW', 'NSM',
|
|
77
|
+
'BUR', 'CNK', 'CNS', 'FIJ', 'GHA', 'HKS', 'IND', 'KYA', 'MAU', 'MLS', 'MTX', 'MWI', 'NK', 'NGR', 'NRD', 'NSS', 'PK']; //British Commonwealth Countries - SP Eligibility
|
|
78
|
+
if (!states.includes(dva.charAt(0))) {
|
|
79
|
+
return { code: 1, message: 'State incorrect.' };
|
|
80
|
+
}
|
|
81
|
+
const ns = dva.match(/\d+/);
|
|
82
|
+
if (!ns) {
|
|
83
|
+
return { code: 2, message: 'No number.' };
|
|
84
|
+
}
|
|
85
|
+
const n = ns[0];
|
|
86
|
+
const idxOfN = dva.indexOf(n);
|
|
87
|
+
const warCode = dva.substring(1, idxOfN);
|
|
88
|
+
if (!warCodes.includes(warCode)) {
|
|
89
|
+
return { code: 3, message: 'War code invalid.' };
|
|
90
|
+
}
|
|
91
|
+
const lenOfN = n.length;
|
|
92
|
+
const lenOfWc = warCode.length;
|
|
93
|
+
if (lenOfN + lenOfWc > 7) {
|
|
94
|
+
return { code: 4, message: 'File number length should not be greater 7.' };
|
|
95
|
+
}
|
|
96
|
+
return null;
|
|
97
|
+
}
|
|
98
|
+
static validateTFN(n) {
|
|
99
|
+
if (!n) {
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
102
|
+
const tfn = n.replace(/\s+/g, '').replace(/[-]/g, '');
|
|
103
|
+
const isNumber = /^[0-9]+$/.test(tfn);
|
|
104
|
+
if (!isNumber) {
|
|
105
|
+
return { code: 1, message: 'Invalid TFN, only numbers are allowed.' };
|
|
106
|
+
}
|
|
107
|
+
const length = tfn.length;
|
|
108
|
+
if (length !== 9) {
|
|
109
|
+
return {
|
|
110
|
+
code: 2, message: 'Invalid TFN, must have 9 digits.'
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
const digits = tfn.split('').map(d => parseInt(d));
|
|
114
|
+
const sum = (digits[0] * 1)
|
|
115
|
+
+ (digits[1] * 4)
|
|
116
|
+
+ (digits[2] * 3)
|
|
117
|
+
+ (digits[3] * 7)
|
|
118
|
+
+ (digits[4] * 5)
|
|
119
|
+
+ (digits[5] * 8)
|
|
120
|
+
+ (digits[6] * 6)
|
|
121
|
+
+ (digits[7] * 9)
|
|
122
|
+
+ (digits[8] * 10);
|
|
123
|
+
const remainder = sum % 11;
|
|
124
|
+
const valid = remainder === 0;
|
|
125
|
+
if (!valid) {
|
|
126
|
+
return { code: 3, message: 'Checksum is incorrect.' };
|
|
127
|
+
}
|
|
128
|
+
return null;
|
|
129
|
+
}
|
|
130
|
+
static addWeighted(p, v, i) {
|
|
131
|
+
return p + v * StringAusFunc.weights[i];
|
|
132
|
+
}
|
|
133
|
+
static addAcnWeighted(p, v, i) {
|
|
134
|
+
return p + v * StringAusFunc.acnWeights[i];
|
|
135
|
+
}
|
|
136
|
+
static generateLookup() {
|
|
137
|
+
const ns = [];
|
|
138
|
+
for (let i = 0; i < 10; ++i) {
|
|
139
|
+
ns[i * 19 % 89] = i;
|
|
140
|
+
}
|
|
141
|
+
return ns;
|
|
142
|
+
}
|
|
143
|
+
static validateABN(abn) {
|
|
144
|
+
if (!abn) {
|
|
145
|
+
return null;
|
|
146
|
+
}
|
|
147
|
+
const digits = abn.replace(/[^\d]/g, '').split('').map(Number);
|
|
148
|
+
if (digits.length !== 11) {
|
|
149
|
+
return { code: 1, message: 'Expect 11-digit.' };
|
|
150
|
+
}
|
|
151
|
+
digits[0] -= 1;
|
|
152
|
+
const sum = digits.reduce(StringAusFunc.addWeighted, 0);
|
|
153
|
+
if (sum % 89 === 0) {
|
|
154
|
+
return null;
|
|
155
|
+
}
|
|
156
|
+
digits[0] += 1;
|
|
157
|
+
let sum1 = sum - digits[10] * StringAusFunc.weights[10];
|
|
158
|
+
let digit = StringAusFunc.suggestLookup[89 - sum1 % 89];
|
|
159
|
+
if (digit !== undefined) {
|
|
160
|
+
return {
|
|
161
|
+
code: 2,
|
|
162
|
+
message: 'Checksum1 is incorrect.'
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
const sum2 = sum1 - digits[9] * StringAusFunc.weights[9];
|
|
167
|
+
for (let i = 0; i < 10; ++i) {
|
|
168
|
+
sum1 = sum2 + i * StringAusFunc.weights[9];
|
|
169
|
+
digit = StringAusFunc.suggestLookup[89 - sum1 % 89];
|
|
170
|
+
if (digit !== undefined) {
|
|
171
|
+
return {
|
|
172
|
+
code: 3,
|
|
173
|
+
message: 'Checksum2 is incorrect.'
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
return null;
|
|
179
|
+
}
|
|
180
|
+
static validateACN(acn) {
|
|
181
|
+
if (!acn) {
|
|
182
|
+
return null;
|
|
183
|
+
}
|
|
184
|
+
const digits = acn.replace(/[^\d]/g, '').split('').map(Number);
|
|
185
|
+
console.log(digits);
|
|
186
|
+
if (digits.length !== 9) {
|
|
187
|
+
return { code: 1, message: 'Expect 9-digit.' };
|
|
188
|
+
}
|
|
189
|
+
const sum = digits.slice(0, 8).reduce(StringAusFunc.addAcnWeighted, 0);
|
|
190
|
+
const lastDigit = 10 - sum % 10;
|
|
191
|
+
if (lastDigit === digits[8]) {
|
|
192
|
+
return null;
|
|
193
|
+
}
|
|
194
|
+
return {
|
|
195
|
+
code: 2,
|
|
196
|
+
message: 'Checksum is incorrect.'
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5nQXVzRnVuYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25tY2UtZnVuYy9zcmMvX2Z1bmMvc3RyaW5nQXVzRnVuYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILE1BQU0sT0FBTyxhQUFhO0lBRXpCLDBIQUEwSDtJQUNsSCxNQUFNLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzdDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFekQsTUFBTSxDQUFDLGFBQWEsR0FBYSxhQUFhLENBQUMsY0FBYyxFQUFFLENBQUM7SUFFeEU7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUE0QjtRQUNuRCxJQUFJLENBQUMsQ0FBQyxFQUFFO1lBQ1AsT0FBTyxJQUFJLENBQUM7U0FDWjtRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssRUFBRSxFQUFFO1lBQ3pCLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7WUFFeEMsSUFBSSxDQUFDLE9BQU8sRUFBRTtnQkFDYixPQUFPO29CQUNOLElBQUksRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLHNDQUFzQztpQkFDeEQsQ0FBQzthQUNGO1lBRUQsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3hCLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM5QixNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUV6QyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFDWixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDeEMsR0FBRyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQzFDO1lBRUQsMkRBQTJEO1lBQzNELE1BQU0sT0FBTyxHQUFHLEdBQUcsR0FBRyxFQUFFLEtBQUssUUFBUSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN0RCxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUNiLE9BQU87b0JBQ04sSUFBSSxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsd0JBQXdCO2lCQUMxQyxDQUFDO2FBQ0Y7U0FDRDthQUFNO1lBQ04sT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLENBQUM7U0FDcEQ7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNiLENBQUM7SUFFRCxNQUFNLENBQUMsOEJBQThCLENBQUMsY0FBeUM7UUFDOUUsSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUNwQixPQUFPLElBQUksQ0FBQztTQUNaO1FBRUQsSUFBSSxDQUFDLG1EQUFtRCxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRTtZQUM5RSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsc0NBQXNDLEVBQUUsQ0FBQztTQUNwRTtRQUVELE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDaE0sTUFBTSxlQUFlLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDaEYsTUFBTSxXQUFXLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRXZDLE1BQU0sV0FBVyxHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3hGLE1BQU0sV0FBVyxHQUFHLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JGLE1BQU0sUUFBUSxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVuQyxNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVB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SyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN2RSxNQUFNLFNBQVMsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUNoQyxJQUFJLFNBQVMsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDNUIsT0FBTyxJQUFJLENBQUM7U0FDWjtRQUVELE9BQU87WUFDTixJQUFJLEVBQUUsQ0FBQztZQUNQLE9BQU8sRUFBRSx3QkFBd0I7U0FDakMsQ0FBQztJQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogU3RyaW5nIGZ1bmN0aW9ucyBzcGVjaWZpYyB0byBBdXN0cmFsaWFcclxuICovXHJcbmV4cG9ydCBjbGFzcyBTdHJpbmdBdXNGdW5jIHtcclxuXHJcblx0Ly90aGFua3MgdG8gaHR0cHM6Ly9naXRodWIuY29tL3NpZG9yYXJlcy9hdXN0cmFsaWFuLWJ1c2luZXNzLW51bWJlci9ibG9iLzA1OTE0NzVmNTk3OGZkMTIyYjQ3MmVkY2RjN2VmZTZkOTZkNTZmMjYvaW5kZXguanNcclxuXHRwcml2YXRlIHN0YXRpYyBhY25XZWlnaHRzID0gWzgsIDcsIDYsIDUsIDQsIDMsIDIsIDFdO1xyXG5cdHByaXZhdGUgc3RhdGljIHdlaWdodHMgPSBbMTAsIDEsIDMsIDUsIDcsIDksIDExLCAxMywgMTUsIDE3LCAxOV07XHJcblxyXG5cdHByaXZhdGUgc3RhdGljIHN1Z2dlc3RMb29rdXA6IG51bWJlcltdID0gU3RyaW5nQXVzRnVuYy5nZW5lcmF0ZUxvb2t1cCgpO1xyXG5cclxuXHQvKipcclxuXHQgKiBWYWxpZGF0ZSBtZWRpY2FyZSBudW1iZXJcclxuXHQgKiBAcGFyYW0gblxyXG5cdCAqIEByZXR1cm5zIHZhbGlkYXRpb24gZXJyb3IgbWVzc2FnZVxyXG5cdCAqL1xyXG5cdHN0YXRpYyB2YWxpZGF0ZU1lZGljYXJlKG46IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiB7IGNvZGU6IG51bWJlciwgbWVzc2FnZTogc3RyaW5nIH0gfCBudWxsIHtcclxuXHRcdGlmICghbikge1xyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAobiAmJiBuLmxlbmd0aCA9PT0gMTApIHtcclxuXHRcdFx0Y29uc3QgbWF0Y2hlcyA9IG4ubWF0Y2goL14oXFxkezh9KShcXGQpLyk7XHJcblxyXG5cdFx0XHRpZiAoIW1hdGNoZXMpIHtcclxuXHRcdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdFx0Y29kZTogMiwgbWVzc2FnZTogJ01lZGljYXJlIG51bWJlciBzaG91bGQgYmUgYWxsIGRpZ2l0LidcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRjb25zdCBiYXNlID0gbWF0Y2hlc1sxXTtcclxuXHRcdFx0Y29uc3QgY2hlY2tEaWdpdCA9IG1hdGNoZXNbMl07XHJcblx0XHRcdGNvbnN0IHdlaWdodHMgPSBbMSwgMywgNywgOSwgMSwgMywgNywgOV07XHJcblxyXG5cdFx0XHRsZXQgc3VtID0gMDtcclxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB3ZWlnaHRzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0c3VtICs9IHBhcnNlSW50KGJhc2VbaV0sIDEwKSAqIHdlaWdodHNbaV07XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vY29uc29sZS5kZWJ1Zyhgc3VtOiAke3N1bX0gIGNoZWNrRGlnaXRzOiAke2NoZWNrRGlnaXR9YCk7XHJcblx0XHRcdGNvbnN0IGlzVmFsaWQgPSBzdW0gJSAxMCA9PT0gcGFyc2VJbnQoY2hlY2tEaWdpdCwgMTApO1xyXG5cdFx0XHRpZiAoIWlzVmFsaWQpIHtcclxuXHRcdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdFx0Y29kZTogMywgbWVzc2FnZTogJ0NoZWNrc3VtIGlzIGluY29ycmVjdC4nXHJcblx0XHRcdFx0fTtcclxuXHRcdFx0fVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0cmV0dXJuIHsgY29kZTogMSwgbWVzc2FnZTogJ0xlbmd0aCBzaG91bGQgYmUgMTAuJyB9O1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBudWxsO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIHZhbGlkYXRlTWVkaWNhcmVQcm92aWRlck51bWJlcihwcm92aWRlck51bWJlcjogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHsgY29kZTogbnVtYmVyLCBtZXNzYWdlOiBzdHJpbmcgfSB8IG51bGwge1xyXG5cdFx0aWYgKCFwcm92aWRlck51bWJlcikge1xyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoIS9eWzAtOV17Nn1bMC05QUJDREVGR0hKS0xNTlBRUlRVVldYWV1bQUJGSEpLTFRXWFldLy50ZXN0KHByb3ZpZGVyTnVtYmVyKSkge1xyXG5cdFx0XHRyZXR1cm4geyBjb2RlOiAxLCBtZXNzYWdlOiAnTm90IG1hdGNoaW5nIHByb3ZpZGVyIG51bWJlciBmb3JtYXQuJyB9O1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IHByYWN0aWNlTG9jYXRpb25WYWx1ZXMgPSBbJzAnLCAnMScsICcyJywgJzMnLCAnNCcsICc1JywgJzYnLCAnNycsICc4JywgJzknLCAnQScsICdCJywgJ0MnLCAnRCcsICdFJywgJ0YnLCAnRycsICdIJywgJ0onLCAnSycsICdMJywgJ00nLCAnTicsICdQJywgJ1EnLCAnUicsICdUJywgJ1UnLCAnVicsICdXJywgJ1gnLCAnWSddO1xyXG5cdFx0Y29uc3QgcmVtYWluZGVyVmFsdWVzID0gWydZJywgJ1gnLCAnVycsICdUJywgJ0wnLCAnSycsICdKJywgJ0gnLCAnRicsICdCJywgJ0EnXTtcclxuXHRcdGNvbnN0IHN0ZW1XZWlnaHRzID0gWzMsIDUsIDgsIDQsIDIsIDFdO1xyXG5cclxuXHRcdGNvbnN0IHN0ZW1OdW1iZXJzID0gcHJvdmlkZXJOdW1iZXIuc3Vic3RyKDAsIDYpLnNwbGl0KCcnKS5tYXAoKGNoYXIpID0+IHBhcnNlSW50KGNoYXIpKTtcclxuXHRcdGNvbnN0IHByYWN0aWNlTG9jID0gcHJhY3RpY2VMb2NhdGlvblZhbHVlcy5maW5kSW5kZXgoKGUpID0+IGUgPT09IHByb3ZpZGVyTnVtYmVyWzZdKTtcclxuXHRcdGNvbnN0IGNoZWNrc3VtID0gcHJvdmlkZXJOdW1iZXJbN107XHJcblxyXG5cdFx0Y29uc3QgemlwcGVkID0gc3RlbVdlaWdodHMubWFwKCh4LCBpKSA9PiBbeCwgc3RlbU51bWJlcnNbaV1dKTtcclxuXHRcdGNvbnN0IHN1bVdlaWdodHMgPSB6aXBwZWQubWFwKCh5KSA9PiB5WzFdICogeVswXSkucmVkdWNlKCh0b3RhbCwgbnVtKSA9PiB0b3RhbCArIG51bSk7XHJcblx0XHRjb25zdCByZW1haW5kZXIgPSAoc3VtV2VpZ2h0cyArIHByYWN0aWNlTG9jICogNikgJSAxMTtcclxuXHJcblx0XHRjb25zdCByZXN1bHQgPSByZW1haW5kZXJWYWx1ZXNbcmVtYWluZGVyXTtcclxuXHJcblx0XHRjb25zdCB2YWxpZCA9IHJlc3VsdCA9PT0gY2hlY2tzdW07XHJcblx0XHRpZiAoIXZhbGlkKSB7XHJcblx0XHRcdHJldHVybiB7IGNvZGU6IDIsIG1lc3NhZ2U6ICdDaGVja3N1bSBpcyBpbmNvcnJlY3QuJyB9O1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBudWxsO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIHZhbGlkYXRlRFZBRmlsZU51bWJlcihkdmE6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiB7IGNvZGU6IG51bWJlciwgbWVzc2FnZTogc3RyaW5nIH0gfCBudWxsIHtcclxuXHRcdGlmICghZHZhKSB7XHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IHN0YXRlcyA9IFsnTicsICdWJywgJ1EnLCAnUycsICdXJywgJ1QnXTtcclxuXHRcdGNvbnN0IHdhckNvZGVzID0gWycgJywgJ1gnLCAnS00nLCAnU1InLCAnU1MnLCAnU00nLCAnU1dQJywgJ0FHWCcsICdCVycsICdHVycsICdDR1cnLCAvL0F1c3RyYWxpYW4gRm9yY2VzXHJcblx0XHRcdCdQJywgJ1BYJywgJ1BBRCcsICdQQU0nLCAnUENBJywgJ1BDUicsICdQQ1YnLCAnUE1TJywgJ1BTVycsICdQV08nLCAnSEtYJywgJ01BTCcsIC8vQnJpdGlzaCBBZG1pbmlzdHJhdGlvbiBHcm91cFxyXG5cdFx0XHQnQ04nLCAnQ05YJywgJ0lWJywgJ05GJywgJ05HJywgJ1JEJywgJ1JEWCcsICdTQScsICdTQVgnLCAnQScsIC8vT3RoZXIgT3ZlcnNlYXMgRm9yY2VzXHJcblx0XHRcdCdOJywgJ05YJywgJ05TVycsICdOU00nLCAvL05ldyBaZWFsYW5kIEFkbWluaXN0cmF0aW9uIEdyb3VwXHJcblx0XHRcdCdCVVInLCAnQ05LJywgJ0NOUycsICdGSUonLCAnR0hBJywgJ0hLUycsICdJTkQnLCAnS1lBJywgJ01BVScsICdNTFMnLCAnTVRYJywgJ01XSScsICdOSycsICdOR1InLCAnTlJEJywgJ05TUycsICdQSyddLy9Ccml0aXNoIENvbW1vbndlYWx0aCBDb3VudHJpZXMgLSBTUCBFbGlnaWJpbGl0eVxyXG5cclxuXHRcdGlmICghc3RhdGVzLmluY2x1ZGVzKGR2YS5jaGFyQXQoMCkpKSB7XHJcblx0XHRcdHJldHVybiB7IGNvZGU6IDEsIG1lc3NhZ2U6ICdTdGF0ZSBpbmNvcnJlY3QuJyB9O1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IG5zID0gZHZhLm1hdGNoKC9cXGQrLyk7XHJcblx0XHRpZiAoIW5zKSB7XHJcblx0XHRcdHJldHVybiB7IGNvZGU6IDIsIG1lc3NhZ2U6ICdObyBudW1iZXIuJyB9O1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IG4gPSBuc1swXTtcclxuXHRcdGNvbnN0IGlkeE9mTiA9IGR2YS5pbmRleE9mKG4pO1xyXG5cdFx0Y29uc3Qgd2FyQ29kZSA9IGR2YS5zdWJzdHJpbmcoMSwgaWR4T2ZOKTtcclxuXHRcdGlmICghd2FyQ29kZXMuaW5jbHVkZXMod2FyQ29kZSkpIHtcclxuXHRcdFx0cmV0dXJuIHsgY29kZTogMywgbWVzc2FnZTogJ1dhciBjb2RlIGludmFsaWQuJyB9XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgbGVuT2ZOID0gbi5sZW5ndGg7XHJcblx0XHRjb25zdCBsZW5PZldjID0gd2FyQ29kZS5sZW5ndGg7XHJcblx0XHRpZiAobGVuT2ZOICsgbGVuT2ZXYyA+IDcpIHtcclxuXHRcdFx0cmV0dXJuIHsgY29kZTogNCwgbWVzc2FnZTogJ0ZpbGUgbnVtYmVyIGxlbmd0aCBzaG91bGQgbm90IGJlIGdyZWF0ZXIgNy4nIH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gbnVsbDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyB2YWxpZGF0ZVRGTihuOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogeyBjb2RlOiBudW1iZXIsIG1lc3NhZ2U6IHN0cmluZyB9IHwgbnVsbCB7XHJcblx0XHRpZiAoIW4pIHtcclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgdGZuID0gbi5yZXBsYWNlKC9cXHMrL2csICcnKS5yZXBsYWNlKC9bLV0vZywgJycpO1xyXG5cclxuXHRcdGNvbnN0IGlzTnVtYmVyID0gL15bMC05XSskLy50ZXN0KHRmbik7XHJcblx0XHRpZiAoIWlzTnVtYmVyKSB7XHJcblx0XHRcdHJldHVybiB7IGNvZGU6IDEsIG1lc3NhZ2U6ICdJbnZhbGlkIFRGTiwgb25seSBudW1iZXJzIGFyZSBhbGxvd2VkLicgfTtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBsZW5ndGggPSB0Zm4ubGVuZ3RoO1xyXG5cdFx0aWYgKGxlbmd0aCAhPT0gOSkge1xyXG5cdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdGNvZGU6IDIsIG1lc3NhZ2U6ICdJbnZhbGlkIFRGTiwgbXVzdCBoYXZlIDkgZGlnaXRzLidcclxuXHRcdFx0fTtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBkaWdpdHMgPSB0Zm4uc3BsaXQoJycpLm1hcChkID0+IHBhcnNlSW50KGQpKTtcclxuXHJcblx0XHRjb25zdCBzdW0gPSAoZGlnaXRzWzBdICogMSlcclxuXHRcdFx0KyAoZGlnaXRzWzFdICogNClcclxuXHRcdFx0KyAoZGlnaXRzWzJdICogMylcclxuXHRcdFx0KyAoZGlnaXRzWzNdICogNylcclxuXHRcdFx0KyAoZGlnaXRzWzRdICogNSlcclxuXHRcdFx0KyAoZGlnaXRzWzVdICogOClcclxuXHRcdFx0KyAoZGlnaXRzWzZdICogNilcclxuXHRcdFx0KyAoZGlnaXRzWzddICogOSlcclxuXHRcdFx0KyAoZGlnaXRzWzhdICogMTApO1xyXG5cclxuXHRcdGNvbnN0IHJlbWFpbmRlciA9IHN1bSAlIDExO1xyXG5cdFx0Y29uc3QgdmFsaWQgPSByZW1haW5kZXIgPT09IDA7XHJcblx0XHRpZiAoIXZhbGlkKSB7XHJcblx0XHRcdHJldHVybiB7IGNvZGU6IDMsIG1lc3NhZ2U6ICdDaGVja3N1bSBpcyBpbmNvcnJlY3QuJyB9O1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBudWxsO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBzdGF0aWMgYWRkV2VpZ2h0ZWQocDogbnVtYmVyLCB2OiBudW1iZXIsIGk6IG51bWJlcikge1xyXG5cdFx0cmV0dXJuIHAgKyB2ICogU3RyaW5nQXVzRnVuYy53ZWlnaHRzW2ldO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBzdGF0aWMgYWRkQWNuV2VpZ2h0ZWQocDogbnVtYmVyLCB2OiBudW1iZXIsIGk6IG51bWJlcikge1xyXG5cdFx0cmV0dXJuIHAgKyB2ICogU3RyaW5nQXVzRnVuYy5hY25XZWlnaHRzW2ldO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBzdGF0aWMgZ2VuZXJhdGVMb29rdXAoKTogbnVtYmVyW10ge1xyXG5cdFx0Y29uc3QgbnM6IG51bWJlcltdID0gW107XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IDEwOyArK2kpIHtcclxuXHRcdFx0bnNbaSAqIDE5ICUgODldID0gaTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gbnM7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgdmFsaWRhdGVBQk4oYWJuOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogeyBjb2RlOiBudW1iZXIsIG1lc3NhZ2U6IHN0cmluZyB9IHwgbnVsbCB7XHJcblx0XHRpZiAoIWFibikge1xyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBkaWdpdHMgPSBhYm4ucmVwbGFjZSgvW15cXGRdL2csICcnKS5zcGxpdCgnJykubWFwKE51bWJlcik7XHJcblx0XHRpZiAoZGlnaXRzLmxlbmd0aCAhPT0gMTEpIHtcclxuXHRcdFx0cmV0dXJuIHsgY29kZTogMSwgbWVzc2FnZTogJ0V4cGVjdCAxMS1kaWdpdC4nIH07XHJcblx0XHR9XHJcblxyXG5cdFx0ZGlnaXRzWzBdIC09IDE7XHJcblxyXG5cdFx0Y29uc3Qgc3VtID0gZGlnaXRzLnJlZHVjZShTdHJpbmdBdXNGdW5jLmFkZFdlaWdodGVkLCAwKTtcclxuXHJcblx0XHRpZiAoc3VtICUgODkgPT09IDApIHtcclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHR9XHJcblxyXG5cdFx0ZGlnaXRzWzBdICs9IDE7XHJcblxyXG5cdFx0bGV0IHN1bTEgPSBzdW0gLSBkaWdpdHNbMTBdICogU3RyaW5nQXVzRnVuYy53ZWlnaHRzWzEwXTtcclxuXHRcdGxldCBkaWdpdCA9IFN0cmluZ0F1c0Z1bmMuc3VnZ2VzdExvb2t1cFs4OSAtIHN1bTEgJSA4OV07XHJcblx0XHRpZiAoZGlnaXQgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdGNvZGU6IDIsXHJcblx0XHRcdFx0bWVzc2FnZTogJ0NoZWNrc3VtMSBpcyBpbmNvcnJlY3QuJ1xyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRjb25zdCBzdW0yID0gc3VtMSAtIGRpZ2l0c1s5XSAqIFN0cmluZ0F1c0Z1bmMud2VpZ2h0c1s5XTtcclxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCAxMDsgKytpKSB7XHJcblx0XHRcdFx0c3VtMSA9IHN1bTIgKyBpICogU3RyaW5nQXVzRnVuYy53ZWlnaHRzWzldO1xyXG5cdFx0XHRcdGRpZ2l0ID0gU3RyaW5nQXVzRnVuYy5zdWdnZXN0TG9va3VwWzg5IC0gc3VtMSAlIDg5XTtcclxuXHRcdFx0XHRpZiAoZGlnaXQgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHRcdFx0Y29kZTogMyxcclxuXHRcdFx0XHRcdFx0bWVzc2FnZTogJ0NoZWNrc3VtMiBpcyBpbmNvcnJlY3QuJ1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBudWxsXHJcblx0fVxyXG5cclxuXHRzdGF0aWMgdmFsaWRhdGVBQ04oYWNuOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogeyBjb2RlOiBudW1iZXIsIG1lc3NhZ2U6IHN0cmluZyB9IHwgbnVsbCB7XHJcblx0XHRpZiAoIWFjbikge1xyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBkaWdpdHMgPSBhY24ucmVwbGFjZSgvW15cXGRdL2csICcnKS5zcGxpdCgnJykubWFwKE51bWJlcik7XHJcblx0XHRjb25zb2xlLmxvZyhkaWdpdHMpO1xyXG5cdFx0aWYgKGRpZ2l0cy5sZW5ndGggIT09IDkpIHtcclxuXHRcdFx0cmV0dXJuIHsgY29kZTogMSwgbWVzc2FnZTogJ0V4cGVjdCA5LWRpZ2l0LicgfTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0Y29uc3Qgc3VtID0gZGlnaXRzLnNsaWNlKDAsIDgpLnJlZHVjZShTdHJpbmdBdXNGdW5jLmFkZEFjbldlaWdodGVkLCAwKTtcclxuXHRcdGNvbnN0IGxhc3REaWdpdCA9IDEwIC0gc3VtICUgMTA7XHJcblx0XHRpZiAobGFzdERpZ2l0ID09PSBkaWdpdHNbOF0pIHtcclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0Y29kZTogMixcclxuXHRcdFx0bWVzc2FnZTogJ0NoZWNrc3VtIGlzIGluY29ycmVjdC4nXHJcblx0XHR9O1xyXG5cdH1cclxufVxyXG4iXX0=
|