slimsdk 0.2.0 → 0.2.1
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/README.md +3 -5
- package/dist/desktop/index.css +0 -48
- package/dist/desktop/index.css.map +1 -1
- package/dist/desktop/index.d.ts +5 -5
- package/dist/desktop/index.js +244 -1
- package/dist/desktop/index.js.map +1 -1
- package/dist/docs-BHtSyl34.d.ts +10 -0
- package/dist/{index-DCw_tM-R.d.ts → index-COGi5mfY.d.ts} +1 -1
- package/dist/{mod/hwlink/index.d.ts → index-COUeXLOQ.d.ts} +1 -1
- package/dist/{index-DWqF-tKY.d.ts → index-Cvng8f_u.d.ts} +5 -2
- package/dist/{index-3POan8Vl.d.ts → index-D_o5c-YA.d.ts} +49 -9
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/index.d.ts +1 -1
- package/dist/lib/index.js +193 -0
- package/dist/lib/index.js.map +1 -1
- package/dist/mobile/index.css +0 -48
- package/dist/mobile/index.css.map +1 -1
- package/dist/mobile/index.d.ts +3 -3
- package/dist/mobile/index.js +244 -1
- package/dist/mobile/index.js.map +1 -1
- package/dist/page/desktop/index.d.ts +2 -2
- package/dist/svchub/index.d.ts +2 -0
- package/dist/svchub/index.js +760 -0
- package/dist/svchub/index.js.map +1 -0
- package/package.json +2 -1
- package/dist/mod/config/index.d.ts +0 -52
- package/dist/mod/config/index.js +0 -121
- package/dist/mod/config/index.js.map +0 -1
- package/dist/mod/hwlink/index.js +0 -261
- package/dist/mod/hwlink/index.js.map +0 -1
- package/dist/mod/hwlink/style.css +0 -1134
- package/dist/mod/hwlink/style.css.map +0 -1
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
declare const privacy: () => Promise<string>;
|
|
2
|
+
declare const changelog: (app?: number) => Promise<string>;
|
|
3
|
+
|
|
4
|
+
declare const docs_changelog: typeof changelog;
|
|
5
|
+
declare const docs_privacy: typeof privacy;
|
|
6
|
+
declare namespace docs {
|
|
7
|
+
export { docs_changelog as changelog, docs_privacy as privacy };
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export { docs as d };
|
|
@@ -96,6 +96,8 @@ declare function ThaiBahtText(stringNumberInput: string): string;
|
|
|
96
96
|
declare function ThaiBahtText(numberInput: number): string;
|
|
97
97
|
declare const thbText: typeof ThaiBahtText;
|
|
98
98
|
|
|
99
|
+
declare function md5Hash(string: string, key?: string, raw?: string): string;
|
|
100
|
+
|
|
99
101
|
declare const index_FY_MONTH: typeof FY_MONTH;
|
|
100
102
|
declare const index_FY_MONTH_SHORT: typeof FY_MONTH_SHORT;
|
|
101
103
|
type index_JwtClaims = JwtClaims;
|
|
@@ -114,6 +116,7 @@ declare const index_dateDiff: typeof dateDiff;
|
|
|
114
116
|
declare const index_getAge: typeof getAge;
|
|
115
117
|
declare const index_isToday: typeof isToday;
|
|
116
118
|
declare const index_jwtParse: typeof jwtParse;
|
|
119
|
+
declare const index_md5Hash: typeof md5Hash;
|
|
117
120
|
declare const index_numFormat: typeof numFormat;
|
|
118
121
|
declare const index_setYear: typeof setYear;
|
|
119
122
|
declare const index_shiftIndex: typeof shiftIndex;
|
|
@@ -130,7 +133,7 @@ declare const index_toThaiDate: typeof toThaiDate;
|
|
|
130
133
|
declare const index_winPopup: typeof winPopup;
|
|
131
134
|
declare const index_zeroFill: typeof zeroFill;
|
|
132
135
|
declare namespace index {
|
|
133
|
-
export { index_FY_MONTH as FY_MONTH, index_FY_MONTH_SHORT as FY_MONTH_SHORT, type index_JwtClaims as JwtClaims, index_PERIOD_TEXT as PERIOD_TEXT, index_THAI_DIGIT as THAI_DIGIT, index_TH_MONTH as TH_MONTH, index_TH_MONTH_SHORT as TH_MONTH_SHORT, index_ageToBirth as ageToBirth, index_cidCheck as cidCheck, index_cookie as cookie, index_curDate as curDate, index_curMonth as curMonth, index_curTime as curTime, index_curYear as curYear, index_dateDiff as dateDiff, geoLocate as geo, index_getAge as getAge, index_isToday as isToday, index_jwtParse as jwtParse, index_numFormat as numFormat, index_setYear as setYear, index_shiftIndex as shiftIndex, index_strCheck as strCheck, index_strFormat as strFormat, index_thaiDate as thaiDate, index_thaiDigit as thaiDigit, index_thbText as thbText, index_timeDiff as timeDiff, index_timeToStr as timeToStr, index_toBase64 as toBase64, index_toDbDate as toDbDate, index_toThaiDate as toThaiDate, index_winPopup as winPopup, index_zeroFill as zeroFill };
|
|
136
|
+
export { index_FY_MONTH as FY_MONTH, index_FY_MONTH_SHORT as FY_MONTH_SHORT, type index_JwtClaims as JwtClaims, index_PERIOD_TEXT as PERIOD_TEXT, index_THAI_DIGIT as THAI_DIGIT, index_TH_MONTH as TH_MONTH, index_TH_MONTH_SHORT as TH_MONTH_SHORT, index_ageToBirth as ageToBirth, index_cidCheck as cidCheck, index_cookie as cookie, index_curDate as curDate, index_curMonth as curMonth, index_curTime as curTime, index_curYear as curYear, index_dateDiff as dateDiff, geoLocate as geo, index_getAge as getAge, index_isToday as isToday, index_jwtParse as jwtParse, index_md5Hash as md5Hash, index_numFormat as numFormat, index_setYear as setYear, index_shiftIndex as shiftIndex, index_strCheck as strCheck, index_strFormat as strFormat, index_thaiDate as thaiDate, index_thaiDigit as thaiDigit, index_thbText as thbText, index_timeDiff as timeDiff, index_timeToStr as timeToStr, index_toBase64 as toBase64, index_toDbDate as toDbDate, index_toThaiDate as toThaiDate, index_winPopup as winPopup, index_zeroFill as zeroFill };
|
|
134
137
|
}
|
|
135
138
|
|
|
136
|
-
export {
|
|
139
|
+
export { timeToStr as A, toBase64 as B, toDbDate as C, toThaiDate as D, winPopup as E, FY_MONTH as F, zeroFill as G, type JwtClaims as J, PERIOD_TEXT as P, THAI_DIGIT as T, FY_MONTH_SHORT as a, TH_MONTH as b, TH_MONTH_SHORT as c, ageToBirth as d, cidCheck as e, cookie as f, curDate as g, curMonth as h, index as i, curTime as j, curYear as k, dateDiff as l, geoLocate as m, getAge as n, isToday as o, jwtParse as p, md5Hash as q, numFormat as r, setYear as s, shiftIndex as t, strCheck as u, strFormat as v, thaiDate as w, thaiDigit as x, thbText as y, timeDiff as z };
|
|
@@ -1,11 +1,51 @@
|
|
|
1
|
-
declare const
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
declare const cfg: Config;
|
|
2
|
+
type Config = {
|
|
3
|
+
UNIX_TIME: number;
|
|
4
|
+
app: AppCfg;
|
|
5
|
+
api: ApiCfg;
|
|
6
|
+
hub: HubCfg;
|
|
7
|
+
hwl: HwlCfg;
|
|
8
|
+
user: UserCfg;
|
|
9
|
+
};
|
|
10
|
+
type AppCfg = {
|
|
11
|
+
UUID: string;
|
|
12
|
+
NAME: string;
|
|
13
|
+
SECRET: string;
|
|
14
|
+
VERSION: string;
|
|
15
|
+
RELEASE: string;
|
|
16
|
+
CALLBACK: string;
|
|
17
|
+
};
|
|
18
|
+
type ApiCfg = {
|
|
19
|
+
URL: string;
|
|
20
|
+
TOKEN: string;
|
|
21
|
+
HEADERS?: Headers;
|
|
22
|
+
};
|
|
23
|
+
type HubCfg = {
|
|
24
|
+
LOGIN: string;
|
|
25
|
+
OAUTH: string;
|
|
26
|
+
API: string;
|
|
27
|
+
WSS: string;
|
|
28
|
+
UUID: string;
|
|
29
|
+
TASK?: Worker;
|
|
30
|
+
};
|
|
31
|
+
type HwlCfg = {
|
|
32
|
+
HOST: string;
|
|
33
|
+
FILE: string;
|
|
34
|
+
};
|
|
35
|
+
type UserCfg = {
|
|
36
|
+
sub: number;
|
|
37
|
+
name: string;
|
|
38
|
+
utyp: string;
|
|
39
|
+
unit: string;
|
|
40
|
+
unit_id: number;
|
|
41
|
+
role_id: number;
|
|
42
|
+
metadata: {
|
|
43
|
+
emp_type: string;
|
|
44
|
+
emp_level: string;
|
|
45
|
+
position: string;
|
|
46
|
+
};
|
|
47
|
+
picture: string;
|
|
48
|
+
};
|
|
9
49
|
|
|
10
50
|
declare const authMW: (route: string, ignore?: string[]) => Promise<void>;
|
|
11
51
|
|
|
@@ -91,4 +131,4 @@ declare namespace index {
|
|
|
91
131
|
export { index_checkUpdate as checkUpdate, index_newTask as newTask };
|
|
92
132
|
}
|
|
93
133
|
|
|
94
|
-
export { index$3 as a, index as b,
|
|
134
|
+
export { index$3 as a, index as b, cfg as c, index$1 as i };
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../package.json","../src/config/global.ts"],"sourcesContent":["{\n \"name\": \"slimsdk\",\n \"version\": \"0.2.
|
|
1
|
+
{"version":3,"sources":["../package.json","../src/config/global.ts"],"sourcesContent":["{\n \"name\": \"slimsdk\",\n \"version\": \"0.2.1\",\n \"description\": \"WebApp SDK\",\n \"type\": \"module\",\n \"exports\": {\n \".\": \"./dist/index.js\",\n \"./desktop\": \"./dist/desktop/index.js\",\n \"./desktop/\": \"./dist/desktop/\",\n \"./mobile\": \"./dist/mobile/index.js\",\n \"./mobile/\": \"./dist/mobile/\",\n \"./lib\": \"./dist/lib/index.js\",\n \"./svchub\": \"./dist/svchub/index.js\",\n \"./worker/\": \"./dist/worker/*.js\",\n \"./page\": \"./dist/page/index.js\",\n \"./page/*\": \"./dist/page/*/index.js\",\n \"./page/*.css\": \"./dist/page/*.css\",\n \"./mod\": \"./dist/mod/index.js\",\n \"./mod/*\": \"./dist/mod/*/index.js\",\n \"./mod/*.css\": \"./dist/mod/*.css\",\n \"./css/\": \"./dist/css/\"\n },\n \"files\": [\n \"dist\"\n ],\n \"scripts\": {\n \"dev\": \"tsup --watch\",\n \"build\": \"tsup && sh ./clean.sh\"\n },\n \"devDependencies\": {\n \"@eslint/js\": \"^9.39.1\",\n \"@types/node\": \"^25.2.0\",\n \"eslint\": \"^9.39.2\",\n \"globals\": \"^17.3.0\",\n \"tsup\": \"^8.5.1\",\n \"typescript\": \"^5.9.3\",\n \"typescript-eslint\": \"^8.54.0\"\n },\n \"license\": \"MIT\",\n \"author\": \"hs3lcs@gmail.com\"\n}","/* global */\n/*------------------------------------------------------------*/\nimport { version } from '../../package.json';\nexport const info = () => `sdk ${version}`;\n/*------------------------------------------------------------*/\ntype InitParams = {\n svcWorker?: string,\n webNotify?: boolean,\n wakeLock?: boolean,\n btnToTop?: boolean,\n hideTabbar?: boolean,\n};\nexport const init = (params?: InitParams) => {\n if (params?.svcWorker) svcWorker(params.svcWorker);\n if (params?.webNotify) webNotify();\n if (params?.wakeLock) wakeLock();\n if (params?.btnToTop) btnToTop();\n if (params?.hideTabbar) hideTabbar();\n};\n/*------------------------------------------------------------*/\nconst svcWorker = (worker: string) => {\n if (!('serviceWorker' in navigator)) return;\n navigator.serviceWorker.register(worker, {\n type: 'module'\n }).catch(err => console.warn(err));\n};\n/*------------------------------------------------------------*/\nconst webNotify = () => {\n if (!('Notification' in window)) return;\n Notification.requestPermission()\n .catch(err => console.warn(err));\n};\n/*------------------------------------------------------------*/\nconst wakeLock = () => {\n if (document.hidden) return;\n navigator.wakeLock.request('screen')\n .catch(err => console.warn(err));\n};\n/*------------------------------------------------------------*/\nconst hideTabbar = () => {\n const winHeight = window.innerHeight;\n window.visualViewport?.addEventListener('resize', () => {\n const tabbar = document.querySelector<HTMLElement>('#tabbar');\n if (!tabbar) return;\n if (winHeight != window.innerHeight) {\n tabbar.classList.add('hide');\n } else {\n tabbar.classList.remove('hide');\n }\n });\n};\n/*------------------------------------------------------------*/\nconst app = document.querySelector<HTMLElement>('#app');\nconst btnToTop = () => {\n if (!app) return;\n // create item\n const totop = document.createElement('div');\n totop.id = 'totop';\n totop.innerHTML = /* html */ `\n <button id=\"btn-totop\" class=\"circle purple\" shadow=\"true\"\n title=\"กลับด้านบน\"></button>\n `;\n document.body.appendChild(totop);\n // add event\n totop.querySelector<HTMLButtonElement>('#btn-totop')!.onclick = () => {\n app.scrollTo({ top: 0, behavior: 'smooth' });\n };\n app.addEventListener('scroll', () => {\n if (app.scrollTop > 1000) {\n totop.style.display = 'block';\n if (app.classList.contains('tabbar')) {\n app.style.paddingBottom = '116px';\n } else {\n app.style.paddingBottom = '60px';\n }\n } else {\n totop.style.display = '';\n app.style.paddingBottom = '';\n }\n // tabs mobile shadow\n const tabsMobile = app.querySelector<HTMLElement>('.slim-tabs.mobile .tabs-header');\n if (!tabsMobile) return;\n if (app.scrollTop > 10) {\n tabsMobile.style.boxShadow = `rgba(0, 0, 0, 0.16) 0px 1px 4px`;\n } else {\n tabsMobile.style.boxShadow = '';\n }\n });\n};\n/*------------------------------------------------------------*/"],"mappings":";AAEI,cAAW;;;ACCR,IAAM,OAAO,MAAM,OAAO,OAAO;AAiDxC,IAAM,MAAM,SAAS,cAA2B,MAAM;","names":[]}
|
package/dist/lib/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export { F as FY_MONTH, a as FY_MONTH_SHORT, J as JwtClaims, P as PERIOD_TEXT, T as THAI_DIGIT, b as TH_MONTH, c as TH_MONTH_SHORT, d as ageToBirth, e as cidCheck, f as cookie, g as curDate, h as curMonth, j as curTime, k as curYear, l as dateDiff, m as geo, n as getAge, o as isToday, p as jwtParse, q as numFormat, s as setYear,
|
|
1
|
+
export { F as FY_MONTH, a as FY_MONTH_SHORT, J as JwtClaims, P as PERIOD_TEXT, T as THAI_DIGIT, b as TH_MONTH, c as TH_MONTH_SHORT, d as ageToBirth, e as cidCheck, f as cookie, g as curDate, h as curMonth, j as curTime, k as curYear, l as dateDiff, m as geo, n as getAge, o as isToday, p as jwtParse, q as md5Hash, r as numFormat, s as setYear, t as shiftIndex, u as strCheck, v as strFormat, w as thaiDate, x as thaiDigit, y as thbText, z as timeDiff, A as timeToStr, B as toBase64, C as toDbDate, D as toThaiDate, E as winPopup, G as zeroFill } from '../index-Cvng8f_u.js';
|
package/dist/lib/index.js
CHANGED
|
@@ -544,6 +544,198 @@ function ThaiBahtText(input) {
|
|
|
544
544
|
return convertFullMoney(`${input}`);
|
|
545
545
|
}
|
|
546
546
|
var thbText = ThaiBahtText;
|
|
547
|
+
|
|
548
|
+
// src/lib/md5.ts
|
|
549
|
+
function safeAdd(x, y) {
|
|
550
|
+
const lsw = (x & 65535) + (y & 65535);
|
|
551
|
+
const msw = (x >> 16) + (y >> 16) + (lsw >> 16);
|
|
552
|
+
return msw << 16 | lsw & 65535;
|
|
553
|
+
}
|
|
554
|
+
function bitRotateLeft(num, cnt) {
|
|
555
|
+
return num << cnt | num >>> 32 - cnt;
|
|
556
|
+
}
|
|
557
|
+
function md5cmn(q, a, b, x, s, t) {
|
|
558
|
+
return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);
|
|
559
|
+
}
|
|
560
|
+
function md5ff(a, b, c, d, x, s, t) {
|
|
561
|
+
return md5cmn(b & c | ~b & d, a, b, x, s, t);
|
|
562
|
+
}
|
|
563
|
+
function md5gg(a, b, c, d, x, s, t) {
|
|
564
|
+
return md5cmn(b & d | c & ~d, a, b, x, s, t);
|
|
565
|
+
}
|
|
566
|
+
function md5hh(a, b, c, d, x, s, t) {
|
|
567
|
+
return md5cmn(b ^ c ^ d, a, b, x, s, t);
|
|
568
|
+
}
|
|
569
|
+
function md5ii(a, b, c, d, x, s, t) {
|
|
570
|
+
return md5cmn(c ^ (b | ~d), a, b, x, s, t);
|
|
571
|
+
}
|
|
572
|
+
function binlMD5(x, len) {
|
|
573
|
+
x[len >> 5] |= 128 << len % 32;
|
|
574
|
+
x[(len + 64 >>> 9 << 4) + 14] = len;
|
|
575
|
+
let i;
|
|
576
|
+
let olda;
|
|
577
|
+
let oldb;
|
|
578
|
+
let oldc;
|
|
579
|
+
let oldd;
|
|
580
|
+
let a = 1732584193;
|
|
581
|
+
let b = -271733879;
|
|
582
|
+
let c = -1732584194;
|
|
583
|
+
let d = 271733878;
|
|
584
|
+
for (i = 0; i < x.length; i += 16) {
|
|
585
|
+
olda = a;
|
|
586
|
+
oldb = b;
|
|
587
|
+
oldc = c;
|
|
588
|
+
oldd = d;
|
|
589
|
+
a = md5ff(a, b, c, d, x[i], 7, -680876936);
|
|
590
|
+
d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);
|
|
591
|
+
c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);
|
|
592
|
+
b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);
|
|
593
|
+
a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);
|
|
594
|
+
d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);
|
|
595
|
+
c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);
|
|
596
|
+
b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);
|
|
597
|
+
a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);
|
|
598
|
+
d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);
|
|
599
|
+
c = md5ff(c, d, a, b, x[i + 10], 17, -42063);
|
|
600
|
+
b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);
|
|
601
|
+
a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);
|
|
602
|
+
d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);
|
|
603
|
+
c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);
|
|
604
|
+
b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);
|
|
605
|
+
a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);
|
|
606
|
+
d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);
|
|
607
|
+
c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);
|
|
608
|
+
b = md5gg(b, c, d, a, x[i], 20, -373897302);
|
|
609
|
+
a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);
|
|
610
|
+
d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);
|
|
611
|
+
c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);
|
|
612
|
+
b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);
|
|
613
|
+
a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);
|
|
614
|
+
d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);
|
|
615
|
+
c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);
|
|
616
|
+
b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);
|
|
617
|
+
a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);
|
|
618
|
+
d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);
|
|
619
|
+
c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);
|
|
620
|
+
b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);
|
|
621
|
+
a = md5hh(a, b, c, d, x[i + 5], 4, -378558);
|
|
622
|
+
d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);
|
|
623
|
+
c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);
|
|
624
|
+
b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);
|
|
625
|
+
a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);
|
|
626
|
+
d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);
|
|
627
|
+
c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);
|
|
628
|
+
b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);
|
|
629
|
+
a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);
|
|
630
|
+
d = md5hh(d, a, b, c, x[i], 11, -358537222);
|
|
631
|
+
c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);
|
|
632
|
+
b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);
|
|
633
|
+
a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);
|
|
634
|
+
d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);
|
|
635
|
+
c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);
|
|
636
|
+
b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);
|
|
637
|
+
a = md5ii(a, b, c, d, x[i], 6, -198630844);
|
|
638
|
+
d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);
|
|
639
|
+
c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);
|
|
640
|
+
b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);
|
|
641
|
+
a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);
|
|
642
|
+
d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);
|
|
643
|
+
c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);
|
|
644
|
+
b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);
|
|
645
|
+
a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);
|
|
646
|
+
d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);
|
|
647
|
+
c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);
|
|
648
|
+
b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);
|
|
649
|
+
a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);
|
|
650
|
+
d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);
|
|
651
|
+
c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);
|
|
652
|
+
b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);
|
|
653
|
+
a = safeAdd(a, olda);
|
|
654
|
+
b = safeAdd(b, oldb);
|
|
655
|
+
c = safeAdd(c, oldc);
|
|
656
|
+
d = safeAdd(d, oldd);
|
|
657
|
+
}
|
|
658
|
+
return [a, b, c, d];
|
|
659
|
+
}
|
|
660
|
+
function binl2rstr(input) {
|
|
661
|
+
let i;
|
|
662
|
+
let output = "";
|
|
663
|
+
const length32 = input.length * 32;
|
|
664
|
+
for (i = 0; i < length32; i += 8) {
|
|
665
|
+
output += String.fromCharCode(input[i >> 5] >>> i % 32 & 255);
|
|
666
|
+
}
|
|
667
|
+
return output;
|
|
668
|
+
}
|
|
669
|
+
function rstr2binl(input) {
|
|
670
|
+
let i;
|
|
671
|
+
const output = [];
|
|
672
|
+
output[(input.length >> 2) - 1] = void 0;
|
|
673
|
+
for (i = 0; i < output.length; i += 1) {
|
|
674
|
+
output[i] = 0;
|
|
675
|
+
}
|
|
676
|
+
const length8 = input.length * 8;
|
|
677
|
+
for (i = 0; i < length8; i += 8) {
|
|
678
|
+
output[i >> 5] |= (input.charCodeAt(i / 8) & 255) << i % 32;
|
|
679
|
+
}
|
|
680
|
+
return output;
|
|
681
|
+
}
|
|
682
|
+
function rstrMD5(s) {
|
|
683
|
+
return binl2rstr(binlMD5(rstr2binl(s), s.length * 8));
|
|
684
|
+
}
|
|
685
|
+
function rstrHMACMD5(key, data) {
|
|
686
|
+
let i;
|
|
687
|
+
let bkey = rstr2binl(key);
|
|
688
|
+
const ipad = [];
|
|
689
|
+
const opad = [];
|
|
690
|
+
ipad[15] = opad[15] = void 0;
|
|
691
|
+
if (bkey.length > 16) {
|
|
692
|
+
bkey = binlMD5(bkey, key.length * 8);
|
|
693
|
+
}
|
|
694
|
+
for (i = 0; i < 16; i += 1) {
|
|
695
|
+
ipad[i] = bkey[i] ^ 909522486;
|
|
696
|
+
opad[i] = bkey[i] ^ 1549556828;
|
|
697
|
+
}
|
|
698
|
+
const hash = binlMD5(ipad.concat(rstr2binl(data)), 512 + data.length * 8);
|
|
699
|
+
return binl2rstr(binlMD5(opad.concat(hash), 512 + 128));
|
|
700
|
+
}
|
|
701
|
+
function rstr2hex(input) {
|
|
702
|
+
const hexTab = "0123456789abcdef";
|
|
703
|
+
let output = "";
|
|
704
|
+
let x;
|
|
705
|
+
let i;
|
|
706
|
+
for (i = 0; i < input.length; i += 1) {
|
|
707
|
+
x = input.charCodeAt(i);
|
|
708
|
+
output += hexTab.charAt(x >>> 4 & 15) + hexTab.charAt(x & 15);
|
|
709
|
+
}
|
|
710
|
+
return output;
|
|
711
|
+
}
|
|
712
|
+
function str2rstrUTF8(input) {
|
|
713
|
+
return decodeURIComponent(encodeURIComponent(input));
|
|
714
|
+
}
|
|
715
|
+
function rawMD5(s) {
|
|
716
|
+
return rstrMD5(str2rstrUTF8(s));
|
|
717
|
+
}
|
|
718
|
+
function hexMD5(s) {
|
|
719
|
+
return rstr2hex(rawMD5(s));
|
|
720
|
+
}
|
|
721
|
+
function rawHMACMD5(k, d) {
|
|
722
|
+
return rstrHMACMD5(str2rstrUTF8(k), str2rstrUTF8(d));
|
|
723
|
+
}
|
|
724
|
+
function hexHMACMD5(k, d) {
|
|
725
|
+
return rstr2hex(rawHMACMD5(k, d));
|
|
726
|
+
}
|
|
727
|
+
function md5Hash(string, key, raw) {
|
|
728
|
+
if (!key) {
|
|
729
|
+
if (!raw) {
|
|
730
|
+
return hexMD5(string);
|
|
731
|
+
}
|
|
732
|
+
return rawMD5(string);
|
|
733
|
+
}
|
|
734
|
+
if (!raw) {
|
|
735
|
+
return hexHMACMD5(key, string);
|
|
736
|
+
}
|
|
737
|
+
return rawHMACMD5(key, string);
|
|
738
|
+
}
|
|
547
739
|
export {
|
|
548
740
|
FY_MONTH,
|
|
549
741
|
FY_MONTH_SHORT,
|
|
@@ -563,6 +755,7 @@ export {
|
|
|
563
755
|
getAge,
|
|
564
756
|
isToday,
|
|
565
757
|
jwtParse,
|
|
758
|
+
md5Hash,
|
|
566
759
|
numFormat,
|
|
567
760
|
setYear,
|
|
568
761
|
shiftIndex,
|
package/dist/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/lib/dateTime.ts","../../src/lib/utility.ts","../../src/lib/geoLocate.ts","../../src/lib/cookie.ts","../../src/lib/thbText.ts"],"sourcesContent":["/* dateTime */\n/*--------------------------------------------------------------------------------*/\nexport const TH_MONTH: string[] = [\n 'มกราคม', 'กุมภาพันธ์', 'มีนาคม', 'เมษายน', 'พฤษภาคม', 'มิถุนายน',\n 'กรกฎาคม', 'สิงหาคม', 'กันยายน', 'ตุลาคม', 'พฤศจิกายน', 'ธันวาคม',\n];\nexport const TH_MONTH_SHORT: string[] = [\n 'ม.ค.', 'ก.พ.', 'มี.ค.', 'เม.ย.', 'พ.ค.', 'มิ.ย.',\n 'ก.ค.', 'ส.ค.', 'ก.ย.', 'ต.ค.', 'พ.ย.', 'ธ.ค.',\n];\nexport const FY_MONTH: string[] = [\n 'ตุลาคม', 'พฤศจิกายน', 'ธันวาคม', 'มกราคม', 'กุมภาพันธ์', 'มีนาคม',\n 'เมษายน', 'พฤษภาคม', 'มิถุนายน', 'กรกฎาคม', 'สิงหาคม', 'กันยายน',\n];\nexport const FY_MONTH_SHORT: string[] = [\n 'ต.ค.', 'พ.ย.', 'ธ.ค.', 'ม.ค.', 'ก.พ.', 'มี.ค.',\n 'เม.ย.', 'พ.ค.', 'มิ.ย.', 'ก.ค.', 'ส.ค.', 'ก.ย.',\n];\nexport const PERIOD_TEXT: string[] = ['', 'เวรดึก', 'เวรเช้า', 'เวรบ่าย'];\n// time unix now\nexport const curTime = (): number => new Date().getTime();\n/*--------------------------------------------------------------------------------*/\nexport const curDate = (): string => {\n const dt = new Date();\n const yy = dt.getFullYear();\n const mm = String(dt.getMonth() + 1).padStart(2, '0');\n const dd = String(dt.getDate()).padStart(2, '0');\n return `${yy}-${mm}-${dd}`;\n};\n/*--------------------------------------------------------------------------------*/\nexport const curMonth = (): string => {\n const dt = new Date();\n const yy = dt.getFullYear();\n const mm = String(dt.getMonth() + 1).padStart(2, '0');\n return `${yy}-${mm}`;\n};\n/*--------------------------------------------------------------------------------*/\nexport const curYear = (yearType = ''): number => {\n const dt = new Date();\n const mm = dt.getMonth() + 1;\n if ((yearType == 'fyear' || yearType == 'fy') && mm > 9) {\n return dt.getFullYear() + 1; // ปีงบประมาณ\n }\n return dt.getFullYear(); // ปีปฏิทิน\n};\n/*--------------------------------------------------------------------------------*/\nexport const timeToStr = (unixtime: number, format = ''): string => {\n if (typeof unixtime != 'number') {\n return '';\n }\n const unix = new Date(Number(unixtime));\n const yy = unix.getFullYear();\n const mm = String(unix.getMonth() + 1).padStart(2, '0');\n const dd = String(unix.getDate()).padStart(2, '0');\n const H = String(unix.getHours()).padStart(2, '0');\n const M = String(unix.getMinutes()).padStart(2, '0');\n const S = String(unix.getSeconds()).padStart(2, '0');\n if (format == 'date') {\n return `${yy}-${mm}-${dd}`;\n }\n if (format == 'time') {\n return `${H}:${M}:${S}`;\n }\n return `${yy}-${mm}-${dd} ${H}:${M}:${S}`;\n};\n/*--------------------------------------------------------------------------------*/\nexport const shiftIndex = (unixtime = 0) => {\n if (typeof unixtime != 'number') {\n return { num: 0, text: '' };\n }\n const unix = unixtime ? new Date(unixtime) : new Date();\n const H = unix.getHours();\n if (H >= 0 && H < 8) return { num: 1, text: PERIOD_TEXT[1] };\n if (H >= 8 && H < 16) return { num: 2, text: PERIOD_TEXT[2] };\n if (H >= 16) return { num: 3, text: PERIOD_TEXT[3] };\n return { num: 0, text: '' };\n};\n/*--------------------------------------------------------------------------------*/\nexport const setYear = (el: HTMLSelectElement, min = 2020, txt = '') => {\n const dt = new Date();\n let year = dt.getFullYear();\n const month = dt.getMonth() + 1;\n if (month > 6 && month <= 12) {\n year++;\n }\n el.innerHTML = '<option value=\"\">- เลือก -</option>';\n for (let y = min; y <= year; y++) {\n const option = document.createElement('option');\n option.value = `${y}`;\n option.text = `${txt} ${y + 543}`;\n el.appendChild(option);\n }\n};\n/*--------------------------------------------------------------------------------*/\nexport const thaiDate = (date: number | string, format = 0): string => {\n if (typeof date == 'string' && date.indexOf('0000-00-00') >= 0) {\n return '';\n }\n if (typeof date == 'string') {\n date = date.trim();\n date = date.replace(' ', 'T');\n }\n\n const dt = new Date(date);\n if (isNaN(dt.getTime())) return '';\n\n const yy = dt.getFullYear() + 543;\n const mm = String(dt.getMonth() + 1).padStart(2, '0');\n const dd = String(dt.getDate()).padStart(2, '0');\n const H = String(dt.getHours()).padStart(2, '0');\n const M = String(dt.getMinutes()).padStart(2, '0');\n const S = String(dt.getSeconds()).padStart(2, '0');\n\n // 01/01/2500\n if (format == 0) return `${dd}/${mm}/${yy}`;\n // 01/01/2500 00:00\n if (format == 1) return `${dd}/${mm}/${yy} ${H}:${M}`;\n // 01/01/2500 00:00:00\n if (format == 2) return `${dd}/${mm}/${yy} ${H}:${M}:${S}`;\n\n // 01 มกราคม 2500\n if (format == 10) return `${dd} ${TH_MONTH[Number(mm) - 1]} ${yy}`;\n // 01 ม.ค. 65\n if (format == 11) return `${dd} ${TH_MONTH_SHORT[Number(mm) - 1]} ${String(yy).slice(-2)}`;\n // 01 มกราคม 2500 เวลา 00:00 น.\n if (format == 12) return `${dd} ${TH_MONTH[Number(mm) - 1]} ${yy} เวลา ${H}:${M} น.`;\n // 01 ม.ค. 65 00:00\n if (format == 13) return `${dd} ${TH_MONTH_SHORT[Number(mm) - 1]} ${String(yy).slice(-2)} ${H}:${M}`;\n\n // มกราคม 2500\n if (format == 20) return `${TH_MONTH[Number(mm) - 1]} ${yy}`;\n // ม.ค. 2500\n if (format == 21) return `${TH_MONTH_SHORT[Number(mm) - 1]} ${yy}`;\n // ม.ค. 65\n if (format == 22) return `${TH_MONTH_SHORT[Number(mm) - 1]} ${String(yy).slice(-2)}`;\n\n return '';\n};\n/*--------------------------------------------------------------------------------*/\nexport const dateDiff = (start: string, stop: string): number => {\n if (!start || start.indexOf('0000-00-00') >= 0) {\n return 0;\n }\n if (!stop || stop.indexOf('0000-00-00') >= 0) {\n return 0;\n }\n const [y1, m1, d1] = start.split('-');\n const [y2, m2, d2] = stop.split('-');\n const date1 = new Date(Number(y1), Number(m1) - 1, Number(d1)).getTime();\n const date2 = new Date(Number(y2), Number(m2) - 1, Number(d2)).getTime();\n return Math.round((date2 - date1) / (1000 * 60 * 60 * 24));\n};\n/*--------------------------------------------------------------------------------*/\nexport const timeDiff = (start: string, stop: string) => {\n if (!start || start.indexOf('0000-00-00') >= 0) {\n return { h: 0, m: 0, s: 0 };\n }\n if (!stop || stop.indexOf('0000-00-00') >= 0) {\n return { h: 0, m: 0, s: 0 };\n }\n start = start.replace(' ', 'T');\n stop = stop.replace(' ', 'T');\n const date1 = new Date(start);\n const date2 = new Date(stop);\n let msec = date2.getTime() - date1.getTime();\n\n const hh = Math.floor(msec / 1000 / 60 / 60);\n msec -= hh * 1000 * 60 * 60;\n const mm = Math.floor(msec / 1000 / 60);\n msec -= mm * 1000 * 60;\n const ss = Math.floor(msec / 1000);\n msec -= ss * 1000;\n return { h: hh, m: mm, s: ss };\n};\n/*--------------------------------------------------------------------------------*/\nexport const getAge = (date: string) => {\n if (!date || date.indexOf('0000-00-00') >= 0) {\n return { years: 0, months: 0, days: 0 };\n }\n const now = new Date();\n const nowYear = now.getFullYear();\n const nowMonth = now.getMonth();\n const nowDate = now.getDate();\n\n const [yy, mm, dd] = date.split('-');\n const birth = new Date(Number(yy), Number(mm) - 1, Number(dd));\n const birthYear = birth.getFullYear();\n const birthMonth = birth.getMonth();\n const birthDate = birth.getDate();\n\n let yearAge = nowYear - birthYear;\n let monthAge = 0;\n let dateAge = 0;\n\n if (nowMonth >= birthMonth) {\n monthAge = nowMonth - birthMonth;\n } else {\n yearAge--;\n monthAge = 12 + nowMonth - birthMonth;\n }\n\n if (nowDate >= birthDate) {\n dateAge = nowDate - birthDate;\n } else {\n monthAge--;\n dateAge = 31 + nowDate - birthDate;\n if (monthAge < 0) {\n monthAge = 11;\n yearAge--;\n }\n }\n\n return {\n years: yearAge,\n months: monthAge,\n days: dateAge,\n };\n};\n/*--------------------------------------------------------------------------------*/\nexport const ageToBirth = (year: number, month: number, day: number): string => {\n const y = Number(year);\n const m = Number(month);\n const d = Number(day);\n const dt = new Date(\n new Date().getFullYear() - y,\n new Date().getMonth() - m,\n new Date().getDate() - d,\n );\n const yy = dt.getFullYear();\n const mm = String(dt.getMonth() + 1).padStart(2, '0');\n const dd = String(dt.getDate()).padStart(2, '0');\n return `${yy}-${mm}-${dd}`; // 1957-10-10\n};\n/*--------------------------------------------------------------------------------*/\nexport const toDbDate = (date: string): string => {\n if ((!date) || (date.indexOf('0000-00-00') >= 0)) {\n return '';\n }\n const dt = new Date(date);\n const yy = dt.getFullYear() - 543;\n const mm = String(dt.getMonth() + 1).padStart(2, '0');\n const dd = String(dt.getDate()).padStart(2, '0');\n return `${yy}-${mm}-${dd}`;\n};\n/*--------------------------------------------------------------------------------*/\nexport const toThaiDate = (date: string): string => {\n if ((!date) || (date.indexOf('0000-00-00') >= 0)) {\n return '';\n }\n const dt = new Date(date);\n const yy = dt.getFullYear() + 543;\n const mm = String(dt.getMonth() + 1).padStart(2, '0');\n const dd = String(dt.getDate()).padStart(2, '0');\n return `${yy}-${mm}-${dd}`;\n};\n/*--------------------------------------------------------------------------------*/\nexport const isToday = (date: string): boolean => {\n const input = new Date(date);\n const today = new Date();\n if (input.setHours(0, 0, 0, 0) == today.setHours(0, 0, 0, 0)) {\n return true;\n }\n return false;\n};\n/*--------------------------------------------------------------------------------*/\n","/* utility */\nexport const THAI_DIGIT = ['๐', '๑', '๒', '๓', '๔', '๕', '๖', '๗', '๘', '๙'];\n/*--------------------------------------------------------------------------------*/\nexport const thaiDigit = (input: number | string): string => {\n return input.toString()\n .replace(/\\d/g, (digit: string) => THAI_DIGIT[parseInt(digit)]);\n};\n/*--------------------------------------------------------------------------------*/\nexport const cidCheck = (cid: string): boolean => {\n if (!Number(cid)) return false;\n if (cid.substring(0, 1) == '0') return false;\n if (cid.length !== 13) return false;\n let sum = 0;\n for (let i = 0; i < 12; i++) {\n sum += parseFloat(cid.charAt(i)) * (13 - i);\n }\n return (11 - sum % 11) % 10 === parseFloat(cid.charAt(12));\n};\n/*--------------------------------------------------------------------------------*/\nexport const winPopup = (\n width: number,\n height: number,\n name: string,\n url: string,\n) => {\n const left = (screen.width - width) / 2;\n const top = (screen.height - height) / 2;\n let opt = `width=${width}, height=${height},`;\n opt += `left=${left}, top=${top}`;\n return window.open(url, name, opt);\n};\n/*--------------------------------------------------------------------------------*/\nexport const strCheck = (str: string): string => {\n let out = String(str);\n out = out.replaceAll(\"'\", \"\\\\'\");\n out = out.replaceAll('\"', '\\\\\"');\n out = out.trim();\n return out;\n};\n/*--------------------------------------------------------------------------------*/\nexport const zeroFill = (\n num: number,\n opts?: {\n min?: number;\n max?: number;\n char?: string;\n }\n): string => {\n const n = Number(num);\n const min = opts?.min ? Number(opts.min) : 0;\n const max = opts?.max ? Number(opts.max) : 0;\n const char = opts?.char || opts?.char == '' ? opts.char : '-';\n if (n > 0) {\n return n.toLocaleString(undefined, {\n minimumFractionDigits: min,\n maximumFractionDigits: max,\n });\n } else return char;\n};\n/*--------------------------------------------------------------------------------*/\nexport const numFormat = (num: number, fixed = 0): string => {\n const n = Number(num);\n const f = Number(fixed);\n let out: string = '';\n if (n >= 10 ** 3 && n < 10 ** 6) {\n out = (n / 1000).toFixed(f) + ' K';\n } else if (n >= 10 ** 6) {\n out = (n / 1000000).toFixed(f) + ' M';\n }\n return out;\n};\n/*--------------------------------------------------------------------------------*/\nexport const strFormat = (value: string, pattern: string): string => {\n let i = 0;\n const v = value.toString();\n return pattern.replace(/#/g, () => {\n const out = v[i] ? v[i] : '#';\n i++;\n return out;\n });\n};\n/*--------------------------------------------------------------------------------*/\nexport const toBase64 = (file: File) => new Promise<string>((resolve, reject) => {\n const reader = new FileReader();\n reader.readAsDataURL(file);\n reader.onload = () => resolve(reader.result as string);\n reader.onerror = err => reject(err);\n});\n/*--------------------------------------------------------------------------------*/\nexport type JwtClaims = {\n iss: string;\n aud: string;\n iat: number;\n exp: number;\n sub: number;\n};\nexport const jwtParse = (token: string): JwtClaims | null => {\n try { return JSON.parse(atob(token.split('.')[1])); }\n catch { return null; }\n};\n/*--------------------------------------------------------------------------------*/\n","/* geoLocate */\n/*--------------------------------------------------------------------------------*/\ntype GeoCoords = {\n position: {\n lat: number;\n lng: number;\n };\n accuracy: number;\n heading: number;\n speed: number;\n timestamp: number;\n};\n/*--------------------------------------------------------------------------------*/\nexport const getPosition = (params: {\n accuracy: number;\n timeout: number;\n}) => new Promise<GeoCoords>((resolve, reject) => {\n const timeout = params.timeout ? params.timeout : 10000; // 10 sec\n const acrLimit = params.accuracy ? params.accuracy : 10; // 10 meter\n const buff: GeoCoords[] = [];\n if (navigator.geolocation) {\n // set timeout\n const Tcount = setTimeout(() => {\n navigator.geolocation.clearWatch(watchId);\n clearTimeout(Tcount);\n // return best accuracy\n if (buff.length) {\n buff.sort((a, b) => a.accuracy - b.accuracy);\n resolve(buff[0]);\n }\n else {\n reject('position not found');\n }\n }, timeout);\n // get position\n const watchId = watchPosition((pos) => {\n const lat = pos.coords.latitude;\n const lng = pos.coords.longitude;\n const acr = pos.coords.accuracy;\n const head = pos.coords.heading ? pos.coords.heading : 0;\n const speed = pos.coords.speed ? pos.coords.speed : 0;\n const time = pos.timestamp;\n buff.push({\n position: { lat: lat, lng: lng },\n accuracy: acr,\n heading: head,\n speed: speed,\n timestamp: time,\n });\n // accuracy check\n if (acr <= acrLimit) {\n navigator.geolocation.clearWatch(watchId);\n clearTimeout(Tcount);\n resolve({\n position: { lat: lat, lng: lng },\n accuracy: acr,\n heading: head,\n speed: speed,\n timestamp: time,\n });\n }\n }, (err) => {\n navigator.geolocation.clearWatch(watchId);\n clearTimeout(Tcount);\n reject(err);\n });\n }\n else reject('not support geolocation');\n});\n/*--------------------------------------------------------------------------------*/\nexport const watchPosition = (\n success: PositionCallback,\n error: PositionErrorCallback\n) => {\n if (navigator.geolocation) {\n return navigator.geolocation.watchPosition(success, error, {\n enableHighAccuracy: true,\n timeout: 5000,\n maximumAge: 0,\n });\n }\n return 0;\n};\n/*--------------------------------------------------------------------------------*/\nexport const toAddress = async (position: { lat: number; lng: number; }) => {\n const key = 'AIzaSyDsKimgLKSw9DAz_j8Z0HDkLTmyGhxmNiU';\n const latlng = `${position.lat},${position.lng}`;\n let url = `https://maps.googleapis.com/maps/api/geocode/json`;\n url += `?latlng=${latlng}&key=${key}`;\n // fetch\n let address = '';\n await fetch(url).then(response => response.json()).then(resp => {\n const data = resp.results;\n if (data.length) address = data[0].formatted_address;\n });\n return address;\n};\n/*--------------------------------------------------------------------------------*/\n","/* cookie */\n/*--------------------------------------------------------------------------------*/\nexport const setItem = (key: string, val: string, exp: number) => {\n const d = new Date();\n d.setTime(d.getTime() + (1000 * exp)); // seconds\n const expires = \"expires=\" + d.toUTCString();\n document.cookie = `${key}=${val};${expires};path=/`;\n};\n/*--------------------------------------------------------------------------------*/\nexport const getItem = (key: string): string => {\n const pair = document.cookie.split('; ').find(x => x.startsWith(key + '='));\n if (pair) return pair.split('=')[1];\n else return '';\n};\n/*--------------------------------------------------------------------------------*/\nexport const removeItem = (key: string) => {\n document.cookie = `${key}=;expires=Thu, 01 Jan 1970 00:00:00 UTC;path=/;`;\n};\n/*--------------------------------------------------------------------------------*/\nexport const clear = () => {\n document.cookie.split(';').forEach(cookie => {\n const eqPos = cookie.indexOf('=');\n const name = eqPos > -1 ? cookie.substring(0, eqPos) : cookie;\n removeItem(name);\n });\n};\n/*--------------------------------------------------------------------------------*/\n","/* thbText */\nconst MAX_POSITION = 6;\nconst UNIT_POSITION = 0;\nconst TEN_POSITION = 1;\n\nconst PRIMARY_UNIT = 'บาท';\nconst SECONDARY_UNIT = 'สตางค์';\nconst WHOLE_NUMBER_TEXT = 'ถ้วน';\nconst NUMBER_TEXTS = ['ศูนย์', 'หนึ่ง', 'สอง', 'สาม', 'สี่', 'ห้า', 'หก', 'เจ็ด', 'แปด', 'เก้า', 'สิบ'];\nconst UNIT_TEXTS = ['สิบ', 'ร้อย', 'พัน', 'หมื่น', 'แสน', 'ล้าน'];\n\nconst getIntegerDigits = (numberStringInput: string): number => parseInt(numberStringInput.split('.')[0], 10);\nconst getFractionalDigits = (numberStringInput: string): number => parseInt(numberStringInput.split('.')[1], 10);\nconst hasFractionalDigits = (numberInput: number | undefined) => numberInput !== undefined && numberInput !== 0;\n\nfunction isZeroValue(numberStringInput: string): boolean;\nfunction isZeroValue(numberInput: number): boolean;\nfunction isZeroValue(input: string | number): boolean {\n return parseInt(`${input}`, 10) === 0;\n}\n\nconst isUnitPosition = (position: number) => position == UNIT_POSITION;\nconst isTenPosition = (position: number) => position % MAX_POSITION == TEN_POSITION;\nconst isMillionsPosition = (position: number) => (position >= MAX_POSITION && position % MAX_POSITION == 0);\nconst isLastPosition = (position: number, lengthOfDigits: number) => position + 1 < lengthOfDigits;\n\nconst reverseNumber = (number: number): string => {\n const numberStr = number.toString();\n return numberStr.split('').reverse().join('');\n};\n\nconst getBathUnit = (position: number, number: string) => {\n let unitText = '';\n if (!isUnitPosition(position)) {\n unitText = UNIT_TEXTS[Math.abs(position - 1) % MAX_POSITION];\n }\n if (isZeroValue(number) && !isMillionsPosition(position)) {\n unitText = '';\n }\n return unitText;\n};\n\nconst getBathText = (position: number, number: string, lengthOfDigits: number) => {\n const _number: number = parseInt(number, 10);\n let numberText = NUMBER_TEXTS[_number];\n if (isZeroValue(_number)) {\n return '';\n }\n if (isTenPosition(position) && _number == 1) {\n numberText = '';\n }\n if (isTenPosition(position) && _number == 2) {\n numberText = 'ยี่';\n }\n if (isMillionsPosition(position) && isLastPosition(position, lengthOfDigits) && _number == 1) {\n numberText = 'เอ็ด';\n }\n if (lengthOfDigits > 1 && isUnitPosition(position) && _number == 1) {\n numberText = 'เอ็ด';\n }\n return numberText;\n};\n\nconst convert = (numberInput: number): string => {\n const numberReverse: string = reverseNumber(numberInput);\n let textOutput = '';\n numberReverse.split('').forEach((number: string, i) => {\n textOutput = `${getBathText(i, number, numberReverse.length)}${getBathUnit(i, number)}${textOutput}`;\n });\n return textOutput;\n};\n\nconst parseFloatWithPrecision = (number: string, precision = 2): string => {\n const numberFloatStr = parseFloat(number).toString().split('.');\n const integerUnitStr = numberFloatStr[0];\n const fractionalUnitStr = (numberFloatStr.length == 2) ? numberFloatStr[1].substring(0, precision) : '00';\n return parseFloat(`${integerUnitStr}.${fractionalUnitStr}`).toFixed(precision);\n};\n\nconst convertFullMoney = (numberInput: string) => {\n const numberStr: string = parseFloatWithPrecision(numberInput);\n const integerDigits: number = getIntegerDigits(numberStr);\n const fractionalDigits: number = getFractionalDigits(numberStr);\n const intTextOutput = convert(integerDigits);\n const textOutput = [];\n if (intTextOutput) {\n textOutput.push(`${[intTextOutput, PRIMARY_UNIT].join('')}`);\n }\n if (intTextOutput && !hasFractionalDigits(fractionalDigits)) {\n textOutput.push(WHOLE_NUMBER_TEXT);\n }\n if (hasFractionalDigits(fractionalDigits) && convert(fractionalDigits)) {\n textOutput.push(`${[convert(fractionalDigits), SECONDARY_UNIT].join('')}`);\n }\n return textOutput.join('');\n};\n\nfunction ThaiBahtText(stringNumberInput: string): string;\nfunction ThaiBahtText(numberInput: number): string;\nfunction ThaiBahtText(input: string | number): string {\n if (isNaN(Number(`${input}`))) {\n throw new TypeError('Invalid input. Expected a number or a string representing a number.');\n }\n return convertFullMoney(`${input}`);\n}\n\nexport const thbText = ThaiBahtText;\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/lib/dateTime.ts","../../src/lib/utility.ts","../../src/lib/geoLocate.ts","../../src/lib/cookie.ts","../../src/lib/thbText.ts","../../src/lib/md5.ts"],"sourcesContent":["/* dateTime */\n/*--------------------------------------------------------------------------------*/\nexport const TH_MONTH: string[] = [\n 'มกราคม', 'กุมภาพันธ์', 'มีนาคม', 'เมษายน', 'พฤษภาคม', 'มิถุนายน',\n 'กรกฎาคม', 'สิงหาคม', 'กันยายน', 'ตุลาคม', 'พฤศจิกายน', 'ธันวาคม',\n];\nexport const TH_MONTH_SHORT: string[] = [\n 'ม.ค.', 'ก.พ.', 'มี.ค.', 'เม.ย.', 'พ.ค.', 'มิ.ย.',\n 'ก.ค.', 'ส.ค.', 'ก.ย.', 'ต.ค.', 'พ.ย.', 'ธ.ค.',\n];\nexport const FY_MONTH: string[] = [\n 'ตุลาคม', 'พฤศจิกายน', 'ธันวาคม', 'มกราคม', 'กุมภาพันธ์', 'มีนาคม',\n 'เมษายน', 'พฤษภาคม', 'มิถุนายน', 'กรกฎาคม', 'สิงหาคม', 'กันยายน',\n];\nexport const FY_MONTH_SHORT: string[] = [\n 'ต.ค.', 'พ.ย.', 'ธ.ค.', 'ม.ค.', 'ก.พ.', 'มี.ค.',\n 'เม.ย.', 'พ.ค.', 'มิ.ย.', 'ก.ค.', 'ส.ค.', 'ก.ย.',\n];\nexport const PERIOD_TEXT: string[] = ['', 'เวรดึก', 'เวรเช้า', 'เวรบ่าย'];\n// time unix now\nexport const curTime = (): number => new Date().getTime();\n/*--------------------------------------------------------------------------------*/\nexport const curDate = (): string => {\n const dt = new Date();\n const yy = dt.getFullYear();\n const mm = String(dt.getMonth() + 1).padStart(2, '0');\n const dd = String(dt.getDate()).padStart(2, '0');\n return `${yy}-${mm}-${dd}`;\n};\n/*--------------------------------------------------------------------------------*/\nexport const curMonth = (): string => {\n const dt = new Date();\n const yy = dt.getFullYear();\n const mm = String(dt.getMonth() + 1).padStart(2, '0');\n return `${yy}-${mm}`;\n};\n/*--------------------------------------------------------------------------------*/\nexport const curYear = (yearType = ''): number => {\n const dt = new Date();\n const mm = dt.getMonth() + 1;\n if ((yearType == 'fyear' || yearType == 'fy') && mm > 9) {\n return dt.getFullYear() + 1; // ปีงบประมาณ\n }\n return dt.getFullYear(); // ปีปฏิทิน\n};\n/*--------------------------------------------------------------------------------*/\nexport const timeToStr = (unixtime: number, format = ''): string => {\n if (typeof unixtime != 'number') {\n return '';\n }\n const unix = new Date(Number(unixtime));\n const yy = unix.getFullYear();\n const mm = String(unix.getMonth() + 1).padStart(2, '0');\n const dd = String(unix.getDate()).padStart(2, '0');\n const H = String(unix.getHours()).padStart(2, '0');\n const M = String(unix.getMinutes()).padStart(2, '0');\n const S = String(unix.getSeconds()).padStart(2, '0');\n if (format == 'date') {\n return `${yy}-${mm}-${dd}`;\n }\n if (format == 'time') {\n return `${H}:${M}:${S}`;\n }\n return `${yy}-${mm}-${dd} ${H}:${M}:${S}`;\n};\n/*--------------------------------------------------------------------------------*/\nexport const shiftIndex = (unixtime = 0) => {\n if (typeof unixtime != 'number') {\n return { num: 0, text: '' };\n }\n const unix = unixtime ? new Date(unixtime) : new Date();\n const H = unix.getHours();\n if (H >= 0 && H < 8) return { num: 1, text: PERIOD_TEXT[1] };\n if (H >= 8 && H < 16) return { num: 2, text: PERIOD_TEXT[2] };\n if (H >= 16) return { num: 3, text: PERIOD_TEXT[3] };\n return { num: 0, text: '' };\n};\n/*--------------------------------------------------------------------------------*/\nexport const setYear = (el: HTMLSelectElement, min = 2020, txt = '') => {\n const dt = new Date();\n let year = dt.getFullYear();\n const month = dt.getMonth() + 1;\n if (month > 6 && month <= 12) {\n year++;\n }\n el.innerHTML = '<option value=\"\">- เลือก -</option>';\n for (let y = min; y <= year; y++) {\n const option = document.createElement('option');\n option.value = `${y}`;\n option.text = `${txt} ${y + 543}`;\n el.appendChild(option);\n }\n};\n/*--------------------------------------------------------------------------------*/\nexport const thaiDate = (date: number | string, format = 0): string => {\n if (typeof date == 'string' && date.indexOf('0000-00-00') >= 0) {\n return '';\n }\n if (typeof date == 'string') {\n date = date.trim();\n date = date.replace(' ', 'T');\n }\n\n const dt = new Date(date);\n if (isNaN(dt.getTime())) return '';\n\n const yy = dt.getFullYear() + 543;\n const mm = String(dt.getMonth() + 1).padStart(2, '0');\n const dd = String(dt.getDate()).padStart(2, '0');\n const H = String(dt.getHours()).padStart(2, '0');\n const M = String(dt.getMinutes()).padStart(2, '0');\n const S = String(dt.getSeconds()).padStart(2, '0');\n\n // 01/01/2500\n if (format == 0) return `${dd}/${mm}/${yy}`;\n // 01/01/2500 00:00\n if (format == 1) return `${dd}/${mm}/${yy} ${H}:${M}`;\n // 01/01/2500 00:00:00\n if (format == 2) return `${dd}/${mm}/${yy} ${H}:${M}:${S}`;\n\n // 01 มกราคม 2500\n if (format == 10) return `${dd} ${TH_MONTH[Number(mm) - 1]} ${yy}`;\n // 01 ม.ค. 65\n if (format == 11) return `${dd} ${TH_MONTH_SHORT[Number(mm) - 1]} ${String(yy).slice(-2)}`;\n // 01 มกราคม 2500 เวลา 00:00 น.\n if (format == 12) return `${dd} ${TH_MONTH[Number(mm) - 1]} ${yy} เวลา ${H}:${M} น.`;\n // 01 ม.ค. 65 00:00\n if (format == 13) return `${dd} ${TH_MONTH_SHORT[Number(mm) - 1]} ${String(yy).slice(-2)} ${H}:${M}`;\n\n // มกราคม 2500\n if (format == 20) return `${TH_MONTH[Number(mm) - 1]} ${yy}`;\n // ม.ค. 2500\n if (format == 21) return `${TH_MONTH_SHORT[Number(mm) - 1]} ${yy}`;\n // ม.ค. 65\n if (format == 22) return `${TH_MONTH_SHORT[Number(mm) - 1]} ${String(yy).slice(-2)}`;\n\n return '';\n};\n/*--------------------------------------------------------------------------------*/\nexport const dateDiff = (start: string, stop: string): number => {\n if (!start || start.indexOf('0000-00-00') >= 0) {\n return 0;\n }\n if (!stop || stop.indexOf('0000-00-00') >= 0) {\n return 0;\n }\n const [y1, m1, d1] = start.split('-');\n const [y2, m2, d2] = stop.split('-');\n const date1 = new Date(Number(y1), Number(m1) - 1, Number(d1)).getTime();\n const date2 = new Date(Number(y2), Number(m2) - 1, Number(d2)).getTime();\n return Math.round((date2 - date1) / (1000 * 60 * 60 * 24));\n};\n/*--------------------------------------------------------------------------------*/\nexport const timeDiff = (start: string, stop: string) => {\n if (!start || start.indexOf('0000-00-00') >= 0) {\n return { h: 0, m: 0, s: 0 };\n }\n if (!stop || stop.indexOf('0000-00-00') >= 0) {\n return { h: 0, m: 0, s: 0 };\n }\n start = start.replace(' ', 'T');\n stop = stop.replace(' ', 'T');\n const date1 = new Date(start);\n const date2 = new Date(stop);\n let msec = date2.getTime() - date1.getTime();\n\n const hh = Math.floor(msec / 1000 / 60 / 60);\n msec -= hh * 1000 * 60 * 60;\n const mm = Math.floor(msec / 1000 / 60);\n msec -= mm * 1000 * 60;\n const ss = Math.floor(msec / 1000);\n msec -= ss * 1000;\n return { h: hh, m: mm, s: ss };\n};\n/*--------------------------------------------------------------------------------*/\nexport const getAge = (date: string) => {\n if (!date || date.indexOf('0000-00-00') >= 0) {\n return { years: 0, months: 0, days: 0 };\n }\n const now = new Date();\n const nowYear = now.getFullYear();\n const nowMonth = now.getMonth();\n const nowDate = now.getDate();\n\n const [yy, mm, dd] = date.split('-');\n const birth = new Date(Number(yy), Number(mm) - 1, Number(dd));\n const birthYear = birth.getFullYear();\n const birthMonth = birth.getMonth();\n const birthDate = birth.getDate();\n\n let yearAge = nowYear - birthYear;\n let monthAge = 0;\n let dateAge = 0;\n\n if (nowMonth >= birthMonth) {\n monthAge = nowMonth - birthMonth;\n } else {\n yearAge--;\n monthAge = 12 + nowMonth - birthMonth;\n }\n\n if (nowDate >= birthDate) {\n dateAge = nowDate - birthDate;\n } else {\n monthAge--;\n dateAge = 31 + nowDate - birthDate;\n if (monthAge < 0) {\n monthAge = 11;\n yearAge--;\n }\n }\n\n return {\n years: yearAge,\n months: monthAge,\n days: dateAge,\n };\n};\n/*--------------------------------------------------------------------------------*/\nexport const ageToBirth = (year: number, month: number, day: number): string => {\n const y = Number(year);\n const m = Number(month);\n const d = Number(day);\n const dt = new Date(\n new Date().getFullYear() - y,\n new Date().getMonth() - m,\n new Date().getDate() - d,\n );\n const yy = dt.getFullYear();\n const mm = String(dt.getMonth() + 1).padStart(2, '0');\n const dd = String(dt.getDate()).padStart(2, '0');\n return `${yy}-${mm}-${dd}`; // 1957-10-10\n};\n/*--------------------------------------------------------------------------------*/\nexport const toDbDate = (date: string): string => {\n if ((!date) || (date.indexOf('0000-00-00') >= 0)) {\n return '';\n }\n const dt = new Date(date);\n const yy = dt.getFullYear() - 543;\n const mm = String(dt.getMonth() + 1).padStart(2, '0');\n const dd = String(dt.getDate()).padStart(2, '0');\n return `${yy}-${mm}-${dd}`;\n};\n/*--------------------------------------------------------------------------------*/\nexport const toThaiDate = (date: string): string => {\n if ((!date) || (date.indexOf('0000-00-00') >= 0)) {\n return '';\n }\n const dt = new Date(date);\n const yy = dt.getFullYear() + 543;\n const mm = String(dt.getMonth() + 1).padStart(2, '0');\n const dd = String(dt.getDate()).padStart(2, '0');\n return `${yy}-${mm}-${dd}`;\n};\n/*--------------------------------------------------------------------------------*/\nexport const isToday = (date: string): boolean => {\n const input = new Date(date);\n const today = new Date();\n if (input.setHours(0, 0, 0, 0) == today.setHours(0, 0, 0, 0)) {\n return true;\n }\n return false;\n};\n/*--------------------------------------------------------------------------------*/\n","/* utility */\nexport const THAI_DIGIT = ['๐', '๑', '๒', '๓', '๔', '๕', '๖', '๗', '๘', '๙'];\n/*--------------------------------------------------------------------------------*/\nexport const thaiDigit = (input: number | string): string => {\n return input.toString()\n .replace(/\\d/g, (digit: string) => THAI_DIGIT[parseInt(digit)]);\n};\n/*--------------------------------------------------------------------------------*/\nexport const cidCheck = (cid: string): boolean => {\n if (!Number(cid)) return false;\n if (cid.substring(0, 1) == '0') return false;\n if (cid.length !== 13) return false;\n let sum = 0;\n for (let i = 0; i < 12; i++) {\n sum += parseFloat(cid.charAt(i)) * (13 - i);\n }\n return (11 - sum % 11) % 10 === parseFloat(cid.charAt(12));\n};\n/*--------------------------------------------------------------------------------*/\nexport const winPopup = (\n width: number,\n height: number,\n name: string,\n url: string,\n) => {\n const left = (screen.width - width) / 2;\n const top = (screen.height - height) / 2;\n let opt = `width=${width}, height=${height},`;\n opt += `left=${left}, top=${top}`;\n return window.open(url, name, opt);\n};\n/*--------------------------------------------------------------------------------*/\nexport const strCheck = (str: string): string => {\n let out = String(str);\n out = out.replaceAll(\"'\", \"\\\\'\");\n out = out.replaceAll('\"', '\\\\\"');\n out = out.trim();\n return out;\n};\n/*--------------------------------------------------------------------------------*/\nexport const zeroFill = (\n num: number,\n opts?: {\n min?: number;\n max?: number;\n char?: string;\n }\n): string => {\n const n = Number(num);\n const min = opts?.min ? Number(opts.min) : 0;\n const max = opts?.max ? Number(opts.max) : 0;\n const char = opts?.char || opts?.char == '' ? opts.char : '-';\n if (n > 0) {\n return n.toLocaleString(undefined, {\n minimumFractionDigits: min,\n maximumFractionDigits: max,\n });\n } else return char;\n};\n/*--------------------------------------------------------------------------------*/\nexport const numFormat = (num: number, fixed = 0): string => {\n const n = Number(num);\n const f = Number(fixed);\n let out: string = '';\n if (n >= 10 ** 3 && n < 10 ** 6) {\n out = (n / 1000).toFixed(f) + ' K';\n } else if (n >= 10 ** 6) {\n out = (n / 1000000).toFixed(f) + ' M';\n }\n return out;\n};\n/*--------------------------------------------------------------------------------*/\nexport const strFormat = (value: string, pattern: string): string => {\n let i = 0;\n const v = value.toString();\n return pattern.replace(/#/g, () => {\n const out = v[i] ? v[i] : '#';\n i++;\n return out;\n });\n};\n/*--------------------------------------------------------------------------------*/\nexport const toBase64 = (file: File) => new Promise<string>((resolve, reject) => {\n const reader = new FileReader();\n reader.readAsDataURL(file);\n reader.onload = () => resolve(reader.result as string);\n reader.onerror = err => reject(err);\n});\n/*--------------------------------------------------------------------------------*/\nexport type JwtClaims = {\n iss: string;\n aud: string;\n iat: number;\n exp: number;\n sub: number;\n};\nexport const jwtParse = (token: string): JwtClaims | null => {\n try { return JSON.parse(atob(token.split('.')[1])); }\n catch { return null; }\n};\n/*--------------------------------------------------------------------------------*/\n","/* geoLocate */\n/*--------------------------------------------------------------------------------*/\ntype GeoCoords = {\n position: {\n lat: number;\n lng: number;\n };\n accuracy: number;\n heading: number;\n speed: number;\n timestamp: number;\n};\n/*--------------------------------------------------------------------------------*/\nexport const getPosition = (params: {\n accuracy: number;\n timeout: number;\n}) => new Promise<GeoCoords>((resolve, reject) => {\n const timeout = params.timeout ? params.timeout : 10000; // 10 sec\n const acrLimit = params.accuracy ? params.accuracy : 10; // 10 meter\n const buff: GeoCoords[] = [];\n if (navigator.geolocation) {\n // set timeout\n const Tcount = setTimeout(() => {\n navigator.geolocation.clearWatch(watchId);\n clearTimeout(Tcount);\n // return best accuracy\n if (buff.length) {\n buff.sort((a, b) => a.accuracy - b.accuracy);\n resolve(buff[0]);\n }\n else {\n reject('position not found');\n }\n }, timeout);\n // get position\n const watchId = watchPosition((pos) => {\n const lat = pos.coords.latitude;\n const lng = pos.coords.longitude;\n const acr = pos.coords.accuracy;\n const head = pos.coords.heading ? pos.coords.heading : 0;\n const speed = pos.coords.speed ? pos.coords.speed : 0;\n const time = pos.timestamp;\n buff.push({\n position: { lat: lat, lng: lng },\n accuracy: acr,\n heading: head,\n speed: speed,\n timestamp: time,\n });\n // accuracy check\n if (acr <= acrLimit) {\n navigator.geolocation.clearWatch(watchId);\n clearTimeout(Tcount);\n resolve({\n position: { lat: lat, lng: lng },\n accuracy: acr,\n heading: head,\n speed: speed,\n timestamp: time,\n });\n }\n }, (err) => {\n navigator.geolocation.clearWatch(watchId);\n clearTimeout(Tcount);\n reject(err);\n });\n }\n else reject('not support geolocation');\n});\n/*--------------------------------------------------------------------------------*/\nexport const watchPosition = (\n success: PositionCallback,\n error: PositionErrorCallback\n) => {\n if (navigator.geolocation) {\n return navigator.geolocation.watchPosition(success, error, {\n enableHighAccuracy: true,\n timeout: 5000,\n maximumAge: 0,\n });\n }\n return 0;\n};\n/*--------------------------------------------------------------------------------*/\nexport const toAddress = async (position: { lat: number; lng: number; }) => {\n const key = 'AIzaSyDsKimgLKSw9DAz_j8Z0HDkLTmyGhxmNiU';\n const latlng = `${position.lat},${position.lng}`;\n let url = `https://maps.googleapis.com/maps/api/geocode/json`;\n url += `?latlng=${latlng}&key=${key}`;\n // fetch\n let address = '';\n await fetch(url).then(response => response.json()).then(resp => {\n const data = resp.results;\n if (data.length) address = data[0].formatted_address;\n });\n return address;\n};\n/*--------------------------------------------------------------------------------*/\n","/* cookie */\n/*--------------------------------------------------------------------------------*/\nexport const setItem = (key: string, val: string, exp: number) => {\n const d = new Date();\n d.setTime(d.getTime() + (1000 * exp)); // seconds\n const expires = \"expires=\" + d.toUTCString();\n document.cookie = `${key}=${val};${expires};path=/`;\n};\n/*--------------------------------------------------------------------------------*/\nexport const getItem = (key: string): string => {\n const pair = document.cookie.split('; ').find(x => x.startsWith(key + '='));\n if (pair) return pair.split('=')[1];\n else return '';\n};\n/*--------------------------------------------------------------------------------*/\nexport const removeItem = (key: string) => {\n document.cookie = `${key}=;expires=Thu, 01 Jan 1970 00:00:00 UTC;path=/;`;\n};\n/*--------------------------------------------------------------------------------*/\nexport const clear = () => {\n document.cookie.split(';').forEach(cookie => {\n const eqPos = cookie.indexOf('=');\n const name = eqPos > -1 ? cookie.substring(0, eqPos) : cookie;\n removeItem(name);\n });\n};\n/*--------------------------------------------------------------------------------*/\n","/* thbText */\nconst MAX_POSITION = 6;\nconst UNIT_POSITION = 0;\nconst TEN_POSITION = 1;\n\nconst PRIMARY_UNIT = 'บาท';\nconst SECONDARY_UNIT = 'สตางค์';\nconst WHOLE_NUMBER_TEXT = 'ถ้วน';\nconst NUMBER_TEXTS = ['ศูนย์', 'หนึ่ง', 'สอง', 'สาม', 'สี่', 'ห้า', 'หก', 'เจ็ด', 'แปด', 'เก้า', 'สิบ'];\nconst UNIT_TEXTS = ['สิบ', 'ร้อย', 'พัน', 'หมื่น', 'แสน', 'ล้าน'];\n\nconst getIntegerDigits = (numberStringInput: string): number => parseInt(numberStringInput.split('.')[0], 10);\nconst getFractionalDigits = (numberStringInput: string): number => parseInt(numberStringInput.split('.')[1], 10);\nconst hasFractionalDigits = (numberInput: number | undefined) => numberInput !== undefined && numberInput !== 0;\n\nfunction isZeroValue(numberStringInput: string): boolean;\nfunction isZeroValue(numberInput: number): boolean;\nfunction isZeroValue(input: string | number): boolean {\n return parseInt(`${input}`, 10) === 0;\n}\n\nconst isUnitPosition = (position: number) => position == UNIT_POSITION;\nconst isTenPosition = (position: number) => position % MAX_POSITION == TEN_POSITION;\nconst isMillionsPosition = (position: number) => (position >= MAX_POSITION && position % MAX_POSITION == 0);\nconst isLastPosition = (position: number, lengthOfDigits: number) => position + 1 < lengthOfDigits;\n\nconst reverseNumber = (number: number): string => {\n const numberStr = number.toString();\n return numberStr.split('').reverse().join('');\n};\n\nconst getBathUnit = (position: number, number: string) => {\n let unitText = '';\n if (!isUnitPosition(position)) {\n unitText = UNIT_TEXTS[Math.abs(position - 1) % MAX_POSITION];\n }\n if (isZeroValue(number) && !isMillionsPosition(position)) {\n unitText = '';\n }\n return unitText;\n};\n\nconst getBathText = (position: number, number: string, lengthOfDigits: number) => {\n const _number: number = parseInt(number, 10);\n let numberText = NUMBER_TEXTS[_number];\n if (isZeroValue(_number)) {\n return '';\n }\n if (isTenPosition(position) && _number == 1) {\n numberText = '';\n }\n if (isTenPosition(position) && _number == 2) {\n numberText = 'ยี่';\n }\n if (isMillionsPosition(position) && isLastPosition(position, lengthOfDigits) && _number == 1) {\n numberText = 'เอ็ด';\n }\n if (lengthOfDigits > 1 && isUnitPosition(position) && _number == 1) {\n numberText = 'เอ็ด';\n }\n return numberText;\n};\n\nconst convert = (numberInput: number): string => {\n const numberReverse: string = reverseNumber(numberInput);\n let textOutput = '';\n numberReverse.split('').forEach((number: string, i) => {\n textOutput = `${getBathText(i, number, numberReverse.length)}${getBathUnit(i, number)}${textOutput}`;\n });\n return textOutput;\n};\n\nconst parseFloatWithPrecision = (number: string, precision = 2): string => {\n const numberFloatStr = parseFloat(number).toString().split('.');\n const integerUnitStr = numberFloatStr[0];\n const fractionalUnitStr = (numberFloatStr.length == 2) ? numberFloatStr[1].substring(0, precision) : '00';\n return parseFloat(`${integerUnitStr}.${fractionalUnitStr}`).toFixed(precision);\n};\n\nconst convertFullMoney = (numberInput: string) => {\n const numberStr: string = parseFloatWithPrecision(numberInput);\n const integerDigits: number = getIntegerDigits(numberStr);\n const fractionalDigits: number = getFractionalDigits(numberStr);\n const intTextOutput = convert(integerDigits);\n const textOutput = [];\n if (intTextOutput) {\n textOutput.push(`${[intTextOutput, PRIMARY_UNIT].join('')}`);\n }\n if (intTextOutput && !hasFractionalDigits(fractionalDigits)) {\n textOutput.push(WHOLE_NUMBER_TEXT);\n }\n if (hasFractionalDigits(fractionalDigits) && convert(fractionalDigits)) {\n textOutput.push(`${[convert(fractionalDigits), SECONDARY_UNIT].join('')}`);\n }\n return textOutput.join('');\n};\n\nfunction ThaiBahtText(stringNumberInput: string): string;\nfunction ThaiBahtText(numberInput: number): string;\nfunction ThaiBahtText(input: string | number): string {\n if (isNaN(Number(`${input}`))) {\n throw new TypeError('Invalid input. Expected a number or a string representing a number.');\n }\n return convertFullMoney(`${input}`);\n}\n\nexport const thbText = ThaiBahtText;\n","/* md5 */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nfunction safeAdd(x: number, y: number) {\n const lsw = (x & 0xffff) + (y & 0xffff);\n const msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n return (msw << 16) | (lsw & 0xffff);\n}\n\nfunction bitRotateLeft(num: number, cnt: number) {\n return (num << cnt) | (num >>> (32 - cnt));\n}\n\nfunction md5cmn(q: number, a: number, b: number, x: number, s: number, t: number) {\n return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);\n}\n\nfunction md5ff(a: number, b: number, c: number, d: number, x: number, s: number, t: number) {\n return md5cmn((b & c) | (~b & d), a, b, x, s, t);\n}\n\nfunction md5gg(a: number, b: number, c: number, d: number, x: number, s: number, t: number) {\n return md5cmn((b & d) | (c & ~d), a, b, x, s, t);\n}\n\nfunction md5hh(a: number, b: number, c: number, d: number, x: number, s: number, t: number) {\n return md5cmn(b ^ c ^ d, a, b, x, s, t);\n}\n\nfunction md5ii(a: number, b: number, c: number, d: number, x: number, s: number, t: number) {\n return md5cmn(c ^ (b | ~d), a, b, x, s, t);\n}\n\nfunction binlMD5(x: number[], len: number) {\n x[len >> 5] |= 0x80 << len % 32;\n x[(((len + 64) >>> 9) << 4) + 14] = len;\n\n let i;\n let olda;\n let oldb;\n let oldc;\n let oldd;\n let a = 1732584193;\n let b = -271733879;\n let c = -1732584194;\n let d = 271733878;\n\n for (i = 0; i < x.length; i += 16) {\n olda = a;\n oldb = b;\n oldc = c;\n oldd = d;\n\n a = md5ff(a, b, c, d, x[i], 7, -680876936);\n d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);\n c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);\n b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);\n a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);\n d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);\n c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);\n b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);\n a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);\n d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);\n c = md5ff(c, d, a, b, x[i + 10], 17, -42063);\n b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);\n a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);\n d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);\n c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);\n b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);\n\n a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);\n d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);\n c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);\n b = md5gg(b, c, d, a, x[i], 20, -373897302);\n a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);\n d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);\n c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);\n b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);\n a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);\n d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);\n c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);\n b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);\n a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);\n d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);\n c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);\n b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);\n\n a = md5hh(a, b, c, d, x[i + 5], 4, -378558);\n d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);\n c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);\n b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);\n a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);\n d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);\n c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);\n b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);\n a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);\n d = md5hh(d, a, b, c, x[i], 11, -358537222);\n c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);\n b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);\n a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);\n d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);\n c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);\n b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);\n\n a = md5ii(a, b, c, d, x[i], 6, -198630844);\n d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);\n c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);\n b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);\n a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);\n d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);\n c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);\n b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);\n a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);\n d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);\n c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);\n b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);\n a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);\n d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);\n c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);\n b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);\n\n a = safeAdd(a, olda);\n b = safeAdd(b, oldb);\n c = safeAdd(c, oldc);\n d = safeAdd(d, oldd);\n }\n return [a, b, c, d];\n}\n\nfunction binl2rstr(input: number[]) {\n let i;\n let output = '';\n const length32 = input.length * 32;\n for (i = 0; i < length32; i += 8) {\n output += String.fromCharCode((input[i >> 5] >>> i % 32) & 0xff);\n }\n return output;\n}\n\nfunction rstr2binl(input: string) {\n let i;\n const output: any = [];\n output[(input.length >> 2) - 1] = undefined;\n for (i = 0; i < output.length; i += 1) {\n output[i] = 0;\n }\n const length8 = input.length * 8;\n for (i = 0; i < length8; i += 8) {\n output[i >> 5] |= (input.charCodeAt(i / 8) & 0xff) << i % 32;\n }\n return output;\n}\n\nfunction rstrMD5(s: string) {\n return binl2rstr(binlMD5(rstr2binl(s), s.length * 8));\n}\n\nfunction rstrHMACMD5(key: string, data: string) {\n let i;\n let bkey = rstr2binl(key);\n const ipad: any = [];\n const opad: any = [];\n ipad[15] = opad[15] = undefined;\n if (bkey.length > 16) {\n bkey = binlMD5(bkey, key.length * 8);\n }\n for (i = 0; i < 16; i += 1) {\n ipad[i] = bkey[i] ^ 0x36363636;\n opad[i] = bkey[i] ^ 0x5c5c5c5c;\n }\n const hash = binlMD5(ipad.concat(rstr2binl(data)), 512 + data.length * 8);\n return binl2rstr(binlMD5(opad.concat(hash), 512 + 128));\n}\n\nfunction rstr2hex(input: string) {\n const hexTab = '0123456789abcdef';\n let output = '';\n let x;\n let i;\n for (i = 0; i < input.length; i += 1) {\n x = input.charCodeAt(i);\n output += hexTab.charAt((x >>> 4) & 0x0f) + hexTab.charAt(x & 0x0f);\n }\n return output;\n}\n\nfunction str2rstrUTF8(input: string) {\n return decodeURIComponent(encodeURIComponent(input));\n}\n\nfunction rawMD5(s: string) {\n return rstrMD5(str2rstrUTF8(s));\n}\n\nfunction hexMD5(s: string) {\n return rstr2hex(rawMD5(s));\n}\n\nfunction rawHMACMD5(k: string, d: string) {\n return rstrHMACMD5(str2rstrUTF8(k), str2rstrUTF8(d));\n}\n\nfunction hexHMACMD5(k: string, d: string) {\n return rstr2hex(rawHMACMD5(k, d));\n}\n\nexport function md5Hash(string: string, key?: string, raw?: string) {\n if (!key) {\n if (!raw) {\n return hexMD5(string);\n }\n return rawMD5(string);\n }\n if (!raw) {\n return hexHMACMD5(key, string);\n }\n return rawHMACMD5(key, string);\n}"],"mappings":"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","names":[]}
|