peryl 1.5.2 → 1.5.3
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 +30 -16
- package/demo/hsml-app-form-validation_demo.ts +22 -23
- package/demo/hsml-app-form_demo.ts +24 -20
- package/demo/hsml-app-test_demo.ts +35 -36
- package/demo/hsml-app-tictactoe_demo.ts +16 -15
- package/demo/hsml-app_demo.ts +20 -12
- package/demo/hsml-appel_demo.html +7 -0
- package/demo/hsml-appel_demo.ts +33 -25
- package/demo/hsml-appi_demo.ts +9 -9
- package/demo/hsml_demo.ts +27 -22
- package/demo/js/hsml-app-js-happi_demo.html +16 -8
- package/demo/js/hsml-app-js_demo.html +15 -15
- package/dist/browser-esmodule/encode.js.map +1 -1
- package/dist/browser-esmodule/hsml-app.js +67 -73
- package/dist/browser-esmodule/hsml-app.js.map +1 -1
- package/dist/browser-esmodule/hsml-convert.js.map +1 -1
- package/dist/browser-esmodule/hsml-dom.js +3 -3
- package/dist/browser-esmodule/hsml-dom.js.map +1 -1
- package/dist/browser-esmodule/hsml-h.js.map +1 -1
- package/dist/browser-esmodule/hsml-html.js +2 -2
- package/dist/browser-esmodule/hsml-html.js.map +1 -1
- package/dist/browser-esmodule/hsml-idom.js +5 -5
- package/dist/browser-esmodule/hsml-idom.js.map +1 -1
- package/dist/browser-esmodule/hsml.js.map +1 -1
- package/dist/browser-esmodule/http.js.map +1 -1
- package/dist/browser-esmodule/index.js +71 -77
- package/dist/browser-esmodule/index.js.map +1 -1
- package/dist/browser-esmodule/router.js.map +1 -1
- package/dist/browser-umd/encode.js +1 -1
- package/dist/browser-umd/encode.js.map +1 -1
- package/dist/browser-umd/hsml-app.js +1 -1
- package/dist/browser-umd/hsml-app.js.map +1 -1
- package/dist/browser-umd/hsml-convert.js.map +1 -1
- package/dist/browser-umd/hsml-dom.js +1 -1
- package/dist/browser-umd/hsml-dom.js.map +1 -1
- package/dist/browser-umd/hsml-h.js.map +1 -1
- package/dist/browser-umd/hsml-html.js +1 -1
- package/dist/browser-umd/hsml-html.js.map +1 -1
- package/dist/browser-umd/hsml-idom.js +1 -1
- package/dist/browser-umd/hsml-idom.js.map +1 -1
- package/dist/browser-umd/hsml.js.map +1 -1
- package/dist/browser-umd/http.js +1 -1
- package/dist/browser-umd/http.js.map +1 -1
- package/dist/browser-umd/index.js +1 -1
- package/dist/browser-umd/index.js.map +1 -1
- package/dist/browser-umd/router.js +1 -1
- package/dist/browser-umd/router.js.map +1 -1
- package/dist/browser-umd/validators-moment.js +1 -1
- package/dist/browser-umd/validators-moment.js.map +1 -1
- package/dist/browser-umd/validators-numeral.js.map +1 -1
- package/dist/demo/encode_demo.ce182166.js.map +1 -1
- package/dist/demo/encode_demo.f40a44eb.js.map +1 -1
- package/dist/demo/hsml-app-form-validation_demo.a9e2c583.js +2 -0
- package/dist/demo/hsml-app-form-validation_demo.a9e2c583.js.map +1 -0
- package/dist/demo/hsml-app-form-validation_demo.bb392ab0.js +2 -0
- package/dist/demo/hsml-app-form-validation_demo.bb392ab0.js.map +1 -0
- package/dist/demo/hsml-app-form-validation_demo.c6856b02.js +2 -0
- package/dist/demo/hsml-app-form-validation_demo.c6856b02.js.map +1 -0
- package/dist/demo/hsml-app-form-validation_demo.fdcc0b2d.js +2 -0
- package/dist/demo/hsml-app-form-validation_demo.fdcc0b2d.js.map +1 -0
- package/dist/demo/hsml-app-form-validation_demo.html +1 -1
- package/dist/demo/hsml-app-form_demo.e36ef1e9.js +2 -0
- package/dist/demo/hsml-app-form_demo.e36ef1e9.js.map +1 -0
- package/dist/demo/hsml-app-form_demo.fd22dfcf.js +2 -0
- package/dist/demo/hsml-app-form_demo.fd22dfcf.js.map +1 -0
- package/dist/demo/hsml-app-form_demo.html +1 -1
- package/dist/demo/hsml-app-test_demo.ba5f166c.js +2 -0
- package/dist/demo/hsml-app-test_demo.ba5f166c.js.map +1 -0
- package/dist/demo/hsml-app-test_demo.e8b5e4b2.js +2 -0
- package/dist/demo/hsml-app-test_demo.e8b5e4b2.js.map +1 -0
- package/dist/demo/hsml-app-test_demo.html +1 -1
- package/dist/demo/hsml-app-tictactoe_demo.03d8363f.js +2 -0
- package/dist/demo/hsml-app-tictactoe_demo.03d8363f.js.map +1 -0
- package/dist/demo/hsml-app-tictactoe_demo.399f8e69.js +2 -0
- package/dist/demo/hsml-app-tictactoe_demo.399f8e69.js.map +1 -0
- package/dist/demo/hsml-app-tictactoe_demo.html +1 -1
- package/dist/demo/hsml-app_demo.44aa1072.js +2 -0
- package/dist/demo/hsml-app_demo.44aa1072.js.map +1 -0
- package/dist/demo/hsml-app_demo.70ef3e7a.js +2 -0
- package/dist/demo/hsml-app_demo.70ef3e7a.js.map +1 -0
- package/dist/demo/hsml-app_demo.html +1 -1
- package/dist/demo/hsml-appel_demo.2a9f7f3f.js +2 -0
- package/dist/demo/hsml-appel_demo.2a9f7f3f.js.map +1 -0
- package/dist/demo/hsml-appel_demo.bea7849a.js +2 -0
- package/dist/demo/hsml-appel_demo.bea7849a.js.map +1 -0
- package/dist/demo/hsml-appel_demo.html +1 -1
- package/dist/demo/hsml-appi_demo.3dc5de90.js +2 -0
- package/dist/demo/hsml-appi_demo.3dc5de90.js.map +1 -0
- package/dist/demo/hsml-appi_demo.bfc7056a.js +2 -0
- package/dist/demo/hsml-appi_demo.bfc7056a.js.map +1 -0
- package/dist/demo/hsml-appi_demo.html +1 -1
- package/dist/demo/hsml-convert_demo.0ea1fa3b.js.map +1 -1
- package/dist/demo/hsml-convert_demo.63e3e7b5.js.map +1 -1
- package/dist/demo/{hsml_demo.ff950ba1.js → hsml_demo.a248689a.js} +2 -2
- package/dist/demo/hsml_demo.a248689a.js.map +1 -0
- package/dist/demo/hsml_demo.eb3b08be.js +2 -0
- package/dist/demo/hsml_demo.eb3b08be.js.map +1 -0
- package/dist/demo/hsml_demo.html +1 -1
- package/dist/demo/http_demo.3e7da3d8.js.map +1 -1
- package/dist/demo/http_demo.8e435f23.js.map +1 -1
- package/dist/demo/i18n_demo.html +1 -1
- package/dist/demo/router_demo.3cfa03aa.js.map +1 -1
- package/dist/demo/router_demo.89ab1681.js.map +1 -1
- package/dist/demo/{validators_demo.252e13a6.js → validators_demo.90ff6001.js} +2 -2
- package/dist/demo/validators_demo.90ff6001.js.map +1 -0
- package/dist/demo/{validators_demo.66893723.js → validators_demo.ef5b2dea.js} +2 -2
- package/dist/demo/validators_demo.ef5b2dea.js.map +1 -0
- package/dist/demo/validators_demo.html +1 -1
- package/dist/encode.js +1 -1
- package/dist/encode.js.map +1 -1
- package/dist/hsml-app.d.ts +38 -37
- package/dist/hsml-app.js +60 -62
- package/dist/hsml-app.js.map +1 -1
- package/dist/hsml-convert.d.ts +3 -3
- package/dist/hsml-convert.js.map +1 -1
- package/dist/hsml-dom.d.ts +2 -2
- package/dist/hsml-dom.js +3 -3
- package/dist/hsml-dom.js.map +1 -1
- package/dist/hsml-h.d.ts +8 -8
- package/dist/hsml-h.js.map +1 -1
- package/dist/hsml-html.d.ts +4 -4
- package/dist/hsml-html.js +2 -2
- package/dist/hsml-html.js.map +1 -1
- package/dist/hsml-idom.d.ts +2 -2
- package/dist/hsml-idom.js +5 -5
- package/dist/hsml-idom.js.map +1 -1
- package/dist/hsml.d.ts +26 -27
- package/dist/hsml.js.map +1 -1
- package/dist/http.js +1 -1
- package/dist/http.js.map +1 -1
- package/dist/router.js +1 -1
- package/dist/router.js.map +1 -1
- package/package.json +8 -8
- package/src/hsml-app.ts +209 -144
- package/src/hsml-convert.ts +8 -8
- package/src/hsml-dom.ts +18 -18
- package/src/hsml-h.ts +10 -10
- package/src/hsml-html.ts +19 -19
- package/src/hsml-idom.ts +25 -25
- package/src/hsml.ts +46 -143
- package/demo/hsml-appc_demo.html +0 -16
- package/demo/hsml-appc_demo.ts +0 -49
- package/dist/demo/hsml-app-form-validation_demo.0b03b743.js +0 -2
- package/dist/demo/hsml-app-form-validation_demo.0b03b743.js.map +0 -1
- package/dist/demo/hsml-app-form-validation_demo.b3a5c810.js +0 -2
- package/dist/demo/hsml-app-form-validation_demo.b3a5c810.js.map +0 -1
- package/dist/demo/hsml-app-form-validation_demo.d3925067.js +0 -2
- package/dist/demo/hsml-app-form-validation_demo.d3925067.js.map +0 -1
- package/dist/demo/hsml-app-form-validation_demo.f757d763.js +0 -2
- package/dist/demo/hsml-app-form-validation_demo.f757d763.js.map +0 -1
- package/dist/demo/hsml-app-form_demo.007ffcaa.js +0 -2
- package/dist/demo/hsml-app-form_demo.007ffcaa.js.map +0 -1
- package/dist/demo/hsml-app-form_demo.a034239d.js +0 -2
- package/dist/demo/hsml-app-form_demo.a034239d.js.map +0 -1
- package/dist/demo/hsml-app-test_demo.35c14dc9.js +0 -2
- package/dist/demo/hsml-app-test_demo.35c14dc9.js.map +0 -1
- package/dist/demo/hsml-app-test_demo.3c7e16ae.js +0 -2
- package/dist/demo/hsml-app-test_demo.3c7e16ae.js.map +0 -1
- package/dist/demo/hsml-app-tictactoe_demo.5f4861c1.js +0 -2
- package/dist/demo/hsml-app-tictactoe_demo.5f4861c1.js.map +0 -1
- package/dist/demo/hsml-app-tictactoe_demo.7deeabad.js +0 -2
- package/dist/demo/hsml-app-tictactoe_demo.7deeabad.js.map +0 -1
- package/dist/demo/hsml-app_demo.87d83c29.js +0 -2
- package/dist/demo/hsml-app_demo.87d83c29.js.map +0 -1
- package/dist/demo/hsml-app_demo.941a13a6.js +0 -2
- package/dist/demo/hsml-app_demo.941a13a6.js.map +0 -1
- package/dist/demo/hsml-appc_demo.0234ff15.js +0 -2
- package/dist/demo/hsml-appc_demo.0234ff15.js.map +0 -1
- package/dist/demo/hsml-appc_demo.f5783031.js +0 -2
- package/dist/demo/hsml-appc_demo.f5783031.js.map +0 -1
- package/dist/demo/hsml-appc_demo.html +0 -1
- package/dist/demo/hsml-appel_demo.0e8a4d4c.js +0 -2
- package/dist/demo/hsml-appel_demo.0e8a4d4c.js.map +0 -1
- package/dist/demo/hsml-appel_demo.1a5c2c26.js +0 -2
- package/dist/demo/hsml-appel_demo.1a5c2c26.js.map +0 -1
- package/dist/demo/hsml-appi_demo.2c3fb511.js +0 -2
- package/dist/demo/hsml-appi_demo.2c3fb511.js.map +0 -1
- package/dist/demo/hsml-appi_demo.427fdebd.js +0 -2
- package/dist/demo/hsml-appi_demo.427fdebd.js.map +0 -1
- package/dist/demo/hsml_demo.33f28c29.js +0 -2
- package/dist/demo/hsml_demo.33f28c29.js.map +0 -1
- package/dist/demo/hsml_demo.ff950ba1.js.map +0 -1
- package/dist/demo/validators_demo.252e13a6.js.map +0 -1
- package/dist/demo/validators_demo.66893723.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validators-numeral.js","mappings":";CAAA,SAA2CA,EAAMC,GAChD,GAAsB,iBAAZC,SAA0C,iBAAXC,OACxCA,OAAOD,QAAUD,SACb,GAAqB,mBAAXG,QAAyBA,OAAOC,IAC9CD,OAAO,GAAIH,OACP,CACJ,IAAIK,EAAIL,IACR,IAAI,IAAIM,KAAKD,GAAuB,iBAAZJ,QAAuBA,QAAUF,GAAMO,GAAKD,EAAEC,EACvE,CACA,CATD,CASGC,MAAM,WACT,+BCVA,QAUQ,EAMA,WAKJ,IAAIC,EACAC,EAosBIC,EAIJC,EAQIC,EA9sBJC,EAAU,CAAC,EACXC,EAAU,CAAC,EACXC,EAAW,CACPC,cAAe,KACfC,WAAY,KACZC,WAAY,KACZC,cAAe,MACfC,mBAAmB,GAEvBC,EAAU,CACNL,cAAeD,EAASC,cACxBC,WAAYF,EAASE,WACrBC,WAAYH,EAASG,WACrBC,cAAeJ,EAASI,cACxBC,kBAAmBL,EAASK,mBASpC,SAASE,EAAQC,EAAOC,GACpBC,KAAKC,OAASH,EAEdE,KAAKE,OAASH,CAClB,CAg8BJ,OA97BIhB,EAAU,SAASe,GACf,IAAIK,EACAC,EACAC,EACAC,EAEJ,GAAIvB,EAAQwB,UAAUT,GAClBK,EAAQL,EAAMK,aACX,GAAc,IAAVL,QAAgC,IAAVA,EAC7BK,EAAQ,OACL,GAAc,OAAVL,GAAkBd,EAAEwB,MAAMV,GACjCK,EAAQ,UACL,GAAqB,iBAAVL,EACd,GAAIF,EAAQJ,YAAcM,IAAUF,EAAQJ,WACxCW,EAAQ,OACL,GAAIP,EAAQH,YAAcK,IAAUF,EAAQH,aAAeK,EAAMW,QAAQ,WAAY,IAAIC,OAC5FP,EAAQ,SACL,CACH,IAAKC,KAAQhB,EAGT,IAFAkB,EAAmD,mBAAnClB,EAAQgB,GAAMO,QAAQC,SAA0BxB,EAAQgB,GAAMO,QAAQC,WAAaxB,EAAQgB,GAAMO,QAAQC,WAE3Gd,EAAMe,MAAMP,GAAS,CAC/BD,EAAmBjB,EAAQgB,GAAMQ,SAEjC,KACJ,CAKJT,GAFAE,EAAmBA,GAAoBtB,EAAQC,EAAE8B,gBAExBhB,EAC7B,MAEAK,EAAQY,OAAOjB,IAAS,KAG5B,OAAO,IAAID,EAAQC,EAAOK,EAC9B,GAGQa,QAtEM,QAyEdjC,EAAQwB,UAAY,SAASU,GACzB,OAAOA,aAAepB,CAC1B,EAGAd,EAAQC,EAAIA,EAAI,CAEZkC,eAAgB,SAASf,EAAOgB,EAAQC,GACpC,IAWIC,EACAC,EAIAC,EACAC,EACAC,EACAC,EACAC,EAjBAC,EAHAC,EAASxC,EAAQN,EAAQa,QAAQL,eACjCuC,GAAO,EACPC,GAAS,EAETC,EAAO,GACPC,EAAW,KACXC,EAAU,IACVC,EAAU,IAEVlD,EAAU,GACVmD,GAAM,EAgGV,GAnFAjC,EAAQA,GAAS,EAEjBmB,EAAMe,KAAKf,IAAInB,GAIXpB,EAAQC,EAAEsD,SAASnB,EAAQ,MAC3BW,GAAO,EACPX,EAASA,EAAOV,QAAQ,WAAY,MAC7B1B,EAAQC,EAAEsD,SAASnB,EAAQ,MAAQpC,EAAQC,EAAEsD,SAASnB,EAAQ,QACrEM,EAAS1C,EAAQC,EAAEsD,SAASnB,EAAQ,KAAOA,EAAOoB,QAAQ,KAAOpC,EAAQ,EAAIgB,EAAOoB,QAAQ,MAAQ,EACpGpB,EAASA,EAAOV,QAAQ,WAAY,KAIpC1B,EAAQC,EAAEsD,SAASnB,EAAQ,OAG3BE,KAFAA,EAAYF,EAAON,MAAM,iBAEDQ,EAAU,GAG9BtC,EAAQC,EAAEsD,SAASnB,EAAQ,QAC3Ba,EAAO,KAGXb,EAASA,EAAOV,QAAQ,IAAI+B,OAAOR,EAAO,YAAa,IAEnDV,GAAOW,IAAaZ,GAA2B,MAAdA,GAEjCW,GAAQH,EAAOY,cAAcR,SAC7B9B,GAAgB8B,GACTX,EAAMW,GAAYX,GAAOY,IAAYb,GAA2B,MAAdA,GAEzDW,GAAQH,EAAOY,cAAcP,QAC7B/B,GAAgB+B,GACTZ,EAAMY,GAAWZ,GAAOa,IAAYd,GAA2B,MAAdA,GAExDW,GAAQH,EAAOY,cAAcN,QAC7BhC,GAAgBgC,IACTb,EAAMa,GAAWb,GAtDjB,MAsDqCD,GAA2B,MAAdA,KAEzDW,GAAQH,EAAOY,cAAcC,SAC7BvC,GAzDO,MA8DXpB,EAAQC,EAAEsD,SAASnB,EAAQ,SAC3BY,GAAS,EACTZ,EAASA,EAAOV,QAAQ,MAAO,MAInCc,EAAMpB,EAAMwC,WAAWC,MAAM,KAAK,GAClCpB,EAAYL,EAAOyB,MAAM,KAAK,GAC9BlB,EAAYP,EAAOoB,QAAQ,KAC3BX,GAAgBT,EAAOyB,MAAM,KAAK,GAAGA,MAAM,KAAK,GAAG/B,MAAM,OAAS,IAAIH,OAElEc,GACIzC,EAAQC,EAAEsD,SAASd,EAAW,MAE9BA,GADAA,EAAYA,EAAUf,QAAQ,IAAK,KACbmC,MAAM,KAC5B3D,EAAUF,EAAQC,EAAE6D,QAAQ1C,EAAQqB,EAAU,GAAGd,OAASc,EAAU,GAAGd,OAASU,EAAkBI,EAAU,GAAGd,SAE/GzB,EAAUF,EAAQC,EAAE6D,QAAQ1C,EAAOqB,EAAUd,OAAQU,GAGzDG,EAAMtC,EAAQ2D,MAAM,KAAK,GAGrB3D,EADAF,EAAQC,EAAEsD,SAASrD,EAAS,KAClB4C,EAAOiB,WAAW7D,QAAUA,EAAQ2D,MAAM,KAAK,GAE/C,GAGVb,GAAuC,IAA7BhB,OAAO9B,EAAQ8D,MAAM,MAC/B9D,EAAU,KAGdsC,EAAMxC,EAAQC,EAAE6D,QAAQ1C,EAAO,EAAGiB,GAIlCY,IAASX,GAAaN,OAAOQ,IAAQ,KAAQS,IAASH,EAAOY,cAAcR,SAG3E,OAFAV,EAAMyB,OAAOjC,OAAOQ,GAAO,KAEnBS,GACJ,KAAKH,EAAOY,cAAcC,SACtBV,EAAOH,EAAOY,cAAcN,QAC5B,MACJ,KAAKN,EAAOY,cAAcN,QACtBH,EAAOH,EAAOY,cAAcP,QAC5B,MACJ,KAAKL,EAAOY,cAAcP,QACtBF,EAAOH,EAAOY,cAAcR,SAYxC,GALIlD,EAAQC,EAAEsD,SAASf,EAAK,OACxBA,EAAMA,EAAIwB,MAAM,GAChBX,GAAM,GAGNb,EAAIb,OAASkB,EACb,IAAK,IAAI/C,EAAI+C,EAAeL,EAAIb,OAAQ7B,EAAI,EAAGA,IAC3C0C,EAAM,IAAMA,EAwBpB,OApBIG,GAAa,IACbH,EAAMA,EAAIoB,WAAWlC,QAAQ,0BAA2B,KAAOoB,EAAOiB,WAAWpB,YAGzD,IAAxBP,EAAOoB,QAAQ,OACfhB,EAAM,IAGVI,EAASJ,EAAMtC,GAAW+C,GAAc,IAEpCF,EACAH,GAAUG,GAAQM,EAAM,IAAM,IAAMT,GAAUG,GAAQM,EAAM,IAAM,IAE9DX,GAAU,EACVE,EAAoB,IAAXF,GAAgBW,EAAM,IAAM,KAAOT,EAASA,GAAUS,EAAM,IAAM,KACpEA,IACPT,EAAS,IAAMA,GAIhBA,CACX,EAEAb,eAAgB,SAASmC,GACrB,IAQIC,EACA/C,EAEAG,EAXAuB,EAASxC,EAAQO,EAAQL,eACzB4D,EAAiBF,EACjBR,EAAgB,CACZC,SAAU,EACVP,QAAS,EACTD,QAAS,EACTD,SAAU,IAOlB,GAAIrC,EAAQJ,YAAcyD,IAAWrD,EAAQJ,WACzCW,EAAQ,OACL,GAAIP,EAAQH,YAAcwD,IAAWrD,EAAQH,aAAewD,EAAOxC,QAAQ,WAAY,IAAIC,OAC9FP,EAAQ,SACL,CAOH,IAAK+C,KANL/C,EAAQ,EAE0B,MAA9B0B,EAAOiB,WAAW7D,UAClBgE,EAASA,EAAOxC,QAAQ,MAAO,IAAIA,QAAQoB,EAAOiB,WAAW7D,QAAS,MAGrDwD,EAGjB,GAFAnC,EAAS,IAAIkC,OAAO,YAAcX,EAAOY,cAAcS,GAAgB,aAAerB,EAAOuB,SAASC,OAAS,iBAE3GF,EAAetC,MAAMP,GAAS,CAC9BH,GAASkC,KAAKiB,IAAI,GAAIb,EAAcS,IACpC,KACJ,CAIJ/C,IAAU8C,EAAOL,MAAM,KAAKlC,OAAS2B,KAAKkB,IAAIN,EAAOL,MAAM,KAAKlC,OAAS,EAAGuC,EAAOL,MAAM,KAAKlC,OAAS,IAAM,EAAI,GAAK,EAGtHuC,EAASA,EAAOxC,QAAQ,aAAc,IAEtCN,GAASY,OAAOkC,EACpB,CAEA,OAAO9C,CACX,EACAK,MAAO,SAASL,GACZ,MAAwB,iBAAVA,GAAsBK,MAAML,EAC9C,EACAmC,SAAU,SAASW,EAAQO,GACvB,OAAmC,IAA5BP,EAAOV,QAAQiB,EAC1B,EACAC,OAAQ,SAASR,EAAQS,EAAWC,GAChC,OAAOV,EAAOF,MAAM,EAAGY,GAASD,EAAYT,EAAOF,MAAMY,EAC7D,EACAC,OAAQ,SAASC,EAAOC,GACpB,GAAa,OAAT9D,KACA,MAAM,IAAI+D,UAAU,sDAGxB,GAAwB,mBAAbD,EACP,MAAM,IAAIC,UAAUD,EAAW,sBAGnC,IAGI3D,EAHA6D,EAAIC,OAAOJ,GACXK,EAAMF,EAAEtD,SAAW,EACnByD,EAAI,EAGR,GAAyB,IAArBC,UAAU1D,OACVP,EAAQiE,UAAU,OACf,CACH,KAAOD,EAAID,KAASC,KAAKH,IACrBG,IAGJ,GAAIA,GAAKD,EACL,MAAM,IAAIH,UAAU,+CAGxB5D,EAAQ6D,EAAEG,IACd,CACA,KAAOA,EAAID,EAAKC,IACRA,KAAKH,IACL7D,EAAQ2D,EAAS3D,EAAO6D,EAAEG,GAAIA,EAAGH,IAGzC,OAAO7D,CACX,EAMAkE,WAAY,SAAUC,GAClB,IAAIC,EAAQD,EAAE3B,WAAWC,MAAM,KAE/B,OAAO2B,EAAM7D,OAAS,EAAI,EAAI2B,KAAKiB,IAAI,GAAIiB,EAAM,GAAG7D,OACxD,EAMA8D,iBAAkB,WAGd,OAFWC,MAAMC,UAAU3B,MAAM4B,KAAKP,WAE1BR,QAAO,SAASgB,EAAOC,GAC/B,IAAIC,EAAK9F,EAAEqF,WAAWQ,GACtB,OAAOD,EAAQE,EAAKF,EAAQE,CAChC,GAAG,EACP,EAOAjC,QAAS,SAAS1C,EAAO4E,EAAa3D,EAAkB4D,GACpD,IAEIC,EACAC,EACAC,EACAxD,EALAyD,EAAajF,EAAMwC,WAAWC,MAAM,KACpCyC,EAAcN,GAAeC,GAAa,GAuB9C,OAfEC,EADwB,IAAtBG,EAAW1E,OACM2B,KAAKkB,IAAIlB,KAAKiD,IAAIF,EAAW,GAAG1E,OAAQ2E,GAAcN,GAEtDM,EAGrBF,EAAQ9C,KAAKiB,IAAI,GAAI2B,GAGrBtD,GAAUP,EAAiBjB,EAAQ,KAAO8E,GAAoBE,GAAOtC,QAAQoC,GAEzED,EAAYD,EAAcE,IAC1BC,EAAkB,IAAI1C,OAAO,YAAcwC,GAAaD,EAAcE,IAAqB,MAC3FtD,EAASA,EAAOlB,QAAQyE,EAAiB,KAGtCvD,CACX,GAIJ5C,EAAQa,QAAUA,EAGlBb,EAAQK,QAAUA,EAGlBL,EAAQM,QAAUA,EAKlBN,EAAQ8C,OAAS,SAAS0D,GAKtB,OAJIA,IACA3F,EAAQL,cAAgBgG,EAAIC,eAGzB5F,EAAQL,aACnB,EAKAR,EAAQ0G,WAAa,SAASF,GAC1B,IAAKA,EACD,OAAOlG,EAAQO,EAAQL,eAK3B,GAFAgG,EAAMA,EAAIC,eAELnG,EAAQkG,GACT,MAAM,IAAIG,MAAM,oBAAsBH,GAG1C,OAAOlG,EAAQkG,EACnB,EAEAxG,EAAQ4G,MAAQ,WACZ,IAAK,IAAIC,KAAYtG,EACjBM,EAAQgG,GAAYtG,EAASsG,EAErC,EAEA7G,EAAQS,WAAa,SAAS2B,GAC1BvB,EAAQJ,WAAgC,iBAAb,EAAwB2B,EAAS,IAChE,EAEApC,EAAQU,WAAa,SAAU0B,GAC3BvB,EAAQH,WAAgC,iBAAb,EAAwB0B,EAAS,IAChE,EAEApC,EAAQW,cAAgB,SAASyB,GAC7BvB,EAAQF,cAAmC,iBAAb,EAAwByB,EAAS,KACnE,EAEApC,EAAQ8G,SAAW,SAASC,EAAMC,EAAM5E,GAGpC,GAFA4E,EAAOA,EAAKP,cAERxF,KAAK8F,EAAO,KAAKC,GACjB,MAAM,IAAIhC,UAAUgC,EAAO,IAAMD,EAAO,wBAK5C,OAFA9F,KAAK8F,EAAO,KAAKC,GAAQ5E,EAElBA,CACX,EAGApC,EAAQiH,SAAW,SAASC,EAAKC,GAC7B,IAAIC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAf,EACAgB,EAeJ,GAZmB,iBAARR,IACPA,GAAO,GAEHS,QAAQC,MACRD,QAAQC,KAAK,6DAA8DV,KAKnFA,EAAMA,EAAIW,QAGA/F,MAAM,SACZ,OAAO,EAIX,GAAY,KAARoF,EACA,OAAO,EAIX,IAEIR,EAAa1G,EAAQ0G,WAAWS,EAGpC,CAFE,MAAOW,GACLpB,EAAa1G,EAAQ0G,WAAW1G,EAAQ8C,SAC5C,CAcA,OAXAwE,EAAcZ,EAAWrC,SAASC,OAClCkD,EAAWd,EAAWhD,cACtB0D,EAAcV,EAAW3C,WAAW7D,QAEhCmH,EADoC,MAApCX,EAAW3C,WAAWpB,UACP,MAEA+D,EAAW3C,WAAWpB,YAK5B,QADb+E,EAAOR,EAAIpF,MAAM,cAEboF,EAAMA,EAAIa,OAAO,GACbL,EAAK,KAAOJ,IAOP,QADbI,EAAOR,EAAIpF,MAAM,cAEboF,EAAMA,EAAIlD,MAAM,GAAI,GAChB0D,EAAK,KAAOF,EAAS7D,UAAY+D,EAAK,KAAOF,EAASpE,SAAWsE,EAAK,KAAOF,EAASrE,SAAWuE,EAAK,KAAOF,EAAStE,YAK9HuE,EAAiB,IAAIhE,OAAO4D,EAAe,OAEtCH,EAAIpF,MAAM,cACXyF,EAAYL,EAAIrD,MAAMuD,IACRzF,OAAS,IAGf4F,EAAU5F,OAAS,GACP4F,EAAU,GAAGzF,MAAM,cAAiByF,EAAU,GAAGzF,MAAM2F,GAEvC,IAAxBF,EAAU,GAAG5F,QACD4F,EAAU,GAAGzF,MAAM,UAAayF,EAAU,GAAGzF,MAAM2F,KAAsBF,EAAU,GAAGzF,MAAM,UAE5FyF,EAAU,GAAGzF,MAAM,cAAiByF,EAAU,GAAGzF,MAAM2F,KAAsBF,EAAU,GAAGzF,MAAM,WAOhI,EAOA9B,EAAQgI,GAAKlH,EAAQ6E,UAAY,CAC7BsC,MAAO,WACH,OAAOjI,EAAQiB,KACnB,EACAmB,OAAQ,SAAS8F,EAAa7F,GAC1B,IAEIhB,EACAuB,EACAuF,EAJA/G,EAAQH,KAAKE,OACbiB,EAAS8F,GAAerH,EAAQF,cASpC,GAHA0B,EAAmBA,GAAoBiB,KAAK8E,MAG9B,IAAVhH,GAAsC,OAAvBP,EAAQJ,WACvBmC,EAAS/B,EAAQJ,gBACd,GAAc,OAAVW,GAAyC,OAAvBP,EAAQH,WACjCkC,EAAS/B,EAAQH,eACd,CACH,IAAKW,KAAQhB,EACT,GAAI+B,EAAON,MAAMzB,EAAQgB,GAAMO,QAAQQ,QAAS,CAC5C+F,EAAiB9H,EAAQgB,GAAMe,OAE/B,KACJ,CAKJQ,GAFAuF,EAAiBA,GAAkBnI,EAAQC,EAAEkC,gBAErBf,EAAOgB,EAAQC,EAC3C,CAEA,OAAOO,CACX,EACAxB,MAAO,WACH,OAAOH,KAAKE,MAChB,EACAJ,MAAO,WACH,OAAOE,KAAKC,MAChB,EACAmH,IAAK,SAASjH,GAGV,OAFAH,KAAKE,OAASa,OAAOZ,GAEdH,IACX,EACAqH,IAAK,SAASlH,GACV,IAAImH,EAAatI,EAAEwF,iBAAiBG,KAAK,KAAM3E,KAAKE,OAAQC,GAQ5D,OAFAH,KAAKE,OAASlB,EAAE4E,OAAO,CAAC5D,KAAKE,OAAQC,IAJrC,SAAeyE,EAAO2C,EAAMC,EAAOC,GAC/B,OAAO7C,EAAQvC,KAAK8E,MAAMG,EAAaC,EAC3C,GAEoD,GAAKD,EAElDtH,IACX,EACA0H,SAAU,SAASvH,GACf,IAAImH,EAAatI,EAAEwF,iBAAiBG,KAAK,KAAM3E,KAAKE,OAAQC,GAQ5D,OAFAH,KAAKE,OAASlB,EAAE4E,OAAO,CAACzD,IAJxB,SAAeyE,EAAO2C,EAAMC,EAAOC,GAC/B,OAAO7C,EAAQvC,KAAK8E,MAAMG,EAAaC,EAC3C,GAEuClF,KAAK8E,MAAMnH,KAAKE,OAASoH,IAAeA,EAExEtH,IACX,EACA2H,SAAU,SAASxH,GAQf,OAFAH,KAAKE,OAASlB,EAAE4E,OAAO,CAAC5D,KAAKE,OAAQC,IALrC,SAAeyE,EAAO2C,EAAMC,EAAOC,GAC/B,IAAIH,EAAatI,EAAEwF,iBAAiBI,EAAO2C,GAC3C,OAAOlF,KAAK8E,MAAMvC,EAAQ0C,GAAcjF,KAAK8E,MAAMI,EAAOD,GAAcjF,KAAK8E,MAAMG,EAAaA,EACpG,GAEoD,GAE7CtH,IACX,EACA4H,OAAQ,SAASzH,GAQb,OAFAH,KAAKE,OAASlB,EAAE4E,OAAO,CAAC5D,KAAKE,OAAQC,IALrC,SAAeyE,EAAO2C,EAAMC,EAAOC,GAC/B,IAAIH,EAAatI,EAAEwF,iBAAiBI,EAAO2C,GAC3C,OAAOlF,KAAK8E,MAAMvC,EAAQ0C,GAAcjF,KAAK8E,MAAMI,EAAOD,EAC9D,IAIOtH,IACX,EACA6H,WAAY,SAAS1H,GACjB,OAAOkC,KAAKf,IAAIvC,EAAQiB,KAAKE,QAAQwH,SAASvH,GAAOA,QACzD,GAOJpB,EAAQ8G,SAAS,SAAU,KAAM,CAC7B/C,WAAY,CACRpB,UAAW,IACXzC,QAAS,KAEbwD,cAAe,CACXC,SAAU,IACVP,QAAS,IACTD,QAAS,IACTD,SAAU,KAEd6F,QAAS,SAAS/H,GACd,IAAIgI,EAAIhI,EAAS,GACjB,OAAkC,MAAvBA,EAAS,IAAM,IAAa,KAC5B,IAANgI,EAAW,KACL,IAANA,EAAW,KACL,IAANA,EAAW,KAAO,IAC3B,EACA3E,SAAU,CACNC,OAAQ,OAOZtE,EAAQ8G,SAAS,SAAU,MAAO,CAC9BlF,QAAS,CACLQ,OAAQ,QACRP,SAAU,SAEdO,OAAQ,SAAShB,EAAOgB,EAAQC,GAC5B,IACIO,EADAqG,EAAQjJ,EAAQC,EAAEsD,SAASnB,EAAQ,QAAU,IAAM,GAoBvD,OAjBAhB,GAAgB,IAGhBgB,EAASA,EAAOV,QAAQ,SAAU,IAElCkB,EAAS5C,EAAQC,EAAEkC,eAAef,EAAOgB,EAAQC,GAE7CrC,EAAQC,EAAEsD,SAASX,EAAQ,OAC3BA,EAASA,EAAOiB,MAAM,KAEfqF,QAAQ,EAAG,EAAGD,EAAQ,OAE7BrG,EAASA,EAAOuG,KAAK,KAErBvG,EAASA,EAASqG,EAAQ,MAGvBrG,CACX,EACAf,SAAU,SAASqC,GACf,QAA4C,KAAnClE,EAAQC,EAAE8B,eAAemC,IAAkBJ,QAAQ,GAChE,IAUJ3D,EAAS,CACLiJ,KAAM,KACNC,SAAU,CAAC,IAAK,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,QAQrEjJ,EAAgB,KAFZA,GAZAF,EAAU,CACVkJ,KAAM,IACNC,SAAU,CAAC,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,QAOvCA,SAASC,OAAOnJ,EAAOkJ,SAASE,QAAO,SAAUC,GACpE,OAAOtJ,EAAQmJ,SAAS7F,QAAQgG,GAAQ,CAC5C,KACgCL,KAAK,MAEDzH,QAAQ,IAAK,WAAa,IAElE1B,EAAQ8G,SAAS,SAAU,QAAS,CAChClF,QAAS,CACLQ,OAAQ,aACRP,SAAU,IAAI4B,OAAOrD,IAEzBgC,OAAQ,SAAShB,EAAOgB,EAAQC,GAC5B,IAGI+D,EACA5B,EACA+B,EAJAkD,EAAQzJ,EAAQC,EAAEsD,SAASnB,EAAQ,MAAQjC,EAASD,EACpDwJ,EAAS1J,EAAQC,EAAEsD,SAASnB,EAAQ,OAASpC,EAAQC,EAAEsD,SAASnB,EAAQ,OAAS,IAAM,GAQ3F,IAFAA,EAASA,EAAOV,QAAQ,SAAU,IAE7B0E,EAAQ,EAAGA,GAASqD,EAAMJ,SAAS1H,OAAQyE,IAI5C,GAHA5B,EAAMlB,KAAKiB,IAAIkF,EAAML,KAAMhD,GAC3BG,EAAMjD,KAAKiB,IAAIkF,EAAML,KAAMhD,EAAQ,GAErB,OAAVhF,GAA4B,IAAVA,GAAeA,GAASoD,GAAOpD,EAAQmF,EAAK,CAC9DmD,GAAUD,EAAMJ,SAASjD,GAErB5B,EAAM,IACNpD,GAAgBoD,GAGpB,KACJ,CAKJ,OAFSxE,EAAQC,EAAEkC,eAAef,EAAOgB,EAAQC,GAEjCqH,CACpB,EACA7H,SAAU,SAASqC,GACf,IACIkC,EACAuD,EAFAvI,EAAQpB,EAAQC,EAAE8B,eAAemC,GAIrC,GAAI9C,EAAO,CACP,IAAKgF,EAAQlG,EAAQmJ,SAAS1H,OAAS,EAAGyE,GAAS,EAAGA,IAAS,CAC3D,GAAIpG,EAAQC,EAAEsD,SAASW,EAAQhE,EAAQmJ,SAASjD,IAAS,CACrDuD,EAAkBrG,KAAKiB,IAAIrE,EAAQkJ,KAAMhD,GAEzC,KACJ,CAEA,GAAIpG,EAAQC,EAAEsD,SAASW,EAAQ/D,EAAOkJ,SAASjD,IAAS,CACpDuD,EAAkBrG,KAAKiB,IAAIpE,EAAOiJ,KAAMhD,GAExC,KACJ,CACJ,CAEAhF,GAAUuI,GAAmB,CACjC,CAEA,OAAOvI,CACX,IAMApB,EAAQ8G,SAAS,SAAU,WAAY,CACvClF,QAAS,CACLQ,OAAQ,QAEZA,OAAQ,SAAShB,EAAOgB,EAAQC,GAC5B,IAKIO,EAEA9C,EAPAgD,EAAS9C,EAAQM,QAAQN,EAAQa,QAAQL,eACzCoJ,EAAU,CACNC,OAAQzH,EAAON,MAAM,wBAAwB,GAC7CgI,MAAO1H,EAAON,MAAM,wBAAwB,IAqBpD,IAdAM,EAASA,EAAOV,QAAQ,WAAY,IAGpCkB,EAAS5C,EAAQC,EAAEkC,eAAef,EAAOgB,EAAQC,GAG7CjB,GAAS,GACTwI,EAAQC,OAASD,EAAQC,OAAOnI,QAAQ,SAAU,IAClDkI,EAAQE,MAAQF,EAAQE,MAAMpI,QAAQ,SAAU,KACzCN,EAAQ,IAAOpB,EAAQC,EAAEsD,SAASqG,EAAQC,OAAQ,OAAS7J,EAAQC,EAAEsD,SAASqG,EAAQC,OAAQ,OACrGD,EAAQC,OAAS,IAAMD,EAAQC,QAI9B/J,EAAI,EAAGA,EAAI8J,EAAQC,OAAOlI,OAAQ7B,IAGnC,OAFS8J,EAAQC,OAAO/J,IAGpB,IAAK,IACD8C,EAAS5C,EAAQC,EAAEyE,OAAO9B,EAAQE,EAAOuB,SAASC,OAAQxE,GAC1D,MACJ,IAAK,IACD8C,EAAS5C,EAAQC,EAAEyE,OAAO9B,EAAQ,IAAK9C,EAAIgD,EAAOuB,SAASC,OAAO3C,OAAS,GAMvF,IAAK7B,EAAI8J,EAAQE,MAAMnI,OAAS,EAAG7B,GAAK,EAAGA,IAGvC,OAFS8J,EAAQE,MAAMhK,IAGnB,IAAK,IACD8C,EAAS9C,IAAM8J,EAAQE,MAAMnI,OAAS,EAAIiB,EAASE,EAAOuB,SAASC,OAAStE,EAAQC,EAAEyE,OAAO9B,EAAQE,EAAOuB,SAASC,SAAUsF,EAAQE,MAAMnI,QAAU,EAAI7B,KAC3J,MACJ,IAAK,IACD8C,EAAS9C,IAAM8J,EAAQE,MAAMnI,OAAS,EAAIiB,EAAS,IAAM5C,EAAQC,EAAEyE,OAAO9B,EAAQ,MAAOgH,EAAQE,MAAMnI,QAAU,EAAI7B,GAAKgD,EAAOuB,SAASC,OAAO3C,OAAS,IAMtK,OAAOiB,CACX,IAMA5C,EAAQ8G,SAAS,SAAU,cAAe,CAC1ClF,QAAS,CACLQ,OAAQ,WACRP,SAAU,YAEdO,OAAQ,SAAShB,EAAOgB,EAAQC,GAC5B,IAEImD,GAD+B,iBAAVpE,GAAuBpB,EAAQC,EAAEwB,MAAML,GAAiC,OAAxBA,EAAM2I,iBACvDlG,MAAM,KAM9B,OAJAzB,EAASA,EAAOV,QAAQ,eAAgB,IAE/B1B,EAAQC,EAAEkC,eAAeH,OAAOwD,EAAM,IAAKpD,EAAQC,GAE5C,IAAMmD,EAAM,EAChC,EACA3D,SAAU,SAASqC,GACf,IAAIsB,EAAQxF,EAAQC,EAAEsD,SAASW,EAAQ,MAAQA,EAAOL,MAAM,MAAQK,EAAOL,MAAM,MAC7EzC,EAAQY,OAAOwD,EAAM,IACrBY,EAAQpE,OAAOwD,EAAM,IAUzB,OARAY,EAAQpG,EAAQC,EAAEsD,SAASW,EAAQ,MAAQkC,IAAU,EAAIA,EAQlDpG,EAAQC,EAAE4E,OAAO,CAACzD,EAAOkC,KAAKiB,IAAI,GAAI6B,KAN7C,SAAeP,EAAO2C,EAAMC,EAAOC,GAC/B,IAAIH,EAAavI,EAAQC,EAAEwF,iBAAiBI,EAAO2C,GAEnD,OADW3C,EAAQ0C,GAAeC,EAAOD,IAAeA,EAAaA,EAEzE,GAE6D,EACjE,IAMAvI,EAAQ8G,SAAS,SAAU,UAAW,CACtClF,QAAS,CACLQ,OAAQ,OAEZA,OAAQ,SAAShB,EAAOgB,EAAQC,GAC5B,IAAIS,EAAS9C,EAAQM,QAAQN,EAAQa,QAAQL,eAEzCuI,EAAU/I,EAAQC,EAAEsD,SAASnB,EAAQ,MAAQ,IAAM,GASvD,OANAA,EAASA,EAAOV,QAAQ,OAAQ,IAEhCqH,GAAWjG,EAAOiG,QAAQ3H,GAEjBpB,EAAQC,EAAEkC,eAAef,EAAOgB,EAAQC,GAEjC0G,CACpB,IAMA/I,EAAQ8G,SAAS,SAAU,aAAc,CACzClF,QAAS,CACLQ,OAAQ,MACRP,SAAU,OAEdO,OAAQ,SAAShB,EAAOgB,EAAQC,GAC5B,IACIO,EADAqG,EAAQjJ,EAAQC,EAAEsD,SAASnB,EAAQ,MAAQ,IAAM,GAsBrD,OAnBIpC,EAAQa,QAAQD,oBAChBQ,GAAgB,KAIpBgB,EAASA,EAAOV,QAAQ,QAAS,IAEjCkB,EAAS5C,EAAQC,EAAEkC,eAAef,EAAOgB,EAAQC,GAE7CrC,EAAQC,EAAEsD,SAASX,EAAQ,OAC3BA,EAASA,EAAOiB,MAAM,KAEfqF,QAAQ,EAAG,EAAGD,EAAQ,KAE7BrG,EAASA,EAAOuG,KAAK,KAErBvG,EAASA,EAASqG,EAAQ,IAGvBrG,CACX,EACAf,SAAU,SAASqC,GACf,IAAIlD,EAAShB,EAAQC,EAAE8B,eAAemC,GACtC,OAAIlE,EAAQa,QAAQD,kBACA,IAATI,EAEJA,CACX,IAMAhB,EAAQ8G,SAAS,SAAU,OAAQ,CACnClF,QAAS,CACLQ,OAAQ,MACRP,SAAU,OAEdO,OAAQ,SAAShB,EAAOgB,EAAQC,GAC5B,IAAI2H,EAAQ1G,KAAK2G,MAAM7I,EAAQ,GAAK,IAChC8I,EAAU5G,KAAK2G,OAAO7I,EAAiB,GAAR4I,EAAa,IAAO,IACnDG,EAAU7G,KAAK8E,MAAMhH,EAAiB,GAAR4I,EAAa,GAAiB,GAAVE,GAEtD,OAAOF,EAAQ,KAAOE,EAAU,GAAK,IAAMA,EAAUA,GAAW,KAAOC,EAAU,GAAK,IAAMA,EAAUA,EAC1G,EACAtI,SAAU,SAASqC,GACf,IAAIkG,EAAYlG,EAAOL,MAAM,KACzBsG,EAAU,EAgBd,OAbyB,IAArBC,EAAUzI,QAEVwI,GAA4C,GAAvBnI,OAAOoI,EAAU,IAAW,GAEjDD,GAA4C,GAAvBnI,OAAOoI,EAAU,IAEtCD,GAAoBnI,OAAOoI,EAAU,KACT,IAArBA,EAAUzI,SAEjBwI,GAA4C,GAAvBnI,OAAOoI,EAAU,IAEtCD,GAAoBnI,OAAOoI,EAAU,KAElCpI,OAAOmI,EAClB,IAIDnK,CACP,OA1+BsB,kQCVtB,gBACA,aAOMqK,EAAgB,KAChBC,EAAmB,WAkBzB,MAAaC,UACD,EAAAC,UAERC,YAAYC,EAA6BC,GACrCC,MAAMF,EAAMC,EAChB,CAEUE,SAASC,eACf,MAAMJ,EAAOzJ,KAAKyJ,KACZC,EAAO1J,KAAK0J,KAClB,GAAI,aAAcD,GACVA,EAAKK,WAAaD,EAClB,MAAO,CACH5I,IAAK,KACL8I,IAAKL,EAAKI,UACJ,IAAAE,KAAIN,EAAKI,SACP,CACIvG,IAAM,QAASkG,EAAS,IAAc,QAAR,EAAAA,EAAKlG,WAAG,QAAI,IAAO,GACjD+B,IAAM,QAASmE,EAAS,IAAc,QAAR,EAAAA,EAAKnE,WAAG,QAAI,IAAO,GACjDzD,OAAS,WAAY4H,EACfA,EAAK5H,OACLuH,EACNjI,OAAS,WAAYsI,EACfA,EAAKtI,OACLkI,IA/ClB,YAqDZ,GAAIQ,EAAK,CACL,UAAQhI,OAAkB,QAAX,EAAA4H,EAAK5H,cAAM,QAAIuH,GAC9B,MAAMa,GAAI,aAAQJ,GAClB,IAAIE,GAAe,EASnB,GARkB,OAAdE,EAAE9J,UACF4J,GAAM,GAEN,WAAYN,GACRA,EAAKS,QAAWL,IAAQ7J,KAAKmK,SAASF,GAAGJ,MACzCE,GAAM,GAGVA,EAAK,CACL,MAAMK,EAAqB,OAAdH,EAAE9J,QAAoB8J,GAAI,aAAQ,SAC/C,MAAO,CACHhJ,IAAoB,OAAdgJ,EAAE9J,QAAoB8J,EAAI,KAChCF,IAAKL,EAAKW,gBACJ,IAAAL,KAAIN,EAAKW,eACP,CACID,IAA2B,QAAtB,EAAApK,KAAKmK,SAASC,GAAKP,WAAG,QAAI,GAC/BhI,OAAS,WAAY4H,EACfA,EAAK5H,OACLuH,EACNjI,OAAS,WAAYsI,EACfA,EAAKtI,OACLkI,IA5Eb,kBAiFb,MAAO,CAAEpI,IAAKgJ,EAAGF,IAAK,IAEtB,MAAO,CAAE9I,IAAK,KAAM8I,IAAK,GAEjC,CAEUO,SAASrJ,WACf,GAAIA,QACA,MAAO,GAKX,MAAMwI,EAAOzJ,KAAKyJ,KACZC,EAAO1J,KAAK0J,KAClB,IAAIK,GAAe,EAWnB,MAVI,QAASN,GACLxI,EAAId,QAAWsJ,EAAKnE,MACpByE,GAAM,GAGV,QAASN,GACLxI,EAAId,QAAWsJ,EAAKlG,MACpBwG,GAAM,GAGVA,EACOL,EAAKa,cACN,IAAAP,KAAIN,EAAKa,aACP,CACIhH,IAAM,QAASkG,EAAS,IAAc,QAAR,EAAAA,EAAKlG,WAAG,QAAI,IAAO,GACjD+B,IAAM,QAASmE,EAAS,IAAc,QAAR,EAAAA,EAAKnE,WAAG,QAAI,IAAO,GACjDzD,OAAS,WAAY4H,EACfA,EAAK5H,OACLuH,EACNjI,OAAS,WAAYsI,EACfA,EAAKtI,OACLkI,IAvHR,eA2HP,EACX,CAEUc,SAASlJ,EACAE,WAKf,OADA,UAAQU,OAAuB,QAAhB,EAAA7B,KAAKyJ,KAAK5H,cAAM,QAAIuH,GAC5B,CACHS,IAAK,MAAC5I,EACA,GACAA,EAAIE,OAAOA,IAES,QAAhB,EAAAnB,KAAKyJ,KAAKtI,cAAM,QAAIkI,IAC9BU,IAAK,GAEb,EAtHJ,qBA0HA,MAAaS,UACD,EAAAjB,UAIRC,YAAYC,EAA6BC,GACrCC,MAAMF,EAAMC,GACZ1J,KAAKyK,GAAK,IAAInB,EAAiBG,EAAMC,EACzC,CAEUE,SAASC,GACf,MAAMa,EAAO1K,KAAKyK,GAAWb,SAASC,GAItC,OAHIa,EAAIzJ,MACJyJ,EAAIzJ,IAAMyJ,EAAIzJ,IAAId,SAEfuK,CACX,CAEUJ,SAASrJ,GACf,MAAM0J,EAAsB,iBAAR1J,GAAmB,aAAQA,GAAOA,EACtD,OAAQjB,KAAKyK,GAAWH,SAASK,EACrC,CAEUR,SAASlJ,EACAE,GACf,MAAMwJ,EAAsB,iBAAR1J,GAAmB,aAAQA,GAAOA,EACtD,OAAQjB,KAAKyK,GAAWN,SAASQ,EAAMxJ,EAC3C,EA3BJ,mSCrJA,MAAMyJ,EAAc,WACdC,EAAgB,eAChBC,EAAmB,iBAKZ,EAAAC,WAAa,wIAGb,EAAAC,UAAY,+EAGZ,EAAAC,QAAU,iBAGV,EAAAC,eAAiB,+CAE9B,MAAsB3B,EASlBC,YAAYC,EAAaC,GAJhB,KAAAG,IAAqB,KACrB,KAAAE,IAAqB,KACrB,KAAA9I,IAAmB,KAGxBjB,KAAKyJ,KAAOA,QAAAA,EAAQ,CAAC,EACrBzJ,KAAK0J,KAAOA,QAAAA,EAAQ,CAAC,CACzB,CASA1D,SAAS7F,GACL,GAAqB,iBAAVA,GAAP,MAA6BA,EAAuC,CACpE,MAAMgL,EAAIhL,EACTH,KAAK6J,IAAcsB,EACpB,MAAMC,EAAMpL,KAAK4J,SAASuB,GAE1B,GADCnL,KAAKiB,IAAcmK,EAAInK,IACpBmK,EAAIrB,IAEJ,OADC/J,KAAK+J,IAAcqB,EAAIrB,IACjB,CACHF,IAAKsB,QAAAA,EAAK,GACVlK,IAAKmK,EAAInK,IACT8I,IAAKqB,EAAIrB,KAGjB,MAAMA,EAAM/J,KAAKsK,SAASc,EAAInK,KAE9B,OADCjB,KAAK+J,IAAcA,EACb,CACHF,IAAKsB,QAAAA,EAAK,GACVlK,IAAKmK,EAAInK,IACT8I,OAED,CACF/J,KAAK6J,IAAc,MAAC1J,EAAyC,KAAQ,GAAKA,EAC3E,MAAM4J,EAAM/J,KAAKsK,SAASnK,GAE1B,OADCH,KAAK+J,IAAcA,EACb,CACHF,IAAK7J,KAAK6J,IACV5I,IAAKd,EACL4J,OAGZ,CAEA5I,OAAOF,EAAmBE,SAEtB,MAAMkK,EAAMrL,KAAKmK,SAASlJ,EAAKE,GAC/B,MAAO,CACH0I,IAAY,QAAP,EAAAwB,EAAIxB,WAAG,QAAI,GAEhBE,IAAKsB,EAAItB,IAEjB,EAIJ,SAAgBC,EAAIsB,EAAcC,GAC9B,OAAOtH,OAAOuH,KAAKD,GACdE,KAAItH,GAAK,CAACA,EAAGoH,EAAKpH,MAClBP,QAAO,CAACI,EAAG0H,IACR1H,EAAEvD,QAAQ,IAAI+B,OAAO,SAASkJ,EAAE,WAAY,KAAM1I,OAAO0I,EAAE,MAAMJ,EAC7E,CAvEA,cAkEA,QAqBA,gCACY/B,EAERC,YAAYC,EAA4BC,GACpCC,MAAMF,EAAMC,EAChB,CAEUE,SAASC,GACf,MAAMJ,EAAOzJ,KAAKyJ,KACZC,EAAO1J,KAAK0J,KAClB,MAAI,aAAcD,GACVA,EAAKK,WAAaD,EACX,CACH5I,IAAK,KACL8I,IAAKL,EAAKI,SACJE,EAAIN,EAAKI,SAAQ,+BAERL,EAAK8B,MAAI,CACZ3L,QAAU,YAAa6J,EACjBA,EAAK7J,QAASsI,KAAK,MACnB,MAEZ0C,GAIX,CACH3J,SAAa0K,IAAR9B,EAAoB,KAAOA,EAChCE,IAAK,GAEb,CAEUO,SAASrJ,GACf,GAAIA,QACA,MAAO,GAEX,MAAMwI,EAAOzJ,KAAKyJ,KACZC,EAAO1J,KAAK0J,KAClB,MAAI,YAAaD,GACTxI,IAAuC,IAAhCwI,EAAK7J,QAAS2C,QAAQtB,GACtByI,EAAKkC,eACN5B,EAAIN,EAAKkC,eAAc,+BAEdnC,EAAK8B,MAAI,CACZM,OAAgB,OAAR5K,EAAe,GAAKA,EAC5BrB,QAAU,YAAa6J,EACjBA,EAAK7J,QAASsI,KAAK,MACnB,MArJT,iBA0JV,EACX,CAEUiC,SAASlJ,EACAE,GACf,MAAO,CAAE0I,IAAK5I,QAAAA,EAAO,GAAI8I,IAAK,GAClC,GAiBJ,gCACYR,EAERC,YAAYC,EAA4BC,GACpCC,MAAMF,EAAMC,EAChB,CAEUE,SAASC,eACf,MAAMJ,EAAOzJ,KAAKyJ,KACZC,EAAO1J,KAAK0J,KAClB,MAAI,aAAcD,GACVA,EAAKK,WAAaD,EACX,CACH5I,IAAK,KACL8I,IAAKL,EAAKI,SACJE,EAAIN,EAAKI,SAAQ,+BAERL,EAAK8B,MAAI,CACZhI,IAAM,QAASkG,EAAS,IAAc,QAAR,EAAAA,EAAKlG,WAAG,QAAI,IAAO,GACjD+B,IAAM,QAASmE,EAAS,IAAc,QAAR,EAAAA,EAAKnE,WAAG,QAAI,IAAO,GACjDhF,OAAS,WAAYmJ,EACd,IAAiB,QAAX,EAAAA,EAAKnJ,cAAM,QAAI,IACtB,MAEZsK,GAIdf,EACI,WAAYJ,IACPA,EAAKnJ,OAAQwL,KAAKjC,GACZ,CACH5I,IAAK,KACL8I,IAAKL,EAAKW,eACJL,EAAIN,EAAKW,eAAc,+BAEdZ,EAAK8B,MAAI,CACZjL,OAAS,WAAYmJ,EACd,IAAiB,QAAX,EAAAA,EAAKnJ,cAAM,QAAI,IACtB,MAEZwK,GAIX,CAAE7J,IAAK4I,EAAME,IAAK,IAElB,CAAE9I,IAAK,KAAM8I,IAAK,GAEjC,CAEUO,SAASrJ,WACf,GAAIA,QACA,MAAO,GAEX,MAAMwI,EAAOzJ,KAAKyJ,KACZC,EAAO1J,KAAK0J,KAClB,IAAIK,GAAe,EAgBnB,MAfI,QAASN,GACLxI,EAAIP,OAAS+I,EAAKnE,MAClByE,GAAM,GAGV,QAASN,GACLxI,EAAIP,OAAS+I,EAAKlG,MAClBwG,GAAM,GAGT,QAASN,GAAU,QAASA,GACzBxI,EAAIP,OAAS+I,EAAKnE,KAAQrE,EAAIP,OAAS+I,EAAKlG,MAC5CwG,GAAM,GAGVA,EACOL,EAAKa,aACNP,EAAIN,EAAKa,aAAY,+BAEZd,EAAK8B,MAAI,CACZhI,IAAM,QAASkG,EAAS,IAAc,QAAR,EAAAA,EAAKlG,WAAG,QAAI,IAAO,GACjD+B,IAAM,QAASmE,EAAS,IAAc,QAAR,EAAAA,EAAKnE,WAAG,QAAI,IAAO,MAEvDuF,EAEH,EACX,CAEUV,SAASlJ,EACAE,GACf,MAAO,CAAE0I,IAAK5I,QAAAA,EAAO,GAAI8I,IAAK,GAClC,GAkBJ,gCACYR,EAERC,YAAYC,EAA4BC,GACpCC,MAAMF,EAAMC,EAChB,CAEUE,SAASC,aACf,MAAMJ,EAAOzJ,KAAKyJ,KACZC,EAAO1J,KAAK0J,KAClB,GAAI,aAAcD,GACVA,EAAKK,WAAaD,EAClB,MAAO,CACH5I,IAAK,KACL8I,IAAKL,EAAKI,SACJE,EAAIN,EAAKI,SAAQ,+BAERL,EAAK8B,MAAI,CACZhI,IAAM,QAASkG,EAAS,IAAc,QAAR,EAAAA,EAAKlG,WAAG,QAAI,IAAO,GACjD+B,IAAM,QAASmE,EAAS,IAAc,QAAR,EAAAA,EAAKnE,WAAG,QAAI,IAAO,MAEvDsF,GAIlB,GAAIf,EAAK,CACL,MAAMI,EAAIlJ,OAAO8I,GACjB,IAAIE,GAAe,EAOnB,GANIvJ,MAAMyJ,KACNF,GAAM,GAENN,EAAKS,QAAWL,IAAQ7J,KAAKmK,SAASF,GAAGJ,MACzCE,GAAM,GAENA,EAAK,CACL,MAAMK,EAAM5J,MAAMyJ,GAAK,QAAUA,EACjC,MAAO,CACHhJ,IAAKT,MAAMyJ,GAAK,KAAOA,EACvBF,IAAKL,EAAKW,eACJL,EAAIN,EAAKW,eAAc,+BAEdZ,EAAK8B,MAAI,CACZnB,IAA2B,QAAtB,EAAApK,KAAKmK,SAASC,GAAKP,WAAG,QAAI,MAErCiB,GAGd,MAAO,CAAE7J,IAAKgJ,EAAGF,IAAK,IAEtB,MAAO,CAAE9I,IAAK,KAAM8I,IAAK,GAEjC,CAEUO,SAASrJ,WACf,GAAIA,QACA,MAAO,GAEX,MAAMwI,EAAOzJ,KAAKyJ,KACZC,EAAO1J,KAAK0J,KAClB,IAAIK,GAAe,EAWnB,MAVI,QAASN,GACLxI,EAAMwI,EAAKnE,MACXyE,GAAM,GAGV,QAASN,GACLxI,EAAMwI,EAAKlG,MACXwG,GAAM,GAGVA,EACOL,EAAKa,aACNP,EAAIN,EAAKa,aAAY,+BAEZd,EAAK8B,MAAI,CACZhI,IAAM,QAASkG,EAAS,IAAc,QAAR,EAAAA,EAAKlG,WAAG,QAAI,IAAO,GACjD+B,IAAM,QAASmE,EAAS,IAAc,QAAR,EAAAA,EAAKnE,WAAG,QAAI,IAAO,MAEvDuF,EAEH,EACX,CAEUV,SAASlJ,EACAE,GACf,IAAI0I,EAUJ,OARIA,EADA5I,QACM,GAEF,aAAcjB,KAAKyJ,KACbxI,EAAI4B,QAAQ7C,KAAKyJ,KAAKsC,UAEtB/I,OAAO/B,GAGd,CACH4I,MACAE,IAAK,GAEb,GAoBJ,MAAMiC,EAAsBC,GAAeA,EAAKC,iBAC1CC,EAA0BF,GAAeA,EAAKG,qBAE9CC,EAAmBJ,GAAeA,EAAKK,cACvCC,EAAuBN,GAAe,IAAIO,KAAKP,EAAKQ,gBAAgBH,cAE1E,8BACY/C,EAIRC,YAAYC,EAA0BC,GAClCC,MAAMF,EAAMC,IACRD,aAAI,EAAJA,EAAMiD,KACN1M,KAAK2M,WAAYlD,aAAI,EAAJA,EAAMmD,UAAWL,EAAsBF,EAExDrM,KAAK2M,WAAYlD,aAAI,EAAJA,EAAMmD,UAAWT,EAAyBH,GAE3DvC,aAAI,EAAJA,EAAMmD,YAAYnD,aAAI,EAAJA,EAAMlG,OACxBkG,EAAKlG,IAAM,IAAIiJ,KAAK/C,EAAKlG,IAAIsJ,cAAepD,EAAKlG,IAAIuJ,WAAYrD,EAAKlG,IAAIwJ,aAE1EtD,aAAI,EAAJA,EAAMmD,YAAYnD,aAAI,EAAJA,EAAMnE,OACxBmE,EAAKnE,IAAM,IAAIkH,KAAK/C,EAAKnE,IAAIuH,cAAepD,EAAKnE,IAAIwH,WAAYrD,EAAKnE,IAAIyH,UAAY,GAE9F,CAEUnD,SAASC,SACf,MAAMJ,EAAOzJ,KAAKyJ,KACZC,EAAO1J,KAAK0J,KAClB,GAAI,aAAcD,GACVA,EAAKK,WAAaD,EAClB,MAAO,CACH5I,IAAK,KACL8I,IAAKL,EAAKI,SACJE,EAAIN,EAAKI,SAAQ,+BAERL,EAAK8B,MAAI,CACZhI,IAAM,QAASkG,GAAQA,EAAKlG,IAAOvD,KAAK2M,UAAUlD,EAAKlG,KAAO,GAC9D+B,IAAM,QAASmE,GAAQA,EAAKnE,IAAOtF,KAAK2M,UAAUlD,EAAKnE,KAAO,MAEpEsF,GAIlB,GAAIf,EAAK,CACL,MAAMmD,EAAKR,KAAKS,MAAMpD,GACtB,IAAI6B,EAAI,IAAIc,KAAKQ,GACbvD,EAAKmD,WACLlB,EAAI,IAAIc,KAAKd,EAAEmB,cAAenB,EAAEoB,WAAYpB,EAAEqB,YAElD,IAAIhD,GAAe,EAOnB,GANIvJ,MAAMwM,KACNjD,GAAM,GAKNA,EAAK,CACL,MAAMkC,EAAOzL,MAAMwM,GAAM,IAAIR,KAASd,EACtC,MAAO,CACHzK,IAAKT,MAAMwM,GAAM,KAAOtB,EACxB3B,IAAKL,EAAKW,eACJL,EAAIN,EAAKW,eAAc,+BAEdZ,EAAK8B,MAAI,CACZU,KAA6B,QAAvB,EAAAjM,KAAKmK,SAAS8B,GAAMpC,WAAG,QAAI,MAEvCiB,GAGd,MAAO,CAAE7J,IAAKyK,EAAG3B,IAAK,IAEtB,MAAO,CAAE9I,IAAK,KAAM8I,IAAK,GAEjC,CAEUO,SAASrJ,GACf,GAAIA,QACA,MAAO,GAEX,MAAMwI,EAAOzJ,KAAKyJ,KACZC,EAAO1J,KAAK0J,KAClB,IAAIK,GAAe,EAWnB,MAVI,QAASN,GACLA,EAAKnE,KAAOrE,EAAIiM,UAAYzD,EAAKnE,IAAI4H,YACrCnD,GAAM,GAGV,QAASN,GACLA,EAAKlG,KAAOtC,EAAMwI,EAAKlG,MACvBwG,GAAM,GAGVA,EACOL,EAAKa,aACNP,EAAIN,EAAKa,aAAY,+BAEZd,EAAK8B,MAAI,CACZhI,IAAM,QAASkG,GAAQA,EAAKlG,IAAOvD,KAAK2M,UAAUlD,EAAKlG,KAAO,GAC9D+B,IAAM,QAASmE,GAAQA,EAAKnE,IAAOtF,KAAK2M,UAAUlD,EAAKnE,KAAO,MAEpEuF,EAEH,EACX,CAEUV,SAASlJ,EACAE,GACf,MAAO,CACH0I,IAAK,MAAC5I,EAAqC,GAAKjB,KAAK2M,UAAU1L,GAC/D8I,IAAK,GAEb,GAcJ,iCACYR,EAERC,YAAYC,EAA6BC,GACrCC,MAAMF,EAAMC,EAChB,CAEUE,SAASC,GACf,MAAMJ,EAAOzJ,KAAKyJ,KACZC,EAAO1J,KAAK0J,KAClB,GAAI,aAAcD,GACVA,EAAKK,WAAaD,EAClB,MAAO,CACH5I,IAAK,KACL8I,IAAKL,EAAKI,SACJE,EAAIN,EAAKI,SAAQ,iBAERL,EAAK8B,OAEdX,GAIlB,IAAI7C,EACJ,OAAQ8B,GACJ,IAAK,OACL,IAAK,IACL,IAAK,KACL,IAAK,MACD9B,GAAI,EACJ,MACJ,QACIA,GAAI,EAEZ,MAAO,CAAE9G,IAAK8G,EAAGgC,IAAK,GAC1B,CAEUO,SAASrJ,SACf,GAAIA,QACA,MAAO,GAEX,MAAMwI,EAAOzJ,KAAKyJ,KACZC,EAAO1J,KAAK0J,KAClB,IAAIK,GAAM,EAMV,MALI,UAAWN,GACPxI,IAAQwI,EAAKtJ,QACb4J,GAAM,GAGVA,EACOL,EAAKyD,cACNnD,EAAIN,EAAKyD,cAAa,+BAEb1D,EAAK8B,MAAI,CACZpL,MAAQ,UAAWsJ,EAAS,IAAgB,QAAV,EAAAA,EAAKtJ,aAAK,QAAI,IAAO,MAtkBvD,gBA0kBT,EACX,CAEUgK,SAASlJ,EACAE,GACf,MAAO,CACH0I,IAAK,MAAC5I,EAAqC,GAAM,GAAKA,EACtD8I,IAAK,GAEb,GAiBJ,oCAEa,KAAAqD,WAAmC,CAAC,CA8DjD,CAtDIC,aAAaC,EAAmBC,GAE5B,OADAvN,KAAKoN,WAAWE,GAASC,EAClBvN,IACX,CAEAgG,SAASuF,GACL,MAAMb,EAAMzG,OAAOuH,KAAKxL,KAAKoN,YACxBxJ,QACG,CAAChF,EAAGuF,KACA,MAAMgH,EAAKI,EAAapH,GAClBqJ,EAAKxN,KAAKoN,WAAmBjJ,GAAG6B,SAASmF,GAK/C,OAJCvM,EAAEiL,IAAY1F,GAAKqJ,EAAE3D,IACrBjL,EAAEqC,IAAYkD,GAAKqJ,EAAEvM,IACrBrC,EAAEmL,IAAY5F,GAAKqJ,EAAEzD,IACtByD,EAAEzD,MAAQnL,EAAE6O,OAAQ,GACb7O,CAAC,GAEZ,CAAEiL,IAAK,CAAC,EAAG5I,IAAK,CAAC,EAAG8I,IAAK,CAAC,EAAG0D,OAAO,IAK5C,OAJCzN,KAAK6J,IAAca,EAAIb,IACvB7J,KAAKiB,IAAcyJ,EAAIzJ,IACvBjB,KAAK+J,IAAcW,EAAIX,IACvB/J,KAAKyN,MAAgB/C,EAAI+C,MACnBzN,IACX,CAEAmB,OAAOoK,GACH,MAAMb,EAAMzG,OAAOuH,KAAKxL,KAAKoN,YACxBxJ,QACG,CAAChF,EAAGuF,KACA,MAAMgH,EAAKI,EAAapH,GAClBqJ,EAAKxN,KAAKoN,WAAmBjJ,GAAGhD,OAAOgK,GAK7C,OAJCvM,EAAEiL,IAAY1F,GAAKqJ,EAAE3D,IACrBjL,EAAEqC,IAAYkD,GAAKgH,EACnBvM,EAAEmL,IAAY5F,GAAKqJ,EAAEzD,IACtByD,EAAEzD,MAAQnL,EAAE6O,OAAQ,GACb7O,CAAC,GAEZ,CAAEiL,IAAK,CAAC,EAAG5I,IAAK,CAAC,EAAG8I,IAAK,CAAC,EAAG0D,OAAO,IAK5C,OAJCzN,KAAK6J,IAAca,EAAIb,IACvB7J,KAAKiB,IAAcyJ,EAAIzJ,IACvBjB,KAAK+J,IAAcW,EAAIX,IACvB/J,KAAKyN,MAAgB/C,EAAI+C,MACnBzN,IACX,CAEAuL,OACI,MAAO,CACH1B,IAAK7J,KAAK6J,IACV5I,IAAKjB,KAAKiB,IACV8I,IAAK/J,KAAK+J,IACV0D,MAAOzN,KAAKyN,MAEpB,KCrqBAC,EAA2B,CAAC,EAGhC,SAASC,EAAoBC,GAE5B,IAAIC,EAAeH,EAAyBE,GAC5C,QAAqBjC,IAAjBkC,EACH,OAAOA,EAAarP,QAGrB,IAAIC,EAASiP,EAAyBE,GAAY,CAGjDpP,QAAS,CAAC,GAOX,OAHAsP,EAAoBF,GAAUjJ,KAAKlG,EAAOD,QAASC,EAAQA,EAAOD,QAASmP,GAGpElP,EAAOD,OACf,CCnB0BmP,CAAoB,YDF1CD","sources":["webpack://peryl/webpack/universalModuleDefinition","webpack://peryl/./node_modules/numeral/numeral.js","webpack://peryl/./src/validators-numeral.ts","webpack://peryl/./src/validators.ts","webpack://peryl/webpack/bootstrap","webpack://peryl/webpack/startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, function() {\nreturn ","/*! @preserve\n * numeral.js\n * version : 2.0.6\n * author : Adam Draper\n * license : MIT\n * http://adamwdraper.github.com/Numeral-js/\n */\n\n(function (global, factory) {\n if (typeof define === 'function' && define.amd) {\n define(factory);\n } else if (typeof module === 'object' && module.exports) {\n module.exports = factory();\n } else {\n global.numeral = factory();\n }\n}(this, function () {\n /************************************\n Variables\n ************************************/\n\n var numeral,\n _,\n VERSION = '2.0.6',\n formats = {},\n locales = {},\n defaults = {\n currentLocale: 'en',\n zeroFormat: null,\n nullFormat: null,\n defaultFormat: '0,0',\n scalePercentBy100: true\n },\n options = {\n currentLocale: defaults.currentLocale,\n zeroFormat: defaults.zeroFormat,\n nullFormat: defaults.nullFormat,\n defaultFormat: defaults.defaultFormat,\n scalePercentBy100: defaults.scalePercentBy100\n };\n\n\n /************************************\n Constructors\n ************************************/\n\n // Numeral prototype object\n function Numeral(input, number) {\n this._input = input;\n\n this._value = number;\n }\n\n numeral = function(input) {\n var value,\n kind,\n unformatFunction,\n regexp;\n\n if (numeral.isNumeral(input)) {\n value = input.value();\n } else if (input === 0 || typeof input === 'undefined') {\n value = 0;\n } else if (input === null || _.isNaN(input)) {\n value = null;\n } else if (typeof input === 'string') {\n if (options.zeroFormat && input === options.zeroFormat) {\n value = 0;\n } else if (options.nullFormat && input === options.nullFormat || !input.replace(/[^0-9]+/g, '').length) {\n value = null;\n } else {\n for (kind in formats) {\n regexp = typeof formats[kind].regexps.unformat === 'function' ? formats[kind].regexps.unformat() : formats[kind].regexps.unformat;\n\n if (regexp && input.match(regexp)) {\n unformatFunction = formats[kind].unformat;\n\n break;\n }\n }\n\n unformatFunction = unformatFunction || numeral._.stringToNumber;\n\n value = unformatFunction(input);\n }\n } else {\n value = Number(input)|| null;\n }\n\n return new Numeral(input, value);\n };\n\n // version number\n numeral.version = VERSION;\n\n // compare numeral object\n numeral.isNumeral = function(obj) {\n return obj instanceof Numeral;\n };\n\n // helper functions\n numeral._ = _ = {\n // formats numbers separators, decimals places, signs, abbreviations\n numberToFormat: function(value, format, roundingFunction) {\n var locale = locales[numeral.options.currentLocale],\n negP = false,\n optDec = false,\n leadingCount = 0,\n abbr = '',\n trillion = 1000000000000,\n billion = 1000000000,\n million = 1000000,\n thousand = 1000,\n decimal = '',\n neg = false,\n abbrForce, // force abbreviation\n abs,\n min,\n max,\n power,\n int,\n precision,\n signed,\n thousands,\n output;\n\n // make sure we never format a null value\n value = value || 0;\n\n abs = Math.abs(value);\n\n // see if we should use parentheses for negative number or if we should prefix with a sign\n // if both are present we default to parentheses\n if (numeral._.includes(format, '(')) {\n negP = true;\n format = format.replace(/[\\(|\\)]/g, '');\n } else if (numeral._.includes(format, '+') || numeral._.includes(format, '-')) {\n signed = numeral._.includes(format, '+') ? format.indexOf('+') : value < 0 ? format.indexOf('-') : -1;\n format = format.replace(/[\\+|\\-]/g, '');\n }\n\n // see if abbreviation is wanted\n if (numeral._.includes(format, 'a')) {\n abbrForce = format.match(/a(k|m|b|t)?/);\n\n abbrForce = abbrForce ? abbrForce[1] : false;\n\n // check for space before abbreviation\n if (numeral._.includes(format, ' a')) {\n abbr = ' ';\n }\n\n format = format.replace(new RegExp(abbr + 'a[kmbt]?'), '');\n\n if (abs >= trillion && !abbrForce || abbrForce === 't') {\n // trillion\n abbr += locale.abbreviations.trillion;\n value = value / trillion;\n } else if (abs < trillion && abs >= billion && !abbrForce || abbrForce === 'b') {\n // billion\n abbr += locale.abbreviations.billion;\n value = value / billion;\n } else if (abs < billion && abs >= million && !abbrForce || abbrForce === 'm') {\n // million\n abbr += locale.abbreviations.million;\n value = value / million;\n } else if (abs < million && abs >= thousand && !abbrForce || abbrForce === 'k') {\n // thousand\n abbr += locale.abbreviations.thousand;\n value = value / thousand;\n }\n }\n\n // check for optional decimals\n if (numeral._.includes(format, '[.]')) {\n optDec = true;\n format = format.replace('[.]', '.');\n }\n\n // break number and format\n int = value.toString().split('.')[0];\n precision = format.split('.')[1];\n thousands = format.indexOf(',');\n leadingCount = (format.split('.')[0].split(',')[0].match(/0/g) || []).length;\n\n if (precision) {\n if (numeral._.includes(precision, '[')) {\n precision = precision.replace(']', '');\n precision = precision.split('[');\n decimal = numeral._.toFixed(value, (precision[0].length + precision[1].length), roundingFunction, precision[1].length);\n } else {\n decimal = numeral._.toFixed(value, precision.length, roundingFunction);\n }\n\n int = decimal.split('.')[0];\n\n if (numeral._.includes(decimal, '.')) {\n decimal = locale.delimiters.decimal + decimal.split('.')[1];\n } else {\n decimal = '';\n }\n\n if (optDec && Number(decimal.slice(1)) === 0) {\n decimal = '';\n }\n } else {\n int = numeral._.toFixed(value, 0, roundingFunction);\n }\n\n // check abbreviation again after rounding\n if (abbr && !abbrForce && Number(int) >= 1000 && abbr !== locale.abbreviations.trillion) {\n int = String(Number(int) / 1000);\n\n switch (abbr) {\n case locale.abbreviations.thousand:\n abbr = locale.abbreviations.million;\n break;\n case locale.abbreviations.million:\n abbr = locale.abbreviations.billion;\n break;\n case locale.abbreviations.billion:\n abbr = locale.abbreviations.trillion;\n break;\n }\n }\n\n\n // format number\n if (numeral._.includes(int, '-')) {\n int = int.slice(1);\n neg = true;\n }\n\n if (int.length < leadingCount) {\n for (var i = leadingCount - int.length; i > 0; i--) {\n int = '0' + int;\n }\n }\n\n if (thousands > -1) {\n int = int.toString().replace(/(\\d)(?=(\\d{3})+(?!\\d))/g, '$1' + locale.delimiters.thousands);\n }\n\n if (format.indexOf('.') === 0) {\n int = '';\n }\n\n output = int + decimal + (abbr ? abbr : '');\n\n if (negP) {\n output = (negP && neg ? '(' : '') + output + (negP && neg ? ')' : '');\n } else {\n if (signed >= 0) {\n output = signed === 0 ? (neg ? '-' : '+') + output : output + (neg ? '-' : '+');\n } else if (neg) {\n output = '-' + output;\n }\n }\n\n return output;\n },\n // unformats numbers separators, decimals places, signs, abbreviations\n stringToNumber: function(string) {\n var locale = locales[options.currentLocale],\n stringOriginal = string,\n abbreviations = {\n thousand: 3,\n million: 6,\n billion: 9,\n trillion: 12\n },\n abbreviation,\n value,\n i,\n regexp;\n\n if (options.zeroFormat && string === options.zeroFormat) {\n value = 0;\n } else if (options.nullFormat && string === options.nullFormat || !string.replace(/[^0-9]+/g, '').length) {\n value = null;\n } else {\n value = 1;\n\n if (locale.delimiters.decimal !== '.') {\n string = string.replace(/\\./g, '').replace(locale.delimiters.decimal, '.');\n }\n\n for (abbreviation in abbreviations) {\n regexp = new RegExp('[^a-zA-Z]' + locale.abbreviations[abbreviation] + '(?:\\\\)|(\\\\' + locale.currency.symbol + ')?(?:\\\\))?)?$');\n\n if (stringOriginal.match(regexp)) {\n value *= Math.pow(10, abbreviations[abbreviation]);\n break;\n }\n }\n\n // check for negative number\n value *= (string.split('-').length + Math.min(string.split('(').length - 1, string.split(')').length - 1)) % 2 ? 1 : -1;\n\n // remove non numbers\n string = string.replace(/[^0-9\\.]+/g, '');\n\n value *= Number(string);\n }\n\n return value;\n },\n isNaN: function(value) {\n return typeof value === 'number' && isNaN(value);\n },\n includes: function(string, search) {\n return string.indexOf(search) !== -1;\n },\n insert: function(string, subString, start) {\n return string.slice(0, start) + subString + string.slice(start);\n },\n reduce: function(array, callback /*, initialValue*/) {\n if (this === null) {\n throw new TypeError('Array.prototype.reduce called on null or undefined');\n }\n\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n var t = Object(array),\n len = t.length >>> 0,\n k = 0,\n value;\n\n if (arguments.length === 3) {\n value = arguments[2];\n } else {\n while (k < len && !(k in t)) {\n k++;\n }\n\n if (k >= len) {\n throw new TypeError('Reduce of empty array with no initial value');\n }\n\n value = t[k++];\n }\n for (; k < len; k++) {\n if (k in t) {\n value = callback(value, t[k], k, t);\n }\n }\n return value;\n },\n /**\n * Computes the multiplier necessary to make x >= 1,\n * effectively eliminating miscalculations caused by\n * finite precision.\n */\n multiplier: function (x) {\n var parts = x.toString().split('.');\n\n return parts.length < 2 ? 1 : Math.pow(10, parts[1].length);\n },\n /**\n * Given a variable number of arguments, returns the maximum\n * multiplier that must be used to normalize an operation involving\n * all of them.\n */\n correctionFactor: function () {\n var args = Array.prototype.slice.call(arguments);\n\n return args.reduce(function(accum, next) {\n var mn = _.multiplier(next);\n return accum > mn ? accum : mn;\n }, 1);\n },\n /**\n * Implementation of toFixed() that treats floats more like decimals\n *\n * Fixes binary rounding issues (eg. (0.615).toFixed(2) === '0.61') that present\n * problems for accounting- and finance-related software.\n */\n toFixed: function(value, maxDecimals, roundingFunction, optionals) {\n var splitValue = value.toString().split('.'),\n minDecimals = maxDecimals - (optionals || 0),\n boundedPrecision,\n optionalsRegExp,\n power,\n output;\n\n // Use the smallest precision value possible to avoid errors from floating point representation\n if (splitValue.length === 2) {\n boundedPrecision = Math.min(Math.max(splitValue[1].length, minDecimals), maxDecimals);\n } else {\n boundedPrecision = minDecimals;\n }\n\n power = Math.pow(10, boundedPrecision);\n\n // Multiply up by precision, round accurately, then divide and use native toFixed():\n output = (roundingFunction(value + 'e+' + boundedPrecision) / power).toFixed(boundedPrecision);\n\n if (optionals > maxDecimals - boundedPrecision) {\n optionalsRegExp = new RegExp('\\\\.?0{1,' + (optionals - (maxDecimals - boundedPrecision)) + '}$');\n output = output.replace(optionalsRegExp, '');\n }\n\n return output;\n }\n };\n\n // avaliable options\n numeral.options = options;\n\n // avaliable formats\n numeral.formats = formats;\n\n // avaliable formats\n numeral.locales = locales;\n\n // This function sets the current locale. If\n // no arguments are passed in, it will simply return the current global\n // locale key.\n numeral.locale = function(key) {\n if (key) {\n options.currentLocale = key.toLowerCase();\n }\n\n return options.currentLocale;\n };\n\n // This function provides access to the loaded locale data. If\n // no arguments are passed in, it will simply return the current\n // global locale object.\n numeral.localeData = function(key) {\n if (!key) {\n return locales[options.currentLocale];\n }\n\n key = key.toLowerCase();\n\n if (!locales[key]) {\n throw new Error('Unknown locale : ' + key);\n }\n\n return locales[key];\n };\n\n numeral.reset = function() {\n for (var property in defaults) {\n options[property] = defaults[property];\n }\n };\n\n numeral.zeroFormat = function(format) {\n options.zeroFormat = typeof(format) === 'string' ? format : null;\n };\n\n numeral.nullFormat = function (format) {\n options.nullFormat = typeof(format) === 'string' ? format : null;\n };\n\n numeral.defaultFormat = function(format) {\n options.defaultFormat = typeof(format) === 'string' ? format : '0.0';\n };\n\n numeral.register = function(type, name, format) {\n name = name.toLowerCase();\n\n if (this[type + 's'][name]) {\n throw new TypeError(name + ' ' + type + ' already registered.');\n }\n\n this[type + 's'][name] = format;\n\n return format;\n };\n\n\n numeral.validate = function(val, culture) {\n var _decimalSep,\n _thousandSep,\n _currSymbol,\n _valArray,\n _abbrObj,\n _thousandRegEx,\n localeData,\n temp;\n\n //coerce val to string\n if (typeof val !== 'string') {\n val += '';\n\n if (console.warn) {\n console.warn('Numeral.js: Value is not string. It has been co-erced to: ', val);\n }\n }\n\n //trim whitespaces from either sides\n val = val.trim();\n\n //if val is just digits return true\n if (!!val.match(/^\\d+$/)) {\n return true;\n }\n\n //if val is empty return false\n if (val === '') {\n return false;\n }\n\n //get the decimal and thousands separator from numeral.localeData\n try {\n //check if the culture is understood by numeral. if not, default it to current locale\n localeData = numeral.localeData(culture);\n } catch (e) {\n localeData = numeral.localeData(numeral.locale());\n }\n\n //setup the delimiters and currency symbol based on culture/locale\n _currSymbol = localeData.currency.symbol;\n _abbrObj = localeData.abbreviations;\n _decimalSep = localeData.delimiters.decimal;\n if (localeData.delimiters.thousands === '.') {\n _thousandSep = '\\\\.';\n } else {\n _thousandSep = localeData.delimiters.thousands;\n }\n\n // validating currency symbol\n temp = val.match(/^[^\\d]+/);\n if (temp !== null) {\n val = val.substr(1);\n if (temp[0] !== _currSymbol) {\n return false;\n }\n }\n\n //validating abbreviation symbol\n temp = val.match(/[^\\d]+$/);\n if (temp !== null) {\n val = val.slice(0, -1);\n if (temp[0] !== _abbrObj.thousand && temp[0] !== _abbrObj.million && temp[0] !== _abbrObj.billion && temp[0] !== _abbrObj.trillion) {\n return false;\n }\n }\n\n _thousandRegEx = new RegExp(_thousandSep + '{2}');\n\n if (!val.match(/[^\\d.,]/g)) {\n _valArray = val.split(_decimalSep);\n if (_valArray.length > 2) {\n return false;\n } else {\n if (_valArray.length < 2) {\n return ( !! _valArray[0].match(/^\\d+.*\\d$/) && !_valArray[0].match(_thousandRegEx));\n } else {\n if (_valArray[0].length === 1) {\n return ( !! _valArray[0].match(/^\\d+$/) && !_valArray[0].match(_thousandRegEx) && !! _valArray[1].match(/^\\d+$/));\n } else {\n return ( !! _valArray[0].match(/^\\d+.*\\d$/) && !_valArray[0].match(_thousandRegEx) && !! _valArray[1].match(/^\\d+$/));\n }\n }\n }\n }\n\n return false;\n };\n\n\n /************************************\n Numeral Prototype\n ************************************/\n\n numeral.fn = Numeral.prototype = {\n clone: function() {\n return numeral(this);\n },\n format: function(inputString, roundingFunction) {\n var value = this._value,\n format = inputString || options.defaultFormat,\n kind,\n output,\n formatFunction;\n\n // make sure we have a roundingFunction\n roundingFunction = roundingFunction || Math.round;\n\n // format based on value\n if (value === 0 && options.zeroFormat !== null) {\n output = options.zeroFormat;\n } else if (value === null && options.nullFormat !== null) {\n output = options.nullFormat;\n } else {\n for (kind in formats) {\n if (format.match(formats[kind].regexps.format)) {\n formatFunction = formats[kind].format;\n\n break;\n }\n }\n\n formatFunction = formatFunction || numeral._.numberToFormat;\n\n output = formatFunction(value, format, roundingFunction);\n }\n\n return output;\n },\n value: function() {\n return this._value;\n },\n input: function() {\n return this._input;\n },\n set: function(value) {\n this._value = Number(value);\n\n return this;\n },\n add: function(value) {\n var corrFactor = _.correctionFactor.call(null, this._value, value);\n\n function cback(accum, curr, currI, O) {\n return accum + Math.round(corrFactor * curr);\n }\n\n this._value = _.reduce([this._value, value], cback, 0) / corrFactor;\n\n return this;\n },\n subtract: function(value) {\n var corrFactor = _.correctionFactor.call(null, this._value, value);\n\n function cback(accum, curr, currI, O) {\n return accum - Math.round(corrFactor * curr);\n }\n\n this._value = _.reduce([value], cback, Math.round(this._value * corrFactor)) / corrFactor;\n\n return this;\n },\n multiply: function(value) {\n function cback(accum, curr, currI, O) {\n var corrFactor = _.correctionFactor(accum, curr);\n return Math.round(accum * corrFactor) * Math.round(curr * corrFactor) / Math.round(corrFactor * corrFactor);\n }\n\n this._value = _.reduce([this._value, value], cback, 1);\n\n return this;\n },\n divide: function(value) {\n function cback(accum, curr, currI, O) {\n var corrFactor = _.correctionFactor(accum, curr);\n return Math.round(accum * corrFactor) / Math.round(curr * corrFactor);\n }\n\n this._value = _.reduce([this._value, value], cback);\n\n return this;\n },\n difference: function(value) {\n return Math.abs(numeral(this._value).subtract(value).value());\n }\n };\n\n /************************************\n Default Locale && Format\n ************************************/\n\n numeral.register('locale', 'en', {\n delimiters: {\n thousands: ',',\n decimal: '.'\n },\n abbreviations: {\n thousand: 'k',\n million: 'm',\n billion: 'b',\n trillion: 't'\n },\n ordinal: function(number) {\n var b = number % 10;\n return (~~(number % 100 / 10) === 1) ? 'th' :\n (b === 1) ? 'st' :\n (b === 2) ? 'nd' :\n (b === 3) ? 'rd' : 'th';\n },\n currency: {\n symbol: '$'\n }\n });\n\n \n\n(function() {\n numeral.register('format', 'bps', {\n regexps: {\n format: /(BPS)/,\n unformat: /(BPS)/\n },\n format: function(value, format, roundingFunction) {\n var space = numeral._.includes(format, ' BPS') ? ' ' : '',\n output;\n\n value = value * 10000;\n\n // check for space before BPS\n format = format.replace(/\\s?BPS/, '');\n\n output = numeral._.numberToFormat(value, format, roundingFunction);\n\n if (numeral._.includes(output, ')')) {\n output = output.split('');\n\n output.splice(-1, 0, space + 'BPS');\n\n output = output.join('');\n } else {\n output = output + space + 'BPS';\n }\n\n return output;\n },\n unformat: function(string) {\n return +(numeral._.stringToNumber(string) * 0.0001).toFixed(15);\n }\n });\n})();\n\n\n(function() {\n var decimal = {\n base: 1000,\n suffixes: ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']\n },\n binary = {\n base: 1024,\n suffixes: ['B', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB']\n };\n\n var allSuffixes = decimal.suffixes.concat(binary.suffixes.filter(function (item) {\n return decimal.suffixes.indexOf(item) < 0;\n }));\n var unformatRegex = allSuffixes.join('|');\n // Allow support for BPS (http://www.investopedia.com/terms/b/basispoint.asp)\n unformatRegex = '(' + unformatRegex.replace('B', 'B(?!PS)') + ')';\n\n numeral.register('format', 'bytes', {\n regexps: {\n format: /([0\\s]i?b)/,\n unformat: new RegExp(unformatRegex)\n },\n format: function(value, format, roundingFunction) {\n var output,\n bytes = numeral._.includes(format, 'ib') ? binary : decimal,\n suffix = numeral._.includes(format, ' b') || numeral._.includes(format, ' ib') ? ' ' : '',\n power,\n min,\n max;\n\n // check for space before\n format = format.replace(/\\s?i?b/, '');\n\n for (power = 0; power <= bytes.suffixes.length; power++) {\n min = Math.pow(bytes.base, power);\n max = Math.pow(bytes.base, power + 1);\n\n if (value === null || value === 0 || value >= min && value < max) {\n suffix += bytes.suffixes[power];\n\n if (min > 0) {\n value = value / min;\n }\n\n break;\n }\n }\n\n output = numeral._.numberToFormat(value, format, roundingFunction);\n\n return output + suffix;\n },\n unformat: function(string) {\n var value = numeral._.stringToNumber(string),\n power,\n bytesMultiplier;\n\n if (value) {\n for (power = decimal.suffixes.length - 1; power >= 0; power--) {\n if (numeral._.includes(string, decimal.suffixes[power])) {\n bytesMultiplier = Math.pow(decimal.base, power);\n\n break;\n }\n\n if (numeral._.includes(string, binary.suffixes[power])) {\n bytesMultiplier = Math.pow(binary.base, power);\n\n break;\n }\n }\n\n value *= (bytesMultiplier || 1);\n }\n\n return value;\n }\n });\n})();\n\n\n(function() {\n numeral.register('format', 'currency', {\n regexps: {\n format: /(\\$)/\n },\n format: function(value, format, roundingFunction) {\n var locale = numeral.locales[numeral.options.currentLocale],\n symbols = {\n before: format.match(/^([\\+|\\-|\\(|\\s|\\$]*)/)[0],\n after: format.match(/([\\+|\\-|\\)|\\s|\\$]*)$/)[0]\n },\n output,\n symbol,\n i;\n\n // strip format of spaces and $\n format = format.replace(/\\s?\\$\\s?/, '');\n\n // format the number\n output = numeral._.numberToFormat(value, format, roundingFunction);\n\n // update the before and after based on value\n if (value >= 0) {\n symbols.before = symbols.before.replace(/[\\-\\(]/, '');\n symbols.after = symbols.after.replace(/[\\-\\)]/, '');\n } else if (value < 0 && (!numeral._.includes(symbols.before, '-') && !numeral._.includes(symbols.before, '('))) {\n symbols.before = '-' + symbols.before;\n }\n\n // loop through each before symbol\n for (i = 0; i < symbols.before.length; i++) {\n symbol = symbols.before[i];\n\n switch (symbol) {\n case '$':\n output = numeral._.insert(output, locale.currency.symbol, i);\n break;\n case ' ':\n output = numeral._.insert(output, ' ', i + locale.currency.symbol.length - 1);\n break;\n }\n }\n\n // loop through each after symbol\n for (i = symbols.after.length - 1; i >= 0; i--) {\n symbol = symbols.after[i];\n\n switch (symbol) {\n case '$':\n output = i === symbols.after.length - 1 ? output + locale.currency.symbol : numeral._.insert(output, locale.currency.symbol, -(symbols.after.length - (1 + i)));\n break;\n case ' ':\n output = i === symbols.after.length - 1 ? output + ' ' : numeral._.insert(output, ' ', -(symbols.after.length - (1 + i) + locale.currency.symbol.length - 1));\n break;\n }\n }\n\n\n return output;\n }\n });\n})();\n\n\n(function() {\n numeral.register('format', 'exponential', {\n regexps: {\n format: /(e\\+|e-)/,\n unformat: /(e\\+|e-)/\n },\n format: function(value, format, roundingFunction) {\n var output,\n exponential = typeof value === 'number' && !numeral._.isNaN(value) ? value.toExponential() : '0e+0',\n parts = exponential.split('e');\n\n format = format.replace(/e[\\+|\\-]{1}0/, '');\n\n output = numeral._.numberToFormat(Number(parts[0]), format, roundingFunction);\n\n return output + 'e' + parts[1];\n },\n unformat: function(string) {\n var parts = numeral._.includes(string, 'e+') ? string.split('e+') : string.split('e-'),\n value = Number(parts[0]),\n power = Number(parts[1]);\n\n power = numeral._.includes(string, 'e-') ? power *= -1 : power;\n\n function cback(accum, curr, currI, O) {\n var corrFactor = numeral._.correctionFactor(accum, curr),\n num = (accum * corrFactor) * (curr * corrFactor) / (corrFactor * corrFactor);\n return num;\n }\n\n return numeral._.reduce([value, Math.pow(10, power)], cback, 1);\n }\n });\n})();\n\n\n(function() {\n numeral.register('format', 'ordinal', {\n regexps: {\n format: /(o)/\n },\n format: function(value, format, roundingFunction) {\n var locale = numeral.locales[numeral.options.currentLocale],\n output,\n ordinal = numeral._.includes(format, ' o') ? ' ' : '';\n\n // check for space before\n format = format.replace(/\\s?o/, '');\n\n ordinal += locale.ordinal(value);\n\n output = numeral._.numberToFormat(value, format, roundingFunction);\n\n return output + ordinal;\n }\n });\n})();\n\n\n(function() {\n numeral.register('format', 'percentage', {\n regexps: {\n format: /(%)/,\n unformat: /(%)/\n },\n format: function(value, format, roundingFunction) {\n var space = numeral._.includes(format, ' %') ? ' ' : '',\n output;\n\n if (numeral.options.scalePercentBy100) {\n value = value * 100;\n }\n\n // check for space before %\n format = format.replace(/\\s?\\%/, '');\n\n output = numeral._.numberToFormat(value, format, roundingFunction);\n\n if (numeral._.includes(output, ')')) {\n output = output.split('');\n\n output.splice(-1, 0, space + '%');\n\n output = output.join('');\n } else {\n output = output + space + '%';\n }\n\n return output;\n },\n unformat: function(string) {\n var number = numeral._.stringToNumber(string);\n if (numeral.options.scalePercentBy100) {\n return number * 0.01;\n }\n return number;\n }\n });\n})();\n\n\n(function() {\n numeral.register('format', 'time', {\n regexps: {\n format: /(:)/,\n unformat: /(:)/\n },\n format: function(value, format, roundingFunction) {\n var hours = Math.floor(value / 60 / 60),\n minutes = Math.floor((value - (hours * 60 * 60)) / 60),\n seconds = Math.round(value - (hours * 60 * 60) - (minutes * 60));\n\n return hours + ':' + (minutes < 10 ? '0' + minutes : minutes) + ':' + (seconds < 10 ? '0' + seconds : seconds);\n },\n unformat: function(string) {\n var timeArray = string.split(':'),\n seconds = 0;\n\n // turn hours and minutes into seconds and add them all up\n if (timeArray.length === 3) {\n // hours\n seconds = seconds + (Number(timeArray[0]) * 60 * 60);\n // minutes\n seconds = seconds + (Number(timeArray[1]) * 60);\n // seconds\n seconds = seconds + Number(timeArray[2]);\n } else if (timeArray.length === 2) {\n // minutes\n seconds = seconds + (Number(timeArray[0]) * 60);\n // seconds\n seconds = seconds + Number(timeArray[1]);\n }\n return Number(seconds);\n }\n });\n})();\n\nreturn numeral;\n}));\n","import { Validator, tpl } from \"./validators\";\nimport numeral, { Numeral } from \"numeral\";\n// import \"numeral/locales\";\n\nconst requiredMsg = \"required\";\nconst notInRangeMsg = \"not_in_range\";\nconst invalidFormatMsg = \"invalid_format\";\n\nconst localeDefault = \"en\";\nconst numFormatDefault = \"0,0.[00]\";\n\n\nexport interface NumeralValidatorOpts {\n required?: boolean;\n min?: number;\n max?: number;\n locale?: string;\n format?: string;\n strict?: boolean;\n}\n\nexport interface NumeralValidatorMsgs {\n required?: string;\n invalid_format?: string;\n not_in_range?: string;\n}\n\nexport class NumeralValidator\n extends Validator<Numeral, NumeralValidatorOpts, NumeralValidatorMsgs> {\n\n constructor(opts?: NumeralValidatorOpts, msgs?: NumeralValidatorMsgs) {\n super(opts, msgs);\n }\n\n protected strToObj(str?: string | null): { obj: Numeral | null, err: string } {\n const opts = this.opts;\n const msgs = this.msgs;\n if (\"required\" in opts) {\n if (opts.required && !str) {\n return {\n obj: null,\n err: msgs.required\n ? tpl(msgs.required,\n {\n min: (\"min\" in opts) ? (\"\" + (opts.min ?? \"\")) : \"\",\n max: (\"max\" in opts) ? (\"\" + (opts.max ?? \"\")) : \"\",\n locale: (\"locale\" in opts)\n ? opts.locale!\n : localeDefault,\n format: (\"format\" in opts)\n ? opts.format!\n : numFormatDefault\n })\n : requiredMsg\n };\n }\n }\n if (str) {\n numeral.locale(opts.locale ?? localeDefault);\n const n = numeral(str);\n let err: boolean = false;\n if (n.value() === null) {\n err = true;\n }\n if (\"strict\" in opts) {\n if (opts.strict && (str !== this.objToStr(n).str)) {\n err = true;\n }\n }\n if (err) {\n const num = (n.value() !== null) ? n : numeral(1234.45);\n return {\n obj: (n.value() !== null) ? n : null,\n err: msgs.invalid_format\n ? tpl(msgs.invalid_format,\n {\n num: this.objToStr(num).str ?? \"\",\n locale: (\"locale\" in opts)\n ? opts.locale!\n : localeDefault,\n format: (\"format\" in opts)\n ? opts.format!\n : numFormatDefault\n })\n : invalidFormatMsg\n };\n }\n return { obj: n, err: \"\" };\n } else {\n return { obj: null, err: \"\" };\n }\n }\n\n protected objCheck(obj?: Numeral | null): string {\n if (obj === undefined || obj === null) {\n return \"\";\n }\n // if (obj.constructor === Number) {\n // obj = numeral(obj);\n // }\n const opts = this.opts;\n const msgs = this.msgs;\n let err: boolean = false;\n if (\"max\" in opts) {\n if (obj.value()! > opts.max!) {\n err = true;\n }\n }\n if (\"min\" in opts) {\n if (obj.value()! < opts.min!) {\n err = true;\n }\n }\n if (err) {\n return msgs.not_in_range\n ? tpl(msgs.not_in_range,\n {\n min: (\"min\" in opts) ? (\"\" + (opts.min ?? \"\")) : \"\",\n max: (\"max\" in opts) ? (\"\" + (opts.max ?? \"\")) : \"\",\n locale: (\"locale\" in opts)\n ? opts.locale!\n : localeDefault,\n format: (\"format\" in opts)\n ? opts.format!\n : numFormatDefault\n })\n : notInRangeMsg;\n }\n return \"\";\n }\n\n protected objToStr(obj?: Numeral | null,\n format?: string): { str: string, err: string } {\n // if (obj && obj.constructor === Number) {\n // obj = numeral(obj);\n // }\n numeral.locale(this.opts.locale ?? localeDefault);\n return {\n str: (obj === undefined || obj === null)\n ? \"\"\n : obj.format(format\n ? format\n : this.opts.format ?? numFormatDefault),\n err: \"\"\n };\n }\n\n}\n\nexport class NumeralNumberValidator\n extends Validator<number, NumeralValidatorOpts, NumeralValidatorMsgs> {\n\n nv: NumeralValidator;\n\n constructor(opts?: NumeralValidatorOpts, msgs?: NumeralValidatorMsgs) {\n super(opts, msgs);\n this.nv = new NumeralValidator(opts, msgs);\n }\n\n protected strToObj(str?: string | null): { obj: number | null, err: string } {\n const res = (this.nv as any).strToObj(str);\n if (res.obj) {\n res.obj = res.obj.value();\n }\n return res;\n }\n\n protected objCheck(obj?: number | null): string {\n const mObj = typeof obj === \"number\" ? numeral(obj) : obj;\n return (this.nv as any).objCheck(mObj);\n }\n\n protected objToStr(obj?: number | null,\n format?: string): { str: string, err: string } {\n const mObj = typeof obj === \"number\" ? numeral(obj) : obj;\n return (this.nv as any).objToStr(mObj, format);\n }\n\n}\n\n// TEST\n\n// import \"numeral/locales\";\n\n// // const nv = new NumeralValidator(\n// const nv = new NumeralNumberValidator(\n// {\n// required: true,\n// min: 3,\n// max: 5000,\n// locale: \"sk\",\n// format: \"0,0.0[00]\",\n// strict: true\n// },\n// {\n// required: \"required {{min}} {{max}} {{locale}} {{format}}\",\n// invalid_format: \"invalid_format {{num}} {{locale}} {{format}}\",\n// not_in_range: \"not_in_range {{min}} {{max}}\"\n// });\n\n// [\n// \"1234,56\",\n// \"1 234,56\",\n// \"1 234,56y\",\n// \"xy\"\n// ].forEach(v => {\n// console.log();\n// console.log(v);\n// const r = nv.validate(v);\n// console.log(r);\n// if (r.obj) {\n// const f = nv.format(r.obj);\n// console.log(f);\n// }\n// });\n","const requiredMsg = \"required\";\nconst notInRangeMsg = \"not_in_range\";\nconst invalidFormatMsg = \"invalid_format\";\nconst invalidOptionMsg = \"invalid_option\";\nconst invalidValueMsg = \"invalid_value\";\n\n// name@doamin.net\nexport const emailRegex = /[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/;\n\n// +421901123456 or +421 901 123 456 or +421-901-123-456 or 901123456 or 901 123 456 or 901-123-456\nexport const phoneRgex = /^(((00)([- ]?)|\\+)(\\d{1,3})([- ]?))?((\\d{3})([- ]?))((\\d{3})([- ]?))(\\d{3})$/;\n\n// 123 45 or 12345\nexport const pscRgex = /^\\d{3} ?\\d{2}$/;\n\n// 450115/8346\nexport const rodneCisloRgex = /^\\s*(\\d\\d)(\\d\\d)(\\d\\d)[ /]*(\\d\\d\\d)(\\d?)\\s*$/;\n\nexport abstract class Validator<TYPE, OPTS, MSGS> {\n\n readonly opts: OPTS;\n readonly msgs: MSGS;\n\n readonly str: string | null = null;\n readonly err: string | null = null;\n readonly obj: TYPE | null = null;\n\n constructor(opts?: OPTS, msgs?: MSGS) {\n this.opts = opts ?? {} as OPTS;\n this.msgs = msgs ?? {} as MSGS;\n }\n\n protected abstract strToObj(str?: string | null): { obj: TYPE | null, err: string };\n\n protected abstract objCheck(obj?: TYPE | null): string;\n\n protected abstract objToStr(obj?: TYPE | null,\n format?: string): { str: string, err: string };\n\n validate(value?: string | TYPE): { str?: string | null, obj?: TYPE | null, err: string } {\n if (typeof value === \"string\" || value === undefined || value === null) {\n const v = value as string | null | undefined;\n (this.str as any) = v;\n const sto = this.strToObj(v);\n (this.obj as any) = sto.obj;\n if (sto.err) {\n (this.err as any) = sto.err;\n return {\n str: v ?? \"\",\n obj: sto.obj,\n err: sto.err\n };\n }\n const err = this.objCheck(sto.obj);\n (this.err as any) = err;\n return {\n str: v ?? \"\",\n obj: sto.obj,\n err\n };\n } else {\n (this.str as any) = (value === undefined || value === null) ? null : (\"\" + value);\n const err = this.objCheck(value);\n (this.err as any) = err;\n return {\n str: this.str,\n obj: value,\n err\n };\n }\n }\n\n format(obj?: TYPE | null, format?: string): { str: string, err: string } {\n // const err = this.objCheck(obj);\n const ots = this.objToStr(obj, format);\n return {\n str: ots.str ?? \"\",\n // err: ots.err ? ots.err : err\n err: ots.err\n };\n }\n\n}\n\nexport function tpl(tmpl: string, data: { [k: string]: any }): string {\n return Object.keys(data)\n .map(k => [k, data[k]])\n .reduce((t, d) =>\n t.replace(new RegExp(`\\\\{\\\\{${d[0]}\\\\}\\\\}`, \"g\"), String(d[1])), tmpl);\n}\n\nexport interface ValidatorDataOpts {\n data?: { [key: string]: any };\n}\n\nexport interface SelectValidatorOpts extends ValidatorDataOpts {\n required?: boolean;\n options?: string[];\n}\n\nexport interface SelectValidatorMsgs {\n required?: string;\n invalid_option?: string;\n}\n\nexport class SelectValidator\n extends Validator<string, SelectValidatorOpts, SelectValidatorMsgs> {\n\n constructor(opts?: SelectValidatorOpts, msgs?: SelectValidatorMsgs) {\n super(opts, msgs);\n }\n\n protected strToObj(str?: string | null): { obj: string | null, err: string } {\n const opts = this.opts;\n const msgs = this.msgs;\n if (\"required\" in opts) {\n if (opts.required && !str) {\n return {\n obj: null,\n err: msgs.required\n ? tpl(msgs.required,\n {\n ...opts.data,\n options: (\"options\" in opts)\n ? opts.options!.join(\", \")\n : \"\"\n })\n : requiredMsg\n };\n }\n }\n return {\n obj: str === undefined ? null : str,\n err: \"\"\n };\n }\n\n protected objCheck(obj?: string | null): string {\n if (obj === undefined || obj === null) {\n return \"\";\n }\n const opts = this.opts;\n const msgs = this.msgs;\n if (\"options\" in opts) {\n if (obj && opts.options!.indexOf(obj) === -1) {\n return msgs.invalid_option\n ? tpl(msgs.invalid_option,\n {\n ...opts.data,\n option: obj === null ? \"\" : obj,\n options: (\"options\" in opts)\n ? opts.options!.join(\", \")\n : \"\"\n })\n : invalidOptionMsg;\n }\n }\n return \"\";\n }\n\n protected objToStr(obj?: string | null,\n format?: string): { str: string, err: string } {\n return { str: obj ?? \"\", err: \"\" };\n }\n\n}\n\nexport interface StringValidatorOpts extends ValidatorDataOpts {\n required?: boolean;\n min?: number;\n max?: number;\n regexp?: RegExp;\n}\n\nexport interface StringValidatorMsgs {\n required?: string;\n invalid_format?: string;\n not_in_range?: string;\n}\n\nexport class StringValidator\n extends Validator<string, StringValidatorOpts, StringValidatorMsgs> {\n\n constructor(opts?: StringValidatorOpts, msgs?: StringValidatorMsgs) {\n super(opts, msgs);\n }\n\n protected strToObj(str?: string | null): { obj: string | null, err: string } {\n const opts = this.opts;\n const msgs = this.msgs;\n if (\"required\" in opts) {\n if (opts.required && !str) {\n return {\n obj: null,\n err: msgs.required\n ? tpl(msgs.required,\n {\n ...opts.data,\n min: (\"min\" in opts) ? (\"\" + (opts.min ?? \"\")) : \"\",\n max: (\"max\" in opts) ? (\"\" + (opts.max ?? \"\")) : \"\",\n regexp: (\"regexp\" in opts)\n ? (\"\" + (opts.regexp ?? \"\"))\n : \"\"\n })\n : requiredMsg\n };\n }\n }\n if (str) {\n if (\"regexp\" in opts) {\n if (!opts.regexp!.test(str)) {\n return {\n obj: null,\n err: msgs.invalid_format\n ? tpl(msgs.invalid_format,\n {\n ...opts.data,\n regexp: (\"regexp\" in opts)\n ? (\"\" + (opts.regexp ?? \"\"))\n : \"\"\n })\n : invalidFormatMsg\n };\n }\n }\n return { obj: str , err: \"\" };\n } else {\n return { obj: null, err: \"\" };\n }\n }\n\n protected objCheck(obj?: string | null): string {\n if (obj === undefined || obj === null) {\n return \"\";\n }\n const opts = this.opts;\n const msgs = this.msgs;\n let err: boolean = false;\n if (\"max\" in opts) {\n if (obj.length > opts.max!) {\n err = true;\n }\n }\n if (\"min\" in opts) {\n if (obj.length < opts.min!) {\n err = true;\n }\n }\n if ((\"min\" in opts) && (\"max\" in opts)) {\n if (obj.length > opts.max! && obj.length < opts.min!) {\n err = true;\n }\n }\n if (err) {\n return msgs.not_in_range\n ? tpl(msgs.not_in_range,\n {\n ...opts.data,\n min: (\"min\" in opts) ? (\"\" + (opts.min ?? \"\")) : \"\",\n max: (\"max\" in opts) ? (\"\" + (opts.max ?? \"\")) : \"\",\n })\n : notInRangeMsg;\n }\n return \"\";\n }\n\n protected objToStr(obj?: string | null,\n format?: string): { str: string, err: string } {\n return { str: obj ?? \"\", err: \"\" };\n }\n\n}\n\nexport interface NumberValidatorOpts extends ValidatorDataOpts {\n required?: boolean;\n min?: number;\n max?: number;\n strict?: boolean;\n decimals?: number;\n}\n\nexport interface NumberValidatorMsgs {\n required?: string;\n invalid_format?: string;\n not_in_range?: string;\n}\n\nexport class NumberValidator\n extends Validator<number, NumberValidatorOpts, NumberValidatorMsgs> {\n\n constructor(opts?: NumberValidatorOpts, msgs?: NumberValidatorMsgs) {\n super(opts, msgs);\n }\n\n protected strToObj(str?: string | null): { obj: number | null, err: string } {\n const opts = this.opts;\n const msgs = this.msgs;\n if (\"required\" in opts) {\n if (opts.required && !str) {\n return {\n obj: null,\n err: msgs.required\n ? tpl(msgs.required,\n {\n ...opts.data,\n min: (\"min\" in opts) ? (\"\" + (opts.min ?? \"\")) : \"\",\n max: (\"max\" in opts) ? (\"\" + (opts.max ?? \"\")) : \"\",\n })\n : requiredMsg\n };\n }\n }\n if (str) {\n const n = Number(str);\n let err: boolean = false;\n if (isNaN(n)) {\n err = true;\n }\n if (opts.strict && (str !== this.objToStr(n).str)) {\n err = true;\n }\n if (err) {\n const num = isNaN(n) ? 1234.45 : n;\n return {\n obj: isNaN(n) ? null : n,\n err: msgs.invalid_format\n ? tpl(msgs.invalid_format,\n {\n ...opts.data,\n num: this.objToStr(num).str ?? \"\"\n })\n : invalidFormatMsg\n };\n }\n return { obj: n, err: \"\" };\n } else {\n return { obj: null, err: \"\" };\n }\n }\n\n protected objCheck(obj?: number | null): string {\n if (obj === undefined || obj === null) {\n return \"\";\n }\n const opts = this.opts;\n const msgs = this.msgs;\n let err: boolean = false;\n if (\"max\" in opts) {\n if (obj > opts.max!) {\n err = true;\n }\n }\n if (\"min\" in opts) {\n if (obj < opts.min!) {\n err = true;\n }\n }\n if (err) {\n return msgs.not_in_range\n ? tpl(msgs.not_in_range,\n {\n ...opts.data,\n min: (\"min\" in opts) ? (\"\" + (opts.min ?? \"\")) : \"\",\n max: (\"max\" in opts) ? (\"\" + (opts.max ?? \"\")) : \"\",\n })\n : notInRangeMsg;\n }\n return \"\";\n }\n\n protected objToStr(obj?: number | null,\n format?: string): { str: string, err: string } {\n let str;\n if (obj === undefined || obj === null) {\n str = \"\";\n } else {\n if (\"decimals\" in this.opts) {\n str = obj.toFixed(this.opts.decimals);\n } else {\n str = String(obj);\n }\n }\n return {\n str,\n err: \"\"\n };\n }\n\n}\n\nexport interface DateValidatorOpts extends ValidatorDataOpts {\n required?: boolean;\n min?: Date;\n max?: Date;\n dateOnly?: boolean;\n iso?: boolean;\n // strict?: boolean;\n\n}\n\nexport interface DateValidatorMsgs {\n required?: string;\n invalid_format?: string;\n not_in_range?: string;\n}\n\nconst dateToLocaleString = (date: Date) => date.toLocaleString();\nconst dateToLocaleDateString = (date: Date) => date.toLocaleDateString();\n\nconst dateToIsoString = (date: Date) => date.toISOString();\nconst dateToIsoDateString = (date: Date) => new Date(date.toDateString()).toISOString();\n\nexport class DateValidator\n extends Validator<Date, DateValidatorOpts, DateValidatorMsgs> {\n\n dateToStr: (date: Date) => string;\n\n constructor(opts?: DateValidatorOpts, msgs?: DateValidatorMsgs) {\n super(opts, msgs);\n if (opts?.iso) {\n this.dateToStr = opts?.dateOnly ? dateToIsoDateString : dateToIsoString;\n } else {\n this.dateToStr = opts?.dateOnly ? dateToLocaleDateString : dateToLocaleString;\n }\n if (opts?.dateOnly && opts?.min) {\n opts.min = new Date(opts.min.getFullYear(), opts.min.getMonth(), opts.min.getDate());\n }\n if (opts?.dateOnly && opts?.max) {\n opts.max = new Date(opts.max.getFullYear(), opts.max.getMonth(), opts.max.getDate() + 1);\n }\n }\n\n protected strToObj(str?: string | null): { obj: Date | null, err: string } {\n const opts = this.opts;\n const msgs = this.msgs;\n if (\"required\" in opts) {\n if (opts.required && !str) {\n return {\n obj: null,\n err: msgs.required\n ? tpl(msgs.required,\n {\n ...opts.data,\n min: (\"min\" in opts && opts.min) ? this.dateToStr(opts.min) : \"\",\n max: (\"max\" in opts && opts.max) ? this.dateToStr(opts.max) : \"\"\n })\n : requiredMsg\n };\n }\n }\n if (str) {\n const dt = Date.parse(str);\n let d = new Date(dt);\n if (opts.dateOnly) {\n d = new Date(d.getFullYear(), d.getMonth(), d.getDate());\n }\n let err: boolean = false;\n if (isNaN(dt)) {\n err = true;\n }\n // if (opts.strict && (str !== this.objToStr(d).str)) {\n // err = true;\n // }\n if (err) {\n const date = isNaN(dt) ? new Date() : d;\n return {\n obj: isNaN(dt) ? null : d,\n err: msgs.invalid_format\n ? tpl(msgs.invalid_format,\n {\n ...opts.data,\n date: this.objToStr(date).str ?? \"\"\n })\n : invalidFormatMsg\n };\n }\n return { obj: d, err: \"\" };\n } else {\n return { obj: null, err: \"\" };\n }\n }\n\n protected objCheck(obj?: Date | null): string {\n if (obj === undefined || obj === null) {\n return \"\";\n }\n const opts = this.opts;\n const msgs = this.msgs;\n let err: boolean = false;\n if (\"max\" in opts) {\n if (opts.max && obj.getTime() > opts.max.getTime()) {\n err = true;\n }\n }\n if (\"min\" in opts) {\n if (opts.min && obj < opts.min) {\n err = true;\n }\n }\n if (err) {\n return msgs.not_in_range\n ? tpl(msgs.not_in_range,\n {\n ...opts.data,\n min: (\"min\" in opts && opts.min) ? this.dateToStr(opts.min) : \"\",\n max: (\"max\" in opts && opts.max) ? this.dateToStr(opts.max) : \"\"\n })\n : notInRangeMsg;\n }\n return \"\";\n }\n\n protected objToStr(obj?: Date | null,\n format?: string): { str: string, err: string } {\n return {\n str: (obj === undefined || obj === null) ? \"\" : this.dateToStr(obj),\n err: \"\"\n };\n }\n\n}\n\nexport interface BooleanValidatorOpts extends ValidatorDataOpts {\n required?: boolean;\n value?: boolean;\n}\n\nexport interface BooleanValidatorMsgs {\n required?: string;\n invalid_value?: string;\n}\n\nexport class BooleanValidator\n extends Validator<boolean, BooleanValidatorOpts, BooleanValidatorMsgs> {\n\n constructor(opts?: BooleanValidatorOpts, msgs?: BooleanValidatorMsgs) {\n super(opts, msgs);\n }\n\n protected strToObj(str?: string | null): { obj: boolean | null, err: string } {\n const opts = this.opts;\n const msgs = this.msgs;\n if (\"required\" in opts) {\n if (opts.required && !str) {\n return {\n obj: null,\n err: msgs.required\n ? tpl(msgs.required,\n {\n ...opts.data\n })\n : requiredMsg\n };\n }\n }\n let b;\n switch (str) {\n case \"true\":\n case \"1\":\n case \"on\":\n case \"yes\":\n b = true;\n break;\n default:\n b = false;\n }\n return { obj: b, err: \"\" };\n }\n\n protected objCheck(obj?: boolean | null): string {\n if (obj === undefined || obj === null) {\n return \"\";\n }\n const opts = this.opts;\n const msgs = this.msgs;\n let err = false;\n if (\"value\" in opts) {\n if (obj !== opts.value) {\n err = true;\n }\n }\n if (err) {\n return msgs.invalid_value\n ? tpl(msgs.invalid_value,\n {\n ...opts.data,\n value: (\"value\" in opts) ? (\"\" + (opts.value ?? \"\")) : \"\",\n })\n : invalidValueMsg;\n }\n return \"\";\n }\n\n protected objToStr(obj?: boolean | null,\n format?: string): { str: string, err: string } {\n return {\n str: (obj === undefined || obj === null) ? \"\" : (\"\" + obj),\n err: \"\"\n };\n }\n\n}\n\ntype FormValidators<TYPE> = { [key in keyof TYPE]: Validator<any, any, any> };\n\nexport type Str<TYPE> = { [key in keyof TYPE]: string };\nexport type Obj<TYPE> = { [key in keyof TYPE]: any };\nexport type Err<TYPE> = { [key in keyof TYPE]: string };\n\nexport interface FormValidatorData<TYPE> {\n str: Str<TYPE>;\n obj: Obj<TYPE>;\n err: Err<TYPE>;\n valid: boolean;\n}\n\nexport class FormValidator<TYPE extends { [key: string]: any }> {\n\n readonly validators: FormValidators<TYPE> = {} as FormValidators<TYPE>;\n\n readonly str?: Str<TYPE>;\n readonly obj?: Obj<TYPE>;\n readonly err?: Err<TYPE>;\n\n readonly valid?: boolean;\n\n addValidator(field: keyof TYPE, validator: Validator<any, any, any>): this {\n this.validators[field] = validator;\n return this;\n }\n\n validate(data: { [key in keyof TYPE]?: string }): this {\n const res = Object.keys(this.validators)\n .reduce(\n (a, k) => {\n const v = (data as any)[k];\n const r = (this.validators as any)[k].validate(v);\n (a.str as any)[k] = r.str;\n (a.obj as any)[k] = r.obj;\n (a.err as any)[k] = r.err;\n r.err && (a.valid = false);\n return a;\n },\n { str: {}, obj: {}, err: {}, valid: true });\n (this.str as any) = res.str;\n (this.obj as any) = res.obj;\n (this.err as any) = res.err;\n (this.valid as any) = res.valid;\n return this;\n }\n\n format(data: { [key in keyof TYPE]: any }): this {\n const res = Object.keys(this.validators)\n .reduce(\n (a, k) => {\n const v = (data as any)[k];\n const r = (this.validators as any)[k].format(v);\n (a.str as any)[k] = r.str;\n (a.obj as any)[k] = v;\n (a.err as any)[k] = r.err;\n r.err && (a.valid = false);\n return a;\n },\n { str: {}, obj: {}, err: {}, valid: true });\n (this.str as any) = res.str;\n (this.obj as any) = res.obj;\n (this.err as any) = res.err;\n (this.valid as any) = res.valid;\n return this;\n }\n\n data(): FormValidatorData<TYPE> {\n return {\n str: this.str!,\n obj: this.obj!,\n err: this.err!,\n valid: this.valid!\n };\n }\n\n}\n\n\n// TEST\n\n// const sv = new StringValidator(\n// {\n// required: true,\n// min: 3,\n// max: 5,\n// // regexp: /^[0123]+$/\n// data: {\n// xxx: \"xXx\"\n// }\n// },\n// {\n// required: \"required {{min}} {{max}} {{regexp}}\",\n// invalid_format: \"invalid_format {{regexp}}\",\n// not_in_range: \"not_in_range {{min}} {{max}} | data.xxx={{xxx}}\"\n// });\n\n// [\n// \"x1234\",\n// \"x1234y\",\n// \"xy\"\n// ].forEach(v => {\n// console.log();\n// console.log(v);\n// const r = sv.validate(v);\n// console.log(r);\n// if (r.obj) {\n// const f = sv.format(r.obj);\n// console.log(f);\n// }\n// });\n\n// console.log();\n\n// const nv = new NumberValidator(\n// {\n// required: true,\n// min: 3,\n// max: 500000,\n// decimals: 2,\n// strict: true\n// },\n// {\n// required: \"required {{min}} {{max}}\",\n// invalid_format: \"invalid_format {{num}}\",\n// not_in_range: \"not_in_range {{min}} {{max}}\"\n// });\n\n// console.log(nv.format(undefined));\n// console.log(nv.format(12345.6789));\n\n// console.log(nv.validate(\"12345.6789\"));\n// console.log(nv.validate(\"12345,6789\"));\n// console.log(nv.validate(\"12,345.6789\"));\n\n// const dv = new DateValidator(\n// {\n// required: false,\n// // min: new Date(),\n// max: new Date(),\n// clearTime: false\n// // strict: true\n// },\n// {\n// required: \"required {{min}} {{max}}\",\n// invalid_format: \"invalid_format {{date}}\",\n// not_in_range: \"not_in_range {{min}} {{max}}\"\n// });\n\n// console.log(dv.opts);\n\n// console.log(dv.format(undefined));\n\n// console.log(dv.format(new Date));\n\n// console.log(dv.validate(\"9/17/2020, 10:46:07 AM\"));\n// console.log(dv.format(dv.obj).str);\n// console.log(dv.validate(\"9/17/2020\"));\n// console.log(dv.format(dv.obj).str);\n// console.log(dv.validate(\"2020-09-17T08:46:07.000Z\"));\n// console.log(dv.format(dv.obj).str);\n// console.log(dv.validate(\"\"));\n// console.log(dv.format(dv.obj).str);\n\n// console.log(new Date().toString());\n// console.log(new Date().toDateString());\n// console.log(new Date().toTimeString());\n// console.log(new Date().toLocaleString());\n// console.log(new Date().toLocaleDateString());\n// console.log(new Date().toLocaleTimeString());\n// console.log();\n// console.log(new Date(Date.parse(new Date().toString())));\n// console.log(new Date(Date.parse(new Date().toDateString())));\n// console.log(new Date(Date.parse(new Date().toTimeString())));\n// console.log(new Date(Date.parse(new Date().toLocaleString())));\n// console.log(new Date(Date.parse(new Date().toLocaleDateString())));\n// console.log(new Date(Date.parse(new Date().toLocaleTimeString())));\n\n// const formData = { str: \"123a\", num: \"123456.789\", date: \"9/17/2020, 10:46:07 AM\" };\n// const formData = { str: \"\", num: \"\", date: \"\" };\n// const formData = { str: undefined, num: undefined, date: undefined };\n\n// const fv = new FormValidator<typeof formData>()\n// .addValidator(\"str\", sv)\n// .addValidator(\"num\", nv)\n// .addValidator(\"date\", dv)\n// .validate(formData);\n\n// console.log(fv.data());\n\n// fv.format(fv.obj!);\n// console.log(fv);\n\n// const ovData = { str: \"123a\", num: \"123.45\", date: \"02.01.2019 12:12\" };\n\n// const ov = new ObjectValidator<typeof ovData>()\n// .addValidator(\"str\", sv)\n// .addValidator(\"num\", nv)\n// // .addValidator(\"date\", dv)\n// .validate(ovData);\n\n// // console.log(ov);\n\n// ov.format(ov.obj!);\n// console.log(ov);\n\n// console.log();\n\n// interface ReportFormData {\n// spz: string;\n// tachometer: string;\n// dateCreated: string;\n// user: {\n// // name: string[];\n// email: string;\n// };\n// }\n\n// const dov = new ObjectValidator<ReportFormData>()\n// .addValidator(\"spz\", new StringValidator({ required: true }))\n// .addValidator(\"tachometer\", new NumberValidator({ required: true, min: 1 } ))\n// .addValidator(\"dateCreated\", new StringValidator({ required: true }))\n// .addValidator(\"user\", new ObjectValidator<ReportFormData[\"user\"]>()\n// .addValidator(\"email\", new StringValidator({ required: true}))\n// // .addValidator(\"name\", { })\n// // new ArrayValidator({\n// // required: true,\n// // validator: new StringValidator({ required: true })\n// // })\n// );\n\n// dov.validate(\n// {\n// spz: \"dasdas\",\n// tachometer: \"111222\",\n// // dateCreated: \"10.02.2019\",\n// user: {\n// // email: \"dsafasdf\",\n// }\n// },\n// {\n// dateCreated: \"01.03.2011\",\n// spz: \"32ds9f0f\",\n// tachometer: \"3213214214\",\n// user: {\n// email: \"sadmaskdmk2@dsadsamkl.com\"\n// }\n// });\n\n// const avn = new ArrayValidator<number>(new NumberValidator());\n// const rn = avn.validate([345, 123]);\n// console.log(rn);\n\n\n// interface D {\n// a: number;\n// b?: string;\n// }\n\n// const av = new ArrayValidator<T>(new ObjectValidator<T>()\n// .addValidator(\"a\", new NumberValidator())\n// .addValidator(\"b\", new StringValidator({ required: true }))\n// );\n\n// const d: D[] = [\n// { a: 123, b: \"text\" },\n// // { a: 5.6, b: \"\" },\n// { a: 5.6 }\n// ];\n\n// const r = av.validate(d);\n// console.log(r);\n\n// const ro = new ObjectValidator<T>()\n// .addValidator(\"a\", new NumberValidator())\n// .addValidator(\"b\", new StringValidator({ required: true }))\n// .validate({\n// a: \"5.6\",\n// b: undefined\n// // b: \"text\"\n// });\n// console.log(\"---\", ro);\n\n// const v = new StringValidator({ required: true });\n// const str = undefined;\n// const sr = v.validate(str!);\n// console.log(sr);\n\n// const v = new StringValidator({ required: true, min: 8 });\n// const str = \"\";\n// const sr = v.format(str);\n// console.log(sr, v);\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(7735);\n"],"names":["root","factory","exports","module","define","amd","a","i","self","numeral","_","decimal","binary","unformatRegex","formats","locales","defaults","currentLocale","zeroFormat","nullFormat","defaultFormat","scalePercentBy100","options","Numeral","input","number","this","_input","_value","value","kind","unformatFunction","regexp","isNumeral","isNaN","replace","length","regexps","unformat","match","stringToNumber","Number","version","obj","numberToFormat","format","roundingFunction","abbrForce","abs","int","precision","signed","thousands","output","leadingCount","locale","negP","optDec","abbr","trillion","billion","million","neg","Math","includes","indexOf","RegExp","abbreviations","thousand","toString","split","toFixed","delimiters","slice","String","string","abbreviation","stringOriginal","currency","symbol","pow","min","search","insert","subString","start","reduce","array","callback","TypeError","t","Object","len","k","arguments","multiplier","x","parts","correctionFactor","Array","prototype","call","accum","next","mn","maxDecimals","optionals","boundedPrecision","optionalsRegExp","power","splitValue","minDecimals","max","key","toLowerCase","localeData","Error","reset","property","register","type","name","validate","val","culture","_decimalSep","_thousandSep","_currSymbol","_valArray","_abbrObj","_thousandRegEx","temp","console","warn","trim","e","substr","fn","clone","inputString","formatFunction","round","set","add","corrFactor","curr","currI","O","subtract","multiply","divide","difference","ordinal","b","space","splice","join","base","suffixes","concat","filter","item","bytes","suffix","bytesMultiplier","symbols","before","after","toExponential","hours","floor","minutes","seconds","timeArray","localeDefault","numFormatDefault","NumeralValidator","Validator","constructor","opts","msgs","super","strToObj","str","required","err","tpl","n","strict","objToStr","num","invalid_format","objCheck","not_in_range","NumeralNumberValidator","nv","res","mObj","requiredMsg","notInRangeMsg","invalidFormatMsg","emailRegex","phoneRgex","pscRgex","rodneCisloRgex","v","sto","ots","tmpl","data","keys","map","d","undefined","invalid_option","option","test","decimals","dateToLocaleString","date","toLocaleString","dateToLocaleDateString","toLocaleDateString","dateToIsoString","toISOString","dateToIsoDateString","Date","toDateString","iso","dateToStr","dateOnly","getFullYear","getMonth","getDate","dt","parse","getTime","invalid_value","validators","addValidator","field","validator","r","valid","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"validators-numeral.js","mappings":"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","sources":["webpack://peryl/webpack/universalModuleDefinition","webpack://peryl/./node_modules/numeral/numeral.js","webpack://peryl/./src/validators-numeral.ts","webpack://peryl/./src/validators.ts","webpack://peryl/webpack/bootstrap","webpack://peryl/webpack/startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, function() {\nreturn ","/*! @preserve\n * numeral.js\n * version : 2.0.6\n * author : Adam Draper\n * license : MIT\n * http://adamwdraper.github.com/Numeral-js/\n */\n\n(function (global, factory) {\n if (typeof define === 'function' && define.amd) {\n define(factory);\n } else if (typeof module === 'object' && module.exports) {\n module.exports = factory();\n } else {\n global.numeral = factory();\n }\n}(this, function () {\n /************************************\n Variables\n ************************************/\n\n var numeral,\n _,\n VERSION = '2.0.6',\n formats = {},\n locales = {},\n defaults = {\n currentLocale: 'en',\n zeroFormat: null,\n nullFormat: null,\n defaultFormat: '0,0',\n scalePercentBy100: true\n },\n options = {\n currentLocale: defaults.currentLocale,\n zeroFormat: defaults.zeroFormat,\n nullFormat: defaults.nullFormat,\n defaultFormat: defaults.defaultFormat,\n scalePercentBy100: defaults.scalePercentBy100\n };\n\n\n /************************************\n Constructors\n ************************************/\n\n // Numeral prototype object\n function Numeral(input, number) {\n this._input = input;\n\n this._value = number;\n }\n\n numeral = function(input) {\n var value,\n kind,\n unformatFunction,\n regexp;\n\n if (numeral.isNumeral(input)) {\n value = input.value();\n } else if (input === 0 || typeof input === 'undefined') {\n value = 0;\n } else if (input === null || _.isNaN(input)) {\n value = null;\n } else if (typeof input === 'string') {\n if (options.zeroFormat && input === options.zeroFormat) {\n value = 0;\n } else if (options.nullFormat && input === options.nullFormat || !input.replace(/[^0-9]+/g, '').length) {\n value = null;\n } else {\n for (kind in formats) {\n regexp = typeof formats[kind].regexps.unformat === 'function' ? formats[kind].regexps.unformat() : formats[kind].regexps.unformat;\n\n if (regexp && input.match(regexp)) {\n unformatFunction = formats[kind].unformat;\n\n break;\n }\n }\n\n unformatFunction = unformatFunction || numeral._.stringToNumber;\n\n value = unformatFunction(input);\n }\n } else {\n value = Number(input)|| null;\n }\n\n return new Numeral(input, value);\n };\n\n // version number\n numeral.version = VERSION;\n\n // compare numeral object\n numeral.isNumeral = function(obj) {\n return obj instanceof Numeral;\n };\n\n // helper functions\n numeral._ = _ = {\n // formats numbers separators, decimals places, signs, abbreviations\n numberToFormat: function(value, format, roundingFunction) {\n var locale = locales[numeral.options.currentLocale],\n negP = false,\n optDec = false,\n leadingCount = 0,\n abbr = '',\n trillion = 1000000000000,\n billion = 1000000000,\n million = 1000000,\n thousand = 1000,\n decimal = '',\n neg = false,\n abbrForce, // force abbreviation\n abs,\n min,\n max,\n power,\n int,\n precision,\n signed,\n thousands,\n output;\n\n // make sure we never format a null value\n value = value || 0;\n\n abs = Math.abs(value);\n\n // see if we should use parentheses for negative number or if we should prefix with a sign\n // if both are present we default to parentheses\n if (numeral._.includes(format, '(')) {\n negP = true;\n format = format.replace(/[\\(|\\)]/g, '');\n } else if (numeral._.includes(format, '+') || numeral._.includes(format, '-')) {\n signed = numeral._.includes(format, '+') ? format.indexOf('+') : value < 0 ? format.indexOf('-') : -1;\n format = format.replace(/[\\+|\\-]/g, '');\n }\n\n // see if abbreviation is wanted\n if (numeral._.includes(format, 'a')) {\n abbrForce = format.match(/a(k|m|b|t)?/);\n\n abbrForce = abbrForce ? abbrForce[1] : false;\n\n // check for space before abbreviation\n if (numeral._.includes(format, ' a')) {\n abbr = ' ';\n }\n\n format = format.replace(new RegExp(abbr + 'a[kmbt]?'), '');\n\n if (abs >= trillion && !abbrForce || abbrForce === 't') {\n // trillion\n abbr += locale.abbreviations.trillion;\n value = value / trillion;\n } else if (abs < trillion && abs >= billion && !abbrForce || abbrForce === 'b') {\n // billion\n abbr += locale.abbreviations.billion;\n value = value / billion;\n } else if (abs < billion && abs >= million && !abbrForce || abbrForce === 'm') {\n // million\n abbr += locale.abbreviations.million;\n value = value / million;\n } else if (abs < million && abs >= thousand && !abbrForce || abbrForce === 'k') {\n // thousand\n abbr += locale.abbreviations.thousand;\n value = value / thousand;\n }\n }\n\n // check for optional decimals\n if (numeral._.includes(format, '[.]')) {\n optDec = true;\n format = format.replace('[.]', '.');\n }\n\n // break number and format\n int = value.toString().split('.')[0];\n precision = format.split('.')[1];\n thousands = format.indexOf(',');\n leadingCount = (format.split('.')[0].split(',')[0].match(/0/g) || []).length;\n\n if (precision) {\n if (numeral._.includes(precision, '[')) {\n precision = precision.replace(']', '');\n precision = precision.split('[');\n decimal = numeral._.toFixed(value, (precision[0].length + precision[1].length), roundingFunction, precision[1].length);\n } else {\n decimal = numeral._.toFixed(value, precision.length, roundingFunction);\n }\n\n int = decimal.split('.')[0];\n\n if (numeral._.includes(decimal, '.')) {\n decimal = locale.delimiters.decimal + decimal.split('.')[1];\n } else {\n decimal = '';\n }\n\n if (optDec && Number(decimal.slice(1)) === 0) {\n decimal = '';\n }\n } else {\n int = numeral._.toFixed(value, 0, roundingFunction);\n }\n\n // check abbreviation again after rounding\n if (abbr && !abbrForce && Number(int) >= 1000 && abbr !== locale.abbreviations.trillion) {\n int = String(Number(int) / 1000);\n\n switch (abbr) {\n case locale.abbreviations.thousand:\n abbr = locale.abbreviations.million;\n break;\n case locale.abbreviations.million:\n abbr = locale.abbreviations.billion;\n break;\n case locale.abbreviations.billion:\n abbr = locale.abbreviations.trillion;\n break;\n }\n }\n\n\n // format number\n if (numeral._.includes(int, '-')) {\n int = int.slice(1);\n neg = true;\n }\n\n if (int.length < leadingCount) {\n for (var i = leadingCount - int.length; i > 0; i--) {\n int = '0' + int;\n }\n }\n\n if (thousands > -1) {\n int = int.toString().replace(/(\\d)(?=(\\d{3})+(?!\\d))/g, '$1' + locale.delimiters.thousands);\n }\n\n if (format.indexOf('.') === 0) {\n int = '';\n }\n\n output = int + decimal + (abbr ? abbr : '');\n\n if (negP) {\n output = (negP && neg ? '(' : '') + output + (negP && neg ? ')' : '');\n } else {\n if (signed >= 0) {\n output = signed === 0 ? (neg ? '-' : '+') + output : output + (neg ? '-' : '+');\n } else if (neg) {\n output = '-' + output;\n }\n }\n\n return output;\n },\n // unformats numbers separators, decimals places, signs, abbreviations\n stringToNumber: function(string) {\n var locale = locales[options.currentLocale],\n stringOriginal = string,\n abbreviations = {\n thousand: 3,\n million: 6,\n billion: 9,\n trillion: 12\n },\n abbreviation,\n value,\n i,\n regexp;\n\n if (options.zeroFormat && string === options.zeroFormat) {\n value = 0;\n } else if (options.nullFormat && string === options.nullFormat || !string.replace(/[^0-9]+/g, '').length) {\n value = null;\n } else {\n value = 1;\n\n if (locale.delimiters.decimal !== '.') {\n string = string.replace(/\\./g, '').replace(locale.delimiters.decimal, '.');\n }\n\n for (abbreviation in abbreviations) {\n regexp = new RegExp('[^a-zA-Z]' + locale.abbreviations[abbreviation] + '(?:\\\\)|(\\\\' + locale.currency.symbol + ')?(?:\\\\))?)?$');\n\n if (stringOriginal.match(regexp)) {\n value *= Math.pow(10, abbreviations[abbreviation]);\n break;\n }\n }\n\n // check for negative number\n value *= (string.split('-').length + Math.min(string.split('(').length - 1, string.split(')').length - 1)) % 2 ? 1 : -1;\n\n // remove non numbers\n string = string.replace(/[^0-9\\.]+/g, '');\n\n value *= Number(string);\n }\n\n return value;\n },\n isNaN: function(value) {\n return typeof value === 'number' && isNaN(value);\n },\n includes: function(string, search) {\n return string.indexOf(search) !== -1;\n },\n insert: function(string, subString, start) {\n return string.slice(0, start) + subString + string.slice(start);\n },\n reduce: function(array, callback /*, initialValue*/) {\n if (this === null) {\n throw new TypeError('Array.prototype.reduce called on null or undefined');\n }\n\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n var t = Object(array),\n len = t.length >>> 0,\n k = 0,\n value;\n\n if (arguments.length === 3) {\n value = arguments[2];\n } else {\n while (k < len && !(k in t)) {\n k++;\n }\n\n if (k >= len) {\n throw new TypeError('Reduce of empty array with no initial value');\n }\n\n value = t[k++];\n }\n for (; k < len; k++) {\n if (k in t) {\n value = callback(value, t[k], k, t);\n }\n }\n return value;\n },\n /**\n * Computes the multiplier necessary to make x >= 1,\n * effectively eliminating miscalculations caused by\n * finite precision.\n */\n multiplier: function (x) {\n var parts = x.toString().split('.');\n\n return parts.length < 2 ? 1 : Math.pow(10, parts[1].length);\n },\n /**\n * Given a variable number of arguments, returns the maximum\n * multiplier that must be used to normalize an operation involving\n * all of them.\n */\n correctionFactor: function () {\n var args = Array.prototype.slice.call(arguments);\n\n return args.reduce(function(accum, next) {\n var mn = _.multiplier(next);\n return accum > mn ? accum : mn;\n }, 1);\n },\n /**\n * Implementation of toFixed() that treats floats more like decimals\n *\n * Fixes binary rounding issues (eg. (0.615).toFixed(2) === '0.61') that present\n * problems for accounting- and finance-related software.\n */\n toFixed: function(value, maxDecimals, roundingFunction, optionals) {\n var splitValue = value.toString().split('.'),\n minDecimals = maxDecimals - (optionals || 0),\n boundedPrecision,\n optionalsRegExp,\n power,\n output;\n\n // Use the smallest precision value possible to avoid errors from floating point representation\n if (splitValue.length === 2) {\n boundedPrecision = Math.min(Math.max(splitValue[1].length, minDecimals), maxDecimals);\n } else {\n boundedPrecision = minDecimals;\n }\n\n power = Math.pow(10, boundedPrecision);\n\n // Multiply up by precision, round accurately, then divide and use native toFixed():\n output = (roundingFunction(value + 'e+' + boundedPrecision) / power).toFixed(boundedPrecision);\n\n if (optionals > maxDecimals - boundedPrecision) {\n optionalsRegExp = new RegExp('\\\\.?0{1,' + (optionals - (maxDecimals - boundedPrecision)) + '}$');\n output = output.replace(optionalsRegExp, '');\n }\n\n return output;\n }\n };\n\n // avaliable options\n numeral.options = options;\n\n // avaliable formats\n numeral.formats = formats;\n\n // avaliable formats\n numeral.locales = locales;\n\n // This function sets the current locale. If\n // no arguments are passed in, it will simply return the current global\n // locale key.\n numeral.locale = function(key) {\n if (key) {\n options.currentLocale = key.toLowerCase();\n }\n\n return options.currentLocale;\n };\n\n // This function provides access to the loaded locale data. If\n // no arguments are passed in, it will simply return the current\n // global locale object.\n numeral.localeData = function(key) {\n if (!key) {\n return locales[options.currentLocale];\n }\n\n key = key.toLowerCase();\n\n if (!locales[key]) {\n throw new Error('Unknown locale : ' + key);\n }\n\n return locales[key];\n };\n\n numeral.reset = function() {\n for (var property in defaults) {\n options[property] = defaults[property];\n }\n };\n\n numeral.zeroFormat = function(format) {\n options.zeroFormat = typeof(format) === 'string' ? format : null;\n };\n\n numeral.nullFormat = function (format) {\n options.nullFormat = typeof(format) === 'string' ? format : null;\n };\n\n numeral.defaultFormat = function(format) {\n options.defaultFormat = typeof(format) === 'string' ? format : '0.0';\n };\n\n numeral.register = function(type, name, format) {\n name = name.toLowerCase();\n\n if (this[type + 's'][name]) {\n throw new TypeError(name + ' ' + type + ' already registered.');\n }\n\n this[type + 's'][name] = format;\n\n return format;\n };\n\n\n numeral.validate = function(val, culture) {\n var _decimalSep,\n _thousandSep,\n _currSymbol,\n _valArray,\n _abbrObj,\n _thousandRegEx,\n localeData,\n temp;\n\n //coerce val to string\n if (typeof val !== 'string') {\n val += '';\n\n if (console.warn) {\n console.warn('Numeral.js: Value is not string. It has been co-erced to: ', val);\n }\n }\n\n //trim whitespaces from either sides\n val = val.trim();\n\n //if val is just digits return true\n if (!!val.match(/^\\d+$/)) {\n return true;\n }\n\n //if val is empty return false\n if (val === '') {\n return false;\n }\n\n //get the decimal and thousands separator from numeral.localeData\n try {\n //check if the culture is understood by numeral. if not, default it to current locale\n localeData = numeral.localeData(culture);\n } catch (e) {\n localeData = numeral.localeData(numeral.locale());\n }\n\n //setup the delimiters and currency symbol based on culture/locale\n _currSymbol = localeData.currency.symbol;\n _abbrObj = localeData.abbreviations;\n _decimalSep = localeData.delimiters.decimal;\n if (localeData.delimiters.thousands === '.') {\n _thousandSep = '\\\\.';\n } else {\n _thousandSep = localeData.delimiters.thousands;\n }\n\n // validating currency symbol\n temp = val.match(/^[^\\d]+/);\n if (temp !== null) {\n val = val.substr(1);\n if (temp[0] !== _currSymbol) {\n return false;\n }\n }\n\n //validating abbreviation symbol\n temp = val.match(/[^\\d]+$/);\n if (temp !== null) {\n val = val.slice(0, -1);\n if (temp[0] !== _abbrObj.thousand && temp[0] !== _abbrObj.million && temp[0] !== _abbrObj.billion && temp[0] !== _abbrObj.trillion) {\n return false;\n }\n }\n\n _thousandRegEx = new RegExp(_thousandSep + '{2}');\n\n if (!val.match(/[^\\d.,]/g)) {\n _valArray = val.split(_decimalSep);\n if (_valArray.length > 2) {\n return false;\n } else {\n if (_valArray.length < 2) {\n return ( !! _valArray[0].match(/^\\d+.*\\d$/) && !_valArray[0].match(_thousandRegEx));\n } else {\n if (_valArray[0].length === 1) {\n return ( !! _valArray[0].match(/^\\d+$/) && !_valArray[0].match(_thousandRegEx) && !! _valArray[1].match(/^\\d+$/));\n } else {\n return ( !! _valArray[0].match(/^\\d+.*\\d$/) && !_valArray[0].match(_thousandRegEx) && !! _valArray[1].match(/^\\d+$/));\n }\n }\n }\n }\n\n return false;\n };\n\n\n /************************************\n Numeral Prototype\n ************************************/\n\n numeral.fn = Numeral.prototype = {\n clone: function() {\n return numeral(this);\n },\n format: function(inputString, roundingFunction) {\n var value = this._value,\n format = inputString || options.defaultFormat,\n kind,\n output,\n formatFunction;\n\n // make sure we have a roundingFunction\n roundingFunction = roundingFunction || Math.round;\n\n // format based on value\n if (value === 0 && options.zeroFormat !== null) {\n output = options.zeroFormat;\n } else if (value === null && options.nullFormat !== null) {\n output = options.nullFormat;\n } else {\n for (kind in formats) {\n if (format.match(formats[kind].regexps.format)) {\n formatFunction = formats[kind].format;\n\n break;\n }\n }\n\n formatFunction = formatFunction || numeral._.numberToFormat;\n\n output = formatFunction(value, format, roundingFunction);\n }\n\n return output;\n },\n value: function() {\n return this._value;\n },\n input: function() {\n return this._input;\n },\n set: function(value) {\n this._value = Number(value);\n\n return this;\n },\n add: function(value) {\n var corrFactor = _.correctionFactor.call(null, this._value, value);\n\n function cback(accum, curr, currI, O) {\n return accum + Math.round(corrFactor * curr);\n }\n\n this._value = _.reduce([this._value, value], cback, 0) / corrFactor;\n\n return this;\n },\n subtract: function(value) {\n var corrFactor = _.correctionFactor.call(null, this._value, value);\n\n function cback(accum, curr, currI, O) {\n return accum - Math.round(corrFactor * curr);\n }\n\n this._value = _.reduce([value], cback, Math.round(this._value * corrFactor)) / corrFactor;\n\n return this;\n },\n multiply: function(value) {\n function cback(accum, curr, currI, O) {\n var corrFactor = _.correctionFactor(accum, curr);\n return Math.round(accum * corrFactor) * Math.round(curr * corrFactor) / Math.round(corrFactor * corrFactor);\n }\n\n this._value = _.reduce([this._value, value], cback, 1);\n\n return this;\n },\n divide: function(value) {\n function cback(accum, curr, currI, O) {\n var corrFactor = _.correctionFactor(accum, curr);\n return Math.round(accum * corrFactor) / Math.round(curr * corrFactor);\n }\n\n this._value = _.reduce([this._value, value], cback);\n\n return this;\n },\n difference: function(value) {\n return Math.abs(numeral(this._value).subtract(value).value());\n }\n };\n\n /************************************\n Default Locale && Format\n ************************************/\n\n numeral.register('locale', 'en', {\n delimiters: {\n thousands: ',',\n decimal: '.'\n },\n abbreviations: {\n thousand: 'k',\n million: 'm',\n billion: 'b',\n trillion: 't'\n },\n ordinal: function(number) {\n var b = number % 10;\n return (~~(number % 100 / 10) === 1) ? 'th' :\n (b === 1) ? 'st' :\n (b === 2) ? 'nd' :\n (b === 3) ? 'rd' : 'th';\n },\n currency: {\n symbol: '$'\n }\n });\n\n \n\n(function() {\n numeral.register('format', 'bps', {\n regexps: {\n format: /(BPS)/,\n unformat: /(BPS)/\n },\n format: function(value, format, roundingFunction) {\n var space = numeral._.includes(format, ' BPS') ? ' ' : '',\n output;\n\n value = value * 10000;\n\n // check for space before BPS\n format = format.replace(/\\s?BPS/, '');\n\n output = numeral._.numberToFormat(value, format, roundingFunction);\n\n if (numeral._.includes(output, ')')) {\n output = output.split('');\n\n output.splice(-1, 0, space + 'BPS');\n\n output = output.join('');\n } else {\n output = output + space + 'BPS';\n }\n\n return output;\n },\n unformat: function(string) {\n return +(numeral._.stringToNumber(string) * 0.0001).toFixed(15);\n }\n });\n})();\n\n\n(function() {\n var decimal = {\n base: 1000,\n suffixes: ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']\n },\n binary = {\n base: 1024,\n suffixes: ['B', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB']\n };\n\n var allSuffixes = decimal.suffixes.concat(binary.suffixes.filter(function (item) {\n return decimal.suffixes.indexOf(item) < 0;\n }));\n var unformatRegex = allSuffixes.join('|');\n // Allow support for BPS (http://www.investopedia.com/terms/b/basispoint.asp)\n unformatRegex = '(' + unformatRegex.replace('B', 'B(?!PS)') + ')';\n\n numeral.register('format', 'bytes', {\n regexps: {\n format: /([0\\s]i?b)/,\n unformat: new RegExp(unformatRegex)\n },\n format: function(value, format, roundingFunction) {\n var output,\n bytes = numeral._.includes(format, 'ib') ? binary : decimal,\n suffix = numeral._.includes(format, ' b') || numeral._.includes(format, ' ib') ? ' ' : '',\n power,\n min,\n max;\n\n // check for space before\n format = format.replace(/\\s?i?b/, '');\n\n for (power = 0; power <= bytes.suffixes.length; power++) {\n min = Math.pow(bytes.base, power);\n max = Math.pow(bytes.base, power + 1);\n\n if (value === null || value === 0 || value >= min && value < max) {\n suffix += bytes.suffixes[power];\n\n if (min > 0) {\n value = value / min;\n }\n\n break;\n }\n }\n\n output = numeral._.numberToFormat(value, format, roundingFunction);\n\n return output + suffix;\n },\n unformat: function(string) {\n var value = numeral._.stringToNumber(string),\n power,\n bytesMultiplier;\n\n if (value) {\n for (power = decimal.suffixes.length - 1; power >= 0; power--) {\n if (numeral._.includes(string, decimal.suffixes[power])) {\n bytesMultiplier = Math.pow(decimal.base, power);\n\n break;\n }\n\n if (numeral._.includes(string, binary.suffixes[power])) {\n bytesMultiplier = Math.pow(binary.base, power);\n\n break;\n }\n }\n\n value *= (bytesMultiplier || 1);\n }\n\n return value;\n }\n });\n})();\n\n\n(function() {\n numeral.register('format', 'currency', {\n regexps: {\n format: /(\\$)/\n },\n format: function(value, format, roundingFunction) {\n var locale = numeral.locales[numeral.options.currentLocale],\n symbols = {\n before: format.match(/^([\\+|\\-|\\(|\\s|\\$]*)/)[0],\n after: format.match(/([\\+|\\-|\\)|\\s|\\$]*)$/)[0]\n },\n output,\n symbol,\n i;\n\n // strip format of spaces and $\n format = format.replace(/\\s?\\$\\s?/, '');\n\n // format the number\n output = numeral._.numberToFormat(value, format, roundingFunction);\n\n // update the before and after based on value\n if (value >= 0) {\n symbols.before = symbols.before.replace(/[\\-\\(]/, '');\n symbols.after = symbols.after.replace(/[\\-\\)]/, '');\n } else if (value < 0 && (!numeral._.includes(symbols.before, '-') && !numeral._.includes(symbols.before, '('))) {\n symbols.before = '-' + symbols.before;\n }\n\n // loop through each before symbol\n for (i = 0; i < symbols.before.length; i++) {\n symbol = symbols.before[i];\n\n switch (symbol) {\n case '$':\n output = numeral._.insert(output, locale.currency.symbol, i);\n break;\n case ' ':\n output = numeral._.insert(output, ' ', i + locale.currency.symbol.length - 1);\n break;\n }\n }\n\n // loop through each after symbol\n for (i = symbols.after.length - 1; i >= 0; i--) {\n symbol = symbols.after[i];\n\n switch (symbol) {\n case '$':\n output = i === symbols.after.length - 1 ? output + locale.currency.symbol : numeral._.insert(output, locale.currency.symbol, -(symbols.after.length - (1 + i)));\n break;\n case ' ':\n output = i === symbols.after.length - 1 ? output + ' ' : numeral._.insert(output, ' ', -(symbols.after.length - (1 + i) + locale.currency.symbol.length - 1));\n break;\n }\n }\n\n\n return output;\n }\n });\n})();\n\n\n(function() {\n numeral.register('format', 'exponential', {\n regexps: {\n format: /(e\\+|e-)/,\n unformat: /(e\\+|e-)/\n },\n format: function(value, format, roundingFunction) {\n var output,\n exponential = typeof value === 'number' && !numeral._.isNaN(value) ? value.toExponential() : '0e+0',\n parts = exponential.split('e');\n\n format = format.replace(/e[\\+|\\-]{1}0/, '');\n\n output = numeral._.numberToFormat(Number(parts[0]), format, roundingFunction);\n\n return output + 'e' + parts[1];\n },\n unformat: function(string) {\n var parts = numeral._.includes(string, 'e+') ? string.split('e+') : string.split('e-'),\n value = Number(parts[0]),\n power = Number(parts[1]);\n\n power = numeral._.includes(string, 'e-') ? power *= -1 : power;\n\n function cback(accum, curr, currI, O) {\n var corrFactor = numeral._.correctionFactor(accum, curr),\n num = (accum * corrFactor) * (curr * corrFactor) / (corrFactor * corrFactor);\n return num;\n }\n\n return numeral._.reduce([value, Math.pow(10, power)], cback, 1);\n }\n });\n})();\n\n\n(function() {\n numeral.register('format', 'ordinal', {\n regexps: {\n format: /(o)/\n },\n format: function(value, format, roundingFunction) {\n var locale = numeral.locales[numeral.options.currentLocale],\n output,\n ordinal = numeral._.includes(format, ' o') ? ' ' : '';\n\n // check for space before\n format = format.replace(/\\s?o/, '');\n\n ordinal += locale.ordinal(value);\n\n output = numeral._.numberToFormat(value, format, roundingFunction);\n\n return output + ordinal;\n }\n });\n})();\n\n\n(function() {\n numeral.register('format', 'percentage', {\n regexps: {\n format: /(%)/,\n unformat: /(%)/\n },\n format: function(value, format, roundingFunction) {\n var space = numeral._.includes(format, ' %') ? ' ' : '',\n output;\n\n if (numeral.options.scalePercentBy100) {\n value = value * 100;\n }\n\n // check for space before %\n format = format.replace(/\\s?\\%/, '');\n\n output = numeral._.numberToFormat(value, format, roundingFunction);\n\n if (numeral._.includes(output, ')')) {\n output = output.split('');\n\n output.splice(-1, 0, space + '%');\n\n output = output.join('');\n } else {\n output = output + space + '%';\n }\n\n return output;\n },\n unformat: function(string) {\n var number = numeral._.stringToNumber(string);\n if (numeral.options.scalePercentBy100) {\n return number * 0.01;\n }\n return number;\n }\n });\n})();\n\n\n(function() {\n numeral.register('format', 'time', {\n regexps: {\n format: /(:)/,\n unformat: /(:)/\n },\n format: function(value, format, roundingFunction) {\n var hours = Math.floor(value / 60 / 60),\n minutes = Math.floor((value - (hours * 60 * 60)) / 60),\n seconds = Math.round(value - (hours * 60 * 60) - (minutes * 60));\n\n return hours + ':' + (minutes < 10 ? '0' + minutes : minutes) + ':' + (seconds < 10 ? '0' + seconds : seconds);\n },\n unformat: function(string) {\n var timeArray = string.split(':'),\n seconds = 0;\n\n // turn hours and minutes into seconds and add them all up\n if (timeArray.length === 3) {\n // hours\n seconds = seconds + (Number(timeArray[0]) * 60 * 60);\n // minutes\n seconds = seconds + (Number(timeArray[1]) * 60);\n // seconds\n seconds = seconds + Number(timeArray[2]);\n } else if (timeArray.length === 2) {\n // minutes\n seconds = seconds + (Number(timeArray[0]) * 60);\n // seconds\n seconds = seconds + Number(timeArray[1]);\n }\n return Number(seconds);\n }\n });\n})();\n\nreturn numeral;\n}));\n","import { Validator, tpl } from \"./validators\";\nimport numeral, { Numeral } from \"numeral\";\n// import \"numeral/locales\";\n\nconst requiredMsg = \"required\";\nconst notInRangeMsg = \"not_in_range\";\nconst invalidFormatMsg = \"invalid_format\";\n\nconst localeDefault = \"en\";\nconst numFormatDefault = \"0,0.[00]\";\n\n\nexport interface NumeralValidatorOpts {\n required?: boolean;\n min?: number;\n max?: number;\n locale?: string;\n format?: string;\n strict?: boolean;\n}\n\nexport interface NumeralValidatorMsgs {\n required?: string;\n invalid_format?: string;\n not_in_range?: string;\n}\n\nexport class NumeralValidator\n extends Validator<Numeral, NumeralValidatorOpts, NumeralValidatorMsgs> {\n\n constructor(opts?: NumeralValidatorOpts, msgs?: NumeralValidatorMsgs) {\n super(opts, msgs);\n }\n\n protected strToObj(str?: string | null): { obj: Numeral | null, err: string } {\n const opts = this.opts;\n const msgs = this.msgs;\n if (\"required\" in opts) {\n if (opts.required && !str) {\n return {\n obj: null,\n err: msgs.required\n ? tpl(msgs.required,\n {\n min: (\"min\" in opts) ? (\"\" + (opts.min ?? \"\")) : \"\",\n max: (\"max\" in opts) ? (\"\" + (opts.max ?? \"\")) : \"\",\n locale: (\"locale\" in opts)\n ? opts.locale!\n : localeDefault,\n format: (\"format\" in opts)\n ? opts.format!\n : numFormatDefault\n })\n : requiredMsg\n };\n }\n }\n if (str) {\n numeral.locale(opts.locale ?? localeDefault);\n const n = numeral(str);\n let err: boolean = false;\n if (n.value() === null) {\n err = true;\n }\n if (\"strict\" in opts) {\n if (opts.strict && (str !== this.objToStr(n).str)) {\n err = true;\n }\n }\n if (err) {\n const num = (n.value() !== null) ? n : numeral(1234.45);\n return {\n obj: (n.value() !== null) ? n : null,\n err: msgs.invalid_format\n ? tpl(msgs.invalid_format,\n {\n num: this.objToStr(num).str ?? \"\",\n locale: (\"locale\" in opts)\n ? opts.locale!\n : localeDefault,\n format: (\"format\" in opts)\n ? opts.format!\n : numFormatDefault\n })\n : invalidFormatMsg\n };\n }\n return { obj: n, err: \"\" };\n } else {\n return { obj: null, err: \"\" };\n }\n }\n\n protected objCheck(obj?: Numeral | null): string {\n if (obj === undefined || obj === null) {\n return \"\";\n }\n // if (obj.constructor === Number) {\n // obj = numeral(obj);\n // }\n const opts = this.opts;\n const msgs = this.msgs;\n let err: boolean = false;\n if (\"max\" in opts) {\n if (obj.value()! > opts.max!) {\n err = true;\n }\n }\n if (\"min\" in opts) {\n if (obj.value()! < opts.min!) {\n err = true;\n }\n }\n if (err) {\n return msgs.not_in_range\n ? tpl(msgs.not_in_range,\n {\n min: (\"min\" in opts) ? (\"\" + (opts.min ?? \"\")) : \"\",\n max: (\"max\" in opts) ? (\"\" + (opts.max ?? \"\")) : \"\",\n locale: (\"locale\" in opts)\n ? opts.locale!\n : localeDefault,\n format: (\"format\" in opts)\n ? opts.format!\n : numFormatDefault\n })\n : notInRangeMsg;\n }\n return \"\";\n }\n\n protected objToStr(obj?: Numeral | null,\n format?: string): { str: string, err: string } {\n // if (obj && obj.constructor === Number) {\n // obj = numeral(obj);\n // }\n numeral.locale(this.opts.locale ?? localeDefault);\n return {\n str: (obj === undefined || obj === null)\n ? \"\"\n : obj.format(format\n ? format\n : this.opts.format ?? numFormatDefault),\n err: \"\"\n };\n }\n\n}\n\nexport class NumeralNumberValidator\n extends Validator<number, NumeralValidatorOpts, NumeralValidatorMsgs> {\n\n nv: NumeralValidator;\n\n constructor(opts?: NumeralValidatorOpts, msgs?: NumeralValidatorMsgs) {\n super(opts, msgs);\n this.nv = new NumeralValidator(opts, msgs);\n }\n\n protected strToObj(str?: string | null): { obj: number | null, err: string } {\n const res = (this.nv as any).strToObj(str);\n if (res.obj) {\n res.obj = res.obj.value();\n }\n return res;\n }\n\n protected objCheck(obj?: number | null): string {\n const mObj = typeof obj === \"number\" ? numeral(obj) : obj;\n return (this.nv as any).objCheck(mObj);\n }\n\n protected objToStr(obj?: number | null,\n format?: string): { str: string, err: string } {\n const mObj = typeof obj === \"number\" ? numeral(obj) : obj;\n return (this.nv as any).objToStr(mObj, format);\n }\n\n}\n\n// TEST\n\n// import \"numeral/locales\";\n\n// // const nv = new NumeralValidator(\n// const nv = new NumeralNumberValidator(\n// {\n// required: true,\n// min: 3,\n// max: 5000,\n// locale: \"sk\",\n// format: \"0,0.0[00]\",\n// strict: true\n// },\n// {\n// required: \"required {{min}} {{max}} {{locale}} {{format}}\",\n// invalid_format: \"invalid_format {{num}} {{locale}} {{format}}\",\n// not_in_range: \"not_in_range {{min}} {{max}}\"\n// });\n\n// [\n// \"1234,56\",\n// \"1 234,56\",\n// \"1 234,56y\",\n// \"xy\"\n// ].forEach(v => {\n// console.log();\n// console.log(v);\n// const r = nv.validate(v);\n// console.log(r);\n// if (r.obj) {\n// const f = nv.format(r.obj);\n// console.log(f);\n// }\n// });\n","const requiredMsg = \"required\";\nconst notInRangeMsg = \"not_in_range\";\nconst invalidFormatMsg = \"invalid_format\";\nconst invalidOptionMsg = \"invalid_option\";\nconst invalidValueMsg = \"invalid_value\";\n\n// name@doamin.net\nexport const emailRegex = /[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/;\n\n// +421901123456 or +421 901 123 456 or +421-901-123-456 or 901123456 or 901 123 456 or 901-123-456\nexport const phoneRgex = /^(((00)([- ]?)|\\+)(\\d{1,3})([- ]?))?((\\d{3})([- ]?))((\\d{3})([- ]?))(\\d{3})$/;\n\n// 123 45 or 12345\nexport const pscRgex = /^\\d{3} ?\\d{2}$/;\n\n// 450115/8346\nexport const rodneCisloRgex = /^\\s*(\\d\\d)(\\d\\d)(\\d\\d)[ /]*(\\d\\d\\d)(\\d?)\\s*$/;\n\nexport abstract class Validator<TYPE, OPTS, MSGS> {\n\n readonly opts: OPTS;\n readonly msgs: MSGS;\n\n readonly str: string | null = null;\n readonly err: string | null = null;\n readonly obj: TYPE | null = null;\n\n constructor(opts?: OPTS, msgs?: MSGS) {\n this.opts = opts ?? {} as OPTS;\n this.msgs = msgs ?? {} as MSGS;\n }\n\n protected abstract strToObj(str?: string | null): { obj: TYPE | null, err: string };\n\n protected abstract objCheck(obj?: TYPE | null): string;\n\n protected abstract objToStr(obj?: TYPE | null,\n format?: string): { str: string, err: string };\n\n validate(value?: string | TYPE): { str?: string | null, obj?: TYPE | null, err: string } {\n if (typeof value === \"string\" || value === undefined || value === null) {\n const v = value as string | null | undefined;\n (this.str as any) = v;\n const sto = this.strToObj(v);\n (this.obj as any) = sto.obj;\n if (sto.err) {\n (this.err as any) = sto.err;\n return {\n str: v ?? \"\",\n obj: sto.obj,\n err: sto.err\n };\n }\n const err = this.objCheck(sto.obj);\n (this.err as any) = err;\n return {\n str: v ?? \"\",\n obj: sto.obj,\n err\n };\n } else {\n (this.str as any) = (value === undefined || value === null) ? null : (\"\" + value);\n const err = this.objCheck(value);\n (this.err as any) = err;\n return {\n str: this.str,\n obj: value,\n err\n };\n }\n }\n\n format(obj?: TYPE | null, format?: string): { str: string, err: string } {\n // const err = this.objCheck(obj);\n const ots = this.objToStr(obj, format);\n return {\n str: ots.str ?? \"\",\n // err: ots.err ? ots.err : err\n err: ots.err\n };\n }\n\n}\n\nexport function tpl(tmpl: string, data: { [k: string]: any }): string {\n return Object.keys(data)\n .map(k => [k, data[k]])\n .reduce((t, d) =>\n t.replace(new RegExp(`\\\\{\\\\{${d[0]}\\\\}\\\\}`, \"g\"), String(d[1])), tmpl);\n}\n\nexport interface ValidatorDataOpts {\n data?: { [key: string]: any };\n}\n\nexport interface SelectValidatorOpts extends ValidatorDataOpts {\n required?: boolean;\n options?: string[];\n}\n\nexport interface SelectValidatorMsgs {\n required?: string;\n invalid_option?: string;\n}\n\nexport class SelectValidator\n extends Validator<string, SelectValidatorOpts, SelectValidatorMsgs> {\n\n constructor(opts?: SelectValidatorOpts, msgs?: SelectValidatorMsgs) {\n super(opts, msgs);\n }\n\n protected strToObj(str?: string | null): { obj: string | null, err: string } {\n const opts = this.opts;\n const msgs = this.msgs;\n if (\"required\" in opts) {\n if (opts.required && !str) {\n return {\n obj: null,\n err: msgs.required\n ? tpl(msgs.required,\n {\n ...opts.data,\n options: (\"options\" in opts)\n ? opts.options!.join(\", \")\n : \"\"\n })\n : requiredMsg\n };\n }\n }\n return {\n obj: str === undefined ? null : str,\n err: \"\"\n };\n }\n\n protected objCheck(obj?: string | null): string {\n if (obj === undefined || obj === null) {\n return \"\";\n }\n const opts = this.opts;\n const msgs = this.msgs;\n if (\"options\" in opts) {\n if (obj && opts.options!.indexOf(obj) === -1) {\n return msgs.invalid_option\n ? tpl(msgs.invalid_option,\n {\n ...opts.data,\n option: obj === null ? \"\" : obj,\n options: (\"options\" in opts)\n ? opts.options!.join(\", \")\n : \"\"\n })\n : invalidOptionMsg;\n }\n }\n return \"\";\n }\n\n protected objToStr(obj?: string | null,\n format?: string): { str: string, err: string } {\n return { str: obj ?? \"\", err: \"\" };\n }\n\n}\n\nexport interface StringValidatorOpts extends ValidatorDataOpts {\n required?: boolean;\n min?: number;\n max?: number;\n regexp?: RegExp;\n}\n\nexport interface StringValidatorMsgs {\n required?: string;\n invalid_format?: string;\n not_in_range?: string;\n}\n\nexport class StringValidator\n extends Validator<string, StringValidatorOpts, StringValidatorMsgs> {\n\n constructor(opts?: StringValidatorOpts, msgs?: StringValidatorMsgs) {\n super(opts, msgs);\n }\n\n protected strToObj(str?: string | null): { obj: string | null, err: string } {\n const opts = this.opts;\n const msgs = this.msgs;\n if (\"required\" in opts) {\n if (opts.required && !str) {\n return {\n obj: null,\n err: msgs.required\n ? tpl(msgs.required,\n {\n ...opts.data,\n min: (\"min\" in opts) ? (\"\" + (opts.min ?? \"\")) : \"\",\n max: (\"max\" in opts) ? (\"\" + (opts.max ?? \"\")) : \"\",\n regexp: (\"regexp\" in opts)\n ? (\"\" + (opts.regexp ?? \"\"))\n : \"\"\n })\n : requiredMsg\n };\n }\n }\n if (str) {\n if (\"regexp\" in opts) {\n if (!opts.regexp!.test(str)) {\n return {\n obj: null,\n err: msgs.invalid_format\n ? tpl(msgs.invalid_format,\n {\n ...opts.data,\n regexp: (\"regexp\" in opts)\n ? (\"\" + (opts.regexp ?? \"\"))\n : \"\"\n })\n : invalidFormatMsg\n };\n }\n }\n return { obj: str , err: \"\" };\n } else {\n return { obj: null, err: \"\" };\n }\n }\n\n protected objCheck(obj?: string | null): string {\n if (obj === undefined || obj === null) {\n return \"\";\n }\n const opts = this.opts;\n const msgs = this.msgs;\n let err: boolean = false;\n if (\"max\" in opts) {\n if (obj.length > opts.max!) {\n err = true;\n }\n }\n if (\"min\" in opts) {\n if (obj.length < opts.min!) {\n err = true;\n }\n }\n if ((\"min\" in opts) && (\"max\" in opts)) {\n if (obj.length > opts.max! && obj.length < opts.min!) {\n err = true;\n }\n }\n if (err) {\n return msgs.not_in_range\n ? tpl(msgs.not_in_range,\n {\n ...opts.data,\n min: (\"min\" in opts) ? (\"\" + (opts.min ?? \"\")) : \"\",\n max: (\"max\" in opts) ? (\"\" + (opts.max ?? \"\")) : \"\",\n })\n : notInRangeMsg;\n }\n return \"\";\n }\n\n protected objToStr(obj?: string | null,\n format?: string): { str: string, err: string } {\n return { str: obj ?? \"\", err: \"\" };\n }\n\n}\n\nexport interface NumberValidatorOpts extends ValidatorDataOpts {\n required?: boolean;\n min?: number;\n max?: number;\n strict?: boolean;\n decimals?: number;\n}\n\nexport interface NumberValidatorMsgs {\n required?: string;\n invalid_format?: string;\n not_in_range?: string;\n}\n\nexport class NumberValidator\n extends Validator<number, NumberValidatorOpts, NumberValidatorMsgs> {\n\n constructor(opts?: NumberValidatorOpts, msgs?: NumberValidatorMsgs) {\n super(opts, msgs);\n }\n\n protected strToObj(str?: string | null): { obj: number | null, err: string } {\n const opts = this.opts;\n const msgs = this.msgs;\n if (\"required\" in opts) {\n if (opts.required && !str) {\n return {\n obj: null,\n err: msgs.required\n ? tpl(msgs.required,\n {\n ...opts.data,\n min: (\"min\" in opts) ? (\"\" + (opts.min ?? \"\")) : \"\",\n max: (\"max\" in opts) ? (\"\" + (opts.max ?? \"\")) : \"\",\n })\n : requiredMsg\n };\n }\n }\n if (str) {\n const n = Number(str);\n let err: boolean = false;\n if (isNaN(n)) {\n err = true;\n }\n if (opts.strict && (str !== this.objToStr(n).str)) {\n err = true;\n }\n if (err) {\n const num = isNaN(n) ? 1234.45 : n;\n return {\n obj: isNaN(n) ? null : n,\n err: msgs.invalid_format\n ? tpl(msgs.invalid_format,\n {\n ...opts.data,\n num: this.objToStr(num).str ?? \"\"\n })\n : invalidFormatMsg\n };\n }\n return { obj: n, err: \"\" };\n } else {\n return { obj: null, err: \"\" };\n }\n }\n\n protected objCheck(obj?: number | null): string {\n if (obj === undefined || obj === null) {\n return \"\";\n }\n const opts = this.opts;\n const msgs = this.msgs;\n let err: boolean = false;\n if (\"max\" in opts) {\n if (obj > opts.max!) {\n err = true;\n }\n }\n if (\"min\" in opts) {\n if (obj < opts.min!) {\n err = true;\n }\n }\n if (err) {\n return msgs.not_in_range\n ? tpl(msgs.not_in_range,\n {\n ...opts.data,\n min: (\"min\" in opts) ? (\"\" + (opts.min ?? \"\")) : \"\",\n max: (\"max\" in opts) ? (\"\" + (opts.max ?? \"\")) : \"\",\n })\n : notInRangeMsg;\n }\n return \"\";\n }\n\n protected objToStr(obj?: number | null,\n format?: string): { str: string, err: string } {\n let str;\n if (obj === undefined || obj === null) {\n str = \"\";\n } else {\n if (\"decimals\" in this.opts) {\n str = obj.toFixed(this.opts.decimals);\n } else {\n str = String(obj);\n }\n }\n return {\n str,\n err: \"\"\n };\n }\n\n}\n\nexport interface DateValidatorOpts extends ValidatorDataOpts {\n required?: boolean;\n min?: Date;\n max?: Date;\n dateOnly?: boolean;\n iso?: boolean;\n // strict?: boolean;\n\n}\n\nexport interface DateValidatorMsgs {\n required?: string;\n invalid_format?: string;\n not_in_range?: string;\n}\n\nconst dateToLocaleString = (date: Date) => date.toLocaleString();\nconst dateToLocaleDateString = (date: Date) => date.toLocaleDateString();\n\nconst dateToIsoString = (date: Date) => date.toISOString();\nconst dateToIsoDateString = (date: Date) => new Date(date.toDateString()).toISOString();\n\nexport class DateValidator\n extends Validator<Date, DateValidatorOpts, DateValidatorMsgs> {\n\n dateToStr: (date: Date) => string;\n\n constructor(opts?: DateValidatorOpts, msgs?: DateValidatorMsgs) {\n super(opts, msgs);\n if (opts?.iso) {\n this.dateToStr = opts?.dateOnly ? dateToIsoDateString : dateToIsoString;\n } else {\n this.dateToStr = opts?.dateOnly ? dateToLocaleDateString : dateToLocaleString;\n }\n if (opts?.dateOnly && opts?.min) {\n opts.min = new Date(opts.min.getFullYear(), opts.min.getMonth(), opts.min.getDate());\n }\n if (opts?.dateOnly && opts?.max) {\n opts.max = new Date(opts.max.getFullYear(), opts.max.getMonth(), opts.max.getDate() + 1);\n }\n }\n\n protected strToObj(str?: string | null): { obj: Date | null, err: string } {\n const opts = this.opts;\n const msgs = this.msgs;\n if (\"required\" in opts) {\n if (opts.required && !str) {\n return {\n obj: null,\n err: msgs.required\n ? tpl(msgs.required,\n {\n ...opts.data,\n min: (\"min\" in opts && opts.min) ? this.dateToStr(opts.min) : \"\",\n max: (\"max\" in opts && opts.max) ? this.dateToStr(opts.max) : \"\"\n })\n : requiredMsg\n };\n }\n }\n if (str) {\n const dt = Date.parse(str);\n let d = new Date(dt);\n if (opts.dateOnly) {\n d = new Date(d.getFullYear(), d.getMonth(), d.getDate());\n }\n let err: boolean = false;\n if (isNaN(dt)) {\n err = true;\n }\n // if (opts.strict && (str !== this.objToStr(d).str)) {\n // err = true;\n // }\n if (err) {\n const date = isNaN(dt) ? new Date() : d;\n return {\n obj: isNaN(dt) ? null : d,\n err: msgs.invalid_format\n ? tpl(msgs.invalid_format,\n {\n ...opts.data,\n date: this.objToStr(date).str ?? \"\"\n })\n : invalidFormatMsg\n };\n }\n return { obj: d, err: \"\" };\n } else {\n return { obj: null, err: \"\" };\n }\n }\n\n protected objCheck(obj?: Date | null): string {\n if (obj === undefined || obj === null) {\n return \"\";\n }\n const opts = this.opts;\n const msgs = this.msgs;\n let err: boolean = false;\n if (\"max\" in opts) {\n if (opts.max && obj.getTime() > opts.max.getTime()) {\n err = true;\n }\n }\n if (\"min\" in opts) {\n if (opts.min && obj < opts.min) {\n err = true;\n }\n }\n if (err) {\n return msgs.not_in_range\n ? tpl(msgs.not_in_range,\n {\n ...opts.data,\n min: (\"min\" in opts && opts.min) ? this.dateToStr(opts.min) : \"\",\n max: (\"max\" in opts && opts.max) ? this.dateToStr(opts.max) : \"\"\n })\n : notInRangeMsg;\n }\n return \"\";\n }\n\n protected objToStr(obj?: Date | null,\n format?: string): { str: string, err: string } {\n return {\n str: (obj === undefined || obj === null) ? \"\" : this.dateToStr(obj),\n err: \"\"\n };\n }\n\n}\n\nexport interface BooleanValidatorOpts extends ValidatorDataOpts {\n required?: boolean;\n value?: boolean;\n}\n\nexport interface BooleanValidatorMsgs {\n required?: string;\n invalid_value?: string;\n}\n\nexport class BooleanValidator\n extends Validator<boolean, BooleanValidatorOpts, BooleanValidatorMsgs> {\n\n constructor(opts?: BooleanValidatorOpts, msgs?: BooleanValidatorMsgs) {\n super(opts, msgs);\n }\n\n protected strToObj(str?: string | null): { obj: boolean | null, err: string } {\n const opts = this.opts;\n const msgs = this.msgs;\n if (\"required\" in opts) {\n if (opts.required && !str) {\n return {\n obj: null,\n err: msgs.required\n ? tpl(msgs.required,\n {\n ...opts.data\n })\n : requiredMsg\n };\n }\n }\n let b;\n switch (str) {\n case \"true\":\n case \"1\":\n case \"on\":\n case \"yes\":\n b = true;\n break;\n default:\n b = false;\n }\n return { obj: b, err: \"\" };\n }\n\n protected objCheck(obj?: boolean | null): string {\n if (obj === undefined || obj === null) {\n return \"\";\n }\n const opts = this.opts;\n const msgs = this.msgs;\n let err = false;\n if (\"value\" in opts) {\n if (obj !== opts.value) {\n err = true;\n }\n }\n if (err) {\n return msgs.invalid_value\n ? tpl(msgs.invalid_value,\n {\n ...opts.data,\n value: (\"value\" in opts) ? (\"\" + (opts.value ?? \"\")) : \"\",\n })\n : invalidValueMsg;\n }\n return \"\";\n }\n\n protected objToStr(obj?: boolean | null,\n format?: string): { str: string, err: string } {\n return {\n str: (obj === undefined || obj === null) ? \"\" : (\"\" + obj),\n err: \"\"\n };\n }\n\n}\n\ntype FormValidators<TYPE> = { [key in keyof TYPE]: Validator<any, any, any> };\n\nexport type Str<TYPE> = { [key in keyof TYPE]: string };\nexport type Obj<TYPE> = { [key in keyof TYPE]: any };\nexport type Err<TYPE> = { [key in keyof TYPE]: string };\n\nexport interface FormValidatorData<TYPE> {\n str: Str<TYPE>;\n obj: Obj<TYPE>;\n err: Err<TYPE>;\n valid: boolean;\n}\n\nexport class FormValidator<TYPE extends { [key: string]: any }> {\n\n readonly validators: FormValidators<TYPE> = {} as FormValidators<TYPE>;\n\n readonly str?: Str<TYPE>;\n readonly obj?: Obj<TYPE>;\n readonly err?: Err<TYPE>;\n\n readonly valid?: boolean;\n\n addValidator(field: keyof TYPE, validator: Validator<any, any, any>): this {\n this.validators[field] = validator;\n return this;\n }\n\n validate(data: { [key in keyof TYPE]?: string }): this {\n const res = Object.keys(this.validators)\n .reduce(\n (a, k) => {\n const v = (data as any)[k];\n const r = (this.validators as any)[k].validate(v);\n (a.str as any)[k] = r.str;\n (a.obj as any)[k] = r.obj;\n (a.err as any)[k] = r.err;\n r.err && (a.valid = false);\n return a;\n },\n { str: {}, obj: {}, err: {}, valid: true });\n (this.str as any) = res.str;\n (this.obj as any) = res.obj;\n (this.err as any) = res.err;\n (this.valid as any) = res.valid;\n return this;\n }\n\n format(data: { [key in keyof TYPE]: any }): this {\n const res = Object.keys(this.validators)\n .reduce(\n (a, k) => {\n const v = (data as any)[k];\n const r = (this.validators as any)[k].format(v);\n (a.str as any)[k] = r.str;\n (a.obj as any)[k] = v;\n (a.err as any)[k] = r.err;\n r.err && (a.valid = false);\n return a;\n },\n { str: {}, obj: {}, err: {}, valid: true });\n (this.str as any) = res.str;\n (this.obj as any) = res.obj;\n (this.err as any) = res.err;\n (this.valid as any) = res.valid;\n return this;\n }\n\n data(): FormValidatorData<TYPE> {\n return {\n str: this.str!,\n obj: this.obj!,\n err: this.err!,\n valid: this.valid!\n };\n }\n\n}\n\n\n// TEST\n\n// const sv = new StringValidator(\n// {\n// required: true,\n// min: 3,\n// max: 5,\n// // regexp: /^[0123]+$/\n// data: {\n// xxx: \"xXx\"\n// }\n// },\n// {\n// required: \"required {{min}} {{max}} {{regexp}}\",\n// invalid_format: \"invalid_format {{regexp}}\",\n// not_in_range: \"not_in_range {{min}} {{max}} | data.xxx={{xxx}}\"\n// });\n\n// [\n// \"x1234\",\n// \"x1234y\",\n// \"xy\"\n// ].forEach(v => {\n// console.log();\n// console.log(v);\n// const r = sv.validate(v);\n// console.log(r);\n// if (r.obj) {\n// const f = sv.format(r.obj);\n// console.log(f);\n// }\n// });\n\n// console.log();\n\n// const nv = new NumberValidator(\n// {\n// required: true,\n// min: 3,\n// max: 500000,\n// decimals: 2,\n// strict: true\n// },\n// {\n// required: \"required {{min}} {{max}}\",\n// invalid_format: \"invalid_format {{num}}\",\n// not_in_range: \"not_in_range {{min}} {{max}}\"\n// });\n\n// console.log(nv.format(undefined));\n// console.log(nv.format(12345.6789));\n\n// console.log(nv.validate(\"12345.6789\"));\n// console.log(nv.validate(\"12345,6789\"));\n// console.log(nv.validate(\"12,345.6789\"));\n\n// const dv = new DateValidator(\n// {\n// required: false,\n// // min: new Date(),\n// max: new Date(),\n// clearTime: false\n// // strict: true\n// },\n// {\n// required: \"required {{min}} {{max}}\",\n// invalid_format: \"invalid_format {{date}}\",\n// not_in_range: \"not_in_range {{min}} {{max}}\"\n// });\n\n// console.log(dv.opts);\n\n// console.log(dv.format(undefined));\n\n// console.log(dv.format(new Date));\n\n// console.log(dv.validate(\"9/17/2020, 10:46:07 AM\"));\n// console.log(dv.format(dv.obj).str);\n// console.log(dv.validate(\"9/17/2020\"));\n// console.log(dv.format(dv.obj).str);\n// console.log(dv.validate(\"2020-09-17T08:46:07.000Z\"));\n// console.log(dv.format(dv.obj).str);\n// console.log(dv.validate(\"\"));\n// console.log(dv.format(dv.obj).str);\n\n// console.log(new Date().toString());\n// console.log(new Date().toDateString());\n// console.log(new Date().toTimeString());\n// console.log(new Date().toLocaleString());\n// console.log(new Date().toLocaleDateString());\n// console.log(new Date().toLocaleTimeString());\n// console.log();\n// console.log(new Date(Date.parse(new Date().toString())));\n// console.log(new Date(Date.parse(new Date().toDateString())));\n// console.log(new Date(Date.parse(new Date().toTimeString())));\n// console.log(new Date(Date.parse(new Date().toLocaleString())));\n// console.log(new Date(Date.parse(new Date().toLocaleDateString())));\n// console.log(new Date(Date.parse(new Date().toLocaleTimeString())));\n\n// const formData = { str: \"123a\", num: \"123456.789\", date: \"9/17/2020, 10:46:07 AM\" };\n// const formData = { str: \"\", num: \"\", date: \"\" };\n// const formData = { str: undefined, num: undefined, date: undefined };\n\n// const fv = new FormValidator<typeof formData>()\n// .addValidator(\"str\", sv)\n// .addValidator(\"num\", nv)\n// .addValidator(\"date\", dv)\n// .validate(formData);\n\n// console.log(fv.data());\n\n// fv.format(fv.obj!);\n// console.log(fv);\n\n// const ovData = { str: \"123a\", num: \"123.45\", date: \"02.01.2019 12:12\" };\n\n// const ov = new ObjectValidator<typeof ovData>()\n// .addValidator(\"str\", sv)\n// .addValidator(\"num\", nv)\n// // .addValidator(\"date\", dv)\n// .validate(ovData);\n\n// // console.log(ov);\n\n// ov.format(ov.obj!);\n// console.log(ov);\n\n// console.log();\n\n// interface ReportFormData {\n// spz: string;\n// tachometer: string;\n// dateCreated: string;\n// user: {\n// // name: string[];\n// email: string;\n// };\n// }\n\n// const dov = new ObjectValidator<ReportFormData>()\n// .addValidator(\"spz\", new StringValidator({ required: true }))\n// .addValidator(\"tachometer\", new NumberValidator({ required: true, min: 1 } ))\n// .addValidator(\"dateCreated\", new StringValidator({ required: true }))\n// .addValidator(\"user\", new ObjectValidator<ReportFormData[\"user\"]>()\n// .addValidator(\"email\", new StringValidator({ required: true}))\n// // .addValidator(\"name\", { })\n// // new ArrayValidator({\n// // required: true,\n// // validator: new StringValidator({ required: true })\n// // })\n// );\n\n// dov.validate(\n// {\n// spz: \"dasdas\",\n// tachometer: \"111222\",\n// // dateCreated: \"10.02.2019\",\n// user: {\n// // email: \"dsafasdf\",\n// }\n// },\n// {\n// dateCreated: \"01.03.2011\",\n// spz: \"32ds9f0f\",\n// tachometer: \"3213214214\",\n// user: {\n// email: \"sadmaskdmk2@dsadsamkl.com\"\n// }\n// });\n\n// const avn = new ArrayValidator<number>(new NumberValidator());\n// const rn = avn.validate([345, 123]);\n// console.log(rn);\n\n\n// interface D {\n// a: number;\n// b?: string;\n// }\n\n// const av = new ArrayValidator<T>(new ObjectValidator<T>()\n// .addValidator(\"a\", new NumberValidator())\n// .addValidator(\"b\", new StringValidator({ required: true }))\n// );\n\n// const d: D[] = [\n// { a: 123, b: \"text\" },\n// // { a: 5.6, b: \"\" },\n// { a: 5.6 }\n// ];\n\n// const r = av.validate(d);\n// console.log(r);\n\n// const ro = new ObjectValidator<T>()\n// .addValidator(\"a\", new NumberValidator())\n// .addValidator(\"b\", new StringValidator({ required: true }))\n// .validate({\n// a: \"5.6\",\n// b: undefined\n// // b: \"text\"\n// });\n// console.log(\"---\", ro);\n\n// const v = new StringValidator({ required: true });\n// const str = undefined;\n// const sr = v.validate(str!);\n// console.log(sr);\n\n// const v = new StringValidator({ required: true, min: 8 });\n// const str = \"\";\n// const sr = v.format(str);\n// console.log(sr, v);\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(7735);\n"],"names":["root","factory","exports","module","define","amd","a","i","self","numeral","_","decimal","binary","unformatRegex","formats","locales","defaults","currentLocale","zeroFormat","nullFormat","defaultFormat","scalePercentBy100","options","Numeral","input","number","this","_input","_value","value","kind","unformatFunction","regexp","isNumeral","isNaN","replace","length","regexps","unformat","match","stringToNumber","Number","version","obj","numberToFormat","format","roundingFunction","abbrForce","abs","int","precision","signed","thousands","output","leadingCount","locale","negP","optDec","abbr","trillion","billion","million","neg","Math","includes","indexOf","RegExp","abbreviations","thousand","toString","split","toFixed","delimiters","slice","String","string","abbreviation","stringOriginal","currency","symbol","pow","min","search","insert","subString","start","reduce","array","callback","TypeError","t","Object","len","k","arguments","multiplier","x","parts","correctionFactor","Array","prototype","call","accum","next","mn","maxDecimals","optionals","boundedPrecision","optionalsRegExp","power","splitValue","minDecimals","max","key","toLowerCase","localeData","Error","reset","property","register","type","name","validate","val","culture","_decimalSep","_thousandSep","_currSymbol","_valArray","_abbrObj","_thousandRegEx","temp","console","warn","trim","e","substr","fn","clone","inputString","formatFunction","round","set","add","corrFactor","curr","currI","O","subtract","multiply","divide","difference","ordinal","b","space","splice","join","base","suffixes","concat","filter","item","bytes","suffix","bytesMultiplier","symbols","before","after","toExponential","hours","floor","minutes","seconds","timeArray","localeDefault","numFormatDefault","NumeralValidator","Validator","constructor","opts","msgs","super","strToObj","str","required","err","tpl","n","strict","objToStr","num","invalid_format","objCheck","not_in_range","NumeralNumberValidator","nv","res","mObj","requiredMsg","notInRangeMsg","invalidFormatMsg","emailRegex","phoneRgex","pscRgex","rodneCisloRgex","v","sto","ots","tmpl","data","keys","map","d","undefined","invalid_option","option","test","decimals","dateToLocaleString","date","toLocaleString","dateToLocaleDateString","toLocaleDateString","dateToIsoString","toISOString","dateToIsoDateString","Date","toDateString","iso","dateToStr","dateOnly","getFullYear","getMonth","getDate","dt","parse","getTime","invalid_value","validators","addValidator","field","validator","r","valid","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__"],"sourceRoot":""}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"mappings":"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","sources":["src/encode.ts","demo/encode_demo.ts"],"sourcesContent":["\nexport class UrlEncodedData {\n\n static encode(data: any, prefix = \"\"): string {\n let str: string;\n if (typeof data !== \"object\") {\n str = data;\n } else {\n const params: string[] = [];\n let size = 0;\n for (let key in data) {\n if (data.hasOwnProperty(key)) {\n let value = data[key];\n if (!(value instanceof Array)) {\n value = [value];\n }\n const valueLength = value.length;\n for (let i = 0; i < valueLength; i++) {\n const val = value[i];\n if ((typeof val === \"object\") && (val != null)) {\n params[size++] = arguments.callee(val, prefix + key + \".\");\n } else { // list\n params[size] = encodeURIComponent(prefix + key);\n if (val != null) {\n params[size] += \"=\" + encodeURIComponent(val);\n }\n size++;\n }\n }\n }\n }\n str = params.join(\"&\");\n }\n return str;\n }\n\n static decode(str: string): any {\n const data: any = {};\n if (str) {\n const params = str.split(\"&\");\n const paramsLength = params.length;\n for (let j = 0; j < paramsLength; j++) {\n const parameter = params[j].split(\"=\");\n const key = decodeURIComponent(parameter[0]);\n if (parameter.length > 1) {\n const value = decodeURIComponent(parameter[1]);\n const path = key.split(\".\");\n const size = path.length;\n let obj = data;\n for (let i = 0; i < size; i++) {\n const property = path[i];\n const o = obj[property];\n if (i === (size - 1)) { // list\n if (!o) {\n obj[property] = value;\n } else if (o instanceof Array) {\n obj[property].push(value);\n } else { // create array\n obj[property] = [o];\n obj[property][1] = value;\n }\n } else {\n if (!o) {\n obj[property] = {};\n }\n obj = obj[property];\n }\n }\n } else {\n data[key] = null;\n }\n }\n }\n return data;\n }\n\n}\n\nexport class Base64 {\n\n private static _keyStr = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\n\n static encode(e: string): string {\n let t = \"\";\n let n: any, r: any, i: any, s: any, o: any, u: any, a: any;\n let f = 0;\n e = Base64._utf8_encode(e);\n while (f < e.length) {\n n = e.charCodeAt(f++);\n r = e.charCodeAt(f++);\n i = e.charCodeAt(f++);\n s = n >> 2;\n o = (n & 3) << 4 | r >> 4;\n u = (r & 15) << 2 | i >> 6;\n a = i & 63;\n if (isNaN(r)) {\n u = a = 64;\n } else if (isNaN(i)) {\n a = 64;\n }\n t = t + Base64._keyStr.charAt(s) + Base64._keyStr.charAt(o) + Base64._keyStr.charAt(u) + Base64._keyStr.charAt(a);\n }\n return t;\n }\n\n static decode(e: string): string {\n let t = \"\";\n let n: any, r: any, i: any;\n let s: any, o: any, u: any, a: any;\n let f = 0;\n e = e.replace(/[^A-Za-z0-9\\+\\/\\=]/g, \"\");\n while (f < e.length) {\n s = this._keyStr.indexOf(e.charAt(f++));\n o = this._keyStr.indexOf(e.charAt(f++));\n u = this._keyStr.indexOf(e.charAt(f++));\n a = this._keyStr.indexOf(e.charAt(f++));\n n = s << 2 | o >> 4;\n r = (o & 15) << 4 | u >> 2;\n i = (u & 3) << 6 | a;\n t = t + String.fromCharCode(n);\n if (u !== 64) {\n t = t + String.fromCharCode(r);\n }\n if (a !== 64) {\n t = t + String.fromCharCode(i);\n }\n }\n t = Base64._utf8_decode(t);\n return t;\n }\n\n private static _utf8_encode(e: string): string {\n e = e.replace(/\\r\\n/g, \"\\n\");\n let t = \"\";\n for (let n = 0; n < e.length; n++) {\n const r = e.charCodeAt(n);\n if (r < 128) {\n t += String.fromCharCode(r);\n } else if (r > 127 && r < 2048) {\n t += String.fromCharCode(r >> 6 | 192);\n t += String.fromCharCode(r & 63 | 128);\n } else {\n t += String.fromCharCode(r >> 12 | 224);\n t += String.fromCharCode(r >> 6 & 63 | 128);\n t += String.fromCharCode(r & 63 | 128);\n }\n }\n return t;\n }\n\n private static _utf8_decode(e: string): string {\n let t = \"\";\n let n = 0;\n let r = 0;\n let c1 = 0;\n let c2 = 0;\n while (n < e.length) {\n r = e.charCodeAt(n);\n if (r < 128) {\n t += String.fromCharCode(r);\n n++;\n } else if (r > 191 && r < 224) {\n c1 = e.charCodeAt(n + 1);\n t += String.fromCharCode((r & 31) << 6 | c1 & 63);\n n += 2;\n } else {\n c1 = e.charCodeAt(n + 1);\n c2 = e.charCodeAt(n + 2);\n t += String.fromCharCode((r & 15) << 12 | (c1 & 63) << 6 | c2 & 63);\n n += 3;\n }\n }\n return t;\n }\n}\n","import { UrlEncodedData, Base64 } from \"../src/encode\";\n\n\n// UrlEncodedData\nconst dataObj = {text: \"Hello World!\", num: 5, a: [1, 2, \"33\"]};\nconsole.log(dataObj);\n\nconst encodedData = UrlEncodedData.encode(dataObj);\nconsole.log(\"UrlEncodedData encode: \", encodedData,\n encodedData === \"text=Hello%20World!&num=5&a=1&a=2&a=33\");\n\nconst decodedData = UrlEncodedData.decode(encodedData);\nconsole.log(\"UrlEncodedData decode: \", JSON.stringify(decodedData),\n JSON.stringify(decodedData) === `{\"text\":\"Hello World!\",\"num\":\"5\",\"a\":[\"1\",\"2\",\"33\"]}`);\n\n\n// Base64\nconst dataStr = \"Hello World!\";\nconsole.log(dataStr);\n\nconst encodedString = Base64.encode(dataStr);\nconsole.log(\"Base64 encode: \", encodedString, encodedString === \"SGVsbG8gV29ybGQh\");\n\nconst decodedString = Base64.decode(encodedString);\nconsole.log(\"Base64 decode: \", decodedString, decodedString === \"Hello World!\");\n"],"names":["$47f3c37c486f5140$export$650092b01c62e427","static","data","prefix","str","params","size","key","hasOwnProperty","value","Array","valueLength","length","i","val","arguments","callee","encodeURIComponent","join","split","paramsLength","j","parameter","decodeURIComponent","path","obj","property","o","push","$47f3c37c486f5140$export$f436b0c2107cbd35","e","n","r","s","u","a","t","f","_utf8_encode","charCodeAt","isNaN","_keyStr","charAt","replace","this","indexOf","String","fromCharCode","_utf8_decode","c1","c2","$b382934929881783$var$dataObj","text","num","console","log","$b382934929881783$var$encodedData","encode","$b382934929881783$var$decodedData","decode","JSON","stringify","$b382934929881783$var$dataStr","$b382934929881783$var$encodedString","$b382934929881783$var$decodedString"],"version":3,"file":"encode_demo.ce182166.js.map"}
|
|
1
|
+
{"mappings":"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","sources":["src/encode.ts","demo/encode_demo.ts"],"sourcesContent":["\nexport class UrlEncodedData {\n\n static encode(data: any, prefix = \"\"): string {\n let str: string;\n if (typeof data !== \"object\") {\n str = data;\n } else {\n const params: string[] = [];\n let size = 0;\n for (let key in data) {\n if (data.hasOwnProperty(key)) {\n let value = data[key];\n if (!(value instanceof Array)) {\n value = [value];\n }\n const valueLength = value.length;\n for (let i = 0; i < valueLength; i++) {\n const val = value[i];\n if ((typeof val === \"object\") && (val != null)) {\n params[size++] = arguments.callee(val, prefix + key + \".\");\n } else { // list\n params[size] = encodeURIComponent(prefix + key);\n if (val != null) {\n params[size] += \"=\" + encodeURIComponent(val);\n }\n size++;\n }\n }\n }\n }\n str = params.join(\"&\");\n }\n return str;\n }\n\n static decode(str: string): any {\n const data: any = {};\n if (str) {\n const params = str.split(\"&\");\n const paramsLength = params.length;\n for (let j = 0; j < paramsLength; j++) {\n const parameter = params[j].split(\"=\");\n const key = decodeURIComponent(parameter[0]);\n if (parameter.length > 1) {\n const value = decodeURIComponent(parameter[1]);\n const path = key.split(\".\");\n const size = path.length;\n let obj = data;\n for (let i = 0; i < size; i++) {\n const property = path[i];\n const o = obj[property];\n if (i === (size - 1)) { // list\n if (!o) {\n obj[property] = value;\n } else if (o instanceof Array) {\n obj[property].push(value);\n } else { // create array\n obj[property] = [o];\n obj[property][1] = value;\n }\n } else {\n if (!o) {\n obj[property] = {};\n }\n obj = obj[property];\n }\n }\n } else {\n data[key] = null;\n }\n }\n }\n return data;\n }\n\n}\n\nexport class Base64 {\n\n private static _keyStr = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\n\n static encode(e: string): string {\n let t = \"\";\n let n: any, r: any, i: any, s: any, o: any, u: any, a: any;\n let f = 0;\n e = Base64._utf8_encode(e);\n while (f < e.length) {\n n = e.charCodeAt(f++);\n r = e.charCodeAt(f++);\n i = e.charCodeAt(f++);\n s = n >> 2;\n o = (n & 3) << 4 | r >> 4;\n u = (r & 15) << 2 | i >> 6;\n a = i & 63;\n if (isNaN(r)) {\n u = a = 64;\n } else if (isNaN(i)) {\n a = 64;\n }\n t = t + Base64._keyStr.charAt(s) + Base64._keyStr.charAt(o) + Base64._keyStr.charAt(u) + Base64._keyStr.charAt(a);\n }\n return t;\n }\n\n static decode(e: string): string {\n let t = \"\";\n let n: any, r: any, i: any;\n let s: any, o: any, u: any, a: any;\n let f = 0;\n e = e.replace(/[^A-Za-z0-9\\+\\/\\=]/g, \"\");\n while (f < e.length) {\n s = this._keyStr.indexOf(e.charAt(f++));\n o = this._keyStr.indexOf(e.charAt(f++));\n u = this._keyStr.indexOf(e.charAt(f++));\n a = this._keyStr.indexOf(e.charAt(f++));\n n = s << 2 | o >> 4;\n r = (o & 15) << 4 | u >> 2;\n i = (u & 3) << 6 | a;\n t = t + String.fromCharCode(n);\n if (u !== 64) {\n t = t + String.fromCharCode(r);\n }\n if (a !== 64) {\n t = t + String.fromCharCode(i);\n }\n }\n t = Base64._utf8_decode(t);\n return t;\n }\n\n private static _utf8_encode(e: string): string {\n e = e.replace(/\\r\\n/g, \"\\n\");\n let t = \"\";\n for (let n = 0; n < e.length; n++) {\n const r = e.charCodeAt(n);\n if (r < 128) {\n t += String.fromCharCode(r);\n } else if (r > 127 && r < 2048) {\n t += String.fromCharCode(r >> 6 | 192);\n t += String.fromCharCode(r & 63 | 128);\n } else {\n t += String.fromCharCode(r >> 12 | 224);\n t += String.fromCharCode(r >> 6 & 63 | 128);\n t += String.fromCharCode(r & 63 | 128);\n }\n }\n return t;\n }\n\n private static _utf8_decode(e: string): string {\n let t = \"\";\n let n = 0;\n let r = 0;\n let c1 = 0;\n let c2 = 0;\n while (n < e.length) {\n r = e.charCodeAt(n);\n if (r < 128) {\n t += String.fromCharCode(r);\n n++;\n } else if (r > 191 && r < 224) {\n c1 = e.charCodeAt(n + 1);\n t += String.fromCharCode((r & 31) << 6 | c1 & 63);\n n += 2;\n } else {\n c1 = e.charCodeAt(n + 1);\n c2 = e.charCodeAt(n + 2);\n t += String.fromCharCode((r & 15) << 12 | (c1 & 63) << 6 | c2 & 63);\n n += 3;\n }\n }\n return t;\n }\n}\n","import { UrlEncodedData, Base64 } from \"../src/encode\";\n\n\n// UrlEncodedData\nconst dataObj = {text: \"Hello World!\", num: 5, a: [1, 2, \"33\"]};\nconsole.log(dataObj);\n\nconst encodedData = UrlEncodedData.encode(dataObj);\nconsole.log(\"UrlEncodedData encode: \", encodedData,\n encodedData === \"text=Hello%20World!&num=5&a=1&a=2&a=33\");\n\nconst decodedData = UrlEncodedData.decode(encodedData);\nconsole.log(\"UrlEncodedData decode: \", JSON.stringify(decodedData),\n JSON.stringify(decodedData) === `{\"text\":\"Hello World!\",\"num\":\"5\",\"a\":[\"1\",\"2\",\"33\"]}`);\n\n\n// Base64\nconst dataStr = \"Hello World!\";\nconsole.log(dataStr);\n\nconst encodedString = Base64.encode(dataStr);\nconsole.log(\"Base64 encode: \", encodedString, encodedString === \"SGVsbG8gV29ybGQh\");\n\nconst decodedString = Base64.decode(encodedString);\nconsole.log(\"Base64 decode: \", decodedString, decodedString === \"Hello World!\");\n"],"names":["$47f3c37c486f5140$export$650092b01c62e427","static","data","prefix","str","params","size","key","hasOwnProperty","value","Array","valueLength","length","i","val","arguments","callee","encodeURIComponent","join","split","paramsLength","j","parameter","decodeURIComponent","path","obj","property","o","push","$47f3c37c486f5140$export$f436b0c2107cbd35","e","n","r","s","u","a","t","f","_utf8_encode","charCodeAt","isNaN","_keyStr","charAt","replace","this","indexOf","String","fromCharCode","_utf8_decode","c1","c2","$b382934929881783$var$dataObj","text","num","console","log","$b382934929881783$var$encodedData","encode","$b382934929881783$var$decodedData","decode","JSON","stringify","$b382934929881783$var$dataStr","$b382934929881783$var$encodedString","$b382934929881783$var$decodedString"],"version":3,"file":"encode_demo.ce182166.js.map"}
|