diff --git a/build.gradle b/build.gradle index ace01c0..a20169a 100644 --- a/build.gradle +++ b/build.gradle @@ -105,6 +105,9 @@ dependencies { // https://mvnrepository.com/artifact/commons-dbcp/commons-dbcp implementation group: 'commons-dbcp', name: 'commons-dbcp', version: '1.4' + // validation + implementation 'org.springframework.boot:spring-boot-starter-validation' + } bootJar { diff --git a/frontend/package.json b/frontend/package.json index 10e7299..8e86da0 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,7 +1,7 @@ { - "name": "hub-web-easy", + "name": "mhez-admin-web", "version": "0.1.0", - "private": true, + "private": true, "proxy":"http://localhost:7070", "scripts": { "serve": "vue-cli-service serve --port 3000", diff --git a/frontend/src/App.vue b/frontend/src/App.vue index 066bcc3..9686b14 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -1,3 +1,3 @@ - + diff --git a/frontend/src/assets/css/common.css b/frontend/src/assets/css/common.css index 701002b..35c95fb 100644 --- a/frontend/src/assets/css/common.css +++ b/frontend/src/assets/css/common.css @@ -31,6 +31,7 @@ footer,header,hgroup,menu,nav,section { display:block; } table { + font-family: 'SpoqaHanSansNeo'; border-collapse:collapse; border:0 none; } @@ -38,16 +39,28 @@ input, select, option{ font-family: 'SpoqaHanSansNeo'; } input:focus{ - outline: 1px solid #000; + border: 1px solid #000 !important; } + +input:focus + label{ + color:#000; +} + +input:valid + label{ + color:#000; +} + + select:focus{ - outline: 1px solid #000; + border: 1px solid #000 !important; } + + input[type="checkbox"] + label{ cursor: pointer; } input:disabled{ - background-color: #eeeeee; + background-color: #eeeeee; border:1px solid #e7e7e7 !important; } input[type="radio"]{ display:none; diff --git a/frontend/src/assets/css/layout.css b/frontend/src/assets/css/layout.css index b9c67fa..add9b44 100644 --- a/frontend/src/assets/css/layout.css +++ b/frontend/src/assets/css/layout.css @@ -5,31 +5,58 @@ SpoqaHanSansNeo ======================*/ @font-face { font-family: 'SpoqaHanSansNeo'; - src: url('../font/SpoqaHanSansNeo-Thin.woff') format('woff'); + src: url('../font/SpoqaHanSansNeo-Thin.woff2') format('woff2'); font-weight: 100; font-style: normal; } @font-face { font-family: 'SpoqaHanSansNeo'; - src: url('../font/SpoqaHanSansNeo-Light.woff') format('woff'); + src: url('../font/SpoqaHanSansNeo-Light.woff2') format('woff2'); font-weight: 300; font-style: normal; } @font-face { font-family: 'SpoqaHanSansNeo'; - src: url('../font/SpoqaHanSansNeo-Regular.woff') format('woff'); + src: url('../font/SpoqaHanSansNeo-Regular.woff2') format('woff2'); font-weight: 400; font-style: normal; } @font-face { font-family: 'SpoqaHanSansNeo'; - src: url('../font/SpoqaHanSansNeo-Medium.woff') format('woff'); + src: url('../font/SpoqaHanSansNeo-Medium.woff2') format('woff2'); font-weight: 500; font-style: normal; } @font-face { font-family: 'SpoqaHanSansNeo'; - src: url('../font/SpoqaHanSansNeo-Bold.woff') format('woff'); + src: url('../font/SpoqaHanSansNeo-Bold.woff2') format('woff2'); + font-weight: 700; + font-style: normal; +} +/*====================== +LGSmHa +======================*/ +@font-face { + font-family: 'LGSmHa'; + src: url('../font/LGSmHaL.woff2') format('woff2'); + font-weight: 300; + font-style: normal; +} +@font-face { + font-family: 'LGSmHa'; + src: url('../font/LGSmHaR.woff2') format('woff2'); + font-weight: 400; + font-style: normal; +} +@font-face { + font-family: 'LGSmHa'; + src: url('../font/LGSmHaSB.woff2') format('woff2'); + font-weight: 600; + font-style: normal; +} +@font-face { + font-family: 'LGSmHa'; + src: url('../font/LGSmHaB.woff2') format('woff2'); font-weight: 700; font-style: normal; } @@ -45,6 +72,16 @@ body{ .div-cont {width: 1200px; padding: 0 30px; box-sizing: border-box; margin: auto;} +/* +#스크롤바 +*/ +::-webkit-scrollbar {width:5px; height: 5px; border: 0px solid #fff; background: rgba(140, 140, 140, 0.0);} +::-webkit-scrollbar-button:start:decrement, ::-webkit-scrollbar-button:end:increment {display: block; height: 4px; background:rgba(0,0,0,0)} +::-webkit-scrollbar-track {background: rgba(140,140,140,0.0); -webkit-border-radius: 10px; border-radius:10px; -webkit-box-shadow: inset 0 0 4px rgba(0,0,0,.0)} +::-webkit-scrollbar-thumb {height: 50px; width: 50px; background: rgba(20,20, 20, .1); -webkit-border-radius: 8px; border-radius: 8px; -webkit-box-shadow: inset 0 0 4px rgba(0,0,0,.0)} + + + /*====================== #logo @@ -81,9 +118,13 @@ body{ .dimmed.open {display: block !important;} .popup-wrap {display: none;} .popup-wrap.open {display: block !important;} -.popup {width: 390px; border-radius: 8px; background: #fff; padding: 0 30px; box-sizing: border-box; border: 1px solid rgba(197,197,197,0.36); box-shadow: 2px 2px 8px rgba(171,171,171,0.30); position: fixed; top: 50%; left: 50%; transform: translate(-50%,-50%); -webkit-transform: translate(-50%,-50%); -moz-transform: translate(-50%,-50%); -o-transform: translate(-50%,-50%); display: none;} +.popup {width: 390px; border-radius: 12px; background: #fff; padding: 0 30px; box-sizing: border-box; border: 1px solid rgba(197,197,197,0.36); box-shadow: 2px 2px 8px rgba(171,171,171,0.30); position: fixed; top: 50%; left: 50%; transform: translate(-50%,-50%); -webkit-transform: translate(-50%,-50%); -moz-transform: translate(-50%,-50%); -o-transform: translate(-50%,-50%); display: none; +max-height: 90vh; overflow: auto;}/*스크린 height 100%를 벗어나는 긴 팝업의 경우 추가 class*/ + .popup.open {display: block !important;} -.popup .pop-head {padding: 30px 0 25px;} +.popup .pop-head {padding: 30px 0 25px; + position: sticky; z-index: 999; top:0; left:30px; background: #fff; /*팝업 스크롤 시 타이틀 고정 */ + } .popup .pop-head .pop-tit {font-size: 18px; color: #222222; letter-spacing: -1px; line-height: 100%;} .popup .btn-close {width: 30px; height: 30px; position: absolute; top: 0; right: 0; background: url("../images/icon-close.png") no-repeat center center; background-size: 11px; border: none;} .popup .pop-cont {} @@ -91,8 +132,8 @@ body{ .popup .pop-cont p + p {margin-top: 10px;} .popup .pop-btn1 {display: flex; justify-content: flex-end; align-items: center; margin: 35px 0 25px;} .popup .pop-btn2 {display: flex; justify-content: space-between; align-items: center; margin: 35px 0 25px;} -.popup .pop-btn1 button {width: 49%; height: 42px; font-size: 16px; font-weight: 400; letter-spacing: -1.1px;} -.popup .pop-btn2 button {width: 49%; height: 42px; font-size: 16px; font-weight: 400; letter-spacing: -1.1px;} +.popup .pop-btn1 button {width: 49%; height: 40px; font-size: 16px; font-weight: 400; letter-spacing: -1.1px;} +.popup .pop-btn2 button {width: 49%; height: 40px; font-size: 16px; font-weight: 400; letter-spacing: -1.1px;} diff --git a/frontend/src/assets/css/style.css b/frontend/src/assets/css/style.css index 712d6f2..7066afa 100644 --- a/frontend/src/assets/css/style.css +++ b/frontend/src/assets/css/style.css @@ -307,7 +307,7 @@ header .user_wrap .user_info .logout { .main_menu > li.stats.is-current .menu_btn { background-image: url(../images/icon-stats-on.png); } .main_menu > li.system.is-current .menu_btn { background-image: url(../images/icon-system-on.png); } -.main_menu > li .sub_menu_wrap { padding:0 10px 10px; display:none; } +.main_menu > li .sub_menu_wrap { padding:0 10px 10px; display:none; margin-top: 5px; } .main_menu > li.is-current .sub_menu_wrap { display: block; } @@ -317,7 +317,6 @@ header .user_wrap .user_info .logout { - .contents { padding: 0 4.16vw; width: 100%; @@ -332,7 +331,7 @@ header .user_wrap .user_info .logout { background-color: #fff; width: 100%; border-radius: 24px; - padding: 15px 0; + padding: 0 0 15px 0; margin-bottom: 70px; } @@ -351,8 +350,8 @@ header .user_wrap .user_info .logout { -ms-flex-align: center; align-items: center; border-bottom: 1px solid #d5d3e6; - padding: 0 40px; - margin-bottom: 27px; + padding: 21px 0px 0 0px; + margin: 0 40px 27px 40px; } .contents .top_wrap .title { @@ -370,6 +369,33 @@ header .user_wrap .user_info .logout { letter-spacing: -0.025em; } + +.contents .top_tab { + position: relative; margin: 0 40px; height: 45px; border-bottom: 1px solid #ddddeb; margin-bottom: 40px; display: flex; + font-size: 16px; text-align: center ; +} + + +.contents .top_tab a.on { + background: url("../images/tab_arrow.png") #fff no-repeat; background-position: 20px center; border: 1px solid #ddddeb; border-bottom: 1px solid #ffffff; + color: #d82e89; font-weight: 500; +} +.contents .top_tab a.on:hover { + background: url("../images/tab_arrow.png") #fff no-repeat; background-position: 20px center; border: 1px solid #ddddeb; border-bottom: 1px solid #ffffff; + color: #d82e89; font-weight: 500; +} + +.contents .top_tab a { + background: #ececf3; border: 1px solid #ececf3; border-bottom: 1px solid #ddddeb; height: 45px;padding: 10px 20px; min-width: 180px; display: inline-block; border-radius: 9px 9px 0 0 ; cursor: pointer; + color: #a5a5bd;font-weight: 500; +} + +.contents .top_tab a:hover { + background: #bdbde0; border: 1px solid #bdbde0; border-bottom: 1px solid #ddddeb; + color: #ffffff;font-weight: 500; +} + + .contents .search_wrap { background-color: #f6f6f8; display: -webkit-box; @@ -381,6 +407,17 @@ header .user_wrap .user_info .logout { align-items: flex-end; border-radius: 4px; margin-bottom: 50px; + flex-wrap: wrap; +} + +.contents .search_wrap .group{ + width: 100%; + display: flex; + align-items: flex-end; +} + +.contents .search_wrap .group + .group{ + margin-top: 20px; } .contents .search_wrap button.grey { @@ -410,7 +447,7 @@ header .user_wrap .user_info .logout { color: #a3a3a3; } -.contents .select_box select { +.contents select { width: 100%; height: 40px; border: 1px solid #c9c9c9; @@ -430,6 +467,14 @@ header .user_wrap .user_info .logout { color: #000; } +.contents .NumberSe { + float:right; + min-width:90px; + width:auto; + margin-left:10px; + margin-top:-7px; +} + .contents .input_box { display: -webkit-box; display: -ms-flexbox; @@ -449,14 +494,19 @@ header .user_wrap .user_info .logout { color: #a3a3a3; } + +.contents .input_box .label:focus { + color: #000; +} + + + .contents .input_box input { width: 100%; height: 40px; border: 1px solid #c9c9c9; position: relative; - background: url(../images/icon-search.png) no-repeat 6% center/14px auto; background-color: #fff; - padding-left: 43px; border-radius: 4px; } @@ -476,12 +526,12 @@ header .user_wrap .user_info .logout { color: #c9c9c9; } -.contents .input_box.id { +.contents .id { position: relative; margin-left: 10px; } -.contents .input_box.id:before { +.contents .id:before { content: ''; position: absolute; top: 25px; @@ -491,6 +541,95 @@ header .user_wrap .user_info .logout { background-color: #e8e8f1; } +/* input cal + search-box*/ +.w35{width:35%;} +.contents .table.table_form.m50{margin-bottom: 50px;} + +.contents .input_box.cal{ + display: inline-block; + width: 27.34%; +} + +.contents .input_box.cal label { + display: block; +} + +.contents .input_box.cal input { + display: inline-block; + width: 48%; + float: left; + background: #fff url(../images/icon-calender.png) no-repeat right 6% center; +} +.contents .input_box.cal input + input{ + margin-left: 4%; +} + +.contents .input_box.cal .description{ + position: absolute; margin: 10px 0 0 10px; color:#666; font-size: 13px; font-weight: 400; +} + +.contents .input_box .search-box { + background: #fff url(../images/icon-search.png) no-repeat 6% center/14px auto; + padding-left: 43px; +} + +.input-address input:nth-child(1){ + width: 98px; +} + +.input-address input:nth-child(2){ + width: calc(100% - 480px); +} + +.input-address input:nth-child(3){ + width: 344px; +} + +.input-bnumber input:nth-child(1){ + width: 62px; +} + +.input-bnumber input:nth-child(2){ + width: 52px; +} + +.input-bnumber input:nth-child(3){ + width: 116px; +} + +.input-double{ + display: flex; +} + +.input-memo{ + margin: 5px 0; + display: flex; +} + +.input-double input, .button-double button{ + width: calc(37.5% - 5px) !important; +} + +.btn-a{ + width: auto !important; + display: inline-flex !important; +} + + +.input-memo input{ + height: 240px !important; + width: 86%; +} + +.contents .two-input{ + display: inline-flex; + align-items: flex-end; +} + +.contents .two-input .input_box{ + width: 100%; +} + .contents .button { height: 40px; color: #fff; @@ -512,6 +651,7 @@ header .user_wrap .user_info .logout { .contents .button.grey { background-color: #35354f; font-size: 16px; + padding: 0 15px; } .contents .button.grey:hover { @@ -539,8 +679,36 @@ header .user_wrap .user_info .logout { border-color: #000; } +/*icon button*/ + +.download::before { + content:''; + background: url(../images/icon-download.png) no-repeat 0 0; + width:23px; + height:23px; + margin-right: 5px; +} + +.add::before { + content:''; + background: url(../images/icon-add.png) no-repeat center center; + width:24px; + height:24px; + margin-right: 5px; + margin-top: 2px; +} + +.del::before { + content:''; + background: url(../images/icon-del.png) no-repeat center center; + width:24px; + height:24px; + margin-right: 5px; + margin-top: 2px; +} + .contents .info { - padding: 0 30px; + padding: 0 40px; margin-bottom: 10px; display: -webkit-box; display: -ms-flexbox; @@ -550,17 +718,23 @@ header .user_wrap .user_info .logout { justify-content: space-between; } -.contents .info .count { +.info .count { font-size: 16px; position: relative; padding-left: 10px; } -.contents .info .count span { +.info .count span { color: #eb008b; } -.contents .info .count:before { +.info .count p{ + color: #666666; + font-size: 14px; + display: inline-flex; +} + +.info .count:before { content: ''; position: absolute; top: 10px; @@ -574,6 +748,7 @@ header .user_wrap .user_info .logout { display: -webkit-box; display: -ms-flexbox; display: flex; + margin-top: -7px; } .contents .info .title { @@ -593,9 +768,129 @@ header .user_wrap .user_info .logout { background-color: #eb008b; } +/*pagination*/ + +.contents .pagination .arrow-btn button{ + border:none; + padding: 0 5px; +} + +.btn-first, .btn-prev{ + background:url(../images/icon-pgn-l.png) no-repeat; + width:24px; + height:24px; +} + +.btn-next, .btn-last{ + background:url('../images/icon-pgn-r.png') no-repeat; + width:24px; + height:24px; +} + +.btn-first,.btn-last{background-position: 0px 0px;} +.btn-first:hover, .btn-last:hover{background-position: 0px -48px;} +.btn-prev, .btn-next{background-position: 0px -24px;} +.btn-prev:hover, .btn-next:hover{background-position: 0px -72px;} + +.contents .pagination { + display:flex; + justify-content: center; + margin-bottom: 50px; +} + +.contents .pagination ul{ + display:flex; + align-items:center; +} + +.contents .pagination ul li a{ + color:#9a9a9a; + font-size: 14px; + padding: 0 15px; +} +.contents .pagination ul li a:hover{ + color:#000; + text-decoration: underline; +} + +/*contents table 추가*/ + +.contents .table table .arrow_box { + display: none; + background-color: #fff; + border: #666666 solid 1px; + border-radius: 4px; + color: #666666; + font-size: 14px; + font-weight: 500; + letter-spacing: -0.25px; + margin-top: 16.8px; + padding: 10px 20px; + position: absolute; + min-width: 120px; + z-index: 100; + left: 42px; +} + +.contents .table table .arrow_box:before{ + border-color: #666666 transparent; + border-style: solid; + border-width: 0 6px 8px 6.5px; + content: ''; + display: block; + left: 20px; + position: absolute; + bottom: 100%; + width: 0; + z-index: 0; +} + +.contents .table table .arrow_box:after { + border-color: #fff transparent; + border-style: solid; + border-width: 0 6px 8px 6.5px; + content: ''; + display: block; + left: 20px; + position: absolute; + bottom: 99%; + width: 0; + z-index: 1; +} + +.contents .table.calculate table td, .contents .table.calculate table th{ + border-left: 1px solid #dadae6; +} + +.contents .table.calculate table td:nth-child(1), .contents .table.calculate table tr:nth-child(1) th:nth-child(1){ + border-left: 0; +} + +.contents .table table .total{ + background-color: #ececf3; +} + +.contents .table table td span {cursor: pointer;} + +.contents .table table td .linkstyle {cursor: pointer; text-decoration: underline;} +.contents .table table td .linkstyle:hover {color:#eb008b;} + + +.contents .table table td span:hover + p.arrow_box { + display: block; +} + +.contents .table.table_form .tr_input td{ + padding: 0; +} + +.contents .table.table_form .tr_input .td_radio{ + padding-left: 10px; +} + .contents .table { color: #333333; - padding: 0 30px; + padding: 0 40px; margin-bottom: 65px; } @@ -604,6 +899,7 @@ header .user_wrap .user_info .logout { text-align: center; border-top: 2px solid #69677e; border-bottom: 1px solid #a4a4b0; + table-layout: fixed; } .contents .table table thead { @@ -617,7 +913,7 @@ header .user_wrap .user_info .logout { .contents .table table th { font-weight: 500; height: 50px; - position: relative; + position: relative; font-size: 14px; } .contents .table table tr { @@ -626,12 +922,12 @@ header .user_wrap .user_info .logout { border-bottom: 1px solid #dadae6; } -.contents .table table tr:hover { +.contents .table table tbody tr:not(.table_form table tr):hover { background-color: #fafaff; } .contents .table table td { - position: relative; + position: relative; font-size: 14px; } .contents .table table td a { @@ -681,15 +977,16 @@ header .user_wrap .user_info .logout { } .contents .table.table_form { - font-size: 16px; + font-size: 14px; margin-bottom: 24px; } .contents .table.table_form th { background-color: #f7f7f7; - width: 9%; + width: 11%; text-align: left; padding-left: 20px; + font-size: 14px; } .contents .table.table_form th.center { @@ -699,6 +996,7 @@ header .user_wrap .user_info .logout { .contents .table.table_form td { text-align: left; + padding-left: 10px;font-size: 14px; } .contents .table.table_form td.check { @@ -741,14 +1039,15 @@ header .user_wrap .user_info .logout { background-color: #f7f7f7; } -.contents .table.table_form .tr_input input[type="text"] { +.contents .table.table_form .tr_input input[type="text"], .contents .table.table_form .tr_input select { border: 1px solid #c9c9c9; border-radius: 4px; height: 40px; margin-left: 10px; + font-size: 14px; } -.contents .table.table_form .tr_input.w30 input[type="text"] { +.contents .table.table_form .tr_input.w30 input[type="text"], .contents .table.table_form .tr_input.w30 select { width: 30%; } @@ -760,8 +1059,8 @@ header .user_wrap .user_info .logout { width: 98%; } -.contents .table.table_form .tr_input input[type="radio"] + label:nth-child(2) { - margin: 0 30px 0 10px; +.contents .table.table_form input[type="radio"] + label:nth-child(2) { + margin: 0 30px 0 0; } .contents .pop-btn2 { @@ -805,10 +1104,18 @@ header .user_wrap .user_info .logout { background-color: #c7c7c7; } +.popup{ + font-family: 'SpoqaHanSansNeo'; +} + .popup.popup_form { width: 525px; } +.popup.popup_form .info .count { + margin-bottom: 12px; +} + .popup.popup_form .pop-head { border-bottom: 1px solid #d5d3e6; padding-bottom: 0; @@ -864,7 +1171,7 @@ header .user_wrap .user_info .logout { padding: 0 0 0 10px; } -.popup.popup_form table td input { +.popup input { width: 100%; height: 40px; border: 1px solid #c9c9c9; @@ -872,19 +1179,19 @@ header .user_wrap .user_info .logout { font-size: 16px; } -.popup.popup_form table td input::-webkit-input-placeholder { +.popup input::-webkit-input-placeholder { color: #c9c9c9; } -.popup.popup_form table td input:-ms-input-placeholder { +.popup input:-ms-input-placeholder { color: #c9c9c9; } -.popup.popup_form table td input::-ms-input-placeholder { +.popup input::-ms-input-placeholder { color: #c9c9c9; } -.popup.popup_form table td input::placeholder { +.popup input::placeholder { color: #c9c9c9; } @@ -907,7 +1214,7 @@ header .user_wrap .user_info .logout { color: #333333; } -.popup.popup_form table .input_search { +.popup .input_search { height: 50px; display: -webkit-box; display: -ms-flexbox; @@ -920,7 +1227,7 @@ header .user_wrap .user_info .logout { align-items: center; } -.popup.popup_form table .input_search input[type="text"] { +.popup .input_search input[type="text"] { position: relative; background: url(../images/icon-search.png) no-repeat 6% center/14px auto; background-color: #fff; @@ -929,23 +1236,23 @@ header .user_wrap .user_info .logout { width: 72%; } -.popup.popup_form table .input_search input[type="text"]::-webkit-input-placeholder { +.popup .input_search input[type="text"]::-webkit-input-placeholder { color: #c9c9c9; } -.popup.popup_form table .input_search input[type="text"]:-ms-input-placeholder { +.popup .input_search input[type="text"]:-ms-input-placeholder { color: #c9c9c9; } -.popup.popup_form table .input_search input[type="text"]::-ms-input-placeholder { +.popup .input_search input[type="text"]::-ms-input-placeholder { color: #c9c9c9; } -.popup.popup_form table .input_search input[type="text"]::placeholder { +.popup .input_search input[type="text"]::placeholder { color: #c9c9c9; } -.popup.popup_form table .button { +.popup .button { height: 40px; color: #fff; border-radius: 4px; @@ -963,15 +1270,161 @@ header .user_wrap .user_info .logout { margin-left: 10px; } -.popup.popup_form table .button.grey { +.popup .button.grey { background-color: #35354f; font-size: 16px; } -.popup.popup_form table .button.grey:hover { +.popup .button.grey:hover { background-color: #0a0b24; } +/*customer popup*/ +.popup.b-popup{ + width:700px; +} + +.popup.price table th{ + width:20%; +} + +.popup label{ + font-size: 13px; + letter-spacing: -0.025em; + margin-bottom: 6px; + color: #333333; +} + +.popup .number{ + color:#000000; + font-weight: bold; +} +.popup .number.blue{color:#0073d4;} +.popup .number.red{color:#ff3600;} + + +.popup.popup_form .table-c{ + table-layout: fixed; + margin-top: 10px; +} + +.popup.popup_form .table-c th, .popup.popup_form .table-c td{ + padding: 0; + text-align:center; +} + +.popup.b-popup tr th:nth-child(1){ + width:60%; +} + +.popup.b-popup tr th:nth-child(2){ + width:10%; +} + +.popup.b-popup tr th:nth-child(3), .popup.b-popup tr th:nth-child(4){ + width:15%; +} + +.popup.b-popup tr .memo{ + text-align: left; + padding: 0 0 0 10px; +} + +.popup.b-popup tr:nth-child(1) .memo:nth-child(1){ + height: 100px; + display: block; + overflow: auto; +} + +.popup .pop-cont.bottom{ + margin-top: 20px; +} + +.popup.popup_form .pop-btn2 .download { + display: flex; + justify-content: center; + align-items: center; +} + +.popup.popup_form .pop-btn2.bulk{ + justify-content: space-between; + margin-bottom: 20px; +} + +.popup.popup_form .pop-btn2.bulk button{ + width: 49%; + display: flex; + -webkit-box-pack: center; + -ms-flex-pack: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + justify-content: normal; +} + +.popup.popup_form .pop-btn2.bulk button:nth-child(1)::before{ + content: ''; + background: url(../images/icon-f-download.png) no-repeat 0 0; + width: 23px; + height: 23px; + margin: 2px 5px 0 15px; +} + +.popup.popup_form .pop-btn2.bulk button:nth-child(2)::before{ + content: ''; + background: url(../images/icon-f-upload.png) no-repeat 0 0; + width: 23px; + height: 23px; + margin: 2px 5px 0 15px; +} + +.popup.popup_form .btn-default{ + color: #333333; + border-radius: 6px; + border: 1px solid #a1a1a1; + font-size: 14px; +} + +.popup.popup_form .file{ + color: #656565; + margin-bottom: 18px; +} + +.popup.popup_form .file button{ + background: #e4e4e4 url(../images/icon-delete.png) no-repeat center center; + width: 24px; + height: 24px; + display: inline-block; + border-radius: 50%; + position: relative; + top: 6px; + left: 5px; + border: none; +} + +.popup.popup_form.b-popup .input_add{ + padding: 5px 0px 5px 0px; +} + +.popup.popup_form.b-popup .input_add div{ + display: flex; + justify-content: space-between; +} + +.popup.popup_form.b-popup .input_add div input:nth-child(1){ + margin-right: 5px; + width: 95px; +} + +.input_add .button.add{ + min-width: 40px; + margin-left: 2%; +} + +.popup.popup_form.b-popup .input_add div:nth-child(2){ + width: 89%; + padding-top: 5px; +} /*# sourceMappingURL=style.css.map */ \ No newline at end of file diff --git a/frontend/src/assets/font/LGSmHaB.woff2 b/frontend/src/assets/font/LGSmHaB.woff2 new file mode 100644 index 0000000..2211f8f Binary files /dev/null and b/frontend/src/assets/font/LGSmHaB.woff2 differ diff --git a/frontend/src/assets/font/LGSmHaL.woff2 b/frontend/src/assets/font/LGSmHaL.woff2 new file mode 100644 index 0000000..460d6b2 Binary files /dev/null and b/frontend/src/assets/font/LGSmHaL.woff2 differ diff --git a/frontend/src/assets/font/LGSmHaR.woff2 b/frontend/src/assets/font/LGSmHaR.woff2 new file mode 100644 index 0000000..e773b1b Binary files /dev/null and b/frontend/src/assets/font/LGSmHaR.woff2 differ diff --git a/frontend/src/assets/font/LGSmHaSB.woff2 b/frontend/src/assets/font/LGSmHaSB.woff2 new file mode 100644 index 0000000..3291236 Binary files /dev/null and b/frontend/src/assets/font/LGSmHaSB.woff2 differ diff --git a/frontend/src/assets/font/SpoqaHanSansNeo-Bold.woff b/frontend/src/assets/font/SpoqaHanSansNeo-Bold.woff index 5ebb220..6efd779 100644 Binary files a/frontend/src/assets/font/SpoqaHanSansNeo-Bold.woff and b/frontend/src/assets/font/SpoqaHanSansNeo-Bold.woff differ diff --git a/frontend/src/assets/font/SpoqaHanSansNeo-Bold.woff2 b/frontend/src/assets/font/SpoqaHanSansNeo-Bold.woff2 new file mode 100644 index 0000000..0ef1933 Binary files /dev/null and b/frontend/src/assets/font/SpoqaHanSansNeo-Bold.woff2 differ diff --git a/frontend/src/assets/font/SpoqaHanSansNeo-Light.woff b/frontend/src/assets/font/SpoqaHanSansNeo-Light.woff index 8d74a59..4f363d3 100644 Binary files a/frontend/src/assets/font/SpoqaHanSansNeo-Light.woff and b/frontend/src/assets/font/SpoqaHanSansNeo-Light.woff differ diff --git a/frontend/src/assets/font/SpoqaHanSansNeo-Light.woff2 b/frontend/src/assets/font/SpoqaHanSansNeo-Light.woff2 new file mode 100644 index 0000000..8e2091f Binary files /dev/null and b/frontend/src/assets/font/SpoqaHanSansNeo-Light.woff2 differ diff --git a/frontend/src/assets/font/SpoqaHanSansNeo-Medium.woff2 b/frontend/src/assets/font/SpoqaHanSansNeo-Medium.woff2 new file mode 100644 index 0000000..4c5b2f9 Binary files /dev/null and b/frontend/src/assets/font/SpoqaHanSansNeo-Medium.woff2 differ diff --git a/frontend/src/assets/font/SpoqaHanSansNeo-Regular.woff2 b/frontend/src/assets/font/SpoqaHanSansNeo-Regular.woff2 new file mode 100644 index 0000000..1d3916c Binary files /dev/null and b/frontend/src/assets/font/SpoqaHanSansNeo-Regular.woff2 differ diff --git a/frontend/src/assets/font/SpoqaHanSansNeo-Thin.woff2 b/frontend/src/assets/font/SpoqaHanSansNeo-Thin.woff2 new file mode 100644 index 0000000..a95fe9e Binary files /dev/null and b/frontend/src/assets/font/SpoqaHanSansNeo-Thin.woff2 differ diff --git a/frontend/src/assets/images/icon-add.png b/frontend/src/assets/images/icon-add.png new file mode 100644 index 0000000..dfd9e01 Binary files /dev/null and b/frontend/src/assets/images/icon-add.png differ diff --git a/frontend/src/assets/images/icon-calender.png b/frontend/src/assets/images/icon-calender.png new file mode 100644 index 0000000..1e0c604 Binary files /dev/null and b/frontend/src/assets/images/icon-calender.png differ diff --git a/frontend/src/assets/images/icon-del.png b/frontend/src/assets/images/icon-del.png new file mode 100644 index 0000000..36e2b58 Binary files /dev/null and b/frontend/src/assets/images/icon-del.png differ diff --git a/frontend/src/assets/images/icon-delete.png b/frontend/src/assets/images/icon-delete.png new file mode 100644 index 0000000..fe742db Binary files /dev/null and b/frontend/src/assets/images/icon-delete.png differ diff --git a/frontend/src/assets/images/icon-download.png b/frontend/src/assets/images/icon-download.png new file mode 100644 index 0000000..2aa4dc4 Binary files /dev/null and b/frontend/src/assets/images/icon-download.png differ diff --git a/frontend/src/assets/images/icon-f-download.png b/frontend/src/assets/images/icon-f-download.png new file mode 100644 index 0000000..111ead3 Binary files /dev/null and b/frontend/src/assets/images/icon-f-download.png differ diff --git a/frontend/src/assets/images/icon-f-upload.png b/frontend/src/assets/images/icon-f-upload.png new file mode 100644 index 0000000..142331d Binary files /dev/null and b/frontend/src/assets/images/icon-f-upload.png differ diff --git a/frontend/src/assets/images/icon-pgn-l.png b/frontend/src/assets/images/icon-pgn-l.png new file mode 100644 index 0000000..9114a7c Binary files /dev/null and b/frontend/src/assets/images/icon-pgn-l.png differ diff --git a/frontend/src/assets/images/icon-pgn-r.png b/frontend/src/assets/images/icon-pgn-r.png new file mode 100644 index 0000000..d8ca07a Binary files /dev/null and b/frontend/src/assets/images/icon-pgn-r.png differ diff --git a/frontend/src/assets/images/tab_arrow.png b/frontend/src/assets/images/tab_arrow.png new file mode 100644 index 0000000..ee54d79 Binary files /dev/null and b/frontend/src/assets/images/tab_arrow.png differ diff --git a/frontend/src/assets/js/script.js b/frontend/src/assets/js/script.js index 39bff1d..df02551 100644 --- a/frontend/src/assets/js/script.js +++ b/frontend/src/assets/js/script.js @@ -1,6 +1,8 @@ -/*(function(){ +(function(){ const menuList = document.querySelectorAll('.main_menu .is-sub'); + + for(const menu of menuList){ menu.addEventListener('click', (e)=> { if(e.target.classList.contains('menu_target') || e.target.classList.contains('menu_btn')){ @@ -16,29 +18,18 @@ } }) } -})();*/ +})(); -/*const ModalOpen = target =>{ - console.log("ModalOpen"); + +function ModalOpen(target) { var dimmed = document.getElementsByClassName('dimmed'); var wrap = document.getElementsByClassName('popup-wrap'); var obj = document.getElementsByClassName(target); dimmed[0].style.display = 'block'; wrap[0].style.display = 'block'; obj[0].style.display = 'block'; -}*/ - -// eslint-disable-next-line no-unused-vars -/*function ModalOpen(target) { - var dimmed = document.getElementsByClassName('dimmed'); - var wrap = document.getElementsByClassName('popup-wrap'); - var obj = document.getElementsByClassName(target); - dimmed[0].style.display = 'block'; - wrap[0].style.display = 'block'; - obj[0].style.display = 'block'; -}*/ -// eslint-disable-next-line no-unused-vars -/*function ModalClose() { +} +function ModalClose() { var dimmed = document.getElementsByClassName('dimmed'); var wrap = document.getElementsByClassName('popup-wrap'); var obj = wrap[0].childElementCount @@ -49,7 +40,6 @@ target[i].style.display = 'none'; } } -// eslint-disable-next-line no-unused-vars function userInfoToggle(){ var click = "clicked"; var userBtn = document.querySelector('.user_wrap .user'); @@ -59,8 +49,4 @@ function userInfoToggle(){ else{ userBtn.classList.add(click); } -}*/ - -export default{ - ModalOpen } \ No newline at end of file diff --git a/frontend/src/common/comm-api.js b/frontend/src/common/comm-api.js index ceeb7b9..97a9f68 100644 --- a/frontend/src/common/comm-api.js +++ b/frontend/src/common/comm-api.js @@ -1,9 +1,9 @@ -import httpClient from '@/common/http-client'; -// 주소찾기 -const getAddressList = params => { - return httpClient.get('/api/comm/address', { params: params }) -} - -export default { - getAddressList -} +import httpClient from '@/common/http-client'; +// 주소찾기 +const getAddressList = params => { + return httpClient.get('/api/comm/address', { params: params }) +} + +export default { + getAddressList +} diff --git a/frontend/src/common/config.js b/frontend/src/common/config.js index 2eee995..da36c93 100644 --- a/frontend/src/common/config.js +++ b/frontend/src/common/config.js @@ -1,10 +1,13 @@ -const { VUE_APP_TEST_PROP, NODE_ENV = '' } = process.env; - -const environment = NODE_ENV.toLowerCase(); -const testProp = VUE_APP_TEST_PROP; - -const consts = { - tokenPart1: 'JwtPart1' -} - -export { environment, testProp, consts }; +const { VUE_APP_TEST_PROP, NODE_ENV = '' } = process.env; + +const environment = NODE_ENV.toLowerCase(); +const testProp = VUE_APP_TEST_PROP; + +const consts = { + tokenPart1: 'JwtPart1', + tokenPart2: 'JwtPart2', + tokenPart3: 'JwtPart3', + tokenPart4: 'JwtPart4' +} + +export { environment, testProp, consts }; diff --git a/frontend/src/common/excel.js b/frontend/src/common/excel.js index 67f04ed..1c3faba 100644 --- a/frontend/src/common/excel.js +++ b/frontend/src/common/excel.js @@ -1,143 +1,143 @@ -import xlsx from 'xlsx'; - -const xlsxUtils = { - filename: '', - data: [], - header: [], - options: {}, - summary: { - isUse: false, - position: '', - data: null, - title: { replaceKeys: [], name: '' } - }, - visibleDataOrder: [], - instance: undefined, - createInstance() { - return new Promise((resolve, reject) => { - this.instance = document.createElement('table'); - resolve(); - }); - }, - createHeader() { - return new Promise((resolve, reject) => { - let header = this.header; - /* - if (!Array.isArray(this.header[0])) { - header.push(this.header); - } else { - header = this.header; - } - */ - - let thead = document.createElement('thead'); - for (let row of header) { - let tr = document.createElement('tr'); - for (let h of row) { - let rowspan = h.rowspan || '1'; - let colspan = h.colspan || '1'; - let th = document.createElement('th'); - th.setAttribute('rowspan', rowspan); - th.setAttribute('colspan', colspan); - //th.setAttribute('align', 'center'); - th.innerText = h.name; - tr.appendChild(th); - } - thead.appendChild(tr); - } - this.instance.appendChild(thead); - resolve(); - }); - }, - createDataRows() { - return new Promise((resolve, reject) => { - let tbody = document.createElement('tbody'); - - if (this.options.summary != undefined && this.options.summary.isUse) { - this.summary = this.options.summary; - } - - if (this.summary.isUse && this.summary.position === 'first') { - this.appendDataRow(tbody, this.summary.data, true); - } - - this.appendDataRow(tbody, this.data, false); - - if (this.summary.isUse && this.summary.position === 'last') { - this.appendDataRow(tbody, this.summary.data, true); - } - - this.instance.appendChild(tbody); - resolve(); - }); - }, - - appendDataRow(tbody, data, isSummary) { - for (let row of data) { - let tr = document.createElement('tr'); - - if (isSummary) { - let td = document.createElement('td'); - td.innerText = this.summary.title.name; - td.setAttribute('colspan', this.summary.title.replaceKeys.length); - //td.setAttribute('align', 'center'); - tr.appendChild(td); - } - - for (let cellkey of this.visibleDataOrder) { - if (isSummary && this.summary.title.replaceKeys.indexOf(cellkey) > -1) continue; - - let td = document.createElement('td'); - td.innerText = row[cellkey]; - tr.appendChild(td); - } - tbody.appendChild(tr); - } - return tbody; - }, - getVisibleDataOrder() { - let dataOrder = []; - if (Array.isArray(this.options.dataOrder)) { - dataOrder = this.options.dataOrder; - } else if (this.options.dataOrder === 'header') { - for (let row of this.header) { - for (let h of row) { - if (h.key != undefined && h.key != null && h.key !== '') { - dataOrder.push(h.key); - } - } - } - } else { - dataOrder = Object.keys(this.data[0]); - } - this.visibleDataOrder = dataOrder; - }, - export(data, filename, options) { - this.data = data; - this.filename = filename; - this.header = options.header; - this.options = options; - - this.getVisibleDataOrder(); - return new Promise((resolve, reject) => { - this.createInstance().then(() => { - this.createHeader().then(() => { - this.createDataRows().then(() => { - this.exportTableToXlsx(); - resolve(); - }); - }); - }); - }); - }, - exportTableToXlsx() { - let config = { raw: true, type: 'string' }; - let ws = xlsx.utils.table_to_sheet(this.instance, config); - let wb = xlsx.utils.book_new(); - - xlsx.utils.book_append_sheet(wb, ws, 'Sheet1'); - xlsx.writeFile(wb, this.filename); - } -}; - -export default xlsxUtils; +import xlsx from 'xlsx'; + +const xlsxUtils = { + filename: '', + data: [], + header: [], + options: {}, + summary: { + isUse: false, + position: '', + data: null, + title: { replaceKeys: [], name: '' } + }, + visibleDataOrder: [], + instance: undefined, + createInstance() { + return new Promise((resolve, reject) => { + this.instance = document.createElement('table'); + resolve(); + }); + }, + createHeader() { + return new Promise((resolve, reject) => { + let header = this.header; + /* + if (!Array.isArray(this.header[0])) { + header.push(this.header); + } else { + header = this.header; + } + */ + + let thead = document.createElement('thead'); + for (let row of header) { + let tr = document.createElement('tr'); + for (let h of row) { + let rowspan = h.rowspan || '1'; + let colspan = h.colspan || '1'; + let th = document.createElement('th'); + th.setAttribute('rowspan', rowspan); + th.setAttribute('colspan', colspan); + //th.setAttribute('align', 'center'); + th.innerText = h.name; + tr.appendChild(th); + } + thead.appendChild(tr); + } + this.instance.appendChild(thead); + resolve(); + }); + }, + createDataRows() { + return new Promise((resolve, reject) => { + let tbody = document.createElement('tbody'); + + if (this.options.summary != undefined && this.options.summary.isUse) { + this.summary = this.options.summary; + } + + if (this.summary.isUse && this.summary.position === 'first') { + this.appendDataRow(tbody, this.summary.data, true); + } + + this.appendDataRow(tbody, this.data, false); + + if (this.summary.isUse && this.summary.position === 'last') { + this.appendDataRow(tbody, this.summary.data, true); + } + + this.instance.appendChild(tbody); + resolve(); + }); + }, + + appendDataRow(tbody, data, isSummary) { + for (let row of data) { + let tr = document.createElement('tr'); + + if (isSummary) { + let td = document.createElement('td'); + td.innerText = this.summary.title.name; + td.setAttribute('colspan', this.summary.title.replaceKeys.length); + //td.setAttribute('align', 'center'); + tr.appendChild(td); + } + + for (let cellkey of this.visibleDataOrder) { + if (isSummary && this.summary.title.replaceKeys.indexOf(cellkey) > -1) continue; + + let td = document.createElement('td'); + td.innerText = row[cellkey]; + tr.appendChild(td); + } + tbody.appendChild(tr); + } + return tbody; + }, + getVisibleDataOrder() { + let dataOrder = []; + if (Array.isArray(this.options.dataOrder)) { + dataOrder = this.options.dataOrder; + } else if (this.options.dataOrder === 'header') { + for (let row of this.header) { + for (let h of row) { + if (h.key != undefined && h.key != null && h.key !== '') { + dataOrder.push(h.key); + } + } + } + } else { + dataOrder = Object.keys(this.data[0]); + } + this.visibleDataOrder = dataOrder; + }, + export(data, filename, options) { + this.data = data; + this.filename = filename; + this.header = options.header; + this.options = options; + + this.getVisibleDataOrder(); + return new Promise((resolve, reject) => { + this.createInstance().then(() => { + this.createHeader().then(() => { + this.createDataRows().then(() => { + this.exportTableToXlsx(); + resolve(); + }); + }); + }); + }); + }, + exportTableToXlsx() { + let config = { raw: true, type: 'string' }; + let ws = xlsx.utils.table_to_sheet(this.instance, config); + let wb = xlsx.utils.book_new(); + + xlsx.utils.book_append_sheet(wb, ws, 'Sheet1'); + xlsx.writeFile(wb, this.filename); + } +}; + +export default xlsxUtils; diff --git a/frontend/src/common/http-client.js b/frontend/src/common/http-client.js index 3ad2bc2..fd9f45f 100644 --- a/frontend/src/common/http-client.js +++ b/frontend/src/common/http-client.js @@ -1,105 +1,122 @@ -import axios from 'axios'; -import { testProp } from './config'; - -const config = { - //baseURL: 'http://localhost:7070', - // baseURL: apiBaseUrl, - headers: { - 'X-Requested-With': 'XMLHttpRequest' - }, - timeout: 120000 // timeout은 120초로 설정 -}; - -const httpClient = axios.create(config); - -const authInterceptor = config => { - // frontend와 backend의 origin이 다른 경우 - // devServer.proxy 설정을 하던지 baseURL과 withCredentials 설정을 해야 한다. - // cookie, header 등에 자격정보 설정이 필요한 api는 true 설정으로 호출해야 하고 - // 자격정보 설정이 필요없는 api는 withCredentials=false 설정으로 호출해야 한다. - // config.withCredentials = !config.url.startsWith('/api/public/'); - console.log("Test Url : "+ config.url); - /*if(config.url == '/api/auth/login'){ - config.baseURL = "http://localhost:3000"; - }*/ - return config; -}; - -const loggerInterceptor = config => { - console.log('testProp:', testProp); - console.log('request url:', config.url, 'params:', config.data); - return config; -}; - -let loadOverlap = []; -const loadingLayer = (type, config) => { - /* - get: httpClient.get(url, { params: { ... }, headers: {"show-layer": "Yes"} }) // in 2nd property - post: httpClient.post(url, params, { headers: {"show-layer": "Yes"} }) // 3rd property - */ - if (config.headers['Show-Layer'] == 'Yes') { - if (type) { - loadOverlap.push('add'); - } else { - loadOverlap.pop(); - } - - if (loadOverlap.length > 0) { - document.querySelector('html > body').style.overflow = 'hidden'; // 스크롤 block - document.getElementsByClassName('loading_layer')[0].style.display = 'block'; - } else { - document.querySelector('html > body').style.removeProperty('overflow'); // 스크롤 allow - document.getElementsByClassName('loading_layer')[0].style.display = 'none'; - } - } -}; - -/*const loadingLayerInterceptor = config => { - loadingLayer(true, config); - return config; -};*/ - -/** Adding the request interceptors */ -httpClient.interceptors.request.use(authInterceptor); -httpClient.interceptors.request.use(loggerInterceptor); -//httpClient.interceptors.request.use(loadingLayerInterceptor); - -/** Adding the response interceptors */ -httpClient.interceptors.response.use( - response => { - //loadingLayer(false, response.config); - console.log('response status:', response.status, 'data:', response.data); - return response; - }, - error => { - console.log(error); - if (error.response != undefined && error.response != null) loadingLayer(false, error.response.config); - else loadingLayer(false, error.config); - - if (error.code === 'ECONNABORTED') { - alert('서비스가 지연되고 있습니다. 잠시 후 확인하시고 다시 시도해주세요.'); - return Promise.reject(error); - } else if (error.response.status == 401 || error.response.status == 418) { - alert('세션이 만료되었습니다.'); - window.top.location.href = '/login'; - } else if (error.response.status == 500) { - if (error.response.data != null && error.response.data.message == '511 NETWORK_AUTHENTICATION_REQUIRED') { - alert('웹템플릿 IP가 브랜드포털에 등록이 필요합니다. 기술지원에 문의해주세요.'); - return Promise.reject(error); - } else { - window.top.location.href = '/view/error/500'; - } - } else if (error.response.status == 511) { - alert('웹템플릿 IP가 브랜드포털에 등록이 필요합니다. 기술지원에 문의해주세요.'); - return Promise.reject(error); - } else if (error.message == 'Network Error') { - alert('네트워크 오류가 발생했습니다. 잠시 후 다시 시도해주세요.'); - return Promise.reject(error); - } else { - console.log('response error:', error); - return Promise.reject(error); - } - } -); - -export default httpClient; +import axios from 'axios'; +import { testProp } from './config'; +import tokenSvc from '@/common/token-service'; +import { consts } from './config'; + +const config = { + //baseURL: 'http://localhost:7070', + // baseURL: apiBaseUrl, + headers: { + 'X-Requested-With': 'XMLHttpRequest' + }, + timeout: 120000 // timeout은 120초로 설정 +}; + +const httpClient = axios.create(config); + +const authInterceptor = config => { + // frontend와 backend의 origin이 다른 경우 + // devServer.proxy 설정을 하던지 baseURL과 withCredentials 설정을 해야 한다. + // cookie, header 등에 자격정보 설정이 필요한 api는 true 설정으로 호출해야 하고 + // 자격정보 설정이 필요없는 api는 withCredentials=false 설정으로 호출해야 한다. + // config.withCredentials = !config.url.startsWith('/api/public/'); + console.log("Test Url : "+ config.url); + /*if(config.url == '/api/auth/login'){ + config.baseURL = "http://localhost:3000"; + }*/ + return config; +}; + +const tokenInterceptor = config => { + if(tokenSvc.getAuthorization(consts.tokenPart1) != null){ + config.headers.Authorization = tokenSvc.getAuthorization(consts.tokenPart1); + //console.log("getToken : "+config.headers.Authorization); + //config.headers.Authorization = tokenSvc.getToken(); + } + return config; +} + +const loggerInterceptor = config => { + //console.log('testProp:', testProp); + //console.log('request url:', config.url, 'params:', config.data); + return config; +}; + +let loadOverlap = []; +const loadingLayer = (type, config) => { + /* + get: httpClient.get(url, { params: { ... }, headers: {"show-layer": "Yes"} }) // in 2nd property + post: httpClient.post(url, params, { headers: {"show-layer": "Yes"} }) // 3rd property + */ + if (config.headers['Show-Layer'] == 'Yes') { + if (type) { + loadOverlap.push('add'); + } else { + loadOverlap.pop(); + } + + if (loadOverlap.length > 0) { + document.querySelector('html > body').style.overflow = 'hidden'; // 스크롤 block + document.getElementsByClassName('loading_layer')[0].style.display = 'block'; + } else { + document.querySelector('html > body').style.removeProperty('overflow'); // 스크롤 allow + document.getElementsByClassName('loading_layer')[0].style.display = 'none'; + } + } +}; + +/*const loadingLayerInterceptor = config => { + loadingLayer(true, config); + return config; +};*/ + +/** Adding the request interceptors */ +httpClient.interceptors.request.use(authInterceptor); +httpClient.interceptors.request.use(tokenInterceptor); +httpClient.interceptors.request.use(loggerInterceptor); +//httpClient.interceptors.request.use(loadingLayerInterceptor); + +/** Adding the response interceptors */ +httpClient.interceptors.response.use( + response => { + //loadingLayer(false, response.config); + console.log('response status:', response.status, 'data:', response.data); + return response; + }, + error => { + console.log(error); + if (error.response != undefined && error.response != null) loadingLayer(false, error.response.config); + else loadingLayer(false, error.config); + + if (error.code === 'ECONNABORTED') { + alert('서비스가 지연되고 있습니다. 잠시 후 확인하시고 다시 시도해주세요.'); + return Promise.reject(error); + } else if(error.response.status == 401){ + alert('세션이 만료되었습니다.'); + tokenSvc.removeToken(); + window.top.location.href = '/login'; + } else if (error.response.status == 418) { + + }else if (error.response.status == 500) { + if (error.response.data != null && error.response.data.message == '511 NETWORK_AUTHENTICATION_REQUIRED') { + alert('웹템플릿 IP가 브랜드포털에 등록이 필요합니다. 기술지원에 문의해주세요.'); + return Promise.reject(error); + } else { + tokenSvc.removeToken(); + window.top.location.href = '/login'; + } + } else if (error.response.status == 511) { + alert('웹템플릿 IP가 브랜드포털에 등록이 필요합니다. 기술지원에 문의해주세요.'); + return Promise.reject(error); + } else if (error.message == 'Network Error') { + alert('네트워크 오류가 발생했습니다. 잠시 후 다시 시도해주세요.'); + return Promise.reject(error); + } else { + alert("else"); + console.log('response error:', error); + return Promise.reject(error); + } + } +); + +export default httpClient; diff --git a/frontend/src/common/ko.js b/frontend/src/common/ko.js index d031235..7bbfcde 100644 --- a/frontend/src/common/ko.js +++ b/frontend/src/common/ko.js @@ -1 +1 @@ -!function(t,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define(n):((t=t||self).vdp_translation_ko=t.vdp_translation_ko||{},t.vdp_translation_ko.js=n())}(this,function(){"use strict";function t(t,n){for(var e=0;e} arr Array of strings - * @param {string} prefix prefix - * @returns {Object} object with mirror keys generated from the array of strings - */ -export const reflectKeys = (arr = [], prefix) => - arr.reduce((obj, key) => { - const value = prefix ? prefix + ' ' + key : key; - obj[key] = value; - - return obj; - }, {}); - -export const form2obj = function(form) { - var queryStr = serializeForm(form); - return qstr2obj(queryStr); -}; - -/*! - * Serialize all form data into a query string - * (c) 2018 Chris Ferdinandi, MIT License, https://gomakethings.com - * @param {Node} form The form to serialize - * @return {String} The serialized form data - */ -export const serializeForm = function(form) { - // Setup our serialized data - var serialized = []; - - // Loop through each field in the form - for (var i = 0; i < form.elements.length; i++) { - var field = form.elements[i]; - - // Don't serialize fields without a name, submits, buttons, file and reset inputs, and disabled fields - if ( - !field.name || - field.disabled || - field.type === 'file' || - field.type === 'reset' || - field.type === 'submit' || - field.type === 'button' - ) - continue; - - // If a multi-select, get all selections - if (field.type === 'select-multiple') { - for (var n = 0; n < field.options.length; n++) { - if (!field.options[n].selected) continue; - serialized.push(encodeURIComponent(field.name) + '=' + encodeURIComponent(field.options[n].value)); - } - } - - // Convert field data to a query string - else if ((field.type !== 'checkbox' && field.type !== 'radio') || field.checked) { - serialized.push(encodeURIComponent(field.name) + '=' + encodeURIComponent(field.value)); - } - } - - return serialized.join('&'); -}; - -export const qstr2obj = function(qstr) { - let obj = {}; - if (qstr) { - qstr.split('&').map(item => { - const [k, v] = item.split('='); - v ? (obj[k] = v) : null; - }); - } - return obj; -}; - -export const getCookie = function(name) { - var value = '; ' + document.cookie; - var parts = value.split('; ' + name + '='); - if (parts.length == 2) - return parts - .pop() - .split(';') - .shift(); -}; - -import { Base64 } from 'js-base64'; - -export const base64encode = function(str) { - return Base64.encode(str); -}; - -export const base64decode = function(b64) { - return Base64.decode(b64); -}; - -export const getGwSuccessCode = function() { - return '10000'; -}; - -export const isGwSuccess = function(code) { - return getGwSuccessCode() == code; -}; - -let loadOverlap = []; -export const loadingLayer = (type) => { - if (type) { - loadOverlap.push('add'); - } else { - loadOverlap.pop(); - } - - if (loadOverlap.length > 0) { - document.querySelector('html > body').style.overflow = 'hidden'; // 스크롤 block - document.getElementsByClassName('loading_layer')[0].style.display = 'block'; - } else { - document.querySelector('html > body').style.removeProperty('overflow'); // 스크롤 allow - document.getElementsByClassName('loading_layer')[0].style.display = 'none'; - } -}; +/** + * @description This method is responsile for creating the object with mirror key and values + * and also add prefix to values if available + * @param {Array} arr Array of strings + * @param {string} prefix prefix + * @returns {Object} object with mirror keys generated from the array of strings + */ +export const reflectKeys = (arr = [], prefix) => + arr.reduce((obj, key) => { + const value = prefix ? prefix + ' ' + key : key; + obj[key] = value; + + return obj; + }, {}); + +export const form2obj = function(form) { + var queryStr = serializeForm(form); + return qstr2obj(queryStr); +}; + +/*! + * Serialize all form data into a query string + * (c) 2018 Chris Ferdinandi, MIT License, https://gomakethings.com + * @param {Node} form The form to serialize + * @return {String} The serialized form data + */ +export const serializeForm = function(form) { + // Setup our serialized data + var serialized = []; + + // Loop through each field in the form + for (var i = 0; i < form.elements.length; i++) { + var field = form.elements[i]; + + // Don't serialize fields without a name, submits, buttons, file and reset inputs, and disabled fields + if ( + !field.name || + field.disabled || + field.type === 'file' || + field.type === 'reset' || + field.type === 'submit' || + field.type === 'button' + ) + continue; + + // If a multi-select, get all selections + if (field.type === 'select-multiple') { + for (var n = 0; n < field.options.length; n++) { + if (!field.options[n].selected) continue; + serialized.push(encodeURIComponent(field.name) + '=' + encodeURIComponent(field.options[n].value)); + } + } + + // Convert field data to a query string + else if ((field.type !== 'checkbox' && field.type !== 'radio') || field.checked) { + serialized.push(encodeURIComponent(field.name) + '=' + encodeURIComponent(field.value)); + } + } + + return serialized.join('&'); +}; + +export const qstr2obj = function(qstr) { + let obj = {}; + if (qstr) { + qstr.split('&').map(item => { + const [k, v] = item.split('='); + v ? (obj[k] = v) : null; + }); + } + return obj; +}; + +export const getCookie = function(name) { + var value = '; ' + document.cookie; + var parts = value.split('; ' + name + '='); + if (parts.length == 2) + return parts + .pop() + .split(';') + .shift(); +}; + +import { Base64 } from 'js-base64'; + +export const base64encode = function(str) { + return Base64.encode(str); +}; + +export const base64decode = function(b64) { + return Base64.decode(b64); +}; + +export const getGwSuccessCode = function() { + return '10000'; +}; + +export const isGwSuccess = function(code) { + return getGwSuccessCode() == code; +}; + +let loadOverlap = []; +export const loadingLayer = (type) => { + if (type) { + loadOverlap.push('add'); + } else { + loadOverlap.pop(); + } + + if (loadOverlap.length > 0) { + document.querySelector('html > body').style.overflow = 'hidden'; // 스크롤 block + document.getElementsByClassName('loading_layer')[0].style.display = 'block'; + } else { + document.querySelector('html > body').style.removeProperty('overflow'); // 스크롤 allow + document.getElementsByClassName('loading_layer')[0].style.display = 'none'; + } +}; diff --git a/frontend/src/common/vue-mixins.js b/frontend/src/common/vue-mixins.js index b75be85..5425e79 100644 --- a/frontend/src/common/vue-mixins.js +++ b/frontend/src/common/vue-mixins.js @@ -1,228 +1,228 @@ -const coreUiMixin = { - directives: { - focus: { - inserted: function(el) { - el.focus(); - } - } - }, - methods: { - clearInput: function(evt) { - var me = evt.target; - var vname = me.previousElementSibling.name; - this.$data[vname] = ''; - me.previousElementSibling.focus(); - }, - showPhoneNumber: function(str) { - str = str.replace(/[\-\s\/]+/g, ''); - if (str.length > 12 || str.length < 10) { - return str; - } - var result = - str.substring(0, str.length - 8) + - '-' + - str.substring(str.length - 8, str.length - 4) + - '-' + - str.substring(str.length - 4, str.length); - return result; - }, - /* - openLayer: function(event, callback) { - var myId = event.target.getAttribute('data-id'); - var myLayer = document.querySelector('[layer-id="' + myId + '"]'); - var btnClose = document.querySelector('[layer-id="' + myId + '"] .btn_close'); - myLayer.classList.add('active'); - btnClose.addEventListener("click", function() { - myLayer.classList.remove('active'); - if (callback != undefined && callback != null) { - callback(''); - } - }); - - if (callback != undefined && callback != null) { - callback(myId); - } - }, - */ - openLayer: function(layerId) { - if (layerId == undefined || layerId == null || layerId == '') { - alert('layerId를 설정해 주세요.'); - } else { - this.$emit('changeLayerId', layerId); - } - }, - closeLayer() { - this.$emit('changeLayerId', ''); - }, - numberComma(num) { - if (typeof num == undefined || num == null) { - return ''; - } - num = num + ''; - let point = num.length % 3; - let len = num.length; - - let str = num.substring(0, point); - while (point < len) { - if (str != '') { - str += ','; - } - str += num.substring(point, point + 3); - point += 3; - } - - return str; - } - } -}; - -var chkPattern = { - data: function() { - return {}; - }, - methods: { - setLenth: function(e, len) { - this.cut(e, len); - }, - onlyNum: function(e, len) { - this.cut(e, len); - var str = e.target.value; - if (!/^[0-9]*$/g.exec(str)) { - e.target.value = str.replace(/[^0-9]/gi, ''); - } - }, - only11Num: function(e, len) { - this.cut(e, len); - var str = e.target.value; - if (!/^[0-9]*$/g.exec(str)) { - str = str.replace(/[^0-9]/gi, ''); - } - - if (str.length > 11) { - str = str.substring(0, 11); - } - - e.target.value = str; - }, - onlyEmail: function(e, len) { - this.cut(e, len); - var str = e.target.value; - if (!/^[a-zA-Z0-9_\.\-@._-]*$/g.exec(str)) { - e.target.value = str.replace(/[^a-zA-Z0-9_\.\-@._-]/gi, ''); - } - }, - onlyName: function(e, len) { - this.cut(e, len); - var str = e.target.value; - if (!/^[ㄱ-힣a-zA-Z]*$/g.exec(str)) { - e.target.value = str.replace(/[^ㄱ-힣a-zA-Z]/gi, ''); - } - }, - onlyTitle: function(e, len) { - this.cut(e, len); - var str = e.target.value; - if (!/^[ㄱ-힣a-zA-Z0-9]*$/g.exec(str)) { - e.target.value = str.replace(/[^ㄱ-힣a-zA-Z0-9]/gi, ''); - } - }, - onlyText: function(e, len) { - this.cut(e, len); - var str = e.target.value; - if (!/^[ㄱ-힣a-zA-Z0-9_-]*$/g.exec(str)) { - e.target.value = str.replace(/[^ㄱ-힣a-zA-Z0-9_-]/gi, ''); - } - }, - onlyPassword: function(e, len) { - this.cut(e, len); - var str = e.target.value; - if (!/^[A-Za-z0-9!@#$%^&*]*$/g.exec(str)) { - e.target.value = str.replace(/[^A-Za-z0-9!@#$%^&*]/gi, ''); - } - }, - onlyId: function(e, len) { - this.cut(e, len); - var str = e.target.value; - if (!/^[A-Za-z0-9]*$/g.exec(str)) { - e.target.value = str.replace(/[^A-Za-z0-9]/gi, ''); - } - }, - onlyIp: function(e, len) { - this.cut(e, len); - var str = e.target.value; - if (!/^[0-9,.*]*$/g.exec(str)) { - e.target.value = str.replace(/[^0-9,.*]/gi, ''); - } - }, - onlyRoleNm_Space: function(e, len) { - this.cut(e, len); - var str = e.target.value; - if (!/^[ㄱ-힣a-zA-Z0-9/\s]*$/g.exec(str)) { - e.target.value = str.replace(/[^ㄱ-힣a-zA-Z0-9/\s]/gi, ''); - } - }, - onlyRoleId_UnderBar: function(e, len) { - this.cut(e, len); - var str = e.target.value; - if (!/^[a-zA-Z0-9_]*$/g.exec(str)) { - e.target.value = str.replace(/[^a-zA-Z0-9_]/gi, ''); - } - }, - cut: function(e, len) { - if (typeof len != 'undefined') { - var str = e.target.value; - if (this.bytes(str) > len) { - e.target.value = this.cutBytes(str, len); - } - } - }, - cutBytes: function(str, len) { - var count = 0; - for (var i = 0; i < str.length; i++) { - if (escape(str.charAt(i)).length >= 4) count += 2; - else if (escape(str.charAt(i)) != '%0D') count++; - if (count > len) { - if (escape(str.charAt(i)) == '%0A') i--; - break; - } - } - return str.substring(0, i); - }, - bytes: function(str) { - var length = 0; - for (var i = 0; i < str.length; i++) { - if (escape(str.charAt(i)).length >= 4) length += 2; - else if (escape(str.charAt(i)) == '%A7') length += 2; - else { - if (escape(str.charAt(i)) != '%0D') length++; - } - } - return length; - }, - checkPhone: function(str) { - str = str.replace(/[\-\s\/]+/g, ''); - if (str.charAt(0) != '0') { - str = '0' + str; - } - if (str.length < 10 || str.length > 12) { - return ''; - } - if (isNaN(str)) { - return ''; - } - //if (str.substr(0,2)!="01" && str.substr(0,3)!="070" && str.substr(0,4)!="0505" && str.substr(0,4)!="0503"){return ""; } - //sif (str.substr(0,3)!="010"){return ""; } - return str; - }, - checkExcelFile: function(fileObj) { - let reg = /(.*?)\.(xls|xlsx)$/; - if (fileObj == undefined || fileObj == null) - return false; - if (!fileObj.name.match(reg)) - return false; - - return true; - } - } -}; - -export { coreUiMixin, chkPattern }; +const coreUiMixin = { + directives: { + focus: { + inserted: function(el) { + el.focus(); + } + } + }, + methods: { + clearInput: function(evt) { + var me = evt.target; + var vname = me.previousElementSibling.name; + this.$data[vname] = ''; + me.previousElementSibling.focus(); + }, + showPhoneNumber: function(str) { + str = str.replace(/[\-\s\/]+/g, ''); + if (str.length > 12 || str.length < 10) { + return str; + } + var result = + str.substring(0, str.length - 8) + + '-' + + str.substring(str.length - 8, str.length - 4) + + '-' + + str.substring(str.length - 4, str.length); + return result; + }, + /* + openLayer: function(event, callback) { + var myId = event.target.getAttribute('data-id'); + var myLayer = document.querySelector('[layer-id="' + myId + '"]'); + var btnClose = document.querySelector('[layer-id="' + myId + '"] .btn_close'); + myLayer.classList.add('active'); + btnClose.addEventListener("click", function() { + myLayer.classList.remove('active'); + if (callback != undefined && callback != null) { + callback(''); + } + }); + + if (callback != undefined && callback != null) { + callback(myId); + } + }, + */ + openLayer: function(layerId) { + if (layerId == undefined || layerId == null || layerId == '') { + alert('layerId를 설정해 주세요.'); + } else { + this.$emit('changeLayerId', layerId); + } + }, + closeLayer() { + this.$emit('changeLayerId', ''); + }, + numberComma(num) { + if (typeof num == undefined || num == null) { + return ''; + } + num = num + ''; + let point = num.length % 3; + let len = num.length; + + let str = num.substring(0, point); + while (point < len) { + if (str != '') { + str += ','; + } + str += num.substring(point, point + 3); + point += 3; + } + + return str; + } + } +}; + +var chkPattern = { + data: function() { + return {}; + }, + methods: { + setLenth: function(e, len) { + this.cut(e, len); + }, + onlyNum: function(e, len) { + this.cut(e, len); + var str = e.target.value; + if (!/^[0-9]*$/g.exec(str)) { + e.target.value = str.replace(/[^0-9]/gi, ''); + } + }, + only11Num: function(e, len) { + this.cut(e, len); + var str = e.target.value; + if (!/^[0-9]*$/g.exec(str)) { + str = str.replace(/[^0-9]/gi, ''); + } + + if (str.length > 11) { + str = str.substring(0, 11); + } + + e.target.value = str; + }, + onlyEmail: function(e, len) { + this.cut(e, len); + var str = e.target.value; + if (!/^[a-zA-Z0-9_\.\-@._-]*$/g.exec(str)) { + e.target.value = str.replace(/[^a-zA-Z0-9_\.\-@._-]/gi, ''); + } + }, + onlyName: function(e, len) { + this.cut(e, len); + var str = e.target.value; + if (!/^[ㄱ-힣a-zA-Z]*$/g.exec(str)) { + e.target.value = str.replace(/[^ㄱ-힣a-zA-Z]/gi, ''); + } + }, + onlyTitle: function(e, len) { + this.cut(e, len); + var str = e.target.value; + if (!/^[ㄱ-힣a-zA-Z0-9]*$/g.exec(str)) { + e.target.value = str.replace(/[^ㄱ-힣a-zA-Z0-9]/gi, ''); + } + }, + onlyText: function(e, len) { + this.cut(e, len); + var str = e.target.value; + if (!/^[ㄱ-힣a-zA-Z0-9_-]*$/g.exec(str)) { + e.target.value = str.replace(/[^ㄱ-힣a-zA-Z0-9_-]/gi, ''); + } + }, + onlyPassword: function(e, len) { + this.cut(e, len); + var str = e.target.value; + if (!/^[A-Za-z0-9!@#$%^&*]*$/g.exec(str)) { + e.target.value = str.replace(/[^A-Za-z0-9!@#$%^&*]/gi, ''); + } + }, + onlyId: function(e, len) { + this.cut(e, len); + var str = e.target.value; + if (!/^[A-Za-z0-9]*$/g.exec(str)) { + e.target.value = str.replace(/[^A-Za-z0-9]/gi, ''); + } + }, + onlyIp: function(e, len) { + this.cut(e, len); + var str = e.target.value; + if (!/^[0-9,.*]*$/g.exec(str)) { + e.target.value = str.replace(/[^0-9,.*]/gi, ''); + } + }, + onlyRoleNm_Space: function(e, len) { + this.cut(e, len); + var str = e.target.value; + if (!/^[ㄱ-힣a-zA-Z0-9/\s]*$/g.exec(str)) { + e.target.value = str.replace(/[^ㄱ-힣a-zA-Z0-9/\s]/gi, ''); + } + }, + onlyRoleId_UnderBar: function(e, len) { + this.cut(e, len); + var str = e.target.value; + if (!/^[a-zA-Z0-9_]*$/g.exec(str)) { + e.target.value = str.replace(/[^a-zA-Z0-9_]/gi, ''); + } + }, + cut: function(e, len) { + if (typeof len != 'undefined') { + var str = e.target.value; + if (this.bytes(str) > len) { + e.target.value = this.cutBytes(str, len); + } + } + }, + cutBytes: function(str, len) { + var count = 0; + for (var i = 0; i < str.length; i++) { + if (escape(str.charAt(i)).length >= 4) count += 2; + else if (escape(str.charAt(i)) != '%0D') count++; + if (count > len) { + if (escape(str.charAt(i)) == '%0A') i--; + break; + } + } + return str.substring(0, i); + }, + bytes: function(str) { + var length = 0; + for (var i = 0; i < str.length; i++) { + if (escape(str.charAt(i)).length >= 4) length += 2; + else if (escape(str.charAt(i)) == '%A7') length += 2; + else { + if (escape(str.charAt(i)) != '%0D') length++; + } + } + return length; + }, + checkPhone: function(str) { + str = str.replace(/[\-\s\/]+/g, ''); + if (str.charAt(0) != '0') { + str = '0' + str; + } + if (str.length < 10 || str.length > 12) { + return ''; + } + if (isNaN(str)) { + return ''; + } + //if (str.substr(0,2)!="01" && str.substr(0,3)!="070" && str.substr(0,4)!="0505" && str.substr(0,4)!="0503"){return ""; } + //sif (str.substr(0,3)!="010"){return ""; } + return str; + }, + checkExcelFile: function(fileObj) { + let reg = /(.*?)\.(xls|xlsx)$/; + if (fileObj == undefined || fileObj == null) + return false; + if (!fileObj.name.match(reg)) + return false; + + return true; + } + } +}; + +export { coreUiMixin, chkPattern }; diff --git a/frontend/src/components/ButtonBranch.vue b/frontend/src/components/ButtonBranch.vue index 9f1cb08..24de4a1 100644 --- a/frontend/src/components/ButtonBranch.vue +++ b/frontend/src/components/ButtonBranch.vue @@ -1,45 +1,45 @@ - - - \ No newline at end of file diff --git a/frontend/src/components/CreateBrandViewer.vue b/frontend/src/components/CreateBrandViewer.vue index a8ccf08..67cab3c 100644 --- a/frontend/src/components/CreateBrandViewer.vue +++ b/frontend/src/components/CreateBrandViewer.vue @@ -1,199 +1,199 @@ - - - + + + diff --git a/frontend/src/components/CustomGrid.vue b/frontend/src/components/CustomGrid.vue index aae262c..aa4f940 100644 --- a/frontend/src/components/CustomGrid.vue +++ b/frontend/src/components/CustomGrid.vue @@ -1,679 +1,740 @@ - - - - - + + + + + diff --git a/frontend/src/components/Datepicker.vue b/frontend/src/components/Datepicker.vue index 293c3aa..7e38863 100644 --- a/frontend/src/components/Datepicker.vue +++ b/frontend/src/components/Datepicker.vue @@ -1,139 +1,139 @@ -.rtl { - direction: rtl; -} -.vdp-datepicker { - position: relative; - text-align: left; -} -.vdp-datepicker * { - box-sizing: border-box; -} -.vdp-datepicker__calendar { - position: absolute; - z-index: 100; - background: #fff; - width: 300px; - border: 1px solid #ccc; -} -.vdp-datepicker__calendar header { - display: block; - line-height: 40px; -} -.vdp-datepicker__calendar header span { - display: inline-block; - text-align: center; - width: 71.42857142857143%; - float: left; -} -.vdp-datepicker__calendar header .prev, -.vdp-datepicker__calendar header .next { - width: 14.285714285714286%; - float: left; - text-indent: -10000px; - position: relative; -} -.vdp-datepicker__calendar header .prev:after, -.vdp-datepicker__calendar header .next:after { - content: ''; - position: absolute; - left: 50%; - top: 50%; - transform: translateX(-50%) translateY(-50%); - border: 6px solid transparent; -} -.vdp-datepicker__calendar header .prev:after { - border-right: 10px solid #000; - margin-left: -5px; -} -.vdp-datepicker__calendar header .prev.disabled:after { - border-right: 10px solid #ddd; -} -.vdp-datepicker__calendar header .next:after { - border-left: 10px solid #000; - margin-left: 5px; -} -.vdp-datepicker__calendar header .next.disabled:after { - border-left: 10px solid #ddd; -} -.vdp-datepicker__calendar header .prev:not(.disabled), -.vdp-datepicker__calendar header .next:not(.disabled), -.vdp-datepicker__calendar header .up:not(.disabled) { - cursor: pointer; -} -.vdp-datepicker__calendar header .prev:not(.disabled):hover, -.vdp-datepicker__calendar header .next:not(.disabled):hover, -.vdp-datepicker__calendar header .up:not(.disabled):hover { - background: #eee; -} -.vdp-datepicker__calendar .disabled { - color: #ddd; - cursor: default; -} -.vdp-datepicker__calendar .flex-rtl { - display: flex; - width: inherit; - flex-wrap: wrap; -} -.vdp-datepicker__calendar .cell { - display: inline-block; - padding: 0 5px; - width: 14.285714285714286%; - height: 40px; - line-height: 40px; - text-align: center; - vertical-align: middle; - border: 1px solid transparent; -} -.vdp-datepicker__calendar .cell:not(.blank):not(.disabled).day, -.vdp-datepicker__calendar .cell:not(.blank):not(.disabled).month, -.vdp-datepicker__calendar .cell:not(.blank):not(.disabled).year { - cursor: pointer; -} -.vdp-datepicker__calendar .cell:not(.blank):not(.disabled).day:hover, -.vdp-datepicker__calendar .cell:not(.blank):not(.disabled).month:hover, -.vdp-datepicker__calendar .cell:not(.blank):not(.disabled).year:hover { - border: 1px solid #4bd; -} -.vdp-datepicker__calendar .cell.selected { - background: #4bd; -} -.vdp-datepicker__calendar .cell.selected:hover { - background: #4bd; -} -.vdp-datepicker__calendar .cell.selected.highlighted { - background: #4bd; -} -.vdp-datepicker__calendar .cell.highlighted { - background: #cae5ed; -} -.vdp-datepicker__calendar .cell.highlighted.disabled { - color: #a3a3a3; -} -.vdp-datepicker__calendar .cell.grey { - color: #888; -} -.vdp-datepicker__calendar .cell.grey:hover { - background: inherit; -} -.vdp-datepicker__calendar .cell.day-header { - font-size: 75%; - white-space: nowrap; - cursor: inherit; -} -.vdp-datepicker__calendar .cell.day-header:hover { - background: inherit; -} -.vdp-datepicker__calendar .month, -.vdp-datepicker__calendar .year { - width: 33.333%; -} -.vdp-datepicker__clear-button, -.vdp-datepicker__calendar-button { - cursor: pointer; - font-style: normal; -} -.vdp-datepicker__clear-button.disabled, -.vdp-datepicker__calendar-button.disabled { - color: #999; - cursor: default; -} +.rtl { + direction: rtl; +} +.vdp-datepicker { + position: relative; + text-align: left; +} +.vdp-datepicker * { + box-sizing: border-box; +} +.vdp-datepicker__calendar { + position: absolute; + z-index: 100; + background: #fff; + width: 300px; + border: 1px solid #ccc; +} +.vdp-datepicker__calendar header { + display: block; + line-height: 40px; +} +.vdp-datepicker__calendar header span { + display: inline-block; + text-align: center; + width: 71.42857142857143%; + float: left; +} +.vdp-datepicker__calendar header .prev, +.vdp-datepicker__calendar header .next { + width: 14.285714285714286%; + float: left; + text-indent: -10000px; + position: relative; +} +.vdp-datepicker__calendar header .prev:after, +.vdp-datepicker__calendar header .next:after { + content: ''; + position: absolute; + left: 50%; + top: 50%; + transform: translateX(-50%) translateY(-50%); + border: 6px solid transparent; +} +.vdp-datepicker__calendar header .prev:after { + border-right: 10px solid #000; + margin-left: -5px; +} +.vdp-datepicker__calendar header .prev.disabled:after { + border-right: 10px solid #ddd; +} +.vdp-datepicker__calendar header .next:after { + border-left: 10px solid #000; + margin-left: 5px; +} +.vdp-datepicker__calendar header .next.disabled:after { + border-left: 10px solid #ddd; +} +.vdp-datepicker__calendar header .prev:not(.disabled), +.vdp-datepicker__calendar header .next:not(.disabled), +.vdp-datepicker__calendar header .up:not(.disabled) { + cursor: pointer; +} +.vdp-datepicker__calendar header .prev:not(.disabled):hover, +.vdp-datepicker__calendar header .next:not(.disabled):hover, +.vdp-datepicker__calendar header .up:not(.disabled):hover { + background: #eee; +} +.vdp-datepicker__calendar .disabled { + color: #ddd; + cursor: default; +} +.vdp-datepicker__calendar .flex-rtl { + display: flex; + width: inherit; + flex-wrap: wrap; +} +.vdp-datepicker__calendar .cell { + display: inline-block; + padding: 0 5px; + width: 14.285714285714286%; + height: 40px; + line-height: 40px; + text-align: center; + vertical-align: middle; + border: 1px solid transparent; +} +.vdp-datepicker__calendar .cell:not(.blank):not(.disabled).day, +.vdp-datepicker__calendar .cell:not(.blank):not(.disabled).month, +.vdp-datepicker__calendar .cell:not(.blank):not(.disabled).year { + cursor: pointer; +} +.vdp-datepicker__calendar .cell:not(.blank):not(.disabled).day:hover, +.vdp-datepicker__calendar .cell:not(.blank):not(.disabled).month:hover, +.vdp-datepicker__calendar .cell:not(.blank):not(.disabled).year:hover { + border: 1px solid #4bd; +} +.vdp-datepicker__calendar .cell.selected { + background: #4bd; +} +.vdp-datepicker__calendar .cell.selected:hover { + background: #4bd; +} +.vdp-datepicker__calendar .cell.selected.highlighted { + background: #4bd; +} +.vdp-datepicker__calendar .cell.highlighted { + background: #cae5ed; +} +.vdp-datepicker__calendar .cell.highlighted.disabled { + color: #a3a3a3; +} +.vdp-datepicker__calendar .cell.grey { + color: #888; +} +.vdp-datepicker__calendar .cell.grey:hover { + background: inherit; +} +.vdp-datepicker__calendar .cell.day-header { + font-size: 75%; + white-space: nowrap; + cursor: inherit; +} +.vdp-datepicker__calendar .cell.day-header:hover { + background: inherit; +} +.vdp-datepicker__calendar .month, +.vdp-datepicker__calendar .year { + width: 33.333%; +} +.vdp-datepicker__clear-button, +.vdp-datepicker__calendar-button { + cursor: pointer; + font-style: normal; +} +.vdp-datepicker__clear-button.disabled, +.vdp-datepicker__calendar-button.disabled { + color: #999; + cursor: default; +} diff --git a/frontend/src/components/HubWebFooter.vue b/frontend/src/components/HubWebFooter.vue index 232a2ad..ca46948 100644 --- a/frontend/src/components/HubWebFooter.vue +++ b/frontend/src/components/HubWebFooter.vue @@ -1,25 +1,25 @@ - - - + + + diff --git a/frontend/src/components/HubWebHeader.vue b/frontend/src/components/HubWebHeader.vue index 3e0be6b..6f668d1 100644 --- a/frontend/src/components/HubWebHeader.vue +++ b/frontend/src/components/HubWebHeader.vue @@ -1,87 +1,87 @@ - - - + + + diff --git a/frontend/src/components/Lnb.vue b/frontend/src/components/Lnb.vue index c3e4cb3..86b3d52 100644 --- a/frontend/src/components/Lnb.vue +++ b/frontend/src/components/Lnb.vue @@ -1,56 +1,56 @@ - - - + + + diff --git a/frontend/src/components/LoginPopup.vue b/frontend/src/components/LoginPopup.vue index d3a783c..f87788d 100644 --- a/frontend/src/components/LoginPopup.vue +++ b/frontend/src/components/LoginPopup.vue @@ -1,307 +1,308 @@ - - - - - \ No newline at end of file diff --git a/frontend/src/components/NavBar.vue b/frontend/src/components/NavBar.vue index d2016ac..2054e46 100644 --- a/frontend/src/components/NavBar.vue +++ b/frontend/src/components/NavBar.vue @@ -1,132 +1,121 @@ - - - \ No newline at end of file diff --git a/frontend/src/components/Pagination.vue b/frontend/src/components/Pagination.vue index 81769e8..19e00d6 100644 --- a/frontend/src/components/Pagination.vue +++ b/frontend/src/components/Pagination.vue @@ -1,133 +1,133 @@ - - - - - + + + + + diff --git a/frontend/src/components/TreeMenu.vue b/frontend/src/components/TreeMenu.vue index 6c30575..ecdf934 100644 --- a/frontend/src/components/TreeMenu.vue +++ b/frontend/src/components/TreeMenu.vue @@ -1,61 +1,61 @@ - - - - - + + + + + diff --git a/frontend/src/components/TuiGrid.vue b/frontend/src/components/TuiGrid.vue index 2fdbde2..19907bb 100644 --- a/frontend/src/components/TuiGrid.vue +++ b/frontend/src/components/TuiGrid.vue @@ -1,293 +1,293 @@ - - - - - - + + + + + + diff --git a/frontend/src/components/TuiGridPerPage.vue b/frontend/src/components/TuiGridPerPage.vue index edcfd7f..0d5adb1 100644 --- a/frontend/src/components/TuiGridPerPage.vue +++ b/frontend/src/components/TuiGridPerPage.vue @@ -1,27 +1,27 @@ - - - \ No newline at end of file diff --git a/frontend/src/components/TuiGridSample_it_will_be_delete.vue b/frontend/src/components/TuiGridSample_it_will_be_delete.vue index 6387e9a..e8b4848 100644 --- a/frontend/src/components/TuiGridSample_it_will_be_delete.vue +++ b/frontend/src/components/TuiGridSample_it_will_be_delete.vue @@ -1,116 +1,116 @@ -` - 샘플 문서, 추후 삭제 예정 입니다. -` - - - - - +` + 샘플 문서, 추후 삭제 예정 입니다. +` + + + + + diff --git a/frontend/src/components/vuejs-datepicker.js b/frontend/src/components/vuejs-datepicker.js index ce8d7c9..16f57c4 100644 --- a/frontend/src/components/vuejs-datepicker.js +++ b/frontend/src/components/vuejs-datepicker.js @@ -1 +1 @@ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).vuejsDatepicker=t()}(this,function(){"use strict";function e(t){return(e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(t)}function t(e,t){for(var a=0;a0?this.utils.getDay(t)-1:6:this.utils.getDay(t)},days:function(){for(var e=this.pageDate,t=[],a=this.useUtc?new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),1)):new Date(e.getFullYear(),e.getMonth(),1,e.getHours(),e.getMinutes()),i=this.utils.daysInMonth(this.utils.getFullYear(a),this.utils.getMonth(a)),n=0;n=this.utils.getMonth(e)&&this.utils.getFullYear(this.disabledDates.to)>=this.utils.getFullYear(e)},nextMonth:function(){this.isNextMonthDisabled()||this.changeMonth(1)},isNextMonthDisabled:function(){if(!this.disabledDates||!this.disabledDates.from)return!1;var e=this.pageDate;return this.utils.getMonth(this.disabledDates.from)<=this.utils.getMonth(e)&&this.utils.getFullYear(this.disabledDates.from)<=this.utils.getFullYear(e)},isSelectedDate:function(e){return this.selectedDate&&this.utils.compareDates(this.selectedDate,e)},isDisabledDate:function(e){var t=this,a=!1;return void 0!==this.disabledDates&&(void 0!==this.disabledDates.dates&&this.disabledDates.dates.forEach(function(i){if(t.utils.compareDates(e,i))return a=!0,!0}),void 0!==this.disabledDates.to&&this.disabledDates.to&&ethis.disabledDates.from&&(a=!0),void 0!==this.disabledDates.ranges&&this.disabledDates.ranges.forEach(function(t){if(void 0!==t.from&&t.from&&void 0!==t.to&&t.to&&et.from)return a=!0,!0}),void 0!==this.disabledDates.days&&-1!==this.disabledDates.days.indexOf(this.utils.getDay(e))&&(a=!0),void 0!==this.disabledDates.daysOfMonth&&-1!==this.disabledDates.daysOfMonth.indexOf(this.utils.getDate(e))&&(a=!0),"function"==typeof this.disabledDates.customPredictor&&this.disabledDates.customPredictor(e)&&(a=!0),a)},isHighlightedDate:function(e){var t=this;if((!this.highlighted||!this.highlighted.includeDisabled)&&this.isDisabledDate(e))return!1;var a=!1;return void 0!==this.highlighted&&(void 0!==this.highlighted.dates&&this.highlighted.dates.forEach(function(i){if(t.utils.compareDates(e,i))return a=!0,!0}),this.isDefined(this.highlighted.from)&&this.isDefined(this.highlighted.to)&&(a=e>=this.highlighted.from&&e<=this.highlighted.to),void 0!==this.highlighted.days&&-1!==this.highlighted.days.indexOf(this.utils.getDay(e))&&(a=!0),void 0!==this.highlighted.daysOfMonth&&-1!==this.highlighted.daysOfMonth.indexOf(this.utils.getDate(e))&&(a=!0),"function"==typeof this.highlighted.customPredictor&&this.highlighted.customPredictor(e)&&(a=!0),a)},dayClasses:function(e){return{selected:e.isSelected,disabled:e.isDisabled,highlighted:e.isHighlighted,today:e.isToday,weekend:e.isWeekend,sat:e.isSaturday,sun:e.isSunday,"highlight-start":e.isHighlightStart,"highlight-end":e.isHighlightEnd}},isHighlightStart:function(e){return this.isHighlightedDate(e)&&this.highlighted.from instanceof Date&&this.utils.getFullYear(this.highlighted.from)===this.utils.getFullYear(e)&&this.utils.getMonth(this.highlighted.from)===this.utils.getMonth(e)&&this.utils.getDate(this.highlighted.from)===this.utils.getDate(e)},isHighlightEnd:function(e){return this.isHighlightedDate(e)&&this.highlighted.to instanceof Date&&this.utils.getFullYear(this.highlighted.to)===this.utils.getFullYear(e)&&this.utils.getMonth(this.highlighted.to)===this.utils.getMonth(e)&&this.utils.getDate(this.highlighted.to)===this.utils.getDate(e)},isDefined:function(e){return void 0!==e&&e}}};var p=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("div",{directives:[{name:"show",rawName:"v-show",value:e.showDayView,expression:"showDayView"}],class:[e.calendarClass,"vdp-datepicker__calendar"],style:e.calendarStyle,on:{mousedown:function(e){e.preventDefault()}}},[e._t("beforeCalendarHeader"),e._v(" "),a("header",[a("span",{staticClass:"prev",class:{disabled:e.isLeftNavDisabled},on:{click:function(t){e.isRtl?e.nextMonth():e.previousMonth()}}},[e._v("<")]),e._v(" "),a("span",{staticClass:"day__month_btn",class:e.allowedToShowView("month")?"up":"",on:{click:e.showMonthCalendar}},[e._v(e._s(e.isYmd?e.currYearName:e.currMonthName)+" "+e._s(e.isYmd?e.currMonthName:e.currYearName))]),e._v(" "),a("span",{staticClass:"next",class:{disabled:e.isRightNavDisabled},on:{click:function(t){e.isRtl?e.previousMonth():e.nextMonth()}}},[e._v(">")])]),e._v(" "),a("div",{class:e.isRtl?"flex-rtl":""},[e._l(e.daysOfWeek,function(t){return a("span",{key:t.timestamp,staticClass:"cell day-header"},[e._v(e._s(t))])}),e._v(" "),e.blankDays>0?e._l(e.blankDays,function(e){return a("span",{key:e.timestamp,staticClass:"cell day blank"})}):e._e(),e._l(e.days,function(t){return a("span",{key:t.timestamp,staticClass:"cell day",class:e.dayClasses(t),domProps:{innerHTML:e._s(e.dayCellContent(t))},on:{click:function(a){return e.selectDate(t)}}})})],2)],2)};p._withStripped=!0;var g=o({render:p,staticRenderFns:[]},void 0,u,void 0,!1,void 0,void 0,void 0);const f={props:{showMonthView:Boolean,selectedDate:Date,pageDate:Date,pageTimestamp:Number,disabledDates:Object,calendarClass:[String,Object,Array],calendarStyle:Object,translation:Object,isRtl:Boolean,allowedToShowView:Function,useUtc:Boolean},data:function(){return{utils:r(this.useUtc)}},computed:{months:function(){for(var e=this.pageDate,t=[],a=this.useUtc?new Date(Date.UTC(e.getUTCFullYear(),0,e.getUTCDate())):new Date(e.getFullYear(),0,e.getDate(),e.getHours(),e.getMinutes()),i=0;i<12;i++)t.push({month:this.utils.getMonthName(i,this.translation.months),timestamp:a.getTime(),isSelected:this.isSelectedMonth(a),isDisabled:this.isDisabledMonth(a)}),this.utils.setMonth(a,this.utils.getMonth(a)+1);return t},pageYearName:function(){var e=this.translation.yearSuffix;return"".concat(this.utils.getFullYear(this.pageDate)).concat(e)},isLeftNavDisabled:function(){return this.isRtl?this.isNextYearDisabled(this.pageTimestamp):this.isPreviousYearDisabled(this.pageTimestamp)},isRightNavDisabled:function(){return this.isRtl?this.isPreviousYearDisabled(this.pageTimestamp):this.isNextYearDisabled(this.pageTimestamp)}},methods:{selectMonth:function(e){if(e.isDisabled)return!1;this.$emit("selectMonth",e)},changeYear:function(e){var t=this.pageDate;this.utils.setFullYear(t,this.utils.getFullYear(t)+e),this.$emit("changedYear",t)},previousYear:function(){this.isPreviousYearDisabled()||this.changeYear(-1)},isPreviousYearDisabled:function(){return!(!this.disabledDates||!this.disabledDates.to)&&this.utils.getFullYear(this.disabledDates.to)>=this.utils.getFullYear(this.pageDate)},nextYear:function(){this.isNextYearDisabled()||this.changeYear(1)},isNextYearDisabled:function(){return!(!this.disabledDates||!this.disabledDates.from)&&this.utils.getFullYear(this.disabledDates.from)<=this.utils.getFullYear(this.pageDate)},showYearCalendar:function(){this.$emit("showYearCalendar")},isSelectedMonth:function(e){return this.selectedDate&&this.utils.getFullYear(this.selectedDate)===this.utils.getFullYear(e)&&this.utils.getMonth(this.selectedDate)===this.utils.getMonth(e)},isDisabledMonth:function(e){var t=!1;return void 0!==this.disabledDates&&(void 0!==this.disabledDates.to&&this.disabledDates.to&&(this.utils.getMonth(e)this.utils.getMonth(this.disabledDates.from)&&this.utils.getFullYear(e)>=this.utils.getFullYear(this.disabledDates.from)||this.utils.getFullYear(e)>this.utils.getFullYear(this.disabledDates.from))&&(t=!0),"function"==typeof this.disabledDates.customPredictor&&this.disabledDates.customPredictor(e)&&(t=!0),t)}}};var D=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("div",{directives:[{name:"show",rawName:"v-show",value:e.showMonthView,expression:"showMonthView"}],class:[e.calendarClass,"vdp-datepicker__calendar"],style:e.calendarStyle,on:{mousedown:function(e){e.preventDefault()}}},[e._t("beforeCalendarHeader"),e._v(" "),a("header",[a("span",{staticClass:"prev",class:{disabled:e.isLeftNavDisabled},on:{click:function(t){e.isRtl?e.nextYear():e.previousYear()}}},[e._v("<")]),e._v(" "),a("span",{staticClass:"month__year_btn",class:e.allowedToShowView("year")?"up":"",on:{click:e.showYearCalendar}},[e._v(e._s(e.pageYearName))]),e._v(" "),a("span",{staticClass:"next",class:{disabled:e.isRightNavDisabled},on:{click:function(t){e.isRtl?e.previousYear():e.nextYear()}}},[e._v(">")])]),e._v(" "),e._l(e.months,function(t){return a("span",{key:t.timestamp,staticClass:"cell month",class:{selected:t.isSelected,disabled:t.isDisabled},on:{click:function(a){return a.stopPropagation(),e.selectMonth(t)}}},[e._v(e._s(t.month))])})],2)};D._withStripped=!0;var b=o({render:D,staticRenderFns:[]},void 0,f,void 0,!1,void 0,void 0,void 0);const m={props:{showYearView:Boolean,selectedDate:Date,pageDate:Date,pageTimestamp:Number,disabledDates:Object,highlighted:Object,calendarClass:[String,Object,Array],calendarStyle:Object,translation:Object,isRtl:Boolean,allowedToShowView:Function,useUtc:Boolean},computed:{years:function(){for(var e=this.pageDate,t=[],a=this.useUtc?new Date(Date.UTC(10*Math.floor(e.getUTCFullYear()/10),e.getUTCMonth(),e.getUTCDate())):new Date(10*Math.floor(e.getFullYear()/10),e.getMonth(),e.getDate(),e.getHours(),e.getMinutes()),i=0;i<10;i++)t.push({year:this.utils.getFullYear(a),timestamp:a.getTime(),isSelected:this.isSelectedYear(a),isDisabled:this.isDisabledYear(a)}),this.utils.setFullYear(a,this.utils.getFullYear(a)+1);return t},getPageDecade:function(){var e=10*Math.floor(this.utils.getFullYear(this.pageDate)/10),t=e+9,a=this.translation.yearSuffix;return"".concat(e," - ").concat(t).concat(a)},isLeftNavDisabled:function(){return this.isRtl?this.isNextDecadeDisabled(this.pageTimestamp):this.isPreviousDecadeDisabled(this.pageTimestamp)},isRightNavDisabled:function(){return this.isRtl?this.isPreviousDecadeDisabled(this.pageTimestamp):this.isNextDecadeDisabled(this.pageTimestamp)}},data:function(){return{utils:r(this.useUtc)}},methods:{selectYear:function(e){if(e.isDisabled)return!1;this.$emit("selectYear",e)},changeYear:function(e){var t=this.pageDate;this.utils.setFullYear(t,this.utils.getFullYear(t)+e),this.$emit("changedDecade",t)},previousDecade:function(){if(this.isPreviousDecadeDisabled())return!1;this.changeYear(-10)},isPreviousDecadeDisabled:function(){return!(!this.disabledDates||!this.disabledDates.to)&&this.utils.getFullYear(this.disabledDates.to)>10*Math.floor(this.utils.getFullYear(this.pageDate)/10)-1},nextDecade:function(){if(this.isNextDecadeDisabled())return!1;this.changeYear(10)},isNextDecadeDisabled:function(){return!(!this.disabledDates||!this.disabledDates.from)&&this.utils.getFullYear(this.disabledDates.from)<10*Math.ceil(this.utils.getFullYear(this.pageDate)/10)},isSelectedYear:function(e){return this.selectedDate&&this.utils.getFullYear(this.selectedDate)===this.utils.getFullYear(e)},isDisabledYear:function(e){var t=!1;return!(void 0===this.disabledDates||!this.disabledDates)&&(void 0!==this.disabledDates.to&&this.disabledDates.to&&this.utils.getFullYear(e)this.utils.getFullYear(this.disabledDates.from)&&(t=!0),"function"==typeof this.disabledDates.customPredictor&&this.disabledDates.customPredictor(e)&&(t=!0),t)}}};var A=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("div",{directives:[{name:"show",rawName:"v-show",value:e.showYearView,expression:"showYearView"}],class:[e.calendarClass,"vdp-datepicker__calendar"],style:e.calendarStyle,on:{mousedown:function(e){e.preventDefault()}}},[e._t("beforeCalendarHeader"),e._v(" "),a("header",[a("span",{staticClass:"prev",class:{disabled:e.isLeftNavDisabled},on:{click:function(t){e.isRtl?e.nextDecade():e.previousDecade()}}},[e._v("<")]),e._v(" "),a("span",[e._v(e._s(e.getPageDecade))]),e._v(" "),a("span",{staticClass:"next",class:{disabled:e.isRightNavDisabled},on:{click:function(t){e.isRtl?e.previousDecade():e.nextDecade()}}},[e._v(">")])]),e._v(" "),e._l(e.years,function(t){return a("span",{key:t.timestamp,staticClass:"cell year",class:{selected:t.isSelected,disabled:t.isDisabled},on:{click:function(a){return a.stopPropagation(),e.selectYear(t)}}},[e._v(e._s(t.year))])})],2)};A._withStripped=!0;var v={components:{DateInput:c,PickerDay:g,PickerMonth:b,PickerYear:o({render:A,staticRenderFns:[]},void 0,m,void 0,!1,void 0,void 0,void 0)},props:{value:{validator:function(e){return l.validateDateInput(e)}},name:String,refName:String,id:String,format:{type:[String,Function],default:"dd MMM yyyy"},language:{type:Object,default:function(){return n}},openDate:{validator:function(e){return l.validateDateInput(e)}},dayCellContent:Function,fullMonthName:Boolean,disabledDates:Object,highlighted:Object,placeholder:String,inline:Boolean,calendarClass:[String,Object,Array],inputClass:[String,Object,Array],wrapperClass:[String,Object,Array],mondayFirst:Boolean,clearButton:Boolean,clearButtonIcon:String,calendarButton:Boolean,calendarButtonIcon:String,calendarButtonIconContent:String,bootstrapStyling:Boolean,initialView:String,disabled:Boolean,required:Boolean,typeable:Boolean,useUtc:Boolean,minimumView:{type:String,default:"day"},maximumView:{type:String,default:"year"}},data:function(){var e=this.openDate?new Date(this.openDate):new Date,t=r(this.useUtc);return{pageTimestamp:t.setDate(e,1),selectedDate:null,showDayView:!1,showMonthView:!1,showYearView:!1,calendarHeight:0,resetTypedDate:new Date,utils:t}},watch:{value:function(e){this.setValue(e)},openDate:function(){this.setPageDate()},initialView:function(){this.setInitialView()}},computed:{computedInitialView:function(){return this.initialView?this.initialView:this.minimumView},pageDate:function(){return new Date(this.pageTimestamp)},translation:function(){return this.language},calendarStyle:function(){return{position:this.isInline?"static":void 0}},isOpen:function(){return this.showDayView||this.showMonthView||this.showYearView},isInline:function(){return!!this.inline},isRtl:function(){return!0===this.translation.rtl}},methods:{resetDefaultPageDate:function(){null!==this.selectedDate?this.setPageDate(this.selectedDate):this.setPageDate()},showCalendar:function(){return!this.disabled&&!this.isInline&&(this.isOpen?this.close(!0):void this.setInitialView())},setInitialView:function(){var e=this.computedInitialView;if(!this.allowedToShowView(e))throw new Error("initialView '".concat(this.initialView,"' cannot be rendered based on minimum '").concat(this.minimumView,"' and maximum '").concat(this.maximumView,"'"));switch(e){case"year":this.showYearCalendar();break;case"month":this.showMonthCalendar();break;default:this.showDayCalendar()}},allowedToShowView:function(e){var t=["day","month","year"],a=t.indexOf(this.minimumView),i=t.indexOf(this.maximumView),n=t.indexOf(e);return n>=a&&n<=i},showDayCalendar:function(){return!!this.allowedToShowView("day")&&(this.close(),this.showDayView=!0,!0)},showMonthCalendar:function(){return!!this.allowedToShowView("month")&&(this.close(),this.showMonthView=!0,!0)},showYearCalendar:function(){return!!this.allowedToShowView("year")&&(this.close(),this.showYearView=!0,!0)},setDate:function(e){var t=new Date(e);this.selectedDate=t,this.setPageDate(t),this.$emit("selected",t),this.$emit("input",t)},clearDate:function(){this.selectedDate=null,this.setPageDate(),this.$emit("selected",null),this.$emit("input",null),this.$emit("cleared")},selectDate:function(e){this.setDate(e.timestamp),this.isInline||this.close(!0),this.resetTypedDate=new Date},selectDisabledDate:function(e){this.$emit("selectedDisabled",e)},selectMonth:function(e){var t=new Date(e.timestamp);this.allowedToShowView("day")?(this.setPageDate(t),this.$emit("changedMonth",e),this.showDayCalendar()):this.selectDate(e)},selectYear:function(e){var t=new Date(e.timestamp);this.allowedToShowView("month")?(this.setPageDate(t),this.$emit("changedYear",e),this.showMonthCalendar()):this.selectDate(e)},setValue:function(e){if("string"==typeof e||"number"==typeof e){var t=new Date(e);e=isNaN(t.valueOf())?null:t}if(!e)return this.setPageDate(),void(this.selectedDate=null);this.selectedDate=e,this.setPageDate(e)},setPageDate:function(e){e||(e=this.openDate?new Date(this.openDate):new Date),this.pageTimestamp=this.utils.setDate(new Date(e),1)},handleChangedMonthFromDayPicker:function(e){this.setPageDate(e),this.$emit("changedMonth",e)},setTypedDate:function(e){this.setDate(e.getTime())},close:function(e){this.showDayView=this.showMonthView=this.showYearView=!1,this.isInline||(e&&this.$emit("closed"),document.removeEventListener("click",this.clickOutside,!1))},init:function(){this.value&&this.setValue(this.value),this.isInline&&this.setInitialView()}},mounted:function(){this.init()}},y="undefined"!=typeof navigator&&/msie [6-9]\\b/.test(navigator.userAgent.toLowerCase());var _=document.head||document.getElementsByTagName("head")[0],w={};var C=function(e){return function(e,t){return function(e,t){var a=y?t.media||"default":e,i=w[a]||(w[a]={ids:new Set,styles:[]});if(!i.ids.has(e)){i.ids.add(e);var n=t.source;if(t.map&&(n+="\n/*# sourceURL="+t.map.sources[0]+" */",n+="\n/*# sourceMappingURL=data:application/json;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(t.map))))+" */"),i.element||(i.element=document.createElement("style"),i.element.type="text/css",t.media&&i.element.setAttribute("media",t.media),_.appendChild(i.element)),"styleSheet"in i.element)i.styles.push(n),i.element.styleSheet.cssText=i.styles.filter(Boolean).join("\n");else{var s=i.ids.size-1,r=document.createTextNode(n),l=i.element.childNodes;l[s]&&i.element.removeChild(l[s]),l.length?i.element.insertBefore(r,l[s]):i.element.appendChild(r)}}}(e,t)}};const k=v;var B=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("div",{staticClass:"vdp-datepicker",class:[e.wrapperClass,e.isRtl?"rtl":""]},[a("date-input",{attrs:{selectedDate:e.selectedDate,resetTypedDate:e.resetTypedDate,format:e.format,translation:e.translation,inline:e.inline,id:e.id,name:e.name,refName:e.refName,openDate:e.openDate,placeholder:e.placeholder,inputClass:e.inputClass,typeable:e.typeable,clearButton:e.clearButton,clearButtonIcon:e.clearButtonIcon,calendarButton:e.calendarButton,calendarButtonIcon:e.calendarButtonIcon,calendarButtonIconContent:e.calendarButtonIconContent,disabled:e.disabled,required:e.required,bootstrapStyling:e.bootstrapStyling,"use-utc":e.useUtc},on:{showCalendar:e.showCalendar,closeCalendar:e.close,typedDate:e.setTypedDate,clearDate:e.clearDate}},[e._t("afterDateInput",null,{slot:"afterDateInput"})],2),e._v(" "),e.allowedToShowView("day")?a("picker-day",{attrs:{pageDate:e.pageDate,selectedDate:e.selectedDate,showDayView:e.showDayView,fullMonthName:e.fullMonthName,allowedToShowView:e.allowedToShowView,disabledDates:e.disabledDates,highlighted:e.highlighted,calendarClass:e.calendarClass,calendarStyle:e.calendarStyle,translation:e.translation,pageTimestamp:e.pageTimestamp,isRtl:e.isRtl,mondayFirst:e.mondayFirst,dayCellContent:e.dayCellContent,"use-utc":e.useUtc},on:{changedMonth:e.handleChangedMonthFromDayPicker,selectDate:e.selectDate,showMonthCalendar:e.showMonthCalendar,selectedDisabled:e.selectDisabledDate}},[e._t("beforeCalendarHeader",null,{slot:"beforeCalendarHeader"})],2):e._e(),e._v(" "),e.allowedToShowView("month")?a("picker-month",{attrs:{pageDate:e.pageDate,selectedDate:e.selectedDate,showMonthView:e.showMonthView,allowedToShowView:e.allowedToShowView,disabledDates:e.disabledDates,calendarClass:e.calendarClass,calendarStyle:e.calendarStyle,translation:e.translation,isRtl:e.isRtl,"use-utc":e.useUtc},on:{selectMonth:e.selectMonth,showYearCalendar:e.showYearCalendar,changedYear:e.setPageDate}},[e._t("beforeCalendarHeader",null,{slot:"beforeCalendarHeader"})],2):e._e(),e._v(" "),e.allowedToShowView("year")?a("picker-year",{attrs:{pageDate:e.pageDate,selectedDate:e.selectedDate,showYearView:e.showYearView,allowedToShowView:e.allowedToShowView,disabledDates:e.disabledDates,calendarClass:e.calendarClass,calendarStyle:e.calendarStyle,translation:e.translation,isRtl:e.isRtl,"use-utc":e.useUtc},on:{selectYear:e.selectYear,changedDecade:e.setPageDate}},[e._t("beforeCalendarHeader",null,{slot:"beforeCalendarHeader"})],2):e._e()],1)};B._withStripped=!0;return o({render:B,staticRenderFns:[]},function(e){e&&e("data-v-64ca2bb5_0",{source:".rtl {\n direction: rtl;\n}\n.vdp-datepicker {\n position: relative;\n text-align: left;\n}\n.vdp-datepicker * {\n box-sizing: border-box;\n}\n.vdp-datepicker__calendar {\n position: absolute;\n z-index: 100;\n background: #fff;\n width: 300px;\n border: 1px solid #ccc;\n}\n.vdp-datepicker__calendar header {\n display: block;\n line-height: 40px;\n}\n.vdp-datepicker__calendar header span {\n display: inline-block;\n text-align: center;\n width: 71.42857142857143%;\n float: left;\n}\n.vdp-datepicker__calendar header .prev,\n.vdp-datepicker__calendar header .next {\n width: 14.285714285714286%;\n float: left;\n text-indent: -10000px;\n position: relative;\n}\n.vdp-datepicker__calendar header .prev:after,\n.vdp-datepicker__calendar header .next:after {\n content: '';\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translateX(-50%) translateY(-50%);\n border: 6px solid transparent;\n}\n.vdp-datepicker__calendar header .prev:after {\n border-right: 10px solid #000;\n margin-left: -5px;\n}\n.vdp-datepicker__calendar header .prev.disabled:after {\n border-right: 10px solid #ddd;\n}\n.vdp-datepicker__calendar header .next:after {\n border-left: 10px solid #000;\n margin-left: 5px;\n}\n.vdp-datepicker__calendar header .next.disabled:after {\n border-left: 10px solid #ddd;\n}\n.vdp-datepicker__calendar header .prev:not(.disabled),\n.vdp-datepicker__calendar header .next:not(.disabled),\n.vdp-datepicker__calendar header .up:not(.disabled) {\n cursor: pointer;\n}\n.vdp-datepicker__calendar header .prev:not(.disabled):hover,\n.vdp-datepicker__calendar header .next:not(.disabled):hover,\n.vdp-datepicker__calendar header .up:not(.disabled):hover {\n background: #eee;\n}\n.vdp-datepicker__calendar .disabled {\n color: #ddd;\n cursor: default;\n}\n.vdp-datepicker__calendar .flex-rtl {\n display: flex;\n width: inherit;\n flex-wrap: wrap;\n}\n.vdp-datepicker__calendar .cell {\n display: inline-block;\n padding: 0 5px;\n width: 14.285714285714286%;\n height: 40px;\n line-height: 40px;\n text-align: center;\n vertical-align: middle;\n border: 1px solid transparent;\n}\n.vdp-datepicker__calendar .cell:not(.blank):not(.disabled).day,\n.vdp-datepicker__calendar .cell:not(.blank):not(.disabled).month,\n.vdp-datepicker__calendar .cell:not(.blank):not(.disabled).year {\n cursor: pointer;\n}\n.vdp-datepicker__calendar .cell:not(.blank):not(.disabled).day:hover,\n.vdp-datepicker__calendar .cell:not(.blank):not(.disabled).month:hover,\n.vdp-datepicker__calendar .cell:not(.blank):not(.disabled).year:hover {\n border: 1px solid #4bd;\n}\n.vdp-datepicker__calendar .cell.selected {\n background: #4bd;\n}\n.vdp-datepicker__calendar .cell.selected:hover {\n background: #4bd;\n}\n.vdp-datepicker__calendar .cell.selected.highlighted {\n background: #4bd;\n}\n.vdp-datepicker__calendar .cell.highlighted {\n background: #cae5ed;\n}\n.vdp-datepicker__calendar .cell.highlighted.disabled {\n color: #a3a3a3;\n}\n.vdp-datepicker__calendar .cell.grey {\n color: #888;\n}\n.vdp-datepicker__calendar .cell.grey:hover {\n background: inherit;\n}\n.vdp-datepicker__calendar .cell.day-header {\n font-size: 75%;\n white-space: nowrap;\n cursor: inherit;\n}\n.vdp-datepicker__calendar .cell.day-header:hover {\n background: inherit;\n}\n.vdp-datepicker__calendar .month,\n.vdp-datepicker__calendar .year {\n width: 33.333%;\n}\n.vdp-datepicker__clear-button,\n.vdp-datepicker__calendar-button {\n cursor: pointer;\n font-style: normal;\n}\n.vdp-datepicker__clear-button.disabled,\n.vdp-datepicker__calendar-button.disabled {\n color: #999;\n cursor: default;\n}\n",map:{version:3,sources:["Datepicker.vue"],names:[],mappings:"AAAA;EACE,cAAc;AAChB;AACA;EACE,kBAAkB;EAClB,gBAAgB;AAClB;AACA;EACE,sBAAsB;AACxB;AACA;EACE,kBAAkB;EAClB,YAAY;EACZ,gBAAgB;EAChB,YAAY;EACZ,sBAAsB;AACxB;AACA;EACE,cAAc;EACd,iBAAiB;AACnB;AACA;EACE,qBAAqB;EACrB,kBAAkB;EAClB,yBAAyB;EACzB,WAAW;AACb;AACA;;EAEE,0BAA0B;EAC1B,WAAW;EACX,qBAAqB;EACrB,kBAAkB;AACpB;AACA;;EAEE,WAAW;EACX,kBAAkB;EAClB,SAAS;EACT,QAAQ;EACR,4CAA4C;EAC5C,6BAA6B;AAC/B;AACA;EACE,6BAA6B;EAC7B,iBAAiB;AACnB;AACA;EACE,6BAA6B;AAC/B;AACA;EACE,4BAA4B;EAC5B,gBAAgB;AAClB;AACA;EACE,4BAA4B;AAC9B;AACA;;;EAGE,eAAe;AACjB;AACA;;;EAGE,gBAAgB;AAClB;AACA;EACE,WAAW;EACX,eAAe;AACjB;AACA;EACE,aAAa;EACb,cAAc;EACd,eAAe;AACjB;AACA;EACE,qBAAqB;EACrB,cAAc;EACd,0BAA0B;EAC1B,YAAY;EACZ,iBAAiB;EACjB,kBAAkB;EAClB,sBAAsB;EACtB,6BAA6B;AAC/B;AACA;;;EAGE,eAAe;AACjB;AACA;;;EAGE,sBAAsB;AACxB;AACA;EACE,gBAAgB;AAClB;AACA;EACE,gBAAgB;AAClB;AACA;EACE,gBAAgB;AAClB;AACA;EACE,mBAAmB;AACrB;AACA;EACE,cAAc;AAChB;AACA;EACE,WAAW;AACb;AACA;EACE,mBAAmB;AACrB;AACA;EACE,cAAc;EACd,mBAAmB;EACnB,eAAe;AACjB;AACA;EACE,mBAAmB;AACrB;AACA;;EAEE,cAAc;AAChB;AACA;;EAEE,eAAe;EACf,kBAAkB;AACpB;AACA;;EAEE,WAAW;EACX,eAAe;AACjB",file:"Datepicker.vue",sourcesContent:[".rtl {\n direction: rtl;\n}\n.vdp-datepicker {\n position: relative;\n text-align: left;\n}\n.vdp-datepicker * {\n box-sizing: border-box;\n}\n.vdp-datepicker__calendar {\n position: absolute;\n z-index: 100;\n background: #fff;\n width: 300px;\n border: 1px solid #ccc;\n}\n.vdp-datepicker__calendar header {\n display: block;\n line-height: 40px;\n}\n.vdp-datepicker__calendar header span {\n display: inline-block;\n text-align: center;\n width: 71.42857142857143%;\n float: left;\n}\n.vdp-datepicker__calendar header .prev,\n.vdp-datepicker__calendar header .next {\n width: 14.285714285714286%;\n float: left;\n text-indent: -10000px;\n position: relative;\n}\n.vdp-datepicker__calendar header .prev:after,\n.vdp-datepicker__calendar header .next:after {\n content: '';\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translateX(-50%) translateY(-50%);\n border: 6px solid transparent;\n}\n.vdp-datepicker__calendar header .prev:after {\n border-right: 10px solid #000;\n margin-left: -5px;\n}\n.vdp-datepicker__calendar header .prev.disabled:after {\n border-right: 10px solid #ddd;\n}\n.vdp-datepicker__calendar header .next:after {\n border-left: 10px solid #000;\n margin-left: 5px;\n}\n.vdp-datepicker__calendar header .next.disabled:after {\n border-left: 10px solid #ddd;\n}\n.vdp-datepicker__calendar header .prev:not(.disabled),\n.vdp-datepicker__calendar header .next:not(.disabled),\n.vdp-datepicker__calendar header .up:not(.disabled) {\n cursor: pointer;\n}\n.vdp-datepicker__calendar header .prev:not(.disabled):hover,\n.vdp-datepicker__calendar header .next:not(.disabled):hover,\n.vdp-datepicker__calendar header .up:not(.disabled):hover {\n background: #eee;\n}\n.vdp-datepicker__calendar .disabled {\n color: #ddd;\n cursor: default;\n}\n.vdp-datepicker__calendar .flex-rtl {\n display: flex;\n width: inherit;\n flex-wrap: wrap;\n}\n.vdp-datepicker__calendar .cell {\n display: inline-block;\n padding: 0 5px;\n width: 14.285714285714286%;\n height: 40px;\n line-height: 40px;\n text-align: center;\n vertical-align: middle;\n border: 1px solid transparent;\n}\n.vdp-datepicker__calendar .cell:not(.blank):not(.disabled).day,\n.vdp-datepicker__calendar .cell:not(.blank):not(.disabled).month,\n.vdp-datepicker__calendar .cell:not(.blank):not(.disabled).year {\n cursor: pointer;\n}\n.vdp-datepicker__calendar .cell:not(.blank):not(.disabled).day:hover,\n.vdp-datepicker__calendar .cell:not(.blank):not(.disabled).month:hover,\n.vdp-datepicker__calendar .cell:not(.blank):not(.disabled).year:hover {\n border: 1px solid #4bd;\n}\n.vdp-datepicker__calendar .cell.selected {\n background: #4bd;\n}\n.vdp-datepicker__calendar .cell.selected:hover {\n background: #4bd;\n}\n.vdp-datepicker__calendar .cell.selected.highlighted {\n background: #4bd;\n}\n.vdp-datepicker__calendar .cell.highlighted {\n background: #cae5ed;\n}\n.vdp-datepicker__calendar .cell.highlighted.disabled {\n color: #a3a3a3;\n}\n.vdp-datepicker__calendar .cell.grey {\n color: #888;\n}\n.vdp-datepicker__calendar .cell.grey:hover {\n background: inherit;\n}\n.vdp-datepicker__calendar .cell.day-header {\n font-size: 75%;\n white-space: nowrap;\n cursor: inherit;\n}\n.vdp-datepicker__calendar .cell.day-header:hover {\n background: inherit;\n}\n.vdp-datepicker__calendar .month,\n.vdp-datepicker__calendar .year {\n width: 33.333%;\n}\n.vdp-datepicker__clear-button,\n.vdp-datepicker__calendar-button {\n cursor: pointer;\n font-style: normal;\n}\n.vdp-datepicker__clear-button.disabled,\n.vdp-datepicker__calendar-button.disabled {\n color: #999;\n cursor: default;\n}\n"]},media:void 0})},k,void 0,!1,void 0,C,void 0)}); +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).vuejsDatepicker=t()}(this,function(){"use strict";function e(t){return(e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(t)}function t(e,t){for(var a=0;a0?this.utils.getDay(t)-1:6:this.utils.getDay(t)},days:function(){for(var e=this.pageDate,t=[],a=this.useUtc?new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),1)):new Date(e.getFullYear(),e.getMonth(),1,e.getHours(),e.getMinutes()),i=this.utils.daysInMonth(this.utils.getFullYear(a),this.utils.getMonth(a)),n=0;n=this.utils.getMonth(e)&&this.utils.getFullYear(this.disabledDates.to)>=this.utils.getFullYear(e)},nextMonth:function(){this.isNextMonthDisabled()||this.changeMonth(1)},isNextMonthDisabled:function(){if(!this.disabledDates||!this.disabledDates.from)return!1;var e=this.pageDate;return this.utils.getMonth(this.disabledDates.from)<=this.utils.getMonth(e)&&this.utils.getFullYear(this.disabledDates.from)<=this.utils.getFullYear(e)},isSelectedDate:function(e){return this.selectedDate&&this.utils.compareDates(this.selectedDate,e)},isDisabledDate:function(e){var t=this,a=!1;return void 0!==this.disabledDates&&(void 0!==this.disabledDates.dates&&this.disabledDates.dates.forEach(function(i){if(t.utils.compareDates(e,i))return a=!0,!0}),void 0!==this.disabledDates.to&&this.disabledDates.to&&ethis.disabledDates.from&&(a=!0),void 0!==this.disabledDates.ranges&&this.disabledDates.ranges.forEach(function(t){if(void 0!==t.from&&t.from&&void 0!==t.to&&t.to&&et.from)return a=!0,!0}),void 0!==this.disabledDates.days&&-1!==this.disabledDates.days.indexOf(this.utils.getDay(e))&&(a=!0),void 0!==this.disabledDates.daysOfMonth&&-1!==this.disabledDates.daysOfMonth.indexOf(this.utils.getDate(e))&&(a=!0),"function"==typeof this.disabledDates.customPredictor&&this.disabledDates.customPredictor(e)&&(a=!0),a)},isHighlightedDate:function(e){var t=this;if((!this.highlighted||!this.highlighted.includeDisabled)&&this.isDisabledDate(e))return!1;var a=!1;return void 0!==this.highlighted&&(void 0!==this.highlighted.dates&&this.highlighted.dates.forEach(function(i){if(t.utils.compareDates(e,i))return a=!0,!0}),this.isDefined(this.highlighted.from)&&this.isDefined(this.highlighted.to)&&(a=e>=this.highlighted.from&&e<=this.highlighted.to),void 0!==this.highlighted.days&&-1!==this.highlighted.days.indexOf(this.utils.getDay(e))&&(a=!0),void 0!==this.highlighted.daysOfMonth&&-1!==this.highlighted.daysOfMonth.indexOf(this.utils.getDate(e))&&(a=!0),"function"==typeof this.highlighted.customPredictor&&this.highlighted.customPredictor(e)&&(a=!0),a)},dayClasses:function(e){return{selected:e.isSelected,disabled:e.isDisabled,highlighted:e.isHighlighted,today:e.isToday,weekend:e.isWeekend,sat:e.isSaturday,sun:e.isSunday,"highlight-start":e.isHighlightStart,"highlight-end":e.isHighlightEnd}},isHighlightStart:function(e){return this.isHighlightedDate(e)&&this.highlighted.from instanceof Date&&this.utils.getFullYear(this.highlighted.from)===this.utils.getFullYear(e)&&this.utils.getMonth(this.highlighted.from)===this.utils.getMonth(e)&&this.utils.getDate(this.highlighted.from)===this.utils.getDate(e)},isHighlightEnd:function(e){return this.isHighlightedDate(e)&&this.highlighted.to instanceof Date&&this.utils.getFullYear(this.highlighted.to)===this.utils.getFullYear(e)&&this.utils.getMonth(this.highlighted.to)===this.utils.getMonth(e)&&this.utils.getDate(this.highlighted.to)===this.utils.getDate(e)},isDefined:function(e){return void 0!==e&&e}}};var p=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("div",{directives:[{name:"show",rawName:"v-show",value:e.showDayView,expression:"showDayView"}],class:[e.calendarClass,"vdp-datepicker__calendar"],style:e.calendarStyle,on:{mousedown:function(e){e.preventDefault()}}},[e._t("beforeCalendarHeader"),e._v(" "),a("header",[a("span",{staticClass:"prev",class:{disabled:e.isLeftNavDisabled},on:{click:function(t){e.isRtl?e.nextMonth():e.previousMonth()}}},[e._v("<")]),e._v(" "),a("span",{staticClass:"day__month_btn",class:e.allowedToShowView("month")?"up":"",on:{click:e.showMonthCalendar}},[e._v(e._s(e.isYmd?e.currYearName:e.currMonthName)+" "+e._s(e.isYmd?e.currMonthName:e.currYearName))]),e._v(" "),a("span",{staticClass:"next",class:{disabled:e.isRightNavDisabled},on:{click:function(t){e.isRtl?e.previousMonth():e.nextMonth()}}},[e._v(">")])]),e._v(" "),a("div",{class:e.isRtl?"flex-rtl":""},[e._l(e.daysOfWeek,function(t){return a("span",{key:t.timestamp,staticClass:"cell day-header"},[e._v(e._s(t))])}),e._v(" "),e.blankDays>0?e._l(e.blankDays,function(e){return a("span",{key:e.timestamp,staticClass:"cell day blank"})}):e._e(),e._l(e.days,function(t){return a("span",{key:t.timestamp,staticClass:"cell day",class:e.dayClasses(t),domProps:{innerHTML:e._s(e.dayCellContent(t))},on:{click:function(a){return e.selectDate(t)}}})})],2)],2)};p._withStripped=!0;var g=o({render:p,staticRenderFns:[]},void 0,u,void 0,!1,void 0,void 0,void 0);const f={props:{showMonthView:Boolean,selectedDate:Date,pageDate:Date,pageTimestamp:Number,disabledDates:Object,calendarClass:[String,Object,Array],calendarStyle:Object,translation:Object,isRtl:Boolean,allowedToShowView:Function,useUtc:Boolean},data:function(){return{utils:r(this.useUtc)}},computed:{months:function(){for(var e=this.pageDate,t=[],a=this.useUtc?new Date(Date.UTC(e.getUTCFullYear(),0,e.getUTCDate())):new Date(e.getFullYear(),0,e.getDate(),e.getHours(),e.getMinutes()),i=0;i<12;i++)t.push({month:this.utils.getMonthName(i,this.translation.months),timestamp:a.getTime(),isSelected:this.isSelectedMonth(a),isDisabled:this.isDisabledMonth(a)}),this.utils.setMonth(a,this.utils.getMonth(a)+1);return t},pageYearName:function(){var e=this.translation.yearSuffix;return"".concat(this.utils.getFullYear(this.pageDate)).concat(e)},isLeftNavDisabled:function(){return this.isRtl?this.isNextYearDisabled(this.pageTimestamp):this.isPreviousYearDisabled(this.pageTimestamp)},isRightNavDisabled:function(){return this.isRtl?this.isPreviousYearDisabled(this.pageTimestamp):this.isNextYearDisabled(this.pageTimestamp)}},methods:{selectMonth:function(e){if(e.isDisabled)return!1;this.$emit("selectMonth",e)},changeYear:function(e){var t=this.pageDate;this.utils.setFullYear(t,this.utils.getFullYear(t)+e),this.$emit("changedYear",t)},previousYear:function(){this.isPreviousYearDisabled()||this.changeYear(-1)},isPreviousYearDisabled:function(){return!(!this.disabledDates||!this.disabledDates.to)&&this.utils.getFullYear(this.disabledDates.to)>=this.utils.getFullYear(this.pageDate)},nextYear:function(){this.isNextYearDisabled()||this.changeYear(1)},isNextYearDisabled:function(){return!(!this.disabledDates||!this.disabledDates.from)&&this.utils.getFullYear(this.disabledDates.from)<=this.utils.getFullYear(this.pageDate)},showYearCalendar:function(){this.$emit("showYearCalendar")},isSelectedMonth:function(e){return this.selectedDate&&this.utils.getFullYear(this.selectedDate)===this.utils.getFullYear(e)&&this.utils.getMonth(this.selectedDate)===this.utils.getMonth(e)},isDisabledMonth:function(e){var t=!1;return void 0!==this.disabledDates&&(void 0!==this.disabledDates.to&&this.disabledDates.to&&(this.utils.getMonth(e)this.utils.getMonth(this.disabledDates.from)&&this.utils.getFullYear(e)>=this.utils.getFullYear(this.disabledDates.from)||this.utils.getFullYear(e)>this.utils.getFullYear(this.disabledDates.from))&&(t=!0),"function"==typeof this.disabledDates.customPredictor&&this.disabledDates.customPredictor(e)&&(t=!0),t)}}};var D=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("div",{directives:[{name:"show",rawName:"v-show",value:e.showMonthView,expression:"showMonthView"}],class:[e.calendarClass,"vdp-datepicker__calendar"],style:e.calendarStyle,on:{mousedown:function(e){e.preventDefault()}}},[e._t("beforeCalendarHeader"),e._v(" "),a("header",[a("span",{staticClass:"prev",class:{disabled:e.isLeftNavDisabled},on:{click:function(t){e.isRtl?e.nextYear():e.previousYear()}}},[e._v("<")]),e._v(" "),a("span",{staticClass:"month__year_btn",class:e.allowedToShowView("year")?"up":"",on:{click:e.showYearCalendar}},[e._v(e._s(e.pageYearName))]),e._v(" "),a("span",{staticClass:"next",class:{disabled:e.isRightNavDisabled},on:{click:function(t){e.isRtl?e.previousYear():e.nextYear()}}},[e._v(">")])]),e._v(" "),e._l(e.months,function(t){return a("span",{key:t.timestamp,staticClass:"cell month",class:{selected:t.isSelected,disabled:t.isDisabled},on:{click:function(a){return a.stopPropagation(),e.selectMonth(t)}}},[e._v(e._s(t.month))])})],2)};D._withStripped=!0;var b=o({render:D,staticRenderFns:[]},void 0,f,void 0,!1,void 0,void 0,void 0);const m={props:{showYearView:Boolean,selectedDate:Date,pageDate:Date,pageTimestamp:Number,disabledDates:Object,highlighted:Object,calendarClass:[String,Object,Array],calendarStyle:Object,translation:Object,isRtl:Boolean,allowedToShowView:Function,useUtc:Boolean},computed:{years:function(){for(var e=this.pageDate,t=[],a=this.useUtc?new Date(Date.UTC(10*Math.floor(e.getUTCFullYear()/10),e.getUTCMonth(),e.getUTCDate())):new Date(10*Math.floor(e.getFullYear()/10),e.getMonth(),e.getDate(),e.getHours(),e.getMinutes()),i=0;i<10;i++)t.push({year:this.utils.getFullYear(a),timestamp:a.getTime(),isSelected:this.isSelectedYear(a),isDisabled:this.isDisabledYear(a)}),this.utils.setFullYear(a,this.utils.getFullYear(a)+1);return t},getPageDecade:function(){var e=10*Math.floor(this.utils.getFullYear(this.pageDate)/10),t=e+9,a=this.translation.yearSuffix;return"".concat(e," - ").concat(t).concat(a)},isLeftNavDisabled:function(){return this.isRtl?this.isNextDecadeDisabled(this.pageTimestamp):this.isPreviousDecadeDisabled(this.pageTimestamp)},isRightNavDisabled:function(){return this.isRtl?this.isPreviousDecadeDisabled(this.pageTimestamp):this.isNextDecadeDisabled(this.pageTimestamp)}},data:function(){return{utils:r(this.useUtc)}},methods:{selectYear:function(e){if(e.isDisabled)return!1;this.$emit("selectYear",e)},changeYear:function(e){var t=this.pageDate;this.utils.setFullYear(t,this.utils.getFullYear(t)+e),this.$emit("changedDecade",t)},previousDecade:function(){if(this.isPreviousDecadeDisabled())return!1;this.changeYear(-10)},isPreviousDecadeDisabled:function(){return!(!this.disabledDates||!this.disabledDates.to)&&this.utils.getFullYear(this.disabledDates.to)>10*Math.floor(this.utils.getFullYear(this.pageDate)/10)-1},nextDecade:function(){if(this.isNextDecadeDisabled())return!1;this.changeYear(10)},isNextDecadeDisabled:function(){return!(!this.disabledDates||!this.disabledDates.from)&&this.utils.getFullYear(this.disabledDates.from)<10*Math.ceil(this.utils.getFullYear(this.pageDate)/10)},isSelectedYear:function(e){return this.selectedDate&&this.utils.getFullYear(this.selectedDate)===this.utils.getFullYear(e)},isDisabledYear:function(e){var t=!1;return!(void 0===this.disabledDates||!this.disabledDates)&&(void 0!==this.disabledDates.to&&this.disabledDates.to&&this.utils.getFullYear(e)this.utils.getFullYear(this.disabledDates.from)&&(t=!0),"function"==typeof this.disabledDates.customPredictor&&this.disabledDates.customPredictor(e)&&(t=!0),t)}}};var A=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("div",{directives:[{name:"show",rawName:"v-show",value:e.showYearView,expression:"showYearView"}],class:[e.calendarClass,"vdp-datepicker__calendar"],style:e.calendarStyle,on:{mousedown:function(e){e.preventDefault()}}},[e._t("beforeCalendarHeader"),e._v(" "),a("header",[a("span",{staticClass:"prev",class:{disabled:e.isLeftNavDisabled},on:{click:function(t){e.isRtl?e.nextDecade():e.previousDecade()}}},[e._v("<")]),e._v(" "),a("span",[e._v(e._s(e.getPageDecade))]),e._v(" "),a("span",{staticClass:"next",class:{disabled:e.isRightNavDisabled},on:{click:function(t){e.isRtl?e.previousDecade():e.nextDecade()}}},[e._v(">")])]),e._v(" "),e._l(e.years,function(t){return a("span",{key:t.timestamp,staticClass:"cell year",class:{selected:t.isSelected,disabled:t.isDisabled},on:{click:function(a){return a.stopPropagation(),e.selectYear(t)}}},[e._v(e._s(t.year))])})],2)};A._withStripped=!0;var v={components:{DateInput:c,PickerDay:g,PickerMonth:b,PickerYear:o({render:A,staticRenderFns:[]},void 0,m,void 0,!1,void 0,void 0,void 0)},props:{value:{validator:function(e){return l.validateDateInput(e)}},name:String,refName:String,id:String,format:{type:[String,Function],default:"dd MMM yyyy"},language:{type:Object,default:function(){return n}},openDate:{validator:function(e){return l.validateDateInput(e)}},dayCellContent:Function,fullMonthName:Boolean,disabledDates:Object,highlighted:Object,placeholder:String,inline:Boolean,calendarClass:[String,Object,Array],inputClass:[String,Object,Array],wrapperClass:[String,Object,Array],mondayFirst:Boolean,clearButton:Boolean,clearButtonIcon:String,calendarButton:Boolean,calendarButtonIcon:String,calendarButtonIconContent:String,bootstrapStyling:Boolean,initialView:String,disabled:Boolean,required:Boolean,typeable:Boolean,useUtc:Boolean,minimumView:{type:String,default:"day"},maximumView:{type:String,default:"year"}},data:function(){var e=this.openDate?new Date(this.openDate):new Date,t=r(this.useUtc);return{pageTimestamp:t.setDate(e,1),selectedDate:null,showDayView:!1,showMonthView:!1,showYearView:!1,calendarHeight:0,resetTypedDate:new Date,utils:t}},watch:{value:function(e){this.setValue(e)},openDate:function(){this.setPageDate()},initialView:function(){this.setInitialView()}},computed:{computedInitialView:function(){return this.initialView?this.initialView:this.minimumView},pageDate:function(){return new Date(this.pageTimestamp)},translation:function(){return this.language},calendarStyle:function(){return{position:this.isInline?"static":void 0}},isOpen:function(){return this.showDayView||this.showMonthView||this.showYearView},isInline:function(){return!!this.inline},isRtl:function(){return!0===this.translation.rtl}},methods:{resetDefaultPageDate:function(){null!==this.selectedDate?this.setPageDate(this.selectedDate):this.setPageDate()},showCalendar:function(){return!this.disabled&&!this.isInline&&(this.isOpen?this.close(!0):void this.setInitialView())},setInitialView:function(){var e=this.computedInitialView;if(!this.allowedToShowView(e))throw new Error("initialView '".concat(this.initialView,"' cannot be rendered based on minimum '").concat(this.minimumView,"' and maximum '").concat(this.maximumView,"'"));switch(e){case"year":this.showYearCalendar();break;case"month":this.showMonthCalendar();break;default:this.showDayCalendar()}},allowedToShowView:function(e){var t=["day","month","year"],a=t.indexOf(this.minimumView),i=t.indexOf(this.maximumView),n=t.indexOf(e);return n>=a&&n<=i},showDayCalendar:function(){return!!this.allowedToShowView("day")&&(this.close(),this.showDayView=!0,!0)},showMonthCalendar:function(){return!!this.allowedToShowView("month")&&(this.close(),this.showMonthView=!0,!0)},showYearCalendar:function(){return!!this.allowedToShowView("year")&&(this.close(),this.showYearView=!0,!0)},setDate:function(e){var t=new Date(e);this.selectedDate=t,this.setPageDate(t),this.$emit("selected",t),this.$emit("input",t)},clearDate:function(){this.selectedDate=null,this.setPageDate(),this.$emit("selected",null),this.$emit("input",null),this.$emit("cleared")},selectDate:function(e){this.setDate(e.timestamp),this.isInline||this.close(!0),this.resetTypedDate=new Date},selectDisabledDate:function(e){this.$emit("selectedDisabled",e)},selectMonth:function(e){var t=new Date(e.timestamp);this.allowedToShowView("day")?(this.setPageDate(t),this.$emit("changedMonth",e),this.showDayCalendar()):this.selectDate(e)},selectYear:function(e){var t=new Date(e.timestamp);this.allowedToShowView("month")?(this.setPageDate(t),this.$emit("changedYear",e),this.showMonthCalendar()):this.selectDate(e)},setValue:function(e){if("string"==typeof e||"number"==typeof e){var t=new Date(e);e=isNaN(t.valueOf())?null:t}if(!e)return this.setPageDate(),void(this.selectedDate=null);this.selectedDate=e,this.setPageDate(e)},setPageDate:function(e){e||(e=this.openDate?new Date(this.openDate):new Date),this.pageTimestamp=this.utils.setDate(new Date(e),1)},handleChangedMonthFromDayPicker:function(e){this.setPageDate(e),this.$emit("changedMonth",e)},setTypedDate:function(e){this.setDate(e.getTime())},close:function(e){this.showDayView=this.showMonthView=this.showYearView=!1,this.isInline||(e&&this.$emit("closed"),document.removeEventListener("click",this.clickOutside,!1))},init:function(){this.value&&this.setValue(this.value),this.isInline&&this.setInitialView()}},mounted:function(){this.init()}},y="undefined"!=typeof navigator&&/msie [6-9]\\b/.test(navigator.userAgent.toLowerCase());var _=document.head||document.getElementsByTagName("head")[0],w={};var C=function(e){return function(e,t){return function(e,t){var a=y?t.media||"default":e,i=w[a]||(w[a]={ids:new Set,styles:[]});if(!i.ids.has(e)){i.ids.add(e);var n=t.source;if(t.map&&(n+="\n/*# sourceURL="+t.map.sources[0]+" */",n+="\n/*# sourceMappingURL=data:application/json;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(t.map))))+" */"),i.element||(i.element=document.createElement("style"),i.element.type="text/css",t.media&&i.element.setAttribute("media",t.media),_.appendChild(i.element)),"styleSheet"in i.element)i.styles.push(n),i.element.styleSheet.cssText=i.styles.filter(Boolean).join("\n");else{var s=i.ids.size-1,r=document.createTextNode(n),l=i.element.childNodes;l[s]&&i.element.removeChild(l[s]),l.length?i.element.insertBefore(r,l[s]):i.element.appendChild(r)}}}(e,t)}};const k=v;var B=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("div",{staticClass:"vdp-datepicker",class:[e.wrapperClass,e.isRtl?"rtl":""]},[a("date-input",{attrs:{selectedDate:e.selectedDate,resetTypedDate:e.resetTypedDate,format:e.format,translation:e.translation,inline:e.inline,id:e.id,name:e.name,refName:e.refName,openDate:e.openDate,placeholder:e.placeholder,inputClass:e.inputClass,typeable:e.typeable,clearButton:e.clearButton,clearButtonIcon:e.clearButtonIcon,calendarButton:e.calendarButton,calendarButtonIcon:e.calendarButtonIcon,calendarButtonIconContent:e.calendarButtonIconContent,disabled:e.disabled,required:e.required,bootstrapStyling:e.bootstrapStyling,"use-utc":e.useUtc},on:{showCalendar:e.showCalendar,closeCalendar:e.close,typedDate:e.setTypedDate,clearDate:e.clearDate}},[e._t("afterDateInput",null,{slot:"afterDateInput"})],2),e._v(" "),e.allowedToShowView("day")?a("picker-day",{attrs:{pageDate:e.pageDate,selectedDate:e.selectedDate,showDayView:e.showDayView,fullMonthName:e.fullMonthName,allowedToShowView:e.allowedToShowView,disabledDates:e.disabledDates,highlighted:e.highlighted,calendarClass:e.calendarClass,calendarStyle:e.calendarStyle,translation:e.translation,pageTimestamp:e.pageTimestamp,isRtl:e.isRtl,mondayFirst:e.mondayFirst,dayCellContent:e.dayCellContent,"use-utc":e.useUtc},on:{changedMonth:e.handleChangedMonthFromDayPicker,selectDate:e.selectDate,showMonthCalendar:e.showMonthCalendar,selectedDisabled:e.selectDisabledDate}},[e._t("beforeCalendarHeader",null,{slot:"beforeCalendarHeader"})],2):e._e(),e._v(" "),e.allowedToShowView("month")?a("picker-month",{attrs:{pageDate:e.pageDate,selectedDate:e.selectedDate,showMonthView:e.showMonthView,allowedToShowView:e.allowedToShowView,disabledDates:e.disabledDates,calendarClass:e.calendarClass,calendarStyle:e.calendarStyle,translation:e.translation,isRtl:e.isRtl,"use-utc":e.useUtc},on:{selectMonth:e.selectMonth,showYearCalendar:e.showYearCalendar,changedYear:e.setPageDate}},[e._t("beforeCalendarHeader",null,{slot:"beforeCalendarHeader"})],2):e._e(),e._v(" "),e.allowedToShowView("year")?a("picker-year",{attrs:{pageDate:e.pageDate,selectedDate:e.selectedDate,showYearView:e.showYearView,allowedToShowView:e.allowedToShowView,disabledDates:e.disabledDates,calendarClass:e.calendarClass,calendarStyle:e.calendarStyle,translation:e.translation,isRtl:e.isRtl,"use-utc":e.useUtc},on:{selectYear:e.selectYear,changedDecade:e.setPageDate}},[e._t("beforeCalendarHeader",null,{slot:"beforeCalendarHeader"})],2):e._e()],1)};B._withStripped=!0;return o({render:B,staticRenderFns:[]},function(e){e&&e("data-v-64ca2bb5_0",{source:".rtl {\n direction: rtl;\n}\n.vdp-datepicker {\n position: relative;\n text-align: left;\n}\n.vdp-datepicker * {\n box-sizing: border-box;\n}\n.vdp-datepicker__calendar {\n position: absolute;\n z-index: 100;\n background: #fff;\n width: 300px;\n border: 1px solid #ccc;\n}\n.vdp-datepicker__calendar header {\n display: block;\n line-height: 40px;\n}\n.vdp-datepicker__calendar header span {\n display: inline-block;\n text-align: center;\n width: 71.42857142857143%;\n float: left;\n}\n.vdp-datepicker__calendar header .prev,\n.vdp-datepicker__calendar header .next {\n width: 14.285714285714286%;\n float: left;\n text-indent: -10000px;\n position: relative;\n}\n.vdp-datepicker__calendar header .prev:after,\n.vdp-datepicker__calendar header .next:after {\n content: '';\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translateX(-50%) translateY(-50%);\n border: 6px solid transparent;\n}\n.vdp-datepicker__calendar header .prev:after {\n border-right: 10px solid #000;\n margin-left: -5px;\n}\n.vdp-datepicker__calendar header .prev.disabled:after {\n border-right: 10px solid #ddd;\n}\n.vdp-datepicker__calendar header .next:after {\n border-left: 10px solid #000;\n margin-left: 5px;\n}\n.vdp-datepicker__calendar header .next.disabled:after {\n border-left: 10px solid #ddd;\n}\n.vdp-datepicker__calendar header .prev:not(.disabled),\n.vdp-datepicker__calendar header .next:not(.disabled),\n.vdp-datepicker__calendar header .up:not(.disabled) {\n cursor: pointer;\n}\n.vdp-datepicker__calendar header .prev:not(.disabled):hover,\n.vdp-datepicker__calendar header .next:not(.disabled):hover,\n.vdp-datepicker__calendar header .up:not(.disabled):hover {\n background: #eee;\n}\n.vdp-datepicker__calendar .disabled {\n color: #ddd;\n cursor: default;\n}\n.vdp-datepicker__calendar .flex-rtl {\n display: flex;\n width: inherit;\n flex-wrap: wrap;\n}\n.vdp-datepicker__calendar .cell {\n display: inline-block;\n padding: 0 5px;\n width: 14.285714285714286%;\n height: 40px;\n line-height: 40px;\n text-align: center;\n vertical-align: middle;\n border: 1px solid transparent;\n}\n.vdp-datepicker__calendar .cell:not(.blank):not(.disabled).day,\n.vdp-datepicker__calendar .cell:not(.blank):not(.disabled).month,\n.vdp-datepicker__calendar .cell:not(.blank):not(.disabled).year {\n cursor: pointer;\n}\n.vdp-datepicker__calendar .cell:not(.blank):not(.disabled).day:hover,\n.vdp-datepicker__calendar .cell:not(.blank):not(.disabled).month:hover,\n.vdp-datepicker__calendar .cell:not(.blank):not(.disabled).year:hover {\n border: 1px solid #4bd;\n}\n.vdp-datepicker__calendar .cell.selected {\n background: #4bd;\n}\n.vdp-datepicker__calendar .cell.selected:hover {\n background: #4bd;\n}\n.vdp-datepicker__calendar .cell.selected.highlighted {\n background: #4bd;\n}\n.vdp-datepicker__calendar .cell.highlighted {\n background: #cae5ed;\n}\n.vdp-datepicker__calendar .cell.highlighted.disabled {\n color: #a3a3a3;\n}\n.vdp-datepicker__calendar .cell.grey {\n color: #888;\n}\n.vdp-datepicker__calendar .cell.grey:hover {\n background: inherit;\n}\n.vdp-datepicker__calendar .cell.day-header {\n font-size: 75%;\n white-space: nowrap;\n cursor: inherit;\n}\n.vdp-datepicker__calendar .cell.day-header:hover {\n background: inherit;\n}\n.vdp-datepicker__calendar .month,\n.vdp-datepicker__calendar .year {\n width: 33.333%;\n}\n.vdp-datepicker__clear-button,\n.vdp-datepicker__calendar-button {\n cursor: pointer;\n font-style: normal;\n}\n.vdp-datepicker__clear-button.disabled,\n.vdp-datepicker__calendar-button.disabled {\n color: #999;\n cursor: default;\n}\n",map:{version:3,sources:["Datepicker.vue"],names:[],mappings:"AAAA;EACE,cAAc;AAChB;AACA;EACE,kBAAkB;EAClB,gBAAgB;AAClB;AACA;EACE,sBAAsB;AACxB;AACA;EACE,kBAAkB;EAClB,YAAY;EACZ,gBAAgB;EAChB,YAAY;EACZ,sBAAsB;AACxB;AACA;EACE,cAAc;EACd,iBAAiB;AACnB;AACA;EACE,qBAAqB;EACrB,kBAAkB;EAClB,yBAAyB;EACzB,WAAW;AACb;AACA;;EAEE,0BAA0B;EAC1B,WAAW;EACX,qBAAqB;EACrB,kBAAkB;AACpB;AACA;;EAEE,WAAW;EACX,kBAAkB;EAClB,SAAS;EACT,QAAQ;EACR,4CAA4C;EAC5C,6BAA6B;AAC/B;AACA;EACE,6BAA6B;EAC7B,iBAAiB;AACnB;AACA;EACE,6BAA6B;AAC/B;AACA;EACE,4BAA4B;EAC5B,gBAAgB;AAClB;AACA;EACE,4BAA4B;AAC9B;AACA;;;EAGE,eAAe;AACjB;AACA;;;EAGE,gBAAgB;AAClB;AACA;EACE,WAAW;EACX,eAAe;AACjB;AACA;EACE,aAAa;EACb,cAAc;EACd,eAAe;AACjB;AACA;EACE,qBAAqB;EACrB,cAAc;EACd,0BAA0B;EAC1B,YAAY;EACZ,iBAAiB;EACjB,kBAAkB;EAClB,sBAAsB;EACtB,6BAA6B;AAC/B;AACA;;;EAGE,eAAe;AACjB;AACA;;;EAGE,sBAAsB;AACxB;AACA;EACE,gBAAgB;AAClB;AACA;EACE,gBAAgB;AAClB;AACA;EACE,gBAAgB;AAClB;AACA;EACE,mBAAmB;AACrB;AACA;EACE,cAAc;AAChB;AACA;EACE,WAAW;AACb;AACA;EACE,mBAAmB;AACrB;AACA;EACE,cAAc;EACd,mBAAmB;EACnB,eAAe;AACjB;AACA;EACE,mBAAmB;AACrB;AACA;;EAEE,cAAc;AAChB;AACA;;EAEE,eAAe;EACf,kBAAkB;AACpB;AACA;;EAEE,WAAW;EACX,eAAe;AACjB",file:"Datepicker.vue",sourcesContent:[".rtl {\n direction: rtl;\n}\n.vdp-datepicker {\n position: relative;\n text-align: left;\n}\n.vdp-datepicker * {\n box-sizing: border-box;\n}\n.vdp-datepicker__calendar {\n position: absolute;\n z-index: 100;\n background: #fff;\n width: 300px;\n border: 1px solid #ccc;\n}\n.vdp-datepicker__calendar header {\n display: block;\n line-height: 40px;\n}\n.vdp-datepicker__calendar header span {\n display: inline-block;\n text-align: center;\n width: 71.42857142857143%;\n float: left;\n}\n.vdp-datepicker__calendar header .prev,\n.vdp-datepicker__calendar header .next {\n width: 14.285714285714286%;\n float: left;\n text-indent: -10000px;\n position: relative;\n}\n.vdp-datepicker__calendar header .prev:after,\n.vdp-datepicker__calendar header .next:after {\n content: '';\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translateX(-50%) translateY(-50%);\n border: 6px solid transparent;\n}\n.vdp-datepicker__calendar header .prev:after {\n border-right: 10px solid #000;\n margin-left: -5px;\n}\n.vdp-datepicker__calendar header .prev.disabled:after {\n border-right: 10px solid #ddd;\n}\n.vdp-datepicker__calendar header .next:after {\n border-left: 10px solid #000;\n margin-left: 5px;\n}\n.vdp-datepicker__calendar header .next.disabled:after {\n border-left: 10px solid #ddd;\n}\n.vdp-datepicker__calendar header .prev:not(.disabled),\n.vdp-datepicker__calendar header .next:not(.disabled),\n.vdp-datepicker__calendar header .up:not(.disabled) {\n cursor: pointer;\n}\n.vdp-datepicker__calendar header .prev:not(.disabled):hover,\n.vdp-datepicker__calendar header .next:not(.disabled):hover,\n.vdp-datepicker__calendar header .up:not(.disabled):hover {\n background: #eee;\n}\n.vdp-datepicker__calendar .disabled {\n color: #ddd;\n cursor: default;\n}\n.vdp-datepicker__calendar .flex-rtl {\n display: flex;\n width: inherit;\n flex-wrap: wrap;\n}\n.vdp-datepicker__calendar .cell {\n display: inline-block;\n padding: 0 5px;\n width: 14.285714285714286%;\n height: 40px;\n line-height: 40px;\n text-align: center;\n vertical-align: middle;\n border: 1px solid transparent;\n}\n.vdp-datepicker__calendar .cell:not(.blank):not(.disabled).day,\n.vdp-datepicker__calendar .cell:not(.blank):not(.disabled).month,\n.vdp-datepicker__calendar .cell:not(.blank):not(.disabled).year {\n cursor: pointer;\n}\n.vdp-datepicker__calendar .cell:not(.blank):not(.disabled).day:hover,\n.vdp-datepicker__calendar .cell:not(.blank):not(.disabled).month:hover,\n.vdp-datepicker__calendar .cell:not(.blank):not(.disabled).year:hover {\n border: 1px solid #4bd;\n}\n.vdp-datepicker__calendar .cell.selected {\n background: #4bd;\n}\n.vdp-datepicker__calendar .cell.selected:hover {\n background: #4bd;\n}\n.vdp-datepicker__calendar .cell.selected.highlighted {\n background: #4bd;\n}\n.vdp-datepicker__calendar .cell.highlighted {\n background: #cae5ed;\n}\n.vdp-datepicker__calendar .cell.highlighted.disabled {\n color: #a3a3a3;\n}\n.vdp-datepicker__calendar .cell.grey {\n color: #888;\n}\n.vdp-datepicker__calendar .cell.grey:hover {\n background: inherit;\n}\n.vdp-datepicker__calendar .cell.day-header {\n font-size: 75%;\n white-space: nowrap;\n cursor: inherit;\n}\n.vdp-datepicker__calendar .cell.day-header:hover {\n background: inherit;\n}\n.vdp-datepicker__calendar .month,\n.vdp-datepicker__calendar .year {\n width: 33.333%;\n}\n.vdp-datepicker__clear-button,\n.vdp-datepicker__calendar-button {\n cursor: pointer;\n font-style: normal;\n}\n.vdp-datepicker__clear-button.disabled,\n.vdp-datepicker__calendar-button.disabled {\n color: #999;\n cursor: default;\n}\n"]},media:void 0})},k,void 0,!1,void 0,C,void 0)}); diff --git a/frontend/src/main.js b/frontend/src/main.js index 815cc7f..86e461c 100644 --- a/frontend/src/main.js +++ b/frontend/src/main.js @@ -1,19 +1,19 @@ -import Vue from 'vue'; -import App from './App.vue'; -import router from './router'; -import store from './store'; -import { coreUiMixin } from "@/common/vue-mixins"; -import jglib from '@/utils/jglib'; - -Vue.config.productionTip = false; - -Vue.mixin(coreUiMixin); -Vue.prototype.runModeType = "LIVE"; - -new Vue({ - router, - store, - jglib, - render: h => h(App) -}).$mount('#app') - +import Vue from 'vue'; +import App from './App.vue'; +import router from './router'; +import store from './store'; +import { coreUiMixin } from "@/common/vue-mixins"; +import jglib from '@/utils/jglib'; + +Vue.config.productionTip = false; + +Vue.mixin(coreUiMixin); +Vue.prototype.runModeType = "LIVE"; + +new Vue({ + router, + store, + jglib, + render: h => h(App) +}).$mount('#app') + diff --git a/frontend/src/modules/custMgt/router/index.js b/frontend/src/modules/custMgt/router/index.js index 7a8debc..c25d572 100644 --- a/frontend/src/modules/custMgt/router/index.js +++ b/frontend/src/modules/custMgt/router/index.js @@ -1,33 +1,33 @@ -import CustList from '../views/CustList' -import MemberList from '../views/MemberList' -import SubsDetail from '../views/SubsDetail' -import MemberDetail from '../views/MemberDetail' - -export default [ - { - path: '/custMgt/subsList', - component: CustList, - name: 'subsList', - meta: { public: true } - }, - { - path: '/custMgt/memberList', - component: MemberList, - name: 'memberList', - meta: { public: true } - }, - { - path: '/custMgt/subsDetail', - component: SubsDetail, - name: 'subsDetail', - meta: { public: true } - }, - { - path: '/custMgt/memberDetail', - component: MemberDetail, - name: 'memberDetail', - meta: { public: true } - }, - -] - +import CustList from '../views/CustList' +import MemberList from '../views/MemberList' +import SubsDetail from '../views/SubsDetail' +import MemberDetail from '../views/MemberDetail' + +export default [ + { + path: '/custMgt/subsList', + component: CustList, + name: 'subsList', + meta: { public: true } + }, + { + path: '/custMgt/memberList', + component: MemberList, + name: 'memberList', + meta: { public: true } + }, + { + path: '/custMgt/subsDetail', + component: SubsDetail, + name: 'subsDetail', + meta: { public: true } + }, + { + path: '/custMgt/memberDetail', + component: MemberDetail, + name: 'memberDetail', + meta: { public: true } + }, + +] + diff --git a/frontend/src/modules/custMgt/views/CustList.vue b/frontend/src/modules/custMgt/views/CustList.vue index b82b77d..a90a923 100644 --- a/frontend/src/modules/custMgt/views/CustList.vue +++ b/frontend/src/modules/custMgt/views/CustList.vue @@ -1,211 +1,285 @@ - - - \ No newline at end of file diff --git a/frontend/src/modules/custMgt/views/MemberDetail.vue b/frontend/src/modules/custMgt/views/MemberDetail.vue index 71f3c2d..9787ec3 100644 --- a/frontend/src/modules/custMgt/views/MemberDetail.vue +++ b/frontend/src/modules/custMgt/views/MemberDetail.vue @@ -1,165 +1,165 @@ - - - \ No newline at end of file diff --git a/frontend/src/modules/custMgt/views/MemberList.vue b/frontend/src/modules/custMgt/views/MemberList.vue index d8373d5..3253cc3 100644 --- a/frontend/src/modules/custMgt/views/MemberList.vue +++ b/frontend/src/modules/custMgt/views/MemberList.vue @@ -1,165 +1,165 @@ - - - \ No newline at end of file diff --git a/frontend/src/modules/custMgt/views/SubsDetail.vue b/frontend/src/modules/custMgt/views/SubsDetail.vue index 3fdd787..60d3d12 100644 --- a/frontend/src/modules/custMgt/views/SubsDetail.vue +++ b/frontend/src/modules/custMgt/views/SubsDetail.vue @@ -1,165 +1,165 @@ - - - \ No newline at end of file diff --git a/frontend/src/modules/login/router/index.js b/frontend/src/modules/login/router/index.js index 888b665..165d63c 100644 --- a/frontend/src/modules/login/router/index.js +++ b/frontend/src/modules/login/router/index.js @@ -1,24 +1,31 @@ -import LoginMain from '../views/LoginMain' -import LoginAuth from '../views/LoginAuth' -import ResetPassword from '../views/ResetPassword' - -export default [ - { - path: '/login', - name: 'login', - component: LoginMain, - meta: { public: true } - }, - { - path: '/view/login/auth', - name: 'loginAuth', - component: LoginAuth, - meta: { public: true } - }, - { - path: '/view/login/resetPassword', - name: 'resetPassword', - component: ResetPassword, - meta: { public: true } - }, +import LoginMain from '../views/LoginMain' +import LoginAuth from '../views/LoginAuth' +import ResetPassword from '../views/ResetPassword' +import UpdatePassword from '../views/UpdatePassword' + +export default [ + { + path: '/login', + name: 'login', + component: LoginMain, + meta: { public: true } + }, + { + path: '/view/login/auth', + name: 'loginAuth', + component: LoginAuth, + meta: { public: true } + }, + { + path: '/view/login/resetPassword', + name: 'resetPassword', + component: ResetPassword, + meta: { public: true } + }, + { + path: '/view/login/updatePassword', + name: 'updatePassword', + component: UpdatePassword, + meta: { public: true } + }, ] \ No newline at end of file diff --git a/frontend/src/modules/login/service/api.js b/frontend/src/modules/login/service/api.js index 800106c..52afaca 100644 --- a/frontend/src/modules/login/service/api.js +++ b/frontend/src/modules/login/service/api.js @@ -1,53 +1,63 @@ -import httpClient from '@/common/http-client'; - -const login = (params) => { - return httpClient.post('api/v1/bo/login/login', params, { headers: {"show-layer": "Yes"} },{ withCredentials: false }); -}; - -const chgpwd = (params) => { - return httpClient.post('/api/oper/user/chgpwd', params); -}; - -const myphone = () => { - return httpClient.get('/api/oper/user/phone/self'); -}; - -const phone = (params) => { - return httpClient.get('/api/public/auth/phone', { params: params }); -}; - -// 삭제 예정 -const reqnum = (params) => { - return httpClient.get('/api/public/auth/reqnum', { params: params }); -}; - -const authNum = (params) => { - return httpClient.post('/api/v1/bo/login/authNum', params); -}; - -const confirmNum = (params) => { - //return httpClient.get('/api/public/auth/chknum', { params: params }); - return httpClient.post('/api/v1/bo/login/confirmNum', params); -}; - - -const newpwd = (params) => { - return httpClient.post('/api/public/auth/newpwd', params); -}; - -const logout = () => { - //return httpClient.get('/api/auth/logout', {headers: {"show-layer": "Yes"}}); - return httpClient.post('/api/v1/bo/login/logout', {headers: {"show-layer": "Yes"}}); -}; - -export default { - login, - logout, - chgpwd, - myphone, - phone, - reqnum, - confirmNum, - newpwd, - authNum +import httpClient from '@/common/http-client'; + +const login = (params) => { + return httpClient.post('api/v1/bo/login/login', params, { headers: {"show-layer": "Yes"} },{ withCredentials: false }); +}; + +const chgpwd = (params) => { + return httpClient.post('/api/oper/user/chgpwd', params); +}; + +const myphone = () => { + return httpClient.get('/api/oper/user/phone/self'); +}; + +const phone = (params) => { + return httpClient.get('/api/public/auth/phone', { params: params }); +}; + +// 삭제 예정 +const reqnum = (params) => { + return httpClient.get('/api/public/auth/reqnum', { params: params }); +}; + +const authNum = (params) => { + return httpClient.post('/api/v1/bo/login/authNum', params); +}; + +const confirmNum = (params) => { + //return httpClient.get('/api/public/auth/chknum', { params: params }); + return httpClient.post('/api/v1/bo/login/confirmNum', params); +}; + +const resetPassword = (params) => { + return httpClient.post('/api/v1/bo/login/resetPassword', params); +}; + +const updatePassword = (params) => { + return httpClient.post('/api/v1/bo/login/updatePassword', params); +}; + + +const newpwd = (params) => { + return httpClient.post('/api/public/auth/newpwd', params); +}; + +const logout = () => { + //return httpClient.get('/api/auth/logout', {headers: {"show-layer": "Yes"}}); + return httpClient.post('/api/v1/bo/login/logout', {headers: {"show-layer": "Yes"}}); +}; + +export default { + login, + logout, + chgpwd, + myphone, + phone, + reqnum, + confirmNum, + newpwd, + authNum, + resetPassword, + updatePassword }; \ No newline at end of file diff --git a/frontend/src/modules/login/service/mixins.js b/frontend/src/modules/login/service/mixins.js index 6bd34a7..62ddacb 100644 --- a/frontend/src/modules/login/service/mixins.js +++ b/frontend/src/modules/login/service/mixins.js @@ -1,257 +1,258 @@ -var commonPwdView = { - data: function() { - return { - err_msg: null, - message: { - curPwd: '', newPwd: '', cfmPwd: '' - }, - param: { - userId: null, phone: null - }, - curPwd: '', newPwd: '', cfmPwd: '' - }; - }, - methods: { - verifyNewPwd: function (evt) { - var valid = this.checkPassword(evt.target.value); - if (valid) { - this.err_msg = ''; - } - this.message.newPwd = this.err_msg; - }, - verifyCfmPwd: function() { - this.message.cfmPwd = ''; - if (this.newPwd != this.cfmPwd) { - this.message.cfmPwd = this.cfmPwdFailMsg(); - return false; - } - return true; - } - } -}; - -var validation = { - methods: { - checkId: function (id) { - if (id == null || id.trim() == "") { - this.err_msg = "아이디를 입력해 주세요."; - return false; - } - if (id.length < 4 || id.length > 15) { - this.err_msg = "아이디는 영문, 숫자를 이용하여 4자리 이상 15자리 이하이어야 합니다."; - return false; - } - if (!id.match(/^[0-9a-zA-Z]+$/)) { - this.err_msg = "아이디는 영문, 숫자를 이용하여야 합니다."; - return false; - } - return true; - }, - checkPassword: function (pw) { - if (pw == null || pw.trim() == "") { - this.err_msg = "비밀번호를 입력해 주세요."; - return false; - } - - if (typeof this.param.userId != "undefined") { - if (pw.indexOf(this.param.userId) >= 0) { - this.err_msg = "아이디가 포함된 문자열은 사용할 수 없습니다."; - return false; - } - } - - for (var i = 0; i < pw.length; i++) { - var ch1 = pw.charAt(i); - var ch2 = pw.charAt(i + 1); - var ch3 = pw.charAt(i + 2); - var ch4 = pw.charAt(i + 3); - if (ch1 == ch2 && ch2 == ch3 && ch3 == ch4) { - //console.log(ch1 + "" + ch2 + "" + ch3 + ch4 + " is equality"); - this.err_msg = "연속적인 숫자 또는 문자열은 사용할 수 없습니다."; - return false; - } - if (ch1.charCodeAt(0) - ch2.charCodeAt(0) == 1 && ch2.charCodeAt(0) - ch3.charCodeAt(0) == 1 && ch3.charCodeAt(0) - ch4.charCodeAt(0) == 1) { - //console.log(ch1 + "" + ch2 + "" + ch3 + ch4 + " is continuity"); - this.err_msg = "연속적인 숫자 또는 문자열은 사용할 수 없습니다."; - return false; - } - if (ch1.charCodeAt(0) - ch2.charCodeAt(0) == -1 && ch2.charCodeAt(0) - ch3.charCodeAt(0) == -1 && ch3.charCodeAt(0) - ch4.charCodeAt(0) == -1) { - //console.log(ch1 + "" + ch2 + "" + ch3 + ch4 + " is continuity"); - this.err_msg = "연속적인 숫자 또는 문자열은 사용할 수 없습니다."; - return false; - } - } - - if (typeof this.param.phone != "undefined" && this.param.phone != null) { - var phone = this.param.phone; - phone = phone.substring(3, phone.length); // 앞 3자리 제거 - - var last = phone.substring(phone.length - 4, phone.length); // 뒤 4자리 추출 - var middle = phone.substring(0, phone.length - 4); // 뒤 4자리 제거 == 국번 - - if (pw.indexOf(middle) >= 0 || pw.indexOf(last) >= 0) { - this.err_msg = "휴대폰번호가 포함된 문자열은 사용할 수 없습니다."; - return false - } - } - - if (pw.length >= 10) { - if (pw.match(/^(?=.*[0-9])(?=.*[a-zA-Z])(?=.*[!@#$%^&*])([a-zA-Z0-9!@#$%^&*]+)$/)) { - return true; - } else if (!pw.match(/^(?=.*[0-9])(?=.*[a-zA-Z])([a-zA-Z0-9]+)$/) - && !pw.match(/^(?=.*[0-9])(?=.*[!@#$%^&*])([0-9!@#$%^&*]+)$/) - && !pw.match(/^(?=.*[a-zA-Z])(?=.*[!@#$%^&*])([a-zA-Z!@#$%^&*]+)$/)) { - this.err_msg = "영문, 숫자, 특수문자 중 2가지 이상 조합하여 10자리 이상 또는 3가지 이상 조합하여 8자리 이상이어야 합니다."; - return false; - } - } else if (pw.length >= 8) { - if (!pw.match(/^(?=.*[0-9])(?=.*[a-zA-Z])(?=.*[!@#$%^&*])([a-zA-Z0-9!@#$%^&*]+)$/)) { - this.err_msg = "영문, 숫자, 특수문자 중 2가지 이상 조합하여 10자리 이상 또는 3가지 이상 조합하여 8자리 이상이어야 합니다."; - return false; - } - } else { - this.err_msg = "영문, 숫자, 특수문자 중 2가지 이상 조합하여 10자리 이상 또는 3가지 이상 조합하여 8자리 이상이어야 합니다."; - return false; - } - - return true; - }, - checkName: function (name) { - if (name == null || name.trim() == "") { - this.err_msg = "이름을 입력해 주세요."; - return false; - } - return true; - }, - checkDeptNm: function (dept) { - if (dept == null || dept.trim() == "") { - this.err_msg = "부서명을 입력해 주세요."; - return false; - } - return true; - }, - checkPhone: function (phone) { - if (phone == null || phone.trim() == "") { - this.err_msg = "휴대폰번호를 입력해 주세요."; - return false; - } - if (phone.length < 10) { - this.err_msg = "휴대폰번호를 정확히 입력해 주세요."; - return false; - } - return true; - }, - checkEmail: function (email) { - if (email == null || email.trim() == "") { - this.err_msg = "이메일을 입력해 주세요."; - return false; - } - // eslint-disable-next-line - if (!email.match(/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/)) { - this.err_msg = "이메일을 정확히 입력해 주세요."; - return false; - } - return true; - }, - checkIp: function (param) { - if ((param.ip1 == null || param.ip1 == "") && (param.ip2 == null || param.ip2 == "") && (param.ip3 == null || param.ip3 == "") && (param.ip4 == null || param.ip4 == "")) { - this.err_msg = "접근허용 IP를 입력해 주세요."; - return false; - } - if ((param.ip1 == null || param.ip1 == "") - || (param.ip2 == null || param.ip2 == "") - || (param.ip3 == null || param.ip3 == "") - || (param.ip4 == null || param.ip4 == "")) { - this.err_msg = "IP 주소를 정확히 입력해 주세요."; - return false; - } - return true; - }, - checkIpEach: function (ip, msg) { - if (ip == null || ip == "") { - this.err_msg = typeof msg != "undefined" ? msg : "접근허용 IP를 입력해 주세요."; - return false; - } - if (!ip.match(/^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/)) { - this.err_msg = "IP 주소를 정확히 입력해 주세요."; - return false; - } - return true; - }, - checkIpWithAsterisk: function (ip, msg) { - if (ip == null || ip == "") { - this.err_msg = typeof msg != "undefined" ? msg : "접근허용 IP를 입력해 주세요."; - return false; - } - // 3레벨 이후 * 허용... 2레벨 이후 시 {2,3} 1레벨 이후시 {1,3} 필요 시 구문 추가 - if (!ip.match(/^((((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))|(((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}\*))$/)) { - this.err_msg = "IP 주소를 정확히 입력해 주세요."; - return false; - } - return true; - }, - checkRole: function (role) { - if (role == null || role == "") { - this.err_msg = "권한을 선택해 주세요."; - return false; - } - return true; - }, - //리스크관리 - checkSpamCliId: function (comnId, spamCliId) { - if (comnId == "N") { - if (spamCliId == null || spamCliId.trim() == "") { - this.err_msg = "SMID를 입력해 주세요."; - return false; - } - } - return true; - }, - checkReqType: function (reqType) { - if (reqType == null || reqType.trim() == "") { - this.err_msg = "요청자를 선택해 주세요."; - return false; - } - return true; - }, - checkSpamType: function (spamType) { - if (spamType == null || spamType.trim() == "") { - this.err_msg = "차단사유를 선택해 주세요."; - return false; - } - return true; - }, - checkSpamContents: function (blockType) { - var str = ""; - for (var k in this.callBacks) { - str = this.callBacks[k].spamContent; - - - if (blockType == "CLB") { - if (str == null || str.trim() == "") { - this.err_msg = "발신번호를 입력해 주세요."; - return false; - } else { - if (this.bytes(str) < 8) { - this.err_msg = "발신번호가 8자리 미만입니다."; - return false; - } - - if (this.bytes(str) > 11) { - this.err_msg = "발신번호가 11자리 초과입니다."; - return false; - } - } - } else { - if (str == null || str.trim() == "") { - this.err_msg = "차단메시지를 입력해 주세요."; - return false; - } - } - } - return true; - } - } -}; - +var commonPwdView = { + data: function() { + return { + err_msg: null, + message: { + oldPw: '', newPw: '', + }, + param: { + userId: null, + }, + oldPw: '', newPw: '', + }; + }, + methods: { + verifyNewPw: function (evt) { + var valid = this.checkPassword(evt.target.value); + if (valid) { + this.err_msg = ''; + } + this.message.newPw = this.err_msg; + }, + + verifyCfmPwd: function() { + this.message.cfmPw = ''; + if (this.newPw != this.cfmPw) { + this.message.cfmPw = this.cfmPwdFailMsg(); + return false; + } + return true; + } + } +}; + +var validation = { + methods: { + checkId: function (id) { + if (id == null || id.trim() == "") { + this.err_msg = "아이디를 입력해 주세요."; + return false; + } + if (id.length < 8 || id.length > 16) { + this.err_msg = "아이디는 영문, 숫자를 이용하여 4자리 이상 15자리 이하이어야 합니다."; + return false; + } + if (!id.match(/^[0-9a-zA-Z]+$/)) { + this.err_msg = "아이디는 영문, 숫자를 이용하여야 합니다."; + return false; + } + return true; + }, + checkPassword: function (pw) { + if (pw == null || pw.trim() == "") { + this.err_msg = "비밀번호를 입력해 주세요."; + return false; + } + + if (typeof this.param.userId != "undefined") { + if (pw.indexOf(this.param.userId) >= 0) { + this.err_msg = "아이디가 포함된 문자열은 사용할 수 없습니다."; + return false; + } + } + + for (var i = 0; i < pw.length; i++) { + var ch1 = pw.charAt(i); + var ch2 = pw.charAt(i + 1); + var ch3 = pw.charAt(i + 2); + var ch4 = pw.charAt(i + 3); + if (ch1 == ch2 && ch2 == ch3 && ch3 == ch4) { + //console.log(ch1 + "" + ch2 + "" + ch3 + ch4 + " is equality"); + this.err_msg = "연속적인 숫자 또는 문자열은 사용할 수 없습니다."; + return false; + } + if (ch1.charCodeAt(0) - ch2.charCodeAt(0) == 1 && ch2.charCodeAt(0) - ch3.charCodeAt(0) == 1 && ch3.charCodeAt(0) - ch4.charCodeAt(0) == 1) { + //console.log(ch1 + "" + ch2 + "" + ch3 + ch4 + " is continuity"); + this.err_msg = "연속적인 숫자 또는 문자열은 사용할 수 없습니다."; + return false; + } + if (ch1.charCodeAt(0) - ch2.charCodeAt(0) == -1 && ch2.charCodeAt(0) - ch3.charCodeAt(0) == -1 && ch3.charCodeAt(0) - ch4.charCodeAt(0) == -1) { + //console.log(ch1 + "" + ch2 + "" + ch3 + ch4 + " is continuity"); + this.err_msg = "연속적인 숫자 또는 문자열은 사용할 수 없습니다."; + return false; + } + } + + if (typeof this.param.phone != "undefined" && this.param.phone != null) { + var phone = this.param.phone; + phone = phone.substring(3, phone.length); // 앞 3자리 제거 + + var last = phone.substring(phone.length - 4, phone.length); // 뒤 4자리 추출 + var middle = phone.substring(0, phone.length - 4); // 뒤 4자리 제거 == 국번 + + if (pw.indexOf(middle) >= 0 || pw.indexOf(last) >= 0) { + this.err_msg = "휴대폰번호가 포함된 문자열은 사용할 수 없습니다."; + return false + } + } + + if (pw.length >= 10) { + if (pw.match(/^(?=.*[0-9])(?=.*[a-zA-Z])(?=.*[!@#$%^&*])([a-zA-Z0-9!@#$%^&*]+)$/)) { + return true; + } else if (!pw.match(/^(?=.*[0-9])(?=.*[a-zA-Z])([a-zA-Z0-9]+)$/) + && !pw.match(/^(?=.*[0-9])(?=.*[!@#$%^&*])([0-9!@#$%^&*]+)$/) + && !pw.match(/^(?=.*[a-zA-Z])(?=.*[!@#$%^&*])([a-zA-Z!@#$%^&*]+)$/)) { + this.err_msg = "영문, 숫자, 특수문자 중 2가지 이상 조합하여 10자리 이상 또는 3가지 이상 조합하여 8자리 이상이어야 합니다."; + return false; + } + } else if (pw.length >= 8) { + if (!pw.match(/^(?=.*[0-9])(?=.*[a-zA-Z])(?=.*[!@#$%^&*])([a-zA-Z0-9!@#$%^&*]+)$/)) { + this.err_msg = "영문, 숫자, 특수문자 중 2가지 이상 조합하여 10자리 이상 또는 3가지 이상 조합하여 8자리 이상이어야 합니다."; + return false; + } + } else { + this.err_msg = "영문, 숫자, 특수문자 중 2가지 이상 조합하여 10자리 이상 또는 3가지 이상 조합하여 8자리 이상이어야 합니다."; + return false; + } + + return true; + }, + checkName: function (name) { + if (name == null || name.trim() == "") { + this.err_msg = "이름을 입력해 주세요."; + return false; + } + return true; + }, + checkDeptNm: function (dept) { + if (dept == null || dept.trim() == "") { + this.err_msg = "부서명을 입력해 주세요."; + return false; + } + return true; + }, + checkPhone: function (phone) { + if (phone == null || phone.trim() == "") { + this.err_msg = "휴대폰번호를 입력해 주세요."; + return false; + } + if (phone.length < 10) { + this.err_msg = "휴대폰번호를 정확히 입력해 주세요."; + return false; + } + return true; + }, + checkEmail: function (email) { + if (email == null || email.trim() == "") { + this.err_msg = "이메일을 입력해 주세요."; + return false; + } + // eslint-disable-next-line + if (!email.match(/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/)) { + this.err_msg = "이메일을 정확히 입력해 주세요."; + return false; + } + return true; + }, + checkIp: function (param) { + if ((param.ip1 == null || param.ip1 == "") && (param.ip2 == null || param.ip2 == "") && (param.ip3 == null || param.ip3 == "") && (param.ip4 == null || param.ip4 == "")) { + this.err_msg = "접근허용 IP를 입력해 주세요."; + return false; + } + if ((param.ip1 == null || param.ip1 == "") + || (param.ip2 == null || param.ip2 == "") + || (param.ip3 == null || param.ip3 == "") + || (param.ip4 == null || param.ip4 == "")) { + this.err_msg = "IP 주소를 정확히 입력해 주세요."; + return false; + } + return true; + }, + checkIpEach: function (ip, msg) { + if (ip == null || ip == "") { + this.err_msg = typeof msg != "undefined" ? msg : "접근허용 IP를 입력해 주세요."; + return false; + } + if (!ip.match(/^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/)) { + this.err_msg = "IP 주소를 정확히 입력해 주세요."; + return false; + } + return true; + }, + checkIpWithAsterisk: function (ip, msg) { + if (ip == null || ip == "") { + this.err_msg = typeof msg != "undefined" ? msg : "접근허용 IP를 입력해 주세요."; + return false; + } + // 3레벨 이후 * 허용... 2레벨 이후 시 {2,3} 1레벨 이후시 {1,3} 필요 시 구문 추가 + if (!ip.match(/^((((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))|(((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}\*))$/)) { + this.err_msg = "IP 주소를 정확히 입력해 주세요."; + return false; + } + return true; + }, + checkRole: function (role) { + if (role == null || role == "") { + this.err_msg = "권한을 선택해 주세요."; + return false; + } + return true; + }, + //리스크관리 + checkSpamCliId: function (comnId, spamCliId) { + if (comnId == "N") { + if (spamCliId == null || spamCliId.trim() == "") { + this.err_msg = "SMID를 입력해 주세요."; + return false; + } + } + return true; + }, + checkReqType: function (reqType) { + if (reqType == null || reqType.trim() == "") { + this.err_msg = "요청자를 선택해 주세요."; + return false; + } + return true; + }, + checkSpamType: function (spamType) { + if (spamType == null || spamType.trim() == "") { + this.err_msg = "차단사유를 선택해 주세요."; + return false; + } + return true; + }, + checkSpamContents: function (blockType) { + var str = ""; + for (var k in this.callBacks) { + str = this.callBacks[k].spamContent; + + + if (blockType == "CLB") { + if (str == null || str.trim() == "") { + this.err_msg = "발신번호를 입력해 주세요."; + return false; + } else { + if (this.bytes(str) < 8) { + this.err_msg = "발신번호가 8자리 미만입니다."; + return false; + } + + if (this.bytes(str) > 11) { + this.err_msg = "발신번호가 11자리 초과입니다."; + return false; + } + } + } else { + if (str == null || str.trim() == "") { + this.err_msg = "차단메시지를 입력해 주세요."; + return false; + } + } + } + return true; + } + } +}; + export { commonPwdView, validation }; \ No newline at end of file diff --git a/frontend/src/modules/login/store/index.js b/frontend/src/modules/login/store/index.js index 4f1a410..e9c9f0b 100644 --- a/frontend/src/modules/login/store/index.js +++ b/frontend/src/modules/login/store/index.js @@ -1,52 +1,52 @@ -const state = { - token: null, - isLogin: false, - isErrorPage: false, - isAuthChk: false, - pwd: null -}; - -const getters = { - getToken: state => state.token, - isLogin: state => state.isLogin, - isErrorPage: state => state.isErrorPage, - isAuthChk: state => state.isAuthChk, - getPwd: state => state.pwd, -}; - -const mutations = { - saveToken: (state, token) => { - console.log('saveToken:', token); - state.token = token; - }, - removeToken: (state) => { - console.log('removeToken:'); - state.token = null; - }, - isLogin: (state, value) => { - console.log("isLogin mutation : " + value); - state.isLogin = value; - }, - isErrorPage: (state, value) => { - console.log("isErrorPage mutation : " + value); - state.isErrorPage = value; - }, - isAuthChk: (state, value) => { - console.log("isAuthChk mutation : "+ value); - state.isAuthChk = value; - }, - savePwd: (state, value) => { - state.pwd = value; - }, -}; - -const actions = { -}; - -export default { - namespaced: true, - state, - getters, - mutations, - actions -}; +const state = { + token: null, + isLogin: false, + isErrorPage: false, + isAuthChk: false, + pwd: null +}; + +const getters = { + getToken: state => state.token, + isLogin: state => state.isLogin, + isErrorPage: state => state.isErrorPage, + isAuthChk: state => state.isAuthChk, + getPwd: state => state.pwd, +}; + +const mutations = { + saveToken: (state, token) => { + console.log('saveToken:', token); + state.token = token; + }, + removeToken: (state) => { + console.log('removeToken:'); + state.token = null; + }, + isLogin: (state, value) => { + console.log("isLogin mutation : " + value); + state.isLogin = value; + }, + isErrorPage: (state, value) => { + console.log("isErrorPage mutation : " + value); + state.isErrorPage = value; + }, + isAuthChk: (state, value) => { + console.log("isAuthChk mutation : "+ value); + state.isAuthChk = value; + }, + savePwd: (state, value) => { + state.pwd = value; + }, +}; + +const actions = { +}; + +export default { + namespaced: true, + state, + getters, + mutations, + actions +}; diff --git a/frontend/src/modules/login/views/LoginAuth.vue b/frontend/src/modules/login/views/LoginAuth.vue index 65d23b5..6e107ff 100644 --- a/frontend/src/modules/login/views/LoginAuth.vue +++ b/frontend/src/modules/login/views/LoginAuth.vue @@ -1,263 +1,268 @@ - - - + + + diff --git a/frontend/src/modules/login/views/LoginMain.vue b/frontend/src/modules/login/views/LoginMain.vue index 2423b53..4940e48 100644 --- a/frontend/src/modules/login/views/LoginMain.vue +++ b/frontend/src/modules/login/views/LoginMain.vue @@ -1,153 +1,154 @@ - - - + + + diff --git a/frontend/src/modules/login/views/ResetPassword.vue b/frontend/src/modules/login/views/ResetPassword.vue index 2325d72..8ff8d92 100644 --- a/frontend/src/modules/login/views/ResetPassword.vue +++ b/frontend/src/modules/login/views/ResetPassword.vue @@ -1,97 +1,112 @@ - - - - + + + + \ No newline at end of file diff --git a/frontend/src/modules/login/views/UpdatePassword.vue b/frontend/src/modules/login/views/UpdatePassword.vue new file mode 100644 index 0000000..340d548 --- /dev/null +++ b/frontend/src/modules/login/views/UpdatePassword.vue @@ -0,0 +1,163 @@ + + + \ No newline at end of file diff --git a/frontend/src/modules/sysMgt/AdminList.vue b/frontend/src/modules/sysMgt/AdminList.vue new file mode 100644 index 0000000..6dfaacf --- /dev/null +++ b/frontend/src/modules/sysMgt/AdminList.vue @@ -0,0 +1,273 @@ + + + \ No newline at end of file diff --git a/frontend/src/modules/sysMgt/AuthList.vue b/frontend/src/modules/sysMgt/AuthList.vue new file mode 100644 index 0000000..13509eb --- /dev/null +++ b/frontend/src/modules/sysMgt/AuthList.vue @@ -0,0 +1,107 @@ + + + \ No newline at end of file diff --git a/frontend/src/modules/sysMgt/components/AdminDetailPop.vue b/frontend/src/modules/sysMgt/components/AdminDetailPop.vue new file mode 100644 index 0000000..5e5a2df --- /dev/null +++ b/frontend/src/modules/sysMgt/components/AdminDetailPop.vue @@ -0,0 +1,237 @@ + + + + + \ No newline at end of file diff --git a/frontend/src/modules/sysMgt/components/AdminRegPop.vue b/frontend/src/modules/sysMgt/components/AdminRegPop.vue new file mode 100644 index 0000000..c9a2d7d --- /dev/null +++ b/frontend/src/modules/sysMgt/components/AdminRegPop.vue @@ -0,0 +1,265 @@ + + + + + \ No newline at end of file diff --git a/frontend/src/modules/sysMgt/router/index.js b/frontend/src/modules/sysMgt/router/index.js index 688eec9..6ed10d2 100644 --- a/frontend/src/modules/sysMgt/router/index.js +++ b/frontend/src/modules/sysMgt/router/index.js @@ -1,18 +1,18 @@ -import AustList from '../views/AuthList' -import AdminList from '../views/AdminList' - -export default [ - { - path: '/sysMgt/authList', - component: AustList, - name: 'authList', - meta: { public: true } - }, - { - path: '/sysMgt/adminList', - component: AdminList, - name: 'adminList', - meta: { public: true } - } -] - +import AustList from '../views/AuthList' +import AdminList from '../views/AdminList' + +export default [ + { + path: '/sysMgt/authList', + component: AustList, + name: 'authList', + meta: { public: true } + }, + { + path: '/sysMgt/adminList', + component: AdminList, + name: 'adminList', + meta: { public: true } + } +] + diff --git a/frontend/src/modules/sysMgt/service/mixins.js b/frontend/src/modules/sysMgt/service/mixins.js new file mode 100644 index 0000000..887f0a3 --- /dev/null +++ b/frontend/src/modules/sysMgt/service/mixins.js @@ -0,0 +1,353 @@ +import lodash from "lodash"; + +const utils_mixin = { + methods:{ + /** * 이메일 형식 체크 * * @param 데이터 */ + emailCheck(email,rtnArrYn) { + if(this.isNull(rtnArrYn)){ + rtnArrYn='N'; + } + // var regExp = /(^[A-Za-z0-9_\.\-]+)@([A-Za-z0-9\-]+\.[A-Za-z0-9\-]+)/; + var regExp = /^([0-9a-zA-Z_\.\-]([-_.]?[0-9a-zA-Z_\.\-])*)@([0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*.[a-zA-Z]{2,3}$)/i;//이메일 정규식 + + if(regExp.test(email) == false) { + // 이메일 형식이 알파벳+숫자@알파벳+숫자.알파벳+숫자 형식이 아닐경우 + if(rtnArrYn == 'Y'){ + return email; + } + return false; + }else{ + var myArray = regExp.exec(email); + if(rtnArrYn == 'Y'){ + return myArray; + } + return true; + } + + }, + /** * 전화번호 포맷으로 변환 * * @param 데이터 */ + formatPhone(phoneNum,fmt,rtnArrYn) { + if(this.isNull(fmt)){ + fmt=''; + } + if(this.isNull(rtnArrYn)){ + fmt='N'; + } + if(this.isPhone(phoneNum)) { + var rtnNum; + var regExp =/(02)([0-9]{3,4})([0-9]{4})$/; + var myArray; + if(regExp.test(phoneNum)){ + myArray = regExp.exec(phoneNum); + rtnNum = myArray[1]+fmt + myArray[2]+fmt+myArray[3]; + if(rtnArrYn == 'Y'){ + return myArray; + } + return rtnNum; + } else { + regExp =/(0[3-9]{1}[0-9]{1})([0-9]{3,4})([0-9]{4})$/; + if(regExp.test(phoneNum)){ + myArray = regExp.exec(phoneNum); + rtnNum = myArray[1]+fmt+myArray[2]+fmt+myArray[3]; + if(rtnArrYn == 'Y'){ + return myArray; + } + return rtnNum; + } else { + return phoneNum; + } + } + } else { + return phoneNum; + } + }, + /** * 핸드폰번호 포맷으로 변환 * * @param 데이터 */ + formatMobile(phoneNum,fmt,rtnArrYn) { + + if(this.isNull(fmt)){ + fmt=''; + } + if(this.isNull(rtnArrYn)){ + fmt='N'; + } + if(this.isMobile(phoneNum)) { + + var rtnNum; + var regExp =/(01[016789])([0-9]{3,4})([0-9]{4})$/; + var myArray; + + if(regExp.test(phoneNum)){ + + myArray = regExp.exec(phoneNum); + rtnNum = myArray[1]+fmt+myArray[2]+fmt+myArray[3]; + if(rtnArrYn == 'Y'){ + return myArray; + } + return rtnNum; + } else { + return phoneNum; + } + } else { + return phoneNum; + } + }, + + /** * 전화번호 형식 체크 * * @param 데이터 */ + isPhone(phoneNum) { + var regExp =/(02)([0-9]{3,4})([0-9]{4})$/; + if(regExp.test(phoneNum)){ + return true; + } else { + regExp =/(0[3-9]{1}[0-9]{1})([0-9]{3,4})([0-9]{4})$/; + if(regExp.test(phoneNum)){ + return true; + } else { + return false; + } + } + }, + + /** * 핸드폰번호 형식 체크 * * @param 데이터 */ + isMobile(phoneNum) { + var regExp =/(01[016789])([0-9]{3,4})([0-9]{4})$/; + var myArray; + if(regExp.test(phoneNum)){ + myArray = regExp.exec(phoneNum); + return true; + } else { + return false; + } + }, + isMobile2(phoneNum) { + var regExp =/(1[016789])([0-9]{3,4})([0-9]{4})$/; + var myArray; + if(regExp.test(phoneNum)){ + myArray = regExp.exec(phoneNum); + return true; + } else { + return false; + } + }, + + isNull(obj){ + if(lodash.isNil(obj) || lodash.trim(obj) == ''){ + return true; + } + return false; + }, + getParent(name){ + let p = this.$parent; + while(typeof p !== 'undefined'){ + if(p.$options.name == name) { + return p; + }else { + p = p.$parent; + } + } + return false; + }, + getJsonObj(str){ + return JSON.parse(JSON.stringify(str)); + }, + } + }; + + var chkPattern2 = { + data: function () { + return { + } + }, + methods: { + selSesStorage(keyLike){ + if(this.isNull(keyLike)){ + return null; + } + if(sessionStorage.length > 0){ + let keyList = []; + for(let i=0;i -1){ + keyList.push({name : keyNm, value : sessionStorage.getItem(keyNm)}); + } + } + if(keyList.length > 0){ + return keyList; + } + return null; + } + return null; + }, + + delSesStorage(keyList){ + if(this.isNull(keyList)){ + return null; + } + if(keyList.length > 0){ + keyList.map((o) => (sessionStorage.removeItem(o.name))); + return true; + } + }, + + setGridMouseDownActive(){ + const ele = document.querySelector(`div.tui-grid-container.tui-grid-show-lside-area`); + if(window.getEventListeners(ele).mousedown){ + ele.removeEventListener('mousedown',window.getEventListeners(ele).mousedown[0].listener); + } + }, + restrictChars : function($event,regExp,hanYn){ + + if(this.isNull(hanYn)){ + hanYn='N'; + } + if(hanYn === 'N' && $event.type === 'keydown'){ + if($event.keyCode === 229){ + $event.preventDefault(); + return false; + } + } + + if($event.type === 'keypress'){ + //한글 처리 불가 + if(regExp.test(String.fromCharCode($event.charCode))) { + return true; + }else{ + $event.preventDefault(); + return false; + } + } + + if(hanYn === 'N' && ( $event.type === 'keyup' || $event.type === 'input' || $event.type === 'change' || $event.type === 'blur')){ + $event.target.value = $event.target.value.replace(/[ㄱ-ㅎㅏ-ㅣ가-힣]/g,''); + $event.preventDefault(); + return false; + } + return true; + }, + setLenth: function (e, len) { + this.cut(e, len); + }, + onlyCustom: function (e,strRegExp,hanYn) { + var regExp_g = new RegExp(strRegExp,'g'); + this.cut(e); + return this.restrictChars(e,regExp_g,hanYn); + }, + onlyCommon: function(strRegExp, e, len, isEventCall, hanYn) { + var regExp_g = new RegExp(strRegExp,'g'); + if(isEventCall === 'N'){ + if(!this.cut(e, len, isEventCall)){ + return false; + } + if(!regExp_g.test(e.value)){ + return false; + } + return true; + } + this.cut(e, len); + return this.restrictChars(e,regExp_g,hanYn); + }, + onlyNum: function (e, len, isEventCall) { + var strRegExp = '^[0-9]*$'; + return this.onlyCommon(strRegExp, e, len, isEventCall); + }, + onlyEng: function (e, len, isEventCall) { + var strRegExp = '^[A-Za-z]*$'; + return this.onlyCommon(strRegExp, e, len, isEventCall); + }, + onlyLowerEng: function (e, len, isEventCall) { + var strRegExp = '^[a-z]*$'; + return this.onlyCommon(strRegExp, e, len, isEventCall); + }, + onlyUpperEng: function (e, len, isEventCall) { + var strRegExp = '^[A-Z]*$'; + return this.onlyCommon(strRegExp, e, len, isEventCall); + }, + onlyEmail: function (e, len, isEventCall) { + var strRegExp = '^[a-zA-Z0-9_\.\-@._-]*$'; + return this.onlyCommon(strRegExp, e, len, isEventCall); + }, + onlyName: function (e, len, isEventCall) { + var strRegExp = '^[ㄱ-ㅎㅏ-ㅣ가-힣a-zA-Z]*$'; + return this.onlyCommon(strRegExp, e, len, isEventCall,'Y'); + }, + onlyTitle: function (e, len, isEventCall) { + var strRegExp = '^[ㄱ-ㅎㅏ-ㅣ가-힣a-zA-Z0-9]*$'; + return this.onlyCommon(strRegExp, e, len, isEventCall,'Y'); + }, + onlyText: function (e, len, isEventCall) { + var strRegExp = '^[ㄱ-ㅎㅏ-ㅣ가-힣a-zA-Z0-9_-]*$'; + return this.onlyCommon(strRegExp, e, len, isEventCall,'Y'); + }, + onlyPassword: function (e, len, isEventCall) { + var strRegExp = '^[A-Za-z0-9!@#$%^&*]*$'; + return this.onlyCommon(strRegExp, e, len, isEventCall); + }, + onlyId: function (e, len, isEventCall) { + var strRegExp = '^[A-Za-z0-9_\.\-]*$'; + return this.onlyCommon(strRegExp, e, len, isEventCall); + }, + onlyIp: function (e, len, isEventCall) { + var strRegExp = '^[0-9,.*]*$'; + return this.onlyCommon(strRegExp, e, len, isEventCall); + }, + onlyRoleNm_Space: function (e, len, isEventCall) { + var strRegExp = '^[ㄱ-ㅎㅏ-ㅣ가-힣a-zA-Z0-9]*$'; + return this.onlyCommon(strRegExp, e, len, isEventCall,'Y'); + }, + onlyRoleId_UnderBar: function (e, len, isEventCall) { + var strRegExp = '^[a-zA-Z0-9_]*$'; + return this.onlyCommon(strRegExp, e, len, isEventCall); + }, + cut: function (ele, len, isValidChk) { + let e=ele; + if (typeof ele.target != "undefined") { + e=ele.target; + } + let max = this.isNull(len) ? e.attributes.maxlength.value : len; + let str = e.value; + + if (this.bytes(str) > max) { + if(this.isNull(isValidChk)){ + e.value = this.cutBytes(str, max); + } + return false; + } + return true; + }, + cutBytes: function (str, len) { + while(1 === 1){ + if(this.bytes(str) <= len){ + return str; + } + str = str.slice(0,-1); + } + }, + bytes: function (str) { + var length = ((s,b,i,c) => { + // for(b=i=0;c=s.charCodeAt(i++);b+=c>>11?3:c>>7?2:1); // 한글 3바이트 + // for(b=i=0;c=s.charCodeAt(i++);b+=c>>11?2:c>>7?1:1); //한글 2바이트 + b=0,i=0; + while(1 === 1){ + c = s.charCodeAt(i++); + if (isNaN(c)) { + break; + } + b += c >> 11 ? 2 : c >> 7 ? 1 : 1; + } + return b + })(str); + return length; + }, + checkPhone: function(str) { + str = str.replace(/[-\s]+/g, ''); + if (str.charAt(0)!="0"){ + str = "0"+str; + } + if (str.length<10||str.length>12){return "";} + if (isNaN(str)){return ""; } + if (str.substr(0,2)!="01" && str.substr(0,3)!="070" && str.substr(0,4)!="0505" && str.substr(0,4)!="0503"){return ""; } + return str; + + }, + } + }; + export { utils_mixin, chkPattern2 }; \ No newline at end of file diff --git a/frontend/src/modules/sysMgt/service/sysMgtApi.js b/frontend/src/modules/sysMgt/service/sysMgtApi.js new file mode 100644 index 0000000..08163a7 --- /dev/null +++ b/frontend/src/modules/sysMgt/service/sysMgtApi.js @@ -0,0 +1,28 @@ +import httpClient from '@/common/http-client'; + +// HUBEZ_BO_API_4003 - 관리자 등록. +const insertAdmin = (params) => { + return httpClient.post('/api/v1/bo/sysMgt/insertAdmin', params, { withCredentials: false }); +} + +// HUBEZ_BO_API_4004 - 관리자 수정. +const updateAdmin = (params) => { + return httpClient.post('/api/v1/bo/sysMgt/updateAdmin', params, { withCredentials: false }); +} + +// HUBEZ_BO_API_4005 - 관리자 삭제 +const deleteAdmin = (params) => { + return httpClient.post('/api/v1/bo/sysMgt/deleteAdmin', params, { withCredentials: false }); +} + +// HUBEZ_BO_API_4006 - 관리자 정보 상세 조회. +const adminDetail = (params) => { + return httpClient.post('/api/v1/bo/sysMgt/adminDetail', params, { withCredentials: false }); +} + +export default { + insertAdmin, + updateAdmin, + deleteAdmin, + adminDetail + } diff --git a/frontend/src/modules/sysMgt/service/utils_mixin.js b/frontend/src/modules/sysMgt/service/utils_mixin.js new file mode 100644 index 0000000..cf6b7cf --- /dev/null +++ b/frontend/src/modules/sysMgt/service/utils_mixin.js @@ -0,0 +1,373 @@ +import lodash from "lodash"; +import moment from "moment"; +import '@/modules/mgt/components/eventlisteners.js'; + +const filter_mixin = { + filters: { + _yyyy_mm_dd(val){ + if(lodash.isNil(val) || lodash.trim(val) == '') return ''; + const orgin = val; + if(orgin.length < 8) { + return orgin; + } + if(!Number(orgin)) return orgin; + const date = orgin.substring(0,8); + if(moment(date).isValid()){ + return moment(date).format('YYYY[-]MM[-]DD'); + } + return orgin; + } + }, +} + +const utils_mixin = { + methods:{ + /** * 이메일 형식 체크 * * @param 데이터 */ + emailCheck(email,rtnArrYn) { + if(this.isNull(rtnArrYn)){ + rtnArrYn='N'; + } + // var regExp = /(^[A-Za-z0-9_\.\-]+)@([A-Za-z0-9\-]+\.[A-Za-z0-9\-]+)/; + var regExp = /^([0-9a-zA-Z_\.\-]([-_.]?[0-9a-zA-Z_\.\-])*)@([0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*.[a-zA-Z]{2,3}$)/i;//이메일 정규식 + + if(regExp.test(email) == false) { + // 이메일 형식이 알파벳+숫자@알파벳+숫자.알파벳+숫자 형식이 아닐경우 + if(rtnArrYn == 'Y'){ + return email; + } + return false; + }else{ + var myArray = regExp.exec(email); + if(rtnArrYn == 'Y'){ + return myArray; + } + return true; + } + + }, + /** * 전화번호 포맷으로 변환 * * @param 데이터 */ + formatPhone(phoneNum,fmt,rtnArrYn) { + if(this.isNull(fmt)){ + fmt=''; + } + if(this.isNull(rtnArrYn)){ + fmt='N'; + } + if(this.isPhone(phoneNum)) { + var rtnNum; + var regExp =/(02)([0-9]{3,4})([0-9]{4})$/; + var myArray; + if(regExp.test(phoneNum)){ + myArray = regExp.exec(phoneNum); + rtnNum = myArray[1]+fmt + myArray[2]+fmt+myArray[3]; + if(rtnArrYn == 'Y'){ + return myArray; + } + return rtnNum; + } else { + regExp =/(0[3-9]{1}[0-9]{1})([0-9]{3,4})([0-9]{4})$/; + if(regExp.test(phoneNum)){ + myArray = regExp.exec(phoneNum); + rtnNum = myArray[1]+fmt+myArray[2]+fmt+myArray[3]; + if(rtnArrYn == 'Y'){ + return myArray; + } + return rtnNum; + } else { + return phoneNum; + } + } + } else { + return phoneNum; + } + }, + /** * 핸드폰번호 포맷으로 변환 * * @param 데이터 */ + formatMobile(phoneNum,fmt,rtnArrYn) { + + if(this.isNull(fmt)){ + fmt=''; + } + if(this.isNull(rtnArrYn)){ + fmt='N'; + } + if(this.isMobile(phoneNum)) { + + var rtnNum; + var regExp =/(01[016789])([0-9]{3,4})([0-9]{4})$/; + var myArray; + + if(regExp.test(phoneNum)){ + + myArray = regExp.exec(phoneNum); + rtnNum = myArray[1]+fmt+myArray[2]+fmt+myArray[3]; + if(rtnArrYn == 'Y'){ + return myArray; + } + return rtnNum; + } else { + return phoneNum; + } + } else { + return phoneNum; + } + }, + + /** * 전화번호 형식 체크 * * @param 데이터 */ + isPhone(phoneNum) { + var regExp =/(02)([0-9]{3,4})([0-9]{4})$/; + if(regExp.test(phoneNum)){ + return true; + } else { + regExp =/(0[3-9]{1}[0-9]{1})([0-9]{3,4})([0-9]{4})$/; + if(regExp.test(phoneNum)){ + return true; + } else { + return false; + } + } + }, + + /** * 핸드폰번호 형식 체크 * * @param 데이터 */ + isMobile(phoneNum) { + var regExp =/(01[016789])([0-9]{3,4})([0-9]{4})$/; + var myArray; + if(regExp.test(phoneNum)){ + myArray = regExp.exec(phoneNum); + return true; + } else { + return false; + } + }, + isMobile2(phoneNum) { + var regExp =/(1[016789])([0-9]{3,4})([0-9]{4})$/; + var myArray; + if(regExp.test(phoneNum)){ + myArray = regExp.exec(phoneNum); + return true; + } else { + return false; + } + }, + + isNull(obj){ + if(lodash.isNil(obj) || lodash.trim(obj) == ''){ + return true; + } + return false; + }, + getParent(name){ + let p = this.$parent; + while(typeof p !== 'undefined'){ + if(p.$options.name == name) { + return p; + }else { + p = p.$parent; + } + } + return false; + }, + getJsonObj(str){ + return JSON.parse(JSON.stringify(str)); + }, + } +}; + +var chkPattern2 = { + data: function () { + return { + } + }, + methods: { + selSesStorage(keyLike){ + if(this.isNull(keyLike)){ + return null; + } + if(sessionStorage.length > 0){ + let keyList = []; + for(let i=0;i -1){ + keyList.push({name : keyNm, value : sessionStorage.getItem(keyNm)}); + } + } + if(keyList.length > 0){ + return keyList; + } + return null; + } + return null; + }, + + delSesStorage(keyList){ + if(this.isNull(keyList)){ + return null; + } + if(keyList.length > 0){ + keyList.map((o) => (sessionStorage.removeItem(o.name))); + return true; + } + }, + + setGridMouseDownActive(){ + const ele = document.querySelector(`div.tui-grid-container.tui-grid-show-lside-area`); + if(window.getEventListeners(ele).mousedown){ + ele.removeEventListener('mousedown',window.getEventListeners(ele).mousedown[0].listener); + } + }, + restrictChars : function($event,regExp,hanYn){ + + if(this.isNull(hanYn)){ + hanYn='N'; + } + if(hanYn === 'N' && $event.type === 'keydown'){ + if($event.keyCode === 229){ + $event.preventDefault(); + return false; + } + } + + if($event.type === 'keypress'){ + //한글 처리 불가 + if(regExp.test(String.fromCharCode($event.charCode))) { + return true; + }else{ + $event.preventDefault(); + return false; + } + } + + if(hanYn === 'N' && ( $event.type === 'keyup' || $event.type === 'input' || $event.type === 'change' || $event.type === 'blur')){ + $event.target.value = $event.target.value.replace(/[ㄱ-ㅎㅏ-ㅣ가-힣]/g,''); + $event.preventDefault(); + return false; + } + return true; + }, + setLenth: function (e, len) { + this.cut(e, len); + }, + onlyCustom: function (e,strRegExp,hanYn) { + var regExp_g = new RegExp(strRegExp,'g'); + this.cut(e); + return this.restrictChars(e,regExp_g,hanYn); + }, + onlyCommon: function(strRegExp, e, len, isEventCall, hanYn) { + var regExp_g = new RegExp(strRegExp,'g'); + if(isEventCall === 'N'){ + if(!this.cut(e, len, isEventCall)){ + return false; + } + if(!regExp_g.test(e.value)){ + return false; + } + return true; + } + this.cut(e, len); + return this.restrictChars(e,regExp_g,hanYn); + }, + onlyNum: function (e, len, isEventCall) { + var strRegExp = '^[0-9]*$'; + return this.onlyCommon(strRegExp, e, len, isEventCall); + }, + onlyEng: function (e, len, isEventCall) { + var strRegExp = '^[A-Za-z]*$'; + return this.onlyCommon(strRegExp, e, len, isEventCall); + }, + onlyLowerEng: function (e, len, isEventCall) { + var strRegExp = '^[a-z]*$'; + return this.onlyCommon(strRegExp, e, len, isEventCall); + }, + onlyUpperEng: function (e, len, isEventCall) { + var strRegExp = '^[A-Z]*$'; + return this.onlyCommon(strRegExp, e, len, isEventCall); + }, + onlyEmail: function (e, len, isEventCall) { + var strRegExp = '^[a-zA-Z0-9_\.\-@._-]*$'; + return this.onlyCommon(strRegExp, e, len, isEventCall); + }, + onlyName: function (e, len, isEventCall) { + var strRegExp = '^[ㄱ-ㅎㅏ-ㅣ가-힣a-zA-Z]*$'; + return this.onlyCommon(strRegExp, e, len, isEventCall,'Y'); + }, + onlyTitle: function (e, len, isEventCall) { + var strRegExp = '^[ㄱ-ㅎㅏ-ㅣ가-힣a-zA-Z0-9]*$'; + return this.onlyCommon(strRegExp, e, len, isEventCall,'Y'); + }, + onlyText: function (e, len, isEventCall) { + var strRegExp = '^[ㄱ-ㅎㅏ-ㅣ가-힣a-zA-Z0-9_-]*$'; + return this.onlyCommon(strRegExp, e, len, isEventCall,'Y'); + }, + onlyPassword: function (e, len, isEventCall) { + var strRegExp = '^[A-Za-z0-9!@#$%^&*]*$'; + return this.onlyCommon(strRegExp, e, len, isEventCall); + }, + onlyId: function (e, len, isEventCall) { + var strRegExp = '^[A-Za-z0-9_\.\-]*$'; + return this.onlyCommon(strRegExp, e, len, isEventCall); + }, + onlyIp: function (e, len, isEventCall) { + var strRegExp = '^[0-9,.*]*$'; + return this.onlyCommon(strRegExp, e, len, isEventCall); + }, + onlyRoleNm_Space: function (e, len, isEventCall) { + var strRegExp = '^[ㄱ-ㅎㅏ-ㅣ가-힣a-zA-Z0-9]*$'; + return this.onlyCommon(strRegExp, e, len, isEventCall,'Y'); + }, + onlyRoleId_UnderBar: function (e, len, isEventCall) { + var strRegExp = '^[a-zA-Z0-9_]*$'; + return this.onlyCommon(strRegExp, e, len, isEventCall); + }, + cut: function (ele, len, isValidChk) { + let e=ele; + if (typeof ele.target != "undefined") { + e=ele.target; + } + let max = this.isNull(len) ? e.attributes.maxlength.value : len; + let str = e.value; + + if (this.bytes(str) > max) { + if(this.isNull(isValidChk)){ + e.value = this.cutBytes(str, max); + } + return false; + } + return true; + }, + cutBytes: function (str, len) { + while(1 === 1){ + if(this.bytes(str) <= len){ + return str; + } + str = str.slice(0,-1); + } + }, + bytes: function (str) { + var length = ((s,b,i,c) => { + // for(b=i=0;c=s.charCodeAt(i++);b+=c>>11?3:c>>7?2:1); // 한글 3바이트 + // for(b=i=0;c=s.charCodeAt(i++);b+=c>>11?2:c>>7?1:1); //한글 2바이트 + b=0,i=0; + while(1 === 1){ + c = s.charCodeAt(i++); + if (isNaN(c)) { + break; + } + b += c >> 11 ? 2 : c >> 7 ? 1 : 1; + } + return b + })(str); + return length; + }, + checkPhone: function(str) { + str = str.replace(/[-\s]+/g, ''); + if (str.charAt(0)!="0"){ + str = "0"+str; + } + if (str.length<10||str.length>12){return "";} + if (isNaN(str)){return ""; } + if (str.substr(0,2)!="01" && str.substr(0,3)!="070" && str.substr(0,4)!="0505" && str.substr(0,4)!="0503"){return ""; } + return str; + + }, + } +}; +export { utils_mixin, chkPattern2, filter_mixin }; \ No newline at end of file diff --git a/frontend/src/modules/sysMgt/views/AdminList.vue b/frontend/src/modules/sysMgt/views/AdminList.vue index 9ffe143..6dfaacf 100644 --- a/frontend/src/modules/sysMgt/views/AdminList.vue +++ b/frontend/src/modules/sysMgt/views/AdminList.vue @@ -1,107 +1,273 @@ - - - \ No newline at end of file diff --git a/frontend/src/modules/sysMgt/views/AuthList.vue b/frontend/src/modules/sysMgt/views/AuthList.vue index 5b395ee..13509eb 100644 --- a/frontend/src/modules/sysMgt/views/AuthList.vue +++ b/frontend/src/modules/sysMgt/views/AuthList.vue @@ -1,107 +1,107 @@ - - - \ No newline at end of file diff --git a/frontend/src/router.js b/frontend/src/router.js index 653f958..91c1f36 100644 --- a/frontend/src/router.js +++ b/frontend/src/router.js @@ -1,97 +1,97 @@ -import Vue from 'vue'; -import Router from 'vue-router'; -import searchcondition from './store' -import tokenSvc from '@/common/token-service'; - -import HubwebLayout from './views/HubwebLayout.vue'; - - -import loginRoutes from './modules/login/router'; -import custRoutes from './modules/custMgt/router'; -import authRoutes from './modules/sysMgt/router'; - -import custList from './modules/custMgt/views/CustList'; -import channelRoutes from './modules/attractMgt/router'; -import rejectRoutes from './modules/servMgt/router'; -import clacRoutes from './modules/calculate/router'; -import templtRoutes from './modules/channelMgt/router'; -import profileRoutes from './modules/sendNumMgt/router'; -import mntrngRoutes from './modules/mntrng/router'; -import riskmgtRoutes from './modules/riskMgt/router'; -import monthRoutes from './modules/stats/router'; -// import channelList from './modules/attractMgt/views/ChannelList'; - -Vue.use(Router) - -const router = new Router({ - mode: 'history', - base: process.env.BASE_URL, - routes: [ - { - path: '/', - component: HubwebLayout, - children: [ - { - path: '', - component: custList - }, - // { - // path: '/attractMgt/views', - // component: channelList - // }, - { - path: '/view/error/404', - component: () => import('./views/ErrorPage404.vue'), - meta: { public: true } - }, - { - path: '/view/error/500', - component: () => import('./views/ErrorPage500.vue'), - meta: { public: true } - }, - ...loginRoutes, - ...custRoutes, - ...authRoutes, - ...channelRoutes, - ...rejectRoutes, - ...clacRoutes, - ...templtRoutes, - ...profileRoutes, - ...mntrngRoutes, - ...riskmgtRoutes, - ...monthRoutes, - - - - - ] - }, - {path: '*', redirect: '/view/error/404'} - ] -}); - -router.beforeEach((to, from, next) => { - const isPublic = to.matched.some(record => record.meta.public); - const loggedIn = !!tokenSvc.getToken(); - - if (!isPublic && !loggedIn) { - return next('/login'); - } - - to.matched.some(record => { - if (record.meta.usingSearchCondition) { - const shareList = record.meta.shareList; - if (from.name && shareList && shareList.includes(from.name)) { - // shareList에 포함되어 있는 라우터에서 온 경우 검색 조건을 유지한다. - // console.log("패밀리"); - } else { - // 그 외의 경우 검색 조건 초기화 - searchcondition.commit("searchcondition/updateSearchCondition", null); - // console.log("낫패밀리"); - } - } - next(); - }); -}); - -export default router; +import Vue from 'vue'; +import Router from 'vue-router'; +import searchcondition from './store' +import tokenSvc from '@/common/token-service'; + +import HubwebLayout from './views/HubwebLayout.vue'; + + +import loginRoutes from './modules/login/router'; +import custRoutes from './modules/custMgt/router'; +import authRoutes from './modules/sysMgt/router'; + +import custList from './modules/custMgt/views/CustList'; +import channelRoutes from './modules/attractMgt/router'; +import rejectRoutes from './modules/servMgt/router'; +import clacRoutes from './modules/calculate/router'; +import templtRoutes from './modules/channelMgt/router'; +import profileRoutes from './modules/sendNumMgt/router'; +import mntrngRoutes from './modules/mntrng/router'; +import riskmgtRoutes from './modules/riskMgt/router'; +import monthRoutes from './modules/stats/router'; +// import channelList from './modules/attractMgt/views/ChannelList'; + +Vue.use(Router) + +const router = new Router({ + mode: 'history', + base: process.env.BASE_URL, + routes: [ + { + path: '/', + component: HubwebLayout, + children: [ + { + path: '', + component: custList + }, + // { + // path: '/attractMgt/views', + // component: channelList + // }, + { + path: '/view/error/404', + component: () => import('./views/ErrorPage404.vue'), + meta: { public: true } + }, + { + path: '/view/error/500', + component: () => import('./views/ErrorPage500.vue'), + meta: { public: true } + }, + ...loginRoutes, + ...custRoutes, + ...authRoutes, + ...channelRoutes, + ...rejectRoutes, + ...clacRoutes, + ...templtRoutes, + ...profileRoutes, + ...mntrngRoutes, + ...riskmgtRoutes, + ...monthRoutes, + + + + + ] + }, + {path: '*', redirect: '/view/error/404'} + ] +}); + +router.beforeEach((to, from, next) => { + const isPublic = to.matched.some(record => record.meta.public); + const loggedIn = !!tokenSvc.getToken(); + + if (!isPublic && !loggedIn) { + return next('/login'); + } + + to.matched.some(record => { + if (record.meta.usingSearchCondition) { + const shareList = record.meta.shareList; + if (from.name && shareList && shareList.includes(from.name)) { + // shareList에 포함되어 있는 라우터에서 온 경우 검색 조건을 유지한다. + // console.log("패밀리"); + } else { + // 그 외의 경우 검색 조건 초기화 + searchcondition.commit("searchcondition/updateSearchCondition", null); + // console.log("낫패밀리"); + } + } + next(); + }); +}); + +export default router; diff --git a/frontend/src/service/api.js b/frontend/src/service/api.js index 0b731eb..b0c6f36 100644 --- a/frontend/src/service/api.js +++ b/frontend/src/service/api.js @@ -1,46 +1,56 @@ -import httpClient from '@/common/http-client'; - -/* ckr - old -const menus = () => { - return httpClient.get('/api/view/menus'); -}; -*/ -// new -const menus = () => { - return httpClient.post('/api/v1/bo/comm/getMenu',{ withCredentials: false }); -}; - -const generateStr = (length) => { - const chars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; - var result = ""; - for (var i = length; i > 0; --i) result += chars[Math.floor(Math.random() * chars.length)]; - return result; -} - -/** - * httpClient.get(url, { params, responseType: "blob" }).then(response => { commonApiService.downloadBlob(response); }) - */ -const downloadBlob = (response) => { - let blob = new Blob([response.data], { type: "application/vnd.ms-excel;charset=UTF-8" }); - let filename = response.headers["content-disposition"].split(";") - .filter(function(ele) { return ele.indexOf("filename") > -1 }) - .map(function(ele) { return ele.replace(/"/g, '').split("=")[1] }); - filename = decodeURI(filename); - if (typeof window.navigator.msSaveBlob !== "undefined") { - // IE - window.navigator.msSaveBlob(blob, filename); - } else { - let link = document.createElement("a") - link.href = window.URL.createObjectURL(blob); - link.download = filename; - link.click(); - } - } - - - -export default { - menus, - generateStr, - downloadBlob +import httpClient from '@/common/http-client'; + +/* ckr - old +const menus = () => { + return httpClient.get('/api/view/menus'); +}; +*/ +// new +const menus = () => { + return httpClient.post('/api/v1/bo/comm/getMenu', { withCredentials: false }); +}; + +const commCode = (params) => { + return httpClient.post('/api/v1/bo/comm/getCode', params, { withCredentials: false }); +}; + +const commAuth = () => { + return httpClient.post('/api/v1/bo/comm/getAuth', { withCredentials: false }); +}; + +const generateStr = (length) => { + const chars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; + var result = ""; + for (var i = length; i > 0; --i) result += chars[Math.floor(Math.random() * chars.length)]; + return result; +} + +/** + * httpClient.get(url, { params, responseType: "blob" }).then(response => { commonApiService.downloadBlob(response); }) + */ +const downloadBlob = (response) => { + let blob = new Blob([response.data], { type: "application/vnd.ms-excel;charset=UTF-8" }); + let filename = response.headers["content-disposition"].split(";") + .filter(function(ele) { return ele.indexOf("filename") > -1 }) + .map(function(ele) { return ele.replace(/"/g, '').split("=")[1] }); + filename = decodeURI(filename); + if (typeof window.navigator.msSaveBlob !== "undefined") { + // IE + window.navigator.msSaveBlob(blob, filename); + } else { + let link = document.createElement("a") + link.href = window.URL.createObjectURL(blob); + link.download = filename; + link.click(); + } + } + + + +export default { + menus, + generateStr, + downloadBlob, + commCode, + commAuth }; \ No newline at end of file diff --git a/frontend/src/service/upload-file.js b/frontend/src/service/upload-file.js index c9f1714..a187b13 100644 --- a/frontend/src/service/upload-file.js +++ b/frontend/src/service/upload-file.js @@ -1,31 +1,31 @@ -import httpClient from '@/common/http-client'; - -const commonUpload = file => { - let formData = new FormData(); - formData.append('sourceFile', file); - - return httpClient.post('/api/file/common/upload', formData, { - headers: { - 'Content-Type': 'multipart/form-data' - } - }); -}; - -const commonMultiUpload = files => { - let formData = new FormData(); - - for (let x = 0; x < files.length; x++) { - formData.append('sourceFiles', files[x]); - } - - return httpClient.post('/api/file/common/upload/multi', formData, { - headers: { - 'Content-Type': 'multipart/form-data' - } - }); -}; - -export default { - commonUpload, - commonMultiUpload -}; +import httpClient from '@/common/http-client'; + +const commonUpload = file => { + let formData = new FormData(); + formData.append('sourceFile', file); + + return httpClient.post('/api/file/common/upload', formData, { + headers: { + 'Content-Type': 'multipart/form-data' + } + }); +}; + +const commonMultiUpload = files => { + let formData = new FormData(); + + for (let x = 0; x < files.length; x++) { + formData.append('sourceFiles', files[x]); + } + + return httpClient.post('/api/file/common/upload/multi', formData, { + headers: { + 'Content-Type': 'multipart/form-data' + } + }); +}; + +export default { + commonUpload, + commonMultiUpload +}; diff --git a/frontend/src/store.js b/frontend/src/store.js index f523060..68576aa 100644 --- a/frontend/src/store.js +++ b/frontend/src/store.js @@ -1,13 +1,13 @@ -import Vue from 'vue' -import Vuex from 'vuex' -import searchcondition from './store/search-condition' -import login from './modules/login/store/index' - -Vue.use(Vuex) - -export default new Vuex.Store({ - modules: { - searchcondition, - login - } -}) +import Vue from 'vue' +import Vuex from 'vuex' +import searchcondition from './store/search-condition' +import login from './modules/login/store/index' + +Vue.use(Vuex) + +export default new Vuex.Store({ + modules: { + searchcondition, + login + } +}) diff --git a/frontend/src/store/search-condition.js b/frontend/src/store/search-condition.js index c520128..d0ed696 100644 --- a/frontend/src/store/search-condition.js +++ b/frontend/src/store/search-condition.js @@ -1,24 +1,24 @@ -const state = { - searchCondition: null -} - -const getters = { - getSearchCondition: state => state.searchCondition, -} - -const mutations = { - updateSearchCondition: (state, data) => { - state.searchCondition = data; - } -} - -const actions = { -} - -export default { - namespaced: true, - state, - getters, - mutations, - actions +const state = { + searchCondition: null +} + +const getters = { + getSearchCondition: state => state.searchCondition, +} + +const mutations = { + updateSearchCondition: (state, data) => { + state.searchCondition = data; + } +} + +const actions = { +} + +export default { + namespaced: true, + state, + getters, + mutations, + actions }; \ No newline at end of file diff --git a/frontend/src/utils/jglib.js b/frontend/src/utils/jglib.js index 2bc4647..ff688a8 100644 --- a/frontend/src/utils/jglib.js +++ b/frontend/src/utils/jglib.js @@ -1,520 +1,520 @@ -let jglibObj = { - isEmpty(value) { - // 빈 값 체크 - var result = false - if (value === undefined) { - return true - } - if (typeof value === 'number') { - if (value === 0) { - return true - } - } else if (typeof value === 'string') { - if (value === '' || value.length === 0) { - return true - } - } else if (typeof value === 'object') { - if (Array.isArray(value)) { - if (value.length === 0) { - return true - } - } else if (!value) { - return true - } else { - if (Object.keys(value).length === 0) { - return true - } - } - } - return result - }, - isUserId(userId) { - // 아이디 유효성 검증 - // 5-15자의 영문 대소문자 숫자로만 입력 가능 - var regId = /^[a-zA-Z0-9]{5,20}$/ - var regEn = /[a-zA-Z]/g - if (regEn.test(userId) && regId.test(userId)) { - return true - } - - return false - }, - isPw(pw, userId, userPhoneNumber) { - // 비밀번호 유효성 검증 - // 영문, 숫자 조합 10자리 이상, 영문, 숫자, 특수문자 조합 8자리 이상 - var regEn = /[a-z]/gi - var regNum = /[0-9]/g - var regCh = /[~!@#$%<>^&*()]/g - - var valid = [regEn.test(pw), regNum.test(pw), regCh.test(pw)] - var validcount = valid.filter(v => v === true).length - - // 영문, 숫자 조합 10자리 이상 - if (validcount === 2 && pw.length >= 10) { - return true - } - - if (validcount === 3 && pw.length >= 8) { - return true - } - return false - }, - isVaildationPw(pw, userId, userPhoneNumber) { - // 비밀번호 유효성 검증 - // 영문, 숫자 조합 10자리 이상, 영문, 숫자, 특수문자 조합 8자리 이상 - var regEn = /[a-z]/gi - var regNum = /[0-9]/g - var regCh = /[!@$%^*]/g - var noRegCh = /[~`#\\&()-+=]/g - - var valid = [regEn.test(pw), regNum.test(pw), regCh.test(pw)] - var validcount = valid.filter(v => v === true).length - - // 특수문자 제한 ( !@$%^* ) - if (noRegCh.test(pw)) { - return { - code: 'errorSize', - message: '특수문자는 !, @, $, %, ^, * 만 사용 가능합니다.' - } - } - - // 영문, 숫자 조합 10자리 이상 - if (validcount === 1) { - return { - code: 'errorSize', - message: - '비밀번호는 영문, 숫자, 특수문자 중 2가지 이상을 조합하여 10자리 이상 또는 3가지 이상을 조합하여 8자리 이상으로 설정해 주세요.' - } - } - - if (validcount === 2 && pw.length <= 10) { - return { - code: 'errorSize', - message: - '비밀번호는 영문, 숫자, 특수문자 중 2가지 이상을 조합하여 10자리 이상 또는 3가지 이상을 조합하여 8자리 이상으로 설정해 주세요.' - } - } - - // 영문, 숫자, 특수문자 조합 8자리 이상 - if (validcount === 3 && pw.length <= 8) { - return { - code: 'errorSize', - message: - '비밀번호는 영문, 숫자, 특수문자 중 2가지 이상을 조합하여 10자리 이상 또는 3가지 이상을 조합하여 8자리 이상으로 설정해 주세요.' - } - } - - // 사용자 아이디와 동일한 비밀번호 체크 - if (pw.indexOf(userId) > -1) { - return { - code: 'errorUsrId', - message: '비밀번호가 아이디와 동일합니다.' - } - } - - // 연속적인 숫자 또는 문자 (예. 1234, abcd) 비밀번호 체크 - var SamePass0 = 0 // 동일문자 카운트 - var SamePass1 = 0 // 연속성(+) 카운드 - var SamePass2 = 0 // 연속성(-) 카운드 - - var chrPass0 - var chrPass1 - - for (var i = 0; i < pw.length; i++) { - chrPass0 = pw.charAt(i) - chrPass1 = pw.charAt(i + 1) - - // 동일문자 카운트 - if (chrPass0 === chrPass1) { - SamePass0 = SamePass0 + 1 - } else { - SamePass0 = 0 - } - - // 연속성(+) 카운드 - if (chrPass0.charCodeAt(0) - chrPass1.charCodeAt(0) === 1) { - SamePass1 = SamePass1 + 1 - } else { - SamePass1 = 0 - } - - // 연속성(-) 카운드 - if (chrPass0.charCodeAt(0) - chrPass1.charCodeAt(0) === -1) { - SamePass2 = SamePass2 + 1 - } else { - SamePass2 = 0 - } - - if (SamePass0 > 2) { - return { - code: 'errorSame', - message: '동일한 문자를 4개이상 사용할 수 없습니다.' - } - } - - if (SamePass1 > 2 || SamePass2 > 2) { - return { - code: 'errorSame', - message: '연속적인 숫자 또는 문자를 4개이상 사용할 수 없습니다.' - } - } - } - - // if (SamePass1 > 1 || SamePass2 > 1) { - // return { - // code: 'errorSame', - // message: - // '연속된 문자열(1234 또는 4321, abcd, dcba 등)을
3자 이상 사용 할 수 없습니다.' - // } - // } - - // 휴대폰번호 국번 또는 뒷자리 번호 비밀번호 체크 - // var firstPhoneNumber = userPhoneNumber.substring(0, 3) - // var lastPhoneNumbe = userPhoneNumber.substring(7, 12) - - // // 앞번호 3 or 4자리 - // var middlePhoneNumber = userPhoneNumber - // .substring(3, userPhoneNumber.length) - // .substring(0, userPhoneNumber.length - 7) - // // 뒷번호 4자리 - // var lastPhoneNumbe = userPhoneNumber.substring( - // userPhoneNumber.length - 4, - // userPhoneNumber.length - // ) - - // 앞번호 3 or 4자리 - var middlePhoneNumber = this.mobileNumConverter(userPhoneNumber).split( - '-' - )[1] - // 뒷번호 4자리 - var lastPhoneNumbe = this.mobileNumConverter(userPhoneNumber).split('-')[2] - - if (pw.indexOf(middlePhoneNumber) > -1) { - return { - code: 'errorPhoneNumber', - message: '휴대폰번호 국번 또는 뒷자리 번호를 사용할수 없습니다.' - } - } - - if (pw.indexOf(lastPhoneNumbe) > -1) { - return { - code: 'errorPhoneNumber', - message: '휴대폰번호 국번 또는 뒷자리 번호를 사용할수 없습니다.' - } - } - return { - code: 'success', - message: '' - } - }, - isEmail(email) { - // 이메일 유효성 검증 - var regEmail = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ - - if (regEmail.test(email)) { - return true - } - - return false - }, - isPhoneNumber(phoneNumber) { - // 휴대폰 번호 유효성 검증 - var regPhoneNumber = /^(01[016789]{1}|02|0[3-9]{1}[0-9]{1})([0-9]{3,4})([0-9]{4})$/ - - if (regPhoneNumber.test(phoneNumber)) { - return true - } - - return false - }, - isUrl(urlAdd) { - // url 유효성 검증 - var regUrl = /^(https?):\/\/([0-9a-zA-Z|-]+\.)+[a-zA-Z]{2,6}(|:[0-9]+)?(\/\S*)?/ - - if (regUrl.test(urlAdd)) { - return true - } - - return false - }, - isIpAddress(ipAddr) { - var regIpAddr = /\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b/ - if (regIpAddr.test(ipAddr)) { - return true - } - return false - }, - checkBizRegNum(bizRegNum) { - // 사업자 등록번호 유효성 검증 - var checkID = new Array(1, 3, 7, 1, 3, 7, 1, 3, 5, 1) - var i - var chkSum = 0 - var c2 - var remander - bizRegNum = bizRegNum.replace(/-/gi, '') - - for (i = 0; i <= 7; i++) chkSum += checkID[i] * bizRegNum.charAt(i) - c2 = '0' + checkID[8] * bizRegNum.charAt(8) - c2 = c2.substring(c2.length - 2, c2.length) - chkSum += Math.floor(c2.charAt(0)) + Math.floor(c2.charAt(1)) - remander = (10 - (chkSum % 10)) % 10 - - if (Math.floor(bizRegNum.charAt(9)) === remander) return true - return false - }, - checkFileData(file, availableExts, maxSize) { - // 파일 확장자, 사이즈 유효성 검증 - // file - element ui 이용 시 file.raw, availableExt - ['jpg', 'png', 'gif'], maxSize - MB 단위로 숫자만 - // 사이즈만 확인 시 checkFileData(file, [], size) - // 확장자만 확인 시 checkFileData(file, ['jpg', 'png', 'gif']) - - // 파일 사이즈 검증 - if (maxSize) { - let maxSizeByte = maxSize * 1024 * 1024 // MB -> byte로 변환하여 비교 - if (file.size > maxSizeByte) { - return { - code: 'errorSize', - message: maxSize + 'MB 이하의 파일만 업로드 할 수 있습니다.' - } - } - } - - // 파일 확장자 검증 - if (availableExts.length > 0) { - let exts = availableExts.join('|').toLocaleLowerCase() - if ( - !new RegExp('(' + exts.replace(/\./g, '\\.') + ')$').test( - file.name.toLocaleLowerCase() - ) - ) { - return { - code: 'errorExt', - message: - availableExts.join(', ') + ' 형식의 파일만 업로드 할 수 있습니다.' - } - } - } - - return { - code: 'ok', - message: 'OK' - } - }, - convertFileSizeByte(value) { - // 파일 사이즈를 byte -> MB 변환 - let kb = 1 * 1024 - let mb = 1 * 1024 * 1024 - let result = value - if (value > mb) { - result = Intl.NumberFormat().format(parseInt(value / mb)) + 'MB' - } else if (value > kb) { - result = Intl.NumberFormat().format(parseInt(value / kb)) + 'KB' - } - return result - }, - keydownOnlyNum(e) { - let key = e.which ? e.which : event.keyCode - let actionKeyList = [8, 9, 37, 38, 39, 40, 46] - if ( - (key < 48 || key > 57) && - (key < 96 || key > 106) && - actionKeyList.indexOf(key) === -1 && - !e.ctrlKey - ) { - event.returnValue = false - e.preventDefault() - } - return true - }, - keyupOnlyNum(e) { - e.target.value = e.target.value.replace(/[^0-9]/g, '') - }, - keydownOnlyText(e) { - let key = e.which ? e.which : event.keyCode - if (key >= 65 && key <= 90 && (key >= 97 && key <= 122)) { - event.returnValue = false - e.preventDefault() - } - return true - }, - keyupOnlyText(e) { - e.target.value = e.target.value.replace(/[^ㄱ-ㅎ|ㅏ-ㅣ|가-힣|a-zA-Z]/g, '') - }, - keydownOnlyText2(e) { - let key = e.which ? e.which : event.keyCode - if (key >= 48 && key <= 57) { - event.returnValue = false - e.preventDefault() - } - return true - }, - keyupOnlyEng(e) { - e.target.value = e.target.value.replace(/[^a-zA-Z]/g, '') - }, - onlyText(e) { - let onlyText = /^[가-힣|a-z|A-Z|\*]+$/ - if (onlyText.test(e)) { - return false - } - return true - }, - makeObject(str) { - if (!str) str = '' - let units = str.split(';') - let resObj = {} - units.forEach(unit => { - let t = unit.split('=') - if (t.length !== 2) return - resObj[t[0]] = t[1] - }) - return resObj - }, - makeString(obj) { - if (!obj) obj = {} - let keys = Object.keys(obj) - let keyNValues = keys.map(key => { - return `${key}=${obj[key] ? obj[key] : ''}` - }) - return keyNValues.join(';') - }, - makeKeyNValueArray(str) { - if (!str) str = '' - let units = str.split(';') - let resObj = [] - units.forEach(unit => { - let t = unit.split('=') - if (t.length !== 2) return - resObj.push({ - key: t[0], - value: t[1] - }) - }) - return resObj - }, - makeKeyNValueString(arr) { - if (!arr || !Array.isArray(arr)) arr = [] - let keyNValues = arr.map(kv => { - return `${kv.key}=${kv.value}` - }) - return keyNValues.join(';') - }, - getPopupPositionLeft(popupWidth) { - return (document.body.clientWidth - popupWidth) / 2 - }, - /** - * Fullscreen 버튼 선택 시, content 영역을 확장한다. - */ - openFullscreen(target) { - if (target.requestFullscreen) { - target.requestFullscreen() - } else if (target.mozRequestFullScreen) { - /* Firefox */ - target.mozRequestFullScreen() - } else if (target.webkitRequestFullscreen) { - /* Chrome, Safari & Opera */ - target.webkitRequestFullscreen() - } else if (target.msRequestFullscreen) { - /* IE/Edge */ - target.msRequestFullscreen() - } - }, - /** - * 화면 사이즈를 조정하는 강제 이벤트 발생 - */ - callResizeEvent() { - var event - if (typeof Event === 'function') { - event = new Event('resize') - } else { - event = document.createEvent('Event') - event.initEvent('resize', true, true) - } - window.dispatchEvent(event) - }, - - // 사업자등록번호 '-' 추가 함수 - corpRegiNumConverter(corpRegiNum) { - if (!corpRegiNum) { - return '-' - } - corpRegiNum = corpRegiNum.replace(/\-/g, '') - let convertercorpRegiNum = '' - let len = [0, 3, 5] - let len2 = [3, 5, 10] - for (let i = 0; i < len.length; i++) { - if (i < 2) { - convertercorpRegiNum += corpRegiNum.substring(len[i], len2[i]) + '-' - } else { - convertercorpRegiNum += corpRegiNum.substring(len[i], len2[i]) - } - } - return convertercorpRegiNum - }, - - // 핸드폰번호 '-' 추가 함수 - mobileNumConverter(mobileNum) { - // mobileNum = mobileNum.replace(/\-/g, '') - // let converterMobileNum = '' - // let len = [0, 3, 7] - // let len2 = [3, 7, 11] - // for (let i = 0; i < len.length; i++) { - // if (i < 2) { - // converterMobileNum += mobileNum.substring(len[i], len2[i]) + '-' - // } else { - // converterMobileNum += mobileNum.substring(len[i], len2[i]) - // } - // } - let converterMobileNum = mobileNum.replace( - /(^02.{0}|^01.{1}|[0-9]{3})([0-9]+)([0-9]{4})/, - '$1-$2-$3' - ) - return converterMobileNum - }, - // 2자리수로 만들어줌 09,08... - pad(n, width) { - n = n + '' - return n.length >= width ? n : new Array(width - n.length + 1).join('0') + n - }, - convertDateFormat(dateString, format) { - if (typeof dateString !== 'string') { - return '' - } - - if (dateString.length === 0) { - return '' - } - - let date = dayjs(dateString) - return date.format(format) - }, - convertCamelcaseToSnakecase(string) { - return string.replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g, '$1_$2').toUpperCase() - }, - convertNumberWithComma(number) { - return number.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') - }, - uniqBy(array, key) { - let uniq = [] - array.forEach(item => { - let filtered = uniq.filter(i => i[key] === item[key]) - if (filtered.length === 0) { - uniq.push(item) - } - }) - return uniq - }, - unescapeHtml(str) { - if (str == null) { - return '' - } - return str - .replace(/&/g, '&') - .replace(/</g, '<') - .replace(/>/g, '>') - .replace(/"/g, '"') - .replace(/'/g, "'") - .replace(/'/g, "'") - } -} - -export default jglibObj +let jglibObj = { + isEmpty(value) { + // 빈 값 체크 + var result = false + if (value === undefined) { + return true + } + if (typeof value === 'number') { + if (value === 0) { + return true + } + } else if (typeof value === 'string') { + if (value === '' || value.length === 0) { + return true + } + } else if (typeof value === 'object') { + if (Array.isArray(value)) { + if (value.length === 0) { + return true + } + } else if (!value) { + return true + } else { + if (Object.keys(value).length === 0) { + return true + } + } + } + return result + }, + isUserId(userId) { + // 아이디 유효성 검증 + // 5-15자의 영문 대소문자 숫자로만 입력 가능 + var regId = /^[a-zA-Z0-9]{5,20}$/ + var regEn = /[a-zA-Z]/g + if (regEn.test(userId) && regId.test(userId)) { + return true + } + + return false + }, + isPw(pw, userId, userPhoneNumber) { + // 비밀번호 유효성 검증 + // 영문, 숫자 조합 10자리 이상, 영문, 숫자, 특수문자 조합 8자리 이상 + var regEn = /[a-z]/gi + var regNum = /[0-9]/g + var regCh = /[~!@#$%<>^&*()]/g + + var valid = [regEn.test(pw), regNum.test(pw), regCh.test(pw)] + var validcount = valid.filter(v => v === true).length + + // 영문, 숫자 조합 10자리 이상 + if (validcount === 2 && pw.length >= 10) { + return true + } + + if (validcount === 3 && pw.length >= 8) { + return true + } + return false + }, + isVaildationPw(pw, userId, userPhoneNumber) { + // 비밀번호 유효성 검증 + // 영문, 숫자 조합 10자리 이상, 영문, 숫자, 특수문자 조합 8자리 이상 + var regEn = /[a-z]/gi + var regNum = /[0-9]/g + var regCh = /[!@$%^*]/g + var noRegCh = /[~`#\\&()-+=]/g + + var valid = [regEn.test(pw), regNum.test(pw), regCh.test(pw)] + var validcount = valid.filter(v => v === true).length + + // 특수문자 제한 ( !@$%^* ) + if (noRegCh.test(pw)) { + return { + code: 'errorSize', + message: '특수문자는 !, @, $, %, ^, * 만 사용 가능합니다.' + } + } + + // 영문, 숫자 조합 10자리 이상 + if (validcount === 1) { + return { + code: 'errorSize', + message: + '비밀번호는 영문, 숫자, 특수문자 중 2가지 이상을 조합하여 10자리 이상 또는 3가지 이상을 조합하여 8자리 이상으로 설정해 주세요.' + } + } + + if (validcount === 2 && pw.length <= 10) { + return { + code: 'errorSize', + message: + '비밀번호는 영문, 숫자, 특수문자 중 2가지 이상을 조합하여 10자리 이상 또는 3가지 이상을 조합하여 8자리 이상으로 설정해 주세요.' + } + } + + // 영문, 숫자, 특수문자 조합 8자리 이상 + if (validcount === 3 && pw.length <= 8) { + return { + code: 'errorSize', + message: + '비밀번호는 영문, 숫자, 특수문자 중 2가지 이상을 조합하여 10자리 이상 또는 3가지 이상을 조합하여 8자리 이상으로 설정해 주세요.' + } + } + + // 사용자 아이디와 동일한 비밀번호 체크 + if (pw.indexOf(userId) > -1) { + return { + code: 'errorUsrId', + message: '비밀번호가 아이디와 동일합니다.' + } + } + + // 연속적인 숫자 또는 문자 (예. 1234, abcd) 비밀번호 체크 + var SamePass0 = 0 // 동일문자 카운트 + var SamePass1 = 0 // 연속성(+) 카운드 + var SamePass2 = 0 // 연속성(-) 카운드 + + var chrPass0 + var chrPass1 + + for (var i = 0; i < pw.length; i++) { + chrPass0 = pw.charAt(i) + chrPass1 = pw.charAt(i + 1) + + // 동일문자 카운트 + if (chrPass0 === chrPass1) { + SamePass0 = SamePass0 + 1 + } else { + SamePass0 = 0 + } + + // 연속성(+) 카운드 + if (chrPass0.charCodeAt(0) - chrPass1.charCodeAt(0) === 1) { + SamePass1 = SamePass1 + 1 + } else { + SamePass1 = 0 + } + + // 연속성(-) 카운드 + if (chrPass0.charCodeAt(0) - chrPass1.charCodeAt(0) === -1) { + SamePass2 = SamePass2 + 1 + } else { + SamePass2 = 0 + } + + if (SamePass0 > 2) { + return { + code: 'errorSame', + message: '동일한 문자를 4개이상 사용할 수 없습니다.' + } + } + + if (SamePass1 > 2 || SamePass2 > 2) { + return { + code: 'errorSame', + message: '연속적인 숫자 또는 문자를 4개이상 사용할 수 없습니다.' + } + } + } + + // if (SamePass1 > 1 || SamePass2 > 1) { + // return { + // code: 'errorSame', + // message: + // '연속된 문자열(1234 또는 4321, abcd, dcba 등)을
3자 이상 사용 할 수 없습니다.' + // } + // } + + // 휴대폰번호 국번 또는 뒷자리 번호 비밀번호 체크 + // var firstPhoneNumber = userPhoneNumber.substring(0, 3) + // var lastPhoneNumbe = userPhoneNumber.substring(7, 12) + + // // 앞번호 3 or 4자리 + // var middlePhoneNumber = userPhoneNumber + // .substring(3, userPhoneNumber.length) + // .substring(0, userPhoneNumber.length - 7) + // // 뒷번호 4자리 + // var lastPhoneNumbe = userPhoneNumber.substring( + // userPhoneNumber.length - 4, + // userPhoneNumber.length + // ) + + // 앞번호 3 or 4자리 + var middlePhoneNumber = this.mobileNumConverter(userPhoneNumber).split( + '-' + )[1] + // 뒷번호 4자리 + var lastPhoneNumbe = this.mobileNumConverter(userPhoneNumber).split('-')[2] + + if (pw.indexOf(middlePhoneNumber) > -1) { + return { + code: 'errorPhoneNumber', + message: '휴대폰번호 국번 또는 뒷자리 번호를 사용할수 없습니다.' + } + } + + if (pw.indexOf(lastPhoneNumbe) > -1) { + return { + code: 'errorPhoneNumber', + message: '휴대폰번호 국번 또는 뒷자리 번호를 사용할수 없습니다.' + } + } + return { + code: 'success', + message: '' + } + }, + isEmail(email) { + // 이메일 유효성 검증 + var regEmail = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ + + if (regEmail.test(email)) { + return true + } + + return false + }, + isPhoneNumber(phoneNumber) { + // 휴대폰 번호 유효성 검증 + var regPhoneNumber = /^(01[016789]{1}|02|0[3-9]{1}[0-9]{1})([0-9]{3,4})([0-9]{4})$/ + + if (regPhoneNumber.test(phoneNumber)) { + return true + } + + return false + }, + isUrl(urlAdd) { + // url 유효성 검증 + var regUrl = /^(https?):\/\/([0-9a-zA-Z|-]+\.)+[a-zA-Z]{2,6}(|:[0-9]+)?(\/\S*)?/ + + if (regUrl.test(urlAdd)) { + return true + } + + return false + }, + isIpAddress(ipAddr) { + var regIpAddr = /\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b/ + if (regIpAddr.test(ipAddr)) { + return true + } + return false + }, + checkBizRegNum(bizRegNum) { + // 사업자 등록번호 유효성 검증 + var checkID = new Array(1, 3, 7, 1, 3, 7, 1, 3, 5, 1) + var i + var chkSum = 0 + var c2 + var remander + bizRegNum = bizRegNum.replace(/-/gi, '') + + for (i = 0; i <= 7; i++) chkSum += checkID[i] * bizRegNum.charAt(i) + c2 = '0' + checkID[8] * bizRegNum.charAt(8) + c2 = c2.substring(c2.length - 2, c2.length) + chkSum += Math.floor(c2.charAt(0)) + Math.floor(c2.charAt(1)) + remander = (10 - (chkSum % 10)) % 10 + + if (Math.floor(bizRegNum.charAt(9)) === remander) return true + return false + }, + checkFileData(file, availableExts, maxSize) { + // 파일 확장자, 사이즈 유효성 검증 + // file - element ui 이용 시 file.raw, availableExt - ['jpg', 'png', 'gif'], maxSize - MB 단위로 숫자만 + // 사이즈만 확인 시 checkFileData(file, [], size) + // 확장자만 확인 시 checkFileData(file, ['jpg', 'png', 'gif']) + + // 파일 사이즈 검증 + if (maxSize) { + let maxSizeByte = maxSize * 1024 * 1024 // MB -> byte로 변환하여 비교 + if (file.size > maxSizeByte) { + return { + code: 'errorSize', + message: maxSize + 'MB 이하의 파일만 업로드 할 수 있습니다.' + } + } + } + + // 파일 확장자 검증 + if (availableExts.length > 0) { + let exts = availableExts.join('|').toLocaleLowerCase() + if ( + !new RegExp('(' + exts.replace(/\./g, '\\.') + ')$').test( + file.name.toLocaleLowerCase() + ) + ) { + return { + code: 'errorExt', + message: + availableExts.join(', ') + ' 형식의 파일만 업로드 할 수 있습니다.' + } + } + } + + return { + code: 'ok', + message: 'OK' + } + }, + convertFileSizeByte(value) { + // 파일 사이즈를 byte -> MB 변환 + let kb = 1 * 1024 + let mb = 1 * 1024 * 1024 + let result = value + if (value > mb) { + result = Intl.NumberFormat().format(parseInt(value / mb)) + 'MB' + } else if (value > kb) { + result = Intl.NumberFormat().format(parseInt(value / kb)) + 'KB' + } + return result + }, + keydownOnlyNum(e) { + let key = e.which ? e.which : event.keyCode + let actionKeyList = [8, 9, 37, 38, 39, 40, 46] + if ( + (key < 48 || key > 57) && + (key < 96 || key > 106) && + actionKeyList.indexOf(key) === -1 && + !e.ctrlKey + ) { + event.returnValue = false + e.preventDefault() + } + return true + }, + keyupOnlyNum(e) { + e.target.value = e.target.value.replace(/[^0-9]/g, '') + }, + keydownOnlyText(e) { + let key = e.which ? e.which : event.keyCode + if (key >= 65 && key <= 90 && (key >= 97 && key <= 122)) { + event.returnValue = false + e.preventDefault() + } + return true + }, + keyupOnlyText(e) { + e.target.value = e.target.value.replace(/[^ㄱ-ㅎ|ㅏ-ㅣ|가-힣|a-zA-Z]/g, '') + }, + keydownOnlyText2(e) { + let key = e.which ? e.which : event.keyCode + if (key >= 48 && key <= 57) { + event.returnValue = false + e.preventDefault() + } + return true + }, + keyupOnlyEng(e) { + e.target.value = e.target.value.replace(/[^a-zA-Z]/g, '') + }, + onlyText(e) { + let onlyText = /^[가-힣|a-z|A-Z|\*]+$/ + if (onlyText.test(e)) { + return false + } + return true + }, + makeObject(str) { + if (!str) str = '' + let units = str.split(';') + let resObj = {} + units.forEach(unit => { + let t = unit.split('=') + if (t.length !== 2) return + resObj[t[0]] = t[1] + }) + return resObj + }, + makeString(obj) { + if (!obj) obj = {} + let keys = Object.keys(obj) + let keyNValues = keys.map(key => { + return `${key}=${obj[key] ? obj[key] : ''}` + }) + return keyNValues.join(';') + }, + makeKeyNValueArray(str) { + if (!str) str = '' + let units = str.split(';') + let resObj = [] + units.forEach(unit => { + let t = unit.split('=') + if (t.length !== 2) return + resObj.push({ + key: t[0], + value: t[1] + }) + }) + return resObj + }, + makeKeyNValueString(arr) { + if (!arr || !Array.isArray(arr)) arr = [] + let keyNValues = arr.map(kv => { + return `${kv.key}=${kv.value}` + }) + return keyNValues.join(';') + }, + getPopupPositionLeft(popupWidth) { + return (document.body.clientWidth - popupWidth) / 2 + }, + /** + * Fullscreen 버튼 선택 시, content 영역을 확장한다. + */ + openFullscreen(target) { + if (target.requestFullscreen) { + target.requestFullscreen() + } else if (target.mozRequestFullScreen) { + /* Firefox */ + target.mozRequestFullScreen() + } else if (target.webkitRequestFullscreen) { + /* Chrome, Safari & Opera */ + target.webkitRequestFullscreen() + } else if (target.msRequestFullscreen) { + /* IE/Edge */ + target.msRequestFullscreen() + } + }, + /** + * 화면 사이즈를 조정하는 강제 이벤트 발생 + */ + callResizeEvent() { + var event + if (typeof Event === 'function') { + event = new Event('resize') + } else { + event = document.createEvent('Event') + event.initEvent('resize', true, true) + } + window.dispatchEvent(event) + }, + + // 사업자등록번호 '-' 추가 함수 + corpRegiNumConverter(corpRegiNum) { + if (!corpRegiNum) { + return '-' + } + corpRegiNum = corpRegiNum.replace(/\-/g, '') + let convertercorpRegiNum = '' + let len = [0, 3, 5] + let len2 = [3, 5, 10] + for (let i = 0; i < len.length; i++) { + if (i < 2) { + convertercorpRegiNum += corpRegiNum.substring(len[i], len2[i]) + '-' + } else { + convertercorpRegiNum += corpRegiNum.substring(len[i], len2[i]) + } + } + return convertercorpRegiNum + }, + + // 핸드폰번호 '-' 추가 함수 + mobileNumConverter(mobileNum) { + // mobileNum = mobileNum.replace(/\-/g, '') + // let converterMobileNum = '' + // let len = [0, 3, 7] + // let len2 = [3, 7, 11] + // for (let i = 0; i < len.length; i++) { + // if (i < 2) { + // converterMobileNum += mobileNum.substring(len[i], len2[i]) + '-' + // } else { + // converterMobileNum += mobileNum.substring(len[i], len2[i]) + // } + // } + let converterMobileNum = mobileNum.replace( + /(^02.{0}|^01.{1}|[0-9]{3})([0-9]+)([0-9]{4})/, + '$1-$2-$3' + ) + return converterMobileNum + }, + // 2자리수로 만들어줌 09,08... + pad(n, width) { + n = n + '' + return n.length >= width ? n : new Array(width - n.length + 1).join('0') + n + }, + convertDateFormat(dateString, format) { + if (typeof dateString !== 'string') { + return '' + } + + if (dateString.length === 0) { + return '' + } + + let date = dayjs(dateString) + return date.format(format) + }, + convertCamelcaseToSnakecase(string) { + return string.replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g, '$1_$2').toUpperCase() + }, + convertNumberWithComma(number) { + return number.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + }, + uniqBy(array, key) { + let uniq = [] + array.forEach(item => { + let filtered = uniq.filter(i => i[key] === item[key]) + if (filtered.length === 0) { + uniq.push(item) + } + }) + return uniq + }, + unescapeHtml(str) { + if (str == null) { + return '' + } + return str + .replace(/&/g, '&') + .replace(/</g, '<') + .replace(/>/g, '>') + .replace(/"/g, '"') + .replace(/'/g, "'") + .replace(/'/g, "'") + } +} + +export default jglibObj diff --git a/frontend/src/views/ErrorPage404.vue b/frontend/src/views/ErrorPage404.vue index 93ceffd..8e3d41d 100644 --- a/frontend/src/views/ErrorPage404.vue +++ b/frontend/src/views/ErrorPage404.vue @@ -1,37 +1,37 @@ - - - + + + diff --git a/frontend/src/views/ErrorPage500.vue b/frontend/src/views/ErrorPage500.vue index 4d22823..e5e6058 100644 --- a/frontend/src/views/ErrorPage500.vue +++ b/frontend/src/views/ErrorPage500.vue @@ -1,37 +1,37 @@ - - - \ No newline at end of file diff --git a/frontend/src/views/HubwebLayout.vue b/frontend/src/views/HubwebLayout.vue index 647d39f..fb21db6 100644 --- a/frontend/src/views/HubwebLayout.vue +++ b/frontend/src/views/HubwebLayout.vue @@ -1,78 +1,79 @@ - - - \ No newline at end of file diff --git a/frontend/yarn.lock b/frontend/yarn.lock deleted file mode 100644 index 5258790..0000000 --- a/frontend/yarn.lock +++ /dev/null @@ -1,10596 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.0.0-beta.35", "@babel/code-frame@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" - integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== - dependencies: - "@babel/highlight" "^7.10.4" - -"@babel/core@^7.0.0": - version "7.11.6" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.11.6.tgz#3a9455dc7387ff1bac45770650bc13ba04a15651" - integrity sha512-Wpcv03AGnmkgm6uS6k8iwhIwTrcP0m17TL1n1sy7qD0qelDu4XNeW0dN0mHfa+Gei211yDaLoEe/VlbXQzM4Bg== - dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/generator" "^7.11.6" - "@babel/helper-module-transforms" "^7.11.0" - "@babel/helpers" "^7.10.4" - "@babel/parser" "^7.11.5" - "@babel/template" "^7.10.4" - "@babel/traverse" "^7.11.5" - "@babel/types" "^7.11.5" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.1" - json5 "^2.1.2" - lodash "^4.17.19" - resolve "^1.3.2" - semver "^5.4.1" - source-map "^0.5.0" - -"@babel/generator@^7.11.5", "@babel/generator@^7.11.6": - version "7.11.6" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.11.6.tgz#b868900f81b163b4d464ea24545c61cbac4dc620" - integrity sha512-DWtQ1PV3r+cLbySoHrwn9RWEgKMBLLma4OBQloPRyDYvc5msJM9kvTLo1YnlJd1P/ZuKbdli3ijr5q3FvAF3uA== - dependencies: - "@babel/types" "^7.11.5" - jsesc "^2.5.1" - source-map "^0.5.0" - -"@babel/helper-annotate-as-pure@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz#5bf0d495a3f757ac3bda48b5bf3b3ba309c72ba3" - integrity sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA== - dependencies: - "@babel/types" "^7.10.4" - -"@babel/helper-builder-binary-assignment-operator-visitor@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz#bb0b75f31bf98cbf9ff143c1ae578b87274ae1a3" - integrity sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg== - dependencies: - "@babel/helper-explode-assignable-expression" "^7.10.4" - "@babel/types" "^7.10.4" - -"@babel/helper-create-class-features-plugin@^7.10.4", "@babel/helper-create-class-features-plugin@^7.10.5": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.5.tgz#9f61446ba80e8240b0a5c85c6fdac8459d6f259d" - integrity sha512-0nkdeijB7VlZoLT3r/mY3bUkw3T8WG/hNw+FATs/6+pG2039IJWjTYL0VTISqsNHMUTEnwbVnc89WIJX9Qed0A== - dependencies: - "@babel/helper-function-name" "^7.10.4" - "@babel/helper-member-expression-to-functions" "^7.10.5" - "@babel/helper-optimise-call-expression" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-replace-supers" "^7.10.4" - "@babel/helper-split-export-declaration" "^7.10.4" - -"@babel/helper-create-regexp-features-plugin@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.4.tgz#fdd60d88524659a0b6959c0579925e425714f3b8" - integrity sha512-2/hu58IEPKeoLF45DBwx3XFqsbCXmkdAay4spVr2x0jYgRxrSNp+ePwvSsy9g6YSaNDcKIQVPXk1Ov8S2edk2g== - dependencies: - "@babel/helper-annotate-as-pure" "^7.10.4" - "@babel/helper-regex" "^7.10.4" - regexpu-core "^4.7.0" - -"@babel/helper-define-map@^7.10.4": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz#b53c10db78a640800152692b13393147acb9bb30" - integrity sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ== - dependencies: - "@babel/helper-function-name" "^7.10.4" - "@babel/types" "^7.10.5" - lodash "^4.17.19" - -"@babel/helper-explode-assignable-expression@^7.10.4": - version "7.11.4" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.11.4.tgz#2d8e3470252cc17aba917ede7803d4a7a276a41b" - integrity sha512-ux9hm3zR4WV1Y3xXxXkdG/0gxF9nvI0YVmKVhvK9AfMoaQkemL3sJpXw+Xbz65azo8qJiEz2XVDUpK3KYhH3ZQ== - dependencies: - "@babel/types" "^7.10.4" - -"@babel/helper-function-name@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz#d2d3b20c59ad8c47112fa7d2a94bc09d5ef82f1a" - integrity sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ== - dependencies: - "@babel/helper-get-function-arity" "^7.10.4" - "@babel/template" "^7.10.4" - "@babel/types" "^7.10.4" - -"@babel/helper-get-function-arity@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz#98c1cbea0e2332f33f9a4661b8ce1505b2c19ba2" - integrity sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A== - dependencies: - "@babel/types" "^7.10.4" - -"@babel/helper-hoist-variables@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz#d49b001d1d5a68ca5e6604dda01a6297f7c9381e" - integrity sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA== - dependencies: - "@babel/types" "^7.10.4" - -"@babel/helper-member-expression-to-functions@^7.10.4", "@babel/helper-member-expression-to-functions@^7.10.5": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.11.0.tgz#ae69c83d84ee82f4b42f96e2a09410935a8f26df" - integrity sha512-JbFlKHFntRV5qKw3YC0CvQnDZ4XMwgzzBbld7Ly4Mj4cbFy3KywcR8NtNctRToMWJOVvLINJv525Gd6wwVEx/Q== - dependencies: - "@babel/types" "^7.11.0" - -"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz#4c5c54be04bd31670a7382797d75b9fa2e5b5620" - integrity sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw== - dependencies: - "@babel/types" "^7.10.4" - -"@babel/helper-module-transforms@^7.10.4", "@babel/helper-module-transforms@^7.10.5", "@babel/helper-module-transforms@^7.11.0": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.11.0.tgz#b16f250229e47211abdd84b34b64737c2ab2d359" - integrity sha512-02EVu8COMuTRO1TAzdMtpBPbe6aQ1w/8fePD2YgQmxZU4gpNWaL9gK3Jp7dxlkUlUCJOTaSeA+Hrm1BRQwqIhg== - dependencies: - "@babel/helper-module-imports" "^7.10.4" - "@babel/helper-replace-supers" "^7.10.4" - "@babel/helper-simple-access" "^7.10.4" - "@babel/helper-split-export-declaration" "^7.11.0" - "@babel/template" "^7.10.4" - "@babel/types" "^7.11.0" - lodash "^4.17.19" - -"@babel/helper-optimise-call-expression@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz#50dc96413d594f995a77905905b05893cd779673" - integrity sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg== - dependencies: - "@babel/types" "^7.10.4" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.8.0": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" - integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== - -"@babel/helper-regex@^7.10.4": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.10.5.tgz#32dfbb79899073c415557053a19bd055aae50ae0" - integrity sha512-68kdUAzDrljqBrio7DYAEgCoJHxppJOERHOgOrDN7WjOzP0ZQ1LsSDRXcemzVZaLvjaJsJEESb6qt+znNuENDg== - dependencies: - lodash "^4.17.19" - -"@babel/helper-remap-async-to-generator@^7.10.4": - version "7.11.4" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.11.4.tgz#4474ea9f7438f18575e30b0cac784045b402a12d" - integrity sha512-tR5vJ/vBa9wFy3m5LLv2faapJLnDFxNWff2SAYkSE4rLUdbp7CdObYFgI7wK4T/Mj4UzpjPwzR8Pzmr5m7MHGA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.10.4" - "@babel/helper-wrap-function" "^7.10.4" - "@babel/template" "^7.10.4" - "@babel/types" "^7.10.4" - -"@babel/helper-replace-supers@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz#d585cd9388ea06e6031e4cd44b6713cbead9e6cf" - integrity sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A== - dependencies: - "@babel/helper-member-expression-to-functions" "^7.10.4" - "@babel/helper-optimise-call-expression" "^7.10.4" - "@babel/traverse" "^7.10.4" - "@babel/types" "^7.10.4" - -"@babel/helper-simple-access@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz#0f5ccda2945277a2a7a2d3a821e15395edcf3461" - integrity sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw== - dependencies: - "@babel/template" "^7.10.4" - "@babel/types" "^7.10.4" - -"@babel/helper-skip-transparent-expression-wrappers@^7.11.0": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.11.0.tgz#eec162f112c2f58d3af0af125e3bb57665146729" - integrity sha512-0XIdiQln4Elglgjbwo9wuJpL/K7AGCY26kmEt0+pRP0TAj4jjyNq1MjoRvikrTVqKcx4Gysxt4cXvVFXP/JO2Q== - dependencies: - "@babel/types" "^7.11.0" - -"@babel/helper-split-export-declaration@^7.10.4", "@babel/helper-split-export-declaration@^7.11.0": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz#f8a491244acf6a676158ac42072911ba83ad099f" - integrity sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg== - dependencies: - "@babel/types" "^7.11.0" - -"@babel/helper-validator-identifier@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" - integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== - -"@babel/helper-wrap-function@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.10.4.tgz#8a6f701eab0ff39f765b5a1cfef409990e624b87" - integrity sha512-6py45WvEF0MhiLrdxtRjKjufwLL1/ob2qDJgg5JgNdojBAZSAKnAjkyOCNug6n+OBl4VW76XjvgSFTdaMcW0Ug== - dependencies: - "@babel/helper-function-name" "^7.10.4" - "@babel/template" "^7.10.4" - "@babel/traverse" "^7.10.4" - "@babel/types" "^7.10.4" - -"@babel/helpers@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.10.4.tgz#2abeb0d721aff7c0a97376b9e1f6f65d7a475044" - integrity sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA== - dependencies: - "@babel/template" "^7.10.4" - "@babel/traverse" "^7.10.4" - "@babel/types" "^7.10.4" - -"@babel/highlight@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" - integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== - dependencies: - "@babel/helper-validator-identifier" "^7.10.4" - chalk "^2.0.0" - js-tokens "^4.0.0" - -"@babel/parser@^7.10.4", "@babel/parser@^7.11.5", "@babel/parser@^7.7.0": - version "7.11.5" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.11.5.tgz#c7ff6303df71080ec7a4f5b8c003c58f1cf51037" - integrity sha512-X9rD8qqm695vgmeaQ4fvz/o3+Wk4ZzQvSHkDBgpYKxpD4qTAUm88ZKtHkVqIOsYFFbIQ6wQYhC6q7pjqVK0E0Q== - -"@babel/plugin-proposal-async-generator-functions@^7.2.0": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.5.tgz#3491cabf2f7c179ab820606cec27fed15e0e8558" - integrity sha512-cNMCVezQbrRGvXJwm9fu/1sJj9bHdGAgKodZdLqOQIpfoH3raqmRPBM17+lh7CzhiKRRBrGtZL9WcjxSoGYUSg== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-remap-async-to-generator" "^7.10.4" - "@babel/plugin-syntax-async-generators" "^7.8.0" - -"@babel/plugin-proposal-class-properties@^7.0.0": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.4.tgz#a33bf632da390a59c7a8c570045d1115cd778807" - integrity sha512-vhwkEROxzcHGNu2mzUC0OFFNXdZ4M23ib8aRRcJSsW8BZK9pQMD7QB7csl97NBbgGZO7ZyHUyKDnxzOaP4IrCg== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-proposal-decorators@^7.1.0": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.10.5.tgz#42898bba478bc4b1ae242a703a953a7ad350ffb4" - integrity sha512-Sc5TAQSZuLzgY0664mMDn24Vw2P8g/VhyLyGPaWiHahhgLqeZvcGeyBZOrJW0oSKIK2mvQ22a1ENXBIQLhrEiQ== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.10.5" - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-decorators" "^7.10.4" - -"@babel/plugin-proposal-json-strings@^7.2.0": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.4.tgz#593e59c63528160233bd321b1aebe0820c2341db" - integrity sha512-fCL7QF0Jo83uy1K0P2YXrfX11tj3lkpN7l4dMv9Y9VkowkhkQDwFHFd8IiwyK5MZjE8UpbgokkgtcReH88Abaw== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-json-strings" "^7.8.0" - -"@babel/plugin-proposal-object-rest-spread@^7.3.4": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.11.0.tgz#bd81f95a1f746760ea43b6c2d3d62b11790ad0af" - integrity sha512-wzch41N4yztwoRw0ak+37wxwJM2oiIiy6huGCoqkvSTA9acYWcPfn9Y4aJqmFFJ70KTJUu29f3DQ43uJ9HXzEA== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-object-rest-spread" "^7.8.0" - "@babel/plugin-transform-parameters" "^7.10.4" - -"@babel/plugin-proposal-optional-catch-binding@^7.2.0": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.4.tgz#31c938309d24a78a49d68fdabffaa863758554dd" - integrity sha512-LflT6nPh+GK2MnFiKDyLiqSqVHkQnVf7hdoAvyTnnKj9xB3docGRsdPuxp6qqqW19ifK3xgc9U5/FwrSaCNX5g== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" - -"@babel/plugin-proposal-unicode-property-regex@^7.2.0": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.4.tgz#4483cda53041ce3413b7fe2f00022665ddfaa75d" - integrity sha512-H+3fOgPnEXFL9zGYtKQe4IDOPKYlZdF1kqFDQRRb8PK4B8af1vAGK04tF5iQAAsui+mHNBQSAtd2/ndEDe9wuA== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-async-generators@^7.2.0", "@babel/plugin-syntax-async-generators@^7.8.0": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" - integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-decorators@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.10.4.tgz#6853085b2c429f9d322d02f5a635018cdeb2360c" - integrity sha512-2NaoC6fAk2VMdhY1eerkfHV+lVYC1u8b+jmRJISqANCJlTxYy19HGdIkkQtix2UtkcPuPu+IlDgrVseZnU03bw== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-dynamic-import@^7.0.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" - integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-json-strings@^7.2.0", "@babel/plugin-syntax-json-strings@^7.8.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" - integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-jsx@^7.0.0", "@babel/plugin-syntax-jsx@^7.2.0": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.10.4.tgz#39abaae3cbf710c4373d8429484e6ba21340166c" - integrity sha512-KCg9mio9jwiARCB7WAcQ7Y1q+qicILjoK8LP/VkPkEKaf5dkaZZK1EcTe91a3JJlZ3qy6L5s9X52boEYi8DM9g== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-object-rest-spread@^7.2.0", "@babel/plugin-syntax-object-rest-spread@^7.8.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" - integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-catch-binding@^7.2.0", "@babel/plugin-syntax-optional-catch-binding@^7.8.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" - integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-transform-arrow-functions@^7.2.0": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.4.tgz#e22960d77e697c74f41c501d44d73dbf8a6a64cd" - integrity sha512-9J/oD1jV0ZCBcgnoFWFq1vJd4msoKb/TCpGNFyyLt0zABdcvgK3aYikZ8HjzB14c26bc7E3Q1yugpwGy2aTPNA== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-async-to-generator@^7.3.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.4.tgz#41a5017e49eb6f3cda9392a51eef29405b245a37" - integrity sha512-F6nREOan7J5UXTLsDsZG3DXmZSVofr2tGNwfdrVwkDWHfQckbQXnXSPfD7iO+c/2HGqycwyLST3DnZ16n+cBJQ== - dependencies: - "@babel/helper-module-imports" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-remap-async-to-generator" "^7.10.4" - -"@babel/plugin-transform-block-scoped-functions@^7.2.0": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.4.tgz#1afa595744f75e43a91af73b0d998ecfe4ebc2e8" - integrity sha512-WzXDarQXYYfjaV1szJvN3AD7rZgZzC1JtjJZ8dMHUyiK8mxPRahynp14zzNjU3VkPqPsO38CzxiWO1c9ARZ8JA== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-block-scoping@^7.3.4": - version "7.11.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.11.1.tgz#5b7efe98852bef8d652c0b28144cd93a9e4b5215" - integrity sha512-00dYeDE0EVEHuuM+26+0w/SCL0BH2Qy7LwHuI4Hi4MH5gkC8/AqMN5uWFJIsoXZrAphiMm1iXzBw6L2T+eA0ew== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-classes@^7.3.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.4.tgz#405136af2b3e218bc4a1926228bc917ab1a0adc7" - integrity sha512-2oZ9qLjt161dn1ZE0Ms66xBncQH4In8Sqw1YWgBUZuGVJJS5c0OFZXL6dP2MRHrkU/eKhWg8CzFJhRQl50rQxA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.10.4" - "@babel/helper-define-map" "^7.10.4" - "@babel/helper-function-name" "^7.10.4" - "@babel/helper-optimise-call-expression" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-replace-supers" "^7.10.4" - "@babel/helper-split-export-declaration" "^7.10.4" - globals "^11.1.0" - -"@babel/plugin-transform-computed-properties@^7.2.0": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.4.tgz#9ded83a816e82ded28d52d4b4ecbdd810cdfc0eb" - integrity sha512-JFwVDXcP/hM/TbyzGq3l/XWGut7p46Z3QvqFMXTfk6/09m7xZHJUN9xHfsv7vqqD4YnfI5ueYdSJtXqqBLyjBw== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-destructuring@^7.2.0": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.4.tgz#70ddd2b3d1bea83d01509e9bb25ddb3a74fc85e5" - integrity sha512-+WmfvyfsyF603iPa6825mq6Qrb7uLjTOsa3XOFzlYcYDHSS4QmpOWOL0NNBY5qMbvrcf3tq0Cw+v4lxswOBpgA== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-dotall-regex@^7.2.0": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.4.tgz#469c2062105c1eb6a040eaf4fac4b488078395ee" - integrity sha512-ZEAVvUTCMlMFAbASYSVQoxIbHm2OkG2MseW6bV2JjIygOjdVv8tuxrCTzj1+Rynh7ODb8GivUy7dzEXzEhuPaA== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-duplicate-keys@^7.2.0": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.4.tgz#697e50c9fee14380fe843d1f306b295617431e47" - integrity sha512-GL0/fJnmgMclHiBTTWXNlYjYsA7rDrtsazHG6mglaGSTh0KsrW04qml+Bbz9FL0LcJIRwBWL5ZqlNHKTkU3xAA== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-exponentiation-operator@^7.2.0": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.4.tgz#5ae338c57f8cf4001bdb35607ae66b92d665af2e" - integrity sha512-S5HgLVgkBcRdyQAHbKj+7KyuWx8C6t5oETmUuwz1pt3WTWJhsUV0WIIXuVvfXMxl/QQyHKlSCNNtaIamG8fysw== - dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-for-of@^7.2.0": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.4.tgz#c08892e8819d3a5db29031b115af511dbbfebae9" - integrity sha512-ItdQfAzu9AlEqmusA/65TqJ79eRcgGmpPPFvBnGILXZH975G0LNjP1yjHvGgfuCxqrPPueXOPe+FsvxmxKiHHQ== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-function-name@^7.2.0": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.4.tgz#6a467880e0fc9638514ba369111811ddbe2644b7" - integrity sha512-OcDCq2y5+E0dVD5MagT5X+yTRbcvFjDI2ZVAottGH6tzqjx/LKpgkUepu3hp/u4tZBzxxpNGwLsAvGBvQ2mJzg== - dependencies: - "@babel/helper-function-name" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-literals@^7.2.0": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.4.tgz#9f42ba0841100a135f22712d0e391c462f571f3c" - integrity sha512-Xd/dFSTEVuUWnyZiMu76/InZxLTYilOSr1UlHV+p115Z/Le2Fi1KXkJUYz0b42DfndostYlPub3m8ZTQlMaiqQ== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-modules-amd@^7.2.0": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.5.tgz#1b9cddaf05d9e88b3aad339cb3e445c4f020a9b1" - integrity sha512-elm5uruNio7CTLFItVC/rIzKLfQ17+fX7EVz5W0TMgIHFo1zY0Ozzx+lgwhL4plzl8OzVn6Qasx5DeEFyoNiRw== - dependencies: - "@babel/helper-module-transforms" "^7.10.5" - "@babel/helper-plugin-utils" "^7.10.4" - babel-plugin-dynamic-import-node "^2.3.3" - -"@babel/plugin-transform-modules-commonjs@^7.2.0": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.4.tgz#66667c3eeda1ebf7896d41f1f16b17105a2fbca0" - integrity sha512-Xj7Uq5o80HDLlW64rVfDBhao6OX89HKUmb+9vWYaLXBZOma4gA6tw4Ni1O5qVDoZWUV0fxMYA0aYzOawz0l+1w== - dependencies: - "@babel/helper-module-transforms" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-simple-access" "^7.10.4" - babel-plugin-dynamic-import-node "^2.3.3" - -"@babel/plugin-transform-modules-systemjs@^7.3.4": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.5.tgz#6270099c854066681bae9e05f87e1b9cadbe8c85" - integrity sha512-f4RLO/OL14/FP1AEbcsWMzpbUz6tssRaeQg11RH1BP/XnPpRoVwgeYViMFacnkaw4k4wjRSjn3ip1Uw9TaXuMw== - dependencies: - "@babel/helper-hoist-variables" "^7.10.4" - "@babel/helper-module-transforms" "^7.10.5" - "@babel/helper-plugin-utils" "^7.10.4" - babel-plugin-dynamic-import-node "^2.3.3" - -"@babel/plugin-transform-modules-umd@^7.2.0": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.4.tgz#9a8481fe81b824654b3a0b65da3df89f3d21839e" - integrity sha512-mohW5q3uAEt8T45YT7Qc5ws6mWgJAaL/8BfWD9Dodo1A3RKWli8wTS+WiQ/knF+tXlPirW/1/MqzzGfCExKECA== - dependencies: - "@babel/helper-module-transforms" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-named-capturing-groups-regex@^7.3.0": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.10.4.tgz#78b4d978810b6f3bcf03f9e318f2fc0ed41aecb6" - integrity sha512-V6LuOnD31kTkxQPhKiVYzYC/Jgdq53irJC/xBSmqcNcqFGV+PER4l6rU5SH2Vl7bH9mLDHcc0+l9HUOe4RNGKA== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.10.4" - -"@babel/plugin-transform-new-target@^7.0.0": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.4.tgz#9097d753cb7b024cb7381a3b2e52e9513a9c6888" - integrity sha512-YXwWUDAH/J6dlfwqlWsztI2Puz1NtUAubXhOPLQ5gjR/qmQ5U96DY4FQO8At33JN4XPBhrjB8I4eMmLROjjLjw== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-object-super@^7.2.0": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.4.tgz#d7146c4d139433e7a6526f888c667e314a093894" - integrity sha512-5iTw0JkdRdJvr7sY0vHqTpnruUpTea32JHmq/atIWqsnNussbRzjEDyWep8UNztt1B5IusBYg8Irb0bLbiEBCQ== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-replace-supers" "^7.10.4" - -"@babel/plugin-transform-parameters@^7.10.4", "@babel/plugin-transform-parameters@^7.2.0": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.5.tgz#59d339d58d0b1950435f4043e74e2510005e2c4a" - integrity sha512-xPHwUj5RdFV8l1wuYiu5S9fqWGM2DrYc24TMvUiRrPVm+SM3XeqU9BcokQX/kEUe+p2RBwy+yoiR1w/Blq6ubw== - dependencies: - "@babel/helper-get-function-arity" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-regenerator@^7.3.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.4.tgz#2015e59d839074e76838de2159db421966fd8b63" - integrity sha512-3thAHwtor39A7C04XucbMg17RcZ3Qppfxr22wYzZNcVIkPHfpM9J0SO8zuCV6SZa265kxBJSrfKTvDCYqBFXGw== - dependencies: - regenerator-transform "^0.14.2" - -"@babel/plugin-transform-runtime@^7.4.0": - version "7.11.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.11.5.tgz#f108bc8e0cf33c37da031c097d1df470b3a293fc" - integrity sha512-9aIoee+EhjySZ6vY5hnLjigHzunBlscx9ANKutkeWTJTx6m5Rbq6Ic01tLvO54lSusR+BxV7u4UDdCmXv5aagg== - dependencies: - "@babel/helper-module-imports" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - resolve "^1.8.1" - semver "^5.5.1" - -"@babel/plugin-transform-shorthand-properties@^7.2.0": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.4.tgz#9fd25ec5cdd555bb7f473e5e6ee1c971eede4dd6" - integrity sha512-AC2K/t7o07KeTIxMoHneyX90v3zkm5cjHJEokrPEAGEy3UCp8sLKfnfOIGdZ194fyN4wfX/zZUWT9trJZ0qc+Q== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-spread@^7.2.0": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.11.0.tgz#fa84d300f5e4f57752fe41a6d1b3c554f13f17cc" - integrity sha512-UwQYGOqIdQJe4aWNyS7noqAnN2VbaczPLiEtln+zPowRNlD+79w3oi2TWfYe0eZgd+gjZCbsydN7lzWysDt+gw== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-skip-transparent-expression-wrappers" "^7.11.0" - -"@babel/plugin-transform-sticky-regex@^7.2.0": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.4.tgz#8f3889ee8657581130a29d9cc91d7c73b7c4a28d" - integrity sha512-Ddy3QZfIbEV0VYcVtFDCjeE4xwVTJWTmUtorAJkn6u/92Z/nWJNV+mILyqHKrUxXYKA2EoCilgoPePymKL4DvQ== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-regex" "^7.10.4" - -"@babel/plugin-transform-template-literals@^7.2.0": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.5.tgz#78bc5d626a6642db3312d9d0f001f5e7639fde8c" - integrity sha512-V/lnPGIb+KT12OQikDvgSuesRX14ck5FfJXt6+tXhdkJ+Vsd0lDCVtF6jcB4rNClYFzaB2jusZ+lNISDk2mMMw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-typeof-symbol@^7.2.0": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.4.tgz#9509f1a7eec31c4edbffe137c16cc33ff0bc5bfc" - integrity sha512-QqNgYwuuW0y0H+kUE/GWSR45t/ccRhe14Fs/4ZRouNNQsyd4o3PG4OtHiIrepbM2WKUBDAXKCAK/Lk4VhzTaGA== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-unicode-regex@^7.2.0": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.4.tgz#e56d71f9282fac6db09c82742055576d5e6d80a8" - integrity sha512-wNfsc4s8N2qnIwpO/WP2ZiSyjfpTamT2C9V9FDH/Ljub9zw6P3SjkXcFmc0RQUt96k2fmIvtla2MMjgTwIAC+A== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/preset-env@^7.0.0 < 7.4.0": - version "7.3.4" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.3.4.tgz#887cf38b6d23c82f19b5135298bdb160062e33e1" - integrity sha512-2mwqfYMK8weA0g0uBKOt4FE3iEodiHy9/CW0b+nWXcbL+pGzLx8ESYc+j9IIxr6LTDHWKgPm71i9smo02bw+gA== - dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-proposal-async-generator-functions" "^7.2.0" - "@babel/plugin-proposal-json-strings" "^7.2.0" - "@babel/plugin-proposal-object-rest-spread" "^7.3.4" - "@babel/plugin-proposal-optional-catch-binding" "^7.2.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.2.0" - "@babel/plugin-syntax-async-generators" "^7.2.0" - "@babel/plugin-syntax-json-strings" "^7.2.0" - "@babel/plugin-syntax-object-rest-spread" "^7.2.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" - "@babel/plugin-transform-arrow-functions" "^7.2.0" - "@babel/plugin-transform-async-to-generator" "^7.3.4" - "@babel/plugin-transform-block-scoped-functions" "^7.2.0" - "@babel/plugin-transform-block-scoping" "^7.3.4" - "@babel/plugin-transform-classes" "^7.3.4" - "@babel/plugin-transform-computed-properties" "^7.2.0" - "@babel/plugin-transform-destructuring" "^7.2.0" - "@babel/plugin-transform-dotall-regex" "^7.2.0" - "@babel/plugin-transform-duplicate-keys" "^7.2.0" - "@babel/plugin-transform-exponentiation-operator" "^7.2.0" - "@babel/plugin-transform-for-of" "^7.2.0" - "@babel/plugin-transform-function-name" "^7.2.0" - "@babel/plugin-transform-literals" "^7.2.0" - "@babel/plugin-transform-modules-amd" "^7.2.0" - "@babel/plugin-transform-modules-commonjs" "^7.2.0" - "@babel/plugin-transform-modules-systemjs" "^7.3.4" - "@babel/plugin-transform-modules-umd" "^7.2.0" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.3.0" - "@babel/plugin-transform-new-target" "^7.0.0" - "@babel/plugin-transform-object-super" "^7.2.0" - "@babel/plugin-transform-parameters" "^7.2.0" - "@babel/plugin-transform-regenerator" "^7.3.4" - "@babel/plugin-transform-shorthand-properties" "^7.2.0" - "@babel/plugin-transform-spread" "^7.2.0" - "@babel/plugin-transform-sticky-regex" "^7.2.0" - "@babel/plugin-transform-template-literals" "^7.2.0" - "@babel/plugin-transform-typeof-symbol" "^7.2.0" - "@babel/plugin-transform-unicode-regex" "^7.2.0" - browserslist "^4.3.4" - invariant "^2.2.2" - js-levenshtein "^1.1.3" - semver "^5.3.0" - -"@babel/runtime-corejs2@^7.2.0": - version "7.11.2" - resolved "https://registry.yarnpkg.com/@babel/runtime-corejs2/-/runtime-corejs2-7.11.2.tgz#700a03945ebad0d31ba6690fc8a6bcc9040faa47" - integrity sha512-AC/ciV28adSSpEkBglONBWq4/Lvm6GAZuxIoyVtsnUpZMl0bxLtoChEnYAkP+47KyOCayZanojtflUEUJtR/6Q== - dependencies: - core-js "^2.6.5" - regenerator-runtime "^0.13.4" - -"@babel/runtime@^7.0.0", "@babel/runtime@^7.8.4": - version "7.11.2" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.11.2.tgz#f549c13c754cc40b87644b9fa9f09a6a95fe0736" - integrity sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw== - dependencies: - regenerator-runtime "^0.13.4" - -"@babel/template@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.4.tgz#3251996c4200ebc71d1a8fc405fba940f36ba278" - integrity sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA== - dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/parser" "^7.10.4" - "@babel/types" "^7.10.4" - -"@babel/traverse@^7.10.4", "@babel/traverse@^7.11.5", "@babel/traverse@^7.7.0": - version "7.11.5" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.11.5.tgz#be777b93b518eb6d76ee2e1ea1d143daa11e61c3" - integrity sha512-EjiPXt+r7LiCZXEfRpSJd+jUMnBd4/9OUv7Nx3+0u9+eimMwJmG0Q98lw4/289JCoxSE8OolDMNZaaF/JZ69WQ== - dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/generator" "^7.11.5" - "@babel/helper-function-name" "^7.10.4" - "@babel/helper-split-export-declaration" "^7.11.0" - "@babel/parser" "^7.11.5" - "@babel/types" "^7.11.5" - debug "^4.1.0" - globals "^11.1.0" - lodash "^4.17.19" - -"@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.11.0", "@babel/types@^7.11.5", "@babel/types@^7.7.0": - version "7.11.5" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.11.5.tgz#d9de577d01252d77c6800cee039ee64faf75662d" - integrity sha512-bvM7Qz6eKnJVFIn+1LPtjlBFPVN5jNDc1XmN15vWe7Q3DPBufWWsLiIvUu7xW87uTG6QoggpIDnUgLQvPheU+Q== - dependencies: - "@babel/helper-validator-identifier" "^7.10.4" - lodash "^4.17.19" - to-fast-properties "^2.0.0" - -"@hapi/address@2.x.x": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@hapi/address/-/address-2.1.4.tgz#5d67ed43f3fd41a69d4b9ff7b56e7c0d1d0a81e5" - integrity sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ== - -"@hapi/bourne@1.x.x": - version "1.3.2" - resolved "https://registry.yarnpkg.com/@hapi/bourne/-/bourne-1.3.2.tgz#0a7095adea067243ce3283e1b56b8a8f453b242a" - integrity sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA== - -"@hapi/hoek@8.x.x", "@hapi/hoek@^8.3.0": - version "8.5.1" - resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-8.5.1.tgz#fde96064ca446dec8c55a8c2f130957b070c6e06" - integrity sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow== - -"@hapi/joi@^15.0.1": - version "15.1.1" - resolved "https://registry.yarnpkg.com/@hapi/joi/-/joi-15.1.1.tgz#c675b8a71296f02833f8d6d243b34c57b8ce19d7" - integrity sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ== - dependencies: - "@hapi/address" "2.x.x" - "@hapi/bourne" "1.x.x" - "@hapi/hoek" "8.x.x" - "@hapi/topo" "3.x.x" - -"@hapi/topo@3.x.x": - version "3.1.6" - resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-3.1.6.tgz#68d935fa3eae7fdd5ab0d7f953f3205d8b2bfc29" - integrity sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ== - dependencies: - "@hapi/hoek" "^8.3.0" - -"@intervolga/optimize-cssnano-plugin@^1.0.5": - version "1.0.6" - resolved "https://registry.yarnpkg.com/@intervolga/optimize-cssnano-plugin/-/optimize-cssnano-plugin-1.0.6.tgz#be7c7846128b88f6a9b1d1261a0ad06eb5c0fdf8" - integrity sha512-zN69TnSr0viRSU6cEDIcuPcP67QcpQ6uHACg58FiN9PDrU6SLyGW3MR4tiISbYxy1kDWAVPwD+XwQTWE5cigAA== - dependencies: - cssnano "^4.0.0" - cssnano-preset-default "^4.0.0" - postcss "^7.0.0" - -"@mrmlnc/readdir-enhanced@^2.2.1": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" - integrity sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g== - dependencies: - call-me-maybe "^1.0.1" - glob-to-regexp "^0.3.0" - -"@nodelib/fs.stat@^1.1.2": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b" - integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw== - -"@soda/friendly-errors-webpack-plugin@^1.7.1": - version "1.7.1" - resolved "https://registry.yarnpkg.com/@soda/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.7.1.tgz#706f64bcb4a8b9642b48ae3ace444c70334d615d" - integrity sha512-cWKrGaFX+rfbMrAxVv56DzhPNqOJPZuNIS2HGMELtgGzb+vsMzyig9mml5gZ/hr2BGtSLV+dP2LUEuAL8aG2mQ== - dependencies: - chalk "^1.1.3" - error-stack-parser "^2.0.0" - string-width "^2.0.0" - -"@toast-ui/vue-grid@2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@toast-ui/vue-grid/-/vue-grid-2.1.0.tgz#f1b75d223b943aad95c9f52db503bdc4158018a1" - integrity sha512-CT7f5rF86E7r8IgXQDmwYHgPSWFDqYrJKvv8M38l5f+A3zdS/sLvMroPxYUbFD0KBiq3HOOpNQ1VzLEaCvzfiQ== - dependencies: - tui-grid "^4.5.0" - -"@types/glob@^7.1.1": - version "7.1.3" - resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183" - integrity sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w== - dependencies: - "@types/minimatch" "*" - "@types/node" "*" - -"@types/json-schema@^7.0.5": - version "7.0.6" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.6.tgz#f4c7ec43e81b319a9815115031709f26987891f0" - integrity sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw== - -"@types/json-schema@^7.0.6": - version "7.0.7" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad" - integrity sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA== - -"@types/minimatch@*": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" - integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== - -"@types/node@*": - version "14.11.4" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.11.4.tgz#bf6ea3d5f7b1504232b11acbc40e1ac4c750d3b9" - integrity sha512-KmoLCUeW2cWKkEOQ0gQcECuqOc0g7B7zcmRPQNMT4ntNm0luKv3BTLcqIyWpTxkhLDzLTdMus11j/6DROaZdPw== - -"@types/normalize-package-data@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" - integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== - -"@types/q@^1.5.1": - version "1.5.4" - resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.4.tgz#15925414e0ad2cd765bfef58842f7e26a7accb24" - integrity sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug== - -"@types/strip-bom@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/strip-bom/-/strip-bom-3.0.0.tgz#14a8ec3956c2e81edb7520790aecf21c290aebd2" - integrity sha1-FKjsOVbC6B7bdSB5CuzyHCkK69I= - -"@types/strip-json-comments@0.0.30": - version "0.0.30" - resolved "https://registry.yarnpkg.com/@types/strip-json-comments/-/strip-json-comments-0.0.30.tgz#9aa30c04db212a9a0649d6ae6fd50accc40748a1" - integrity sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ== - -"@vue/babel-helper-vue-jsx-merge-props@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.0.0.tgz#048fe579958da408fb7a8b2a3ec050b50a661040" - integrity sha512-6tyf5Cqm4m6v7buITuwS+jHzPlIPxbFzEhXR5JGZpbrvOcp1hiQKckd305/3C7C36wFekNTQSxAtgeM0j0yoUw== - -"@vue/babel-plugin-transform-vue-jsx@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@vue/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-1.1.2.tgz#c0a3e6efc022e75e4247b448a8fc6b86f03e91c0" - integrity sha512-YfdaoSMvD1nj7+DsrwfTvTnhDXI7bsuh+Y5qWwvQXlD24uLgnsoww3qbiZvWf/EoviZMrvqkqN4CBw0W3BWUTQ== - dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/plugin-syntax-jsx" "^7.2.0" - "@vue/babel-helper-vue-jsx-merge-props" "^1.0.0" - html-tags "^2.0.0" - lodash.kebabcase "^4.1.1" - svg-tags "^1.0.0" - -"@vue/babel-preset-app@^3.12.1": - version "3.12.1" - resolved "https://registry.yarnpkg.com/@vue/babel-preset-app/-/babel-preset-app-3.12.1.tgz#24c477052f078f30fdb7735103b14dd1fa2cbfe1" - integrity sha512-Zjy5jQaikV1Pz+ri0YgXFS7q4/5wCxB5tRkDOEIt5+4105u0Feb/pvH20nVL6nx9GyXrECFfcm7Yxr/z++OaPQ== - dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/plugin-proposal-class-properties" "^7.0.0" - "@babel/plugin-proposal-decorators" "^7.1.0" - "@babel/plugin-syntax-dynamic-import" "^7.0.0" - "@babel/plugin-syntax-jsx" "^7.0.0" - "@babel/plugin-transform-runtime" "^7.4.0" - "@babel/preset-env" "^7.0.0 < 7.4.0" - "@babel/runtime" "^7.0.0" - "@babel/runtime-corejs2" "^7.2.0" - "@vue/babel-preset-jsx" "^1.0.0" - babel-plugin-dynamic-import-node "^2.2.0" - babel-plugin-module-resolver "3.2.0" - core-js "^2.6.5" - -"@vue/babel-preset-jsx@^1.0.0": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@vue/babel-preset-jsx/-/babel-preset-jsx-1.1.2.tgz#2e169eb4c204ea37ca66c2ea85a880bfc99d4f20" - integrity sha512-zDpVnFpeC9YXmvGIDSsKNdL7qCG2rA3gjywLYHPCKDT10erjxF4U+6ay9X6TW5fl4GsDlJp9bVfAVQAAVzxxvQ== - dependencies: - "@vue/babel-helper-vue-jsx-merge-props" "^1.0.0" - "@vue/babel-plugin-transform-vue-jsx" "^1.1.2" - "@vue/babel-sugar-functional-vue" "^1.1.2" - "@vue/babel-sugar-inject-h" "^1.1.2" - "@vue/babel-sugar-v-model" "^1.1.2" - "@vue/babel-sugar-v-on" "^1.1.2" - -"@vue/babel-sugar-functional-vue@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@vue/babel-sugar-functional-vue/-/babel-sugar-functional-vue-1.1.2.tgz#f7e24fba09e6f1ee70104560a8808057555f1a9a" - integrity sha512-YhmdJQSVEFF5ETJXzrMpj0nkCXEa39TvVxJTuVjzvP2rgKhdMmQzlJuMv/HpadhZaRVMCCF3AEjjJcK5q/cYzQ== - dependencies: - "@babel/plugin-syntax-jsx" "^7.2.0" - -"@vue/babel-sugar-inject-h@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@vue/babel-sugar-inject-h/-/babel-sugar-inject-h-1.1.2.tgz#8a5276b6d8e2ed16ffc8078aad94236274e6edf0" - integrity sha512-VRSENdTvD5htpnVp7i7DNuChR5rVMcORdXjvv5HVvpdKHzDZAYiLSD+GhnhxLm3/dMuk8pSzV+k28ECkiN5m8w== - dependencies: - "@babel/plugin-syntax-jsx" "^7.2.0" - -"@vue/babel-sugar-v-model@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@vue/babel-sugar-v-model/-/babel-sugar-v-model-1.1.2.tgz#1ff6fd1b800223fc9cb1e84dceb5e52d737a8192" - integrity sha512-vLXPvNq8vDtt0u9LqFdpGM9W9IWDmCmCyJXuozlq4F4UYVleXJ2Fa+3JsnTZNJcG+pLjjfnEGHci2339Kj5sGg== - dependencies: - "@babel/plugin-syntax-jsx" "^7.2.0" - "@vue/babel-helper-vue-jsx-merge-props" "^1.0.0" - "@vue/babel-plugin-transform-vue-jsx" "^1.1.2" - camelcase "^5.0.0" - html-tags "^2.0.0" - svg-tags "^1.0.0" - -"@vue/babel-sugar-v-on@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@vue/babel-sugar-v-on/-/babel-sugar-v-on-1.1.2.tgz#b2ef99b8f2fab09fbead25aad70ef42e1cf5b13b" - integrity sha512-T8ZCwC8Jp2uRtcZ88YwZtZXe7eQrJcfRq0uTFy6ShbwYJyz5qWskRFoVsdTi9o0WEhmQXxhQUewodOSCUPVmsQ== - dependencies: - "@babel/plugin-syntax-jsx" "^7.2.0" - "@vue/babel-plugin-transform-vue-jsx" "^1.1.2" - camelcase "^5.0.0" - -"@vue/cli-overlay@^3.12.1": - version "3.12.1" - resolved "https://registry.yarnpkg.com/@vue/cli-overlay/-/cli-overlay-3.12.1.tgz#bdfde8f7123561ab06e4e4c60b854cc5092f5ab1" - integrity sha512-Bym92EN+lj+cNRN2ozbYyH+V8DMXWGbCDUk+hiJ4EYDBZfBkZKvalk1/mOBFwyxiopnnbOEBAAhL/UuMQ1xARg== - -"@vue/cli-plugin-babel@^3.9.0": - version "3.12.1" - resolved "https://registry.yarnpkg.com/@vue/cli-plugin-babel/-/cli-plugin-babel-3.12.1.tgz#9a79159de8cd086b013fa6d78a39830b2e2ec706" - integrity sha512-Zetvz8PikLCGomeKOKu8pC9YQ7cfxs7pGpvEOzaxGdhMnebhjAYR6i6dOB57A6N5lhxQksXCtYTv26QgfiIpdg== - dependencies: - "@babel/core" "^7.0.0" - "@vue/babel-preset-app" "^3.12.1" - "@vue/cli-shared-utils" "^3.12.1" - babel-loader "^8.0.5" - webpack "^4.0.0" - -"@vue/cli-plugin-eslint@^3.9.0": - version "3.12.1" - resolved "https://registry.yarnpkg.com/@vue/cli-plugin-eslint/-/cli-plugin-eslint-3.12.1.tgz#302c463867f38e790bb996eafdf7159c782dc8cf" - integrity sha512-tVTZlEZsy3sQbO4LLWFK11yzlWwqVAqaM+IY+BeWHITBzEJKh2KmouG+x6x/reXiU3qROsMJ4Ej3Hs8buSMWyQ== - dependencies: - "@vue/cli-shared-utils" "^3.12.1" - babel-eslint "^10.0.1" - eslint-loader "^2.1.2" - globby "^9.2.0" - webpack "^4.0.0" - yorkie "^2.0.0" - optionalDependencies: - eslint "^4.19.1" - eslint-plugin-vue "^4.7.1" - -"@vue/cli-plugin-unit-jest@^3.9.0": - version "3.12.1" - resolved "https://registry.yarnpkg.com/@vue/cli-plugin-unit-jest/-/cli-plugin-unit-jest-3.12.1.tgz#b7edd30701191deaa9d53cea752b8d72b825d640" - integrity sha512-Cc9Kq4+RaUN1yfNVb7c9hVDNXo2tFTWHgwooCL3XWMu2iL+pDawQt8ZeSqauDY95JoMeEAVy2xBimjL+7jo/jw== - dependencies: - "@vue/cli-shared-utils" "^3.12.1" - babel-jest "^23.6.0" - babel-plugin-transform-es2015-modules-commonjs "^6.26.2" - jest "^23.6.0" - jest-serializer-vue "^2.0.2" - jest-transform-stub "^2.0.0" - jest-watch-typeahead "0.2.1" - vue-jest "^3.0.4" - -"@vue/cli-service@^3.9.0": - version "3.12.1" - resolved "https://registry.yarnpkg.com/@vue/cli-service/-/cli-service-3.12.1.tgz#13220b1c189254e7c003390df329086f9b6e77e6" - integrity sha512-PDxNrTGnSKzeV1ruFlsRIAO8JcPizwT0EJXq9GeyooU+p+sOkv7aKkCBJQVYNjZapD1NOGWx6CvAAC/wAW+gew== - dependencies: - "@intervolga/optimize-cssnano-plugin" "^1.0.5" - "@soda/friendly-errors-webpack-plugin" "^1.7.1" - "@vue/cli-overlay" "^3.12.1" - "@vue/cli-shared-utils" "^3.12.1" - "@vue/component-compiler-utils" "^3.0.0" - "@vue/preload-webpack-plugin" "^1.1.0" - "@vue/web-component-wrapper" "^1.2.0" - acorn "^6.1.1" - acorn-walk "^6.1.1" - address "^1.0.3" - autoprefixer "^9.5.1" - browserslist "^4.5.4" - cache-loader "^2.0.1" - case-sensitive-paths-webpack-plugin "^2.2.0" - chalk "^2.4.2" - cli-highlight "^2.1.0" - clipboardy "^2.0.0" - cliui "^5.0.0" - copy-webpack-plugin "^4.6.0" - css-loader "^1.0.1" - cssnano "^4.1.10" - current-script-polyfill "^1.0.0" - debug "^4.1.1" - default-gateway "^5.0.2" - dotenv "^7.0.0" - dotenv-expand "^5.1.0" - escape-string-regexp "^1.0.5" - file-loader "^3.0.1" - fs-extra "^7.0.1" - globby "^9.2.0" - hash-sum "^1.0.2" - html-webpack-plugin "^3.2.0" - launch-editor-middleware "^2.2.1" - lodash.defaultsdeep "^4.6.1" - lodash.mapvalues "^4.6.0" - lodash.transform "^4.6.0" - mini-css-extract-plugin "^0.8.0" - minimist "^1.2.0" - ora "^3.4.0" - portfinder "^1.0.20" - postcss-loader "^3.0.0" - read-pkg "^5.0.0" - semver "^6.0.0" - slash "^2.0.0" - source-map-url "^0.4.0" - ssri "^6.0.1" - string.prototype.padend "^3.0.0" - terser-webpack-plugin "^1.2.3" - thread-loader "^2.1.2" - url-loader "^1.1.2" - vue-loader "^15.7.0" - webpack "^4.0.0" - webpack-bundle-analyzer "^3.3.0" - webpack-chain "^4.11.0" - webpack-dev-server "^3.4.1" - webpack-merge "^4.2.1" - -"@vue/cli-shared-utils@^3.12.1": - version "3.12.1" - resolved "https://registry.yarnpkg.com/@vue/cli-shared-utils/-/cli-shared-utils-3.12.1.tgz#bcf076287ddadeebbb97c6a748dfe9ff50ec8df0" - integrity sha512-jFblzRFjutGwu5utOKdVlPlsbA1lBUNNQlAThzNqej+JtTKJjnvjlhjKX0Gq0oOny5FjKWhoyfQ74p9h1qE6JQ== - dependencies: - "@hapi/joi" "^15.0.1" - chalk "^2.4.1" - execa "^1.0.0" - launch-editor "^2.2.1" - lru-cache "^5.1.1" - node-ipc "^9.1.1" - open "^6.3.0" - ora "^3.4.0" - request "^2.87.0" - request-promise-native "^1.0.7" - semver "^6.0.0" - string.prototype.padstart "^3.0.0" - -"@vue/component-compiler-utils@^3.0.0", "@vue/component-compiler-utils@^3.1.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@vue/component-compiler-utils/-/component-compiler-utils-3.2.0.tgz#8f85182ceed28e9b3c75313de669f83166d11e5d" - integrity sha512-lejBLa7xAMsfiZfNp7Kv51zOzifnb29FwdnMLa96z26kXErPFioSf9BMcePVIQ6/Gc6/mC0UrPpxAWIHyae0vw== - dependencies: - consolidate "^0.15.1" - hash-sum "^1.0.2" - lru-cache "^4.1.2" - merge-source-map "^1.1.0" - postcss "^7.0.14" - postcss-selector-parser "^6.0.2" - source-map "~0.6.1" - vue-template-es2015-compiler "^1.9.0" - optionalDependencies: - prettier "^1.18.2" - -"@vue/preload-webpack-plugin@^1.1.0": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@vue/preload-webpack-plugin/-/preload-webpack-plugin-1.1.2.tgz#ceb924b4ecb3b9c43871c7a429a02f8423e621ab" - integrity sha512-LIZMuJk38pk9U9Ur4YzHjlIyMuxPlACdBIHH9/nGYVTsaGKOSnSuELiE8vS9wa+dJpIYspYUOqk+L1Q4pgHQHQ== - -"@vue/test-utils@1.0.0-beta.29": - version "1.0.0-beta.29" - resolved "https://registry.yarnpkg.com/@vue/test-utils/-/test-utils-1.0.0-beta.29.tgz#c942cf25e891cf081b6a03332b4ae1ef430726f0" - integrity sha512-yX4sxEIHh4M9yAbLA/ikpEnGKMNBCnoX98xE1RwxfhQVcn0MaXNSj1Qmac+ZydTj6VBSEVukchBogXBTwc+9iA== - dependencies: - dom-event-types "^1.0.0" - lodash "^4.17.4" - -"@vue/web-component-wrapper@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@vue/web-component-wrapper/-/web-component-wrapper-1.2.0.tgz#bb0e46f1585a7e289b4ee6067dcc5a6ae62f1dd1" - integrity sha512-Xn/+vdm9CjuC9p3Ae+lTClNutrVhsXpzxvoTXXtoys6kVRX9FkueSUAqSWAyZntmVLlR4DosBV4pH8y5Z/HbUw== - -"@webassemblyjs/ast@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964" - integrity sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA== - dependencies: - "@webassemblyjs/helper-module-context" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/wast-parser" "1.9.0" - -"@webassemblyjs/floating-point-hex-parser@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz#3c3d3b271bddfc84deb00f71344438311d52ffb4" - integrity sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA== - -"@webassemblyjs/helper-api-error@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz#203f676e333b96c9da2eeab3ccef33c45928b6a2" - integrity sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw== - -"@webassemblyjs/helper-buffer@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz#a1442d269c5feb23fcbc9ef759dac3547f29de00" - integrity sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA== - -"@webassemblyjs/helper-code-frame@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz#647f8892cd2043a82ac0c8c5e75c36f1d9159f27" - integrity sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA== - dependencies: - "@webassemblyjs/wast-printer" "1.9.0" - -"@webassemblyjs/helper-fsm@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz#c05256b71244214671f4b08ec108ad63b70eddb8" - integrity sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw== - -"@webassemblyjs/helper-module-context@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz#25d8884b76839871a08a6c6f806c3979ef712f07" - integrity sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g== - dependencies: - "@webassemblyjs/ast" "1.9.0" - -"@webassemblyjs/helper-wasm-bytecode@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz#4fed8beac9b8c14f8c58b70d124d549dd1fe5790" - integrity sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw== - -"@webassemblyjs/helper-wasm-section@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz#5a4138d5a6292ba18b04c5ae49717e4167965346" - integrity sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-buffer" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/wasm-gen" "1.9.0" - -"@webassemblyjs/ieee754@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz#15c7a0fbaae83fb26143bbacf6d6df1702ad39e4" - integrity sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg== - dependencies: - "@xtuc/ieee754" "^1.2.0" - -"@webassemblyjs/leb128@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz#f19ca0b76a6dc55623a09cffa769e838fa1e1c95" - integrity sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw== - dependencies: - "@xtuc/long" "4.2.2" - -"@webassemblyjs/utf8@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz#04d33b636f78e6a6813227e82402f7637b6229ab" - integrity sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w== - -"@webassemblyjs/wasm-edit@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz#3fe6d79d3f0f922183aa86002c42dd256cfee9cf" - integrity sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-buffer" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/helper-wasm-section" "1.9.0" - "@webassemblyjs/wasm-gen" "1.9.0" - "@webassemblyjs/wasm-opt" "1.9.0" - "@webassemblyjs/wasm-parser" "1.9.0" - "@webassemblyjs/wast-printer" "1.9.0" - -"@webassemblyjs/wasm-gen@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz#50bc70ec68ded8e2763b01a1418bf43491a7a49c" - integrity sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/ieee754" "1.9.0" - "@webassemblyjs/leb128" "1.9.0" - "@webassemblyjs/utf8" "1.9.0" - -"@webassemblyjs/wasm-opt@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz#2211181e5b31326443cc8112eb9f0b9028721a61" - integrity sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-buffer" "1.9.0" - "@webassemblyjs/wasm-gen" "1.9.0" - "@webassemblyjs/wasm-parser" "1.9.0" - -"@webassemblyjs/wasm-parser@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz#9d48e44826df4a6598294aa6c87469d642fff65e" - integrity sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-api-error" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/ieee754" "1.9.0" - "@webassemblyjs/leb128" "1.9.0" - "@webassemblyjs/utf8" "1.9.0" - -"@webassemblyjs/wast-parser@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz#3031115d79ac5bd261556cecc3fa90a3ef451914" - integrity sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/floating-point-hex-parser" "1.9.0" - "@webassemblyjs/helper-api-error" "1.9.0" - "@webassemblyjs/helper-code-frame" "1.9.0" - "@webassemblyjs/helper-fsm" "1.9.0" - "@xtuc/long" "4.2.2" - -"@webassemblyjs/wast-printer@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz#4935d54c85fef637b00ce9f52377451d00d47899" - integrity sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/wast-parser" "1.9.0" - "@xtuc/long" "4.2.2" - -"@xtuc/ieee754@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" - integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== - -"@xtuc/long@4.2.2": - version "4.2.2" - resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" - integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== - -abab@^2.0.0: - version "2.0.5" - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" - integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== - -abbrev@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - -accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: - version "1.3.7" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" - integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== - dependencies: - mime-types "~2.1.24" - negotiator "0.6.2" - -acorn-globals@^4.1.0: - version "4.3.4" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.4.tgz#9fa1926addc11c97308c4e66d7add0d40c3272e7" - integrity sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A== - dependencies: - acorn "^6.0.1" - acorn-walk "^6.0.1" - -acorn-jsx@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" - integrity sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s= - dependencies: - acorn "^3.0.4" - -acorn-jsx@^5.0.0: - version "5.3.1" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" - integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== - -acorn-walk@^6.0.1, acorn-walk@^6.1.1: - version "6.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c" - integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA== - -acorn-walk@^7.1.1: - version "7.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" - integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== - -acorn@^3.0.4: - version "3.3.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" - integrity sha1-ReN/s56No/JbruP/U2niu18iAXo= - -acorn@^5.2.1, acorn@^5.5.0, acorn@^5.5.3: - version "5.7.4" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.4.tgz#3e8d8a9947d0599a1796d10225d7432f4a4acf5e" - integrity sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg== - -acorn@^6.0.1, acorn@^6.0.2, acorn@^6.0.7, acorn@^6.1.1, acorn@^6.4.1: - version "6.4.2" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" - integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== - -acorn@^7.1.1: - version "7.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== - -address@^1.0.3: - version "1.1.2" - resolved "https://registry.yarnpkg.com/address/-/address-1.1.2.tgz#bf1116c9c758c51b7a933d296b72c221ed9428b6" - integrity sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA== - -adler-32@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/adler-32/-/adler-32-1.2.0.tgz#6a3e6bf0a63900ba15652808cb15c6813d1a5f25" - integrity sha1-aj5r8KY5ALoVZSgIyxXGgT0aXyU= - dependencies: - exit-on-epipe "~1.0.1" - printj "~1.1.0" - -ajv-errors@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" - integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== - -ajv-keywords@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762" - integrity sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I= - -ajv-keywords@^3.1.0, ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: - version "3.5.2" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" - integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== - -ajv@^5.2.3, ajv@^5.3.0: - version "5.5.2" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" - integrity sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU= - dependencies: - co "^4.6.0" - fast-deep-equal "^1.0.0" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.3.0" - -ajv@^6.1.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.9.1: - version "6.12.5" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.5.tgz#19b0e8bae8f476e5ba666300387775fb1a00a4da" - integrity sha512-lRF8RORchjpKG50/WFf8xmg7sgCLFiYNNnqdKflk63whMQcWR5ngGjiSXkL9bjxy6B2npOK2HSMN49jEBMSkag== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ajv@^6.12.5: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -alphanum-sort@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" - integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM= - -amdefine@>=0.0.4: - version "1.0.1" - resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" - integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= - -ansi-colors@^3.0.0: - version "3.2.4" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" - integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== - -ansi-escapes@^3.0.0, ansi-escapes@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" - integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== - -ansi-html@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" - integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4= - -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= - -ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" - integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= - -ansi-regex@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" - integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== - -ansi-regex@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" - integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== - -ansi-styles@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" - integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= - -ansi-styles@^3.2.0, ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -any-promise@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" - integrity sha1-q8av7tzqUugJzcA3au0845Y10X8= - -anymatch@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" - integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== - dependencies: - micromatch "^3.1.4" - normalize-path "^2.1.1" - -anymatch@~3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" - integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -append-transform@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-0.4.0.tgz#d76ebf8ca94d276e247a36bad44a4b74ab611991" - integrity sha1-126/jKlNJ24keja61EpLdKthGZE= - dependencies: - default-require-extensions "^1.0.0" - -aproba@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" - integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== - -arch@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/arch/-/arch-2.1.2.tgz#0c52bbe7344bb4fa260c443d2cbad9c00ff2f0bf" - integrity sha512-NTBIIbAfkJeIletyABbVtdPgeKfDafR+1mZV/AyyfC1UkVkp9iUjV+wwmqtUgphHYajbI86jejBJp5e+jkGTiQ== - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -arr-diff@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" - integrity sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8= - dependencies: - arr-flatten "^1.0.1" - -arr-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= - -arr-flatten@^1.0.1, arr-flatten@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" - integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== - -arr-union@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" - integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= - -array-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" - integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM= - -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" - integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= - -array-flatten@^2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" - integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== - -array-union@^1.0.1, array-union@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" - integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= - dependencies: - array-uniq "^1.0.1" - -array-uniq@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" - integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= - -array-unique@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" - integrity sha1-odl8yvy8JiXMcPrc6zalDFiwGlM= - -array-unique@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" - integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= - -arrify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" - integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= - -asn1.js@^5.2.0: - version "5.4.1" - resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" - integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== - dependencies: - bn.js "^4.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - safer-buffer "^2.1.0" - -asn1@~0.2.3: - version "0.2.4" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" - integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== - dependencies: - safer-buffer "~2.1.0" - -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= - -assert@^1.1.1: - version "1.5.0" - resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" - integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== - dependencies: - object-assign "^4.1.1" - util "0.10.3" - -assign-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= - -ast-types@0.9.6: - version "0.9.6" - resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.9.6.tgz#102c9e9e9005d3e7e3829bf0c4fa24ee862ee9b9" - integrity sha1-ECyenpAF0+fjgpvwxPok7oYu6bk= - -astral-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" - integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== - -async-each@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" - integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== - -async-limiter@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" - integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== - -async-validator@~1.8.1: - version "1.8.5" - resolved "https://registry.yarnpkg.com/async-validator/-/async-validator-1.8.5.tgz#dc3e08ec1fd0dddb67e60842f02c0cd1cec6d7f0" - integrity sha512-tXBM+1m056MAX0E8TL2iCjg8WvSyXu0Zc8LNtYqrVeyoL3+esHRZ4SieE9fKQyyU09uONjnMEjrNBMqT0mbvmA== - dependencies: - babel-runtime "6.x" - -async@^2.1.4, async@^2.6.2: - version "2.6.3" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" - integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== - dependencies: - lodash "^4.17.14" - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= - -atob@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" - integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== - -autoprefixer@^9.5.1: - version "9.8.6" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.6.tgz#3b73594ca1bf9266320c5acf1588d74dea74210f" - integrity sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg== - dependencies: - browserslist "^4.12.0" - caniuse-lite "^1.0.30001109" - colorette "^1.2.1" - normalize-range "^0.1.2" - num2fraction "^1.2.2" - postcss "^7.0.32" - postcss-value-parser "^4.1.0" - -aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= - -aws4@^1.8.0: - version "1.10.1" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.10.1.tgz#e1e82e4f3e999e2cfd61b161280d16a111f86428" - integrity sha512-zg7Hz2k5lI8kb7U32998pRRFin7zJlkfezGJjUc2heaD4Pw2wObakCDVzkKztTm/Ln7eiVvYsjqak0Ed4LkMDA== - -axios@^0.19.0: - version "0.19.2" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.19.2.tgz#3ea36c5d8818d0d5f8a8a97a6d36b86cdc00cb27" - integrity sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA== - dependencies: - follow-redirects "1.5.10" - -babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" - integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= - dependencies: - chalk "^1.1.3" - esutils "^2.0.2" - js-tokens "^3.0.2" - -babel-core@7.0.0-bridge.0: - version "7.0.0-bridge.0" - resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-7.0.0-bridge.0.tgz#95a492ddd90f9b4e9a4a1da14eb335b87b634ece" - integrity sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg== - -babel-core@^6.0.0, babel-core@^6.26.0: - version "6.26.3" - resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207" - integrity sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA== - dependencies: - babel-code-frame "^6.26.0" - babel-generator "^6.26.0" - babel-helpers "^6.24.1" - babel-messages "^6.23.0" - babel-register "^6.26.0" - babel-runtime "^6.26.0" - babel-template "^6.26.0" - babel-traverse "^6.26.0" - babel-types "^6.26.0" - babylon "^6.18.0" - convert-source-map "^1.5.1" - debug "^2.6.9" - json5 "^0.5.1" - lodash "^4.17.4" - minimatch "^3.0.4" - path-is-absolute "^1.0.1" - private "^0.1.8" - slash "^1.0.0" - source-map "^0.5.7" - -babel-eslint@^10.0.1: - version "10.1.0" - resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.1.0.tgz#6968e568a910b78fb3779cdd8b6ac2f479943232" - integrity sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg== - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/parser" "^7.7.0" - "@babel/traverse" "^7.7.0" - "@babel/types" "^7.7.0" - eslint-visitor-keys "^1.0.0" - resolve "^1.12.0" - -babel-generator@^6.18.0, babel-generator@^6.26.0: - version "6.26.1" - resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" - integrity sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA== - dependencies: - babel-messages "^6.23.0" - babel-runtime "^6.26.0" - babel-types "^6.26.0" - detect-indent "^4.0.0" - jsesc "^1.3.0" - lodash "^4.17.4" - source-map "^0.5.7" - trim-right "^1.0.1" - -babel-helper-vue-jsx-merge-props@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-2.0.3.tgz#22aebd3b33902328e513293a8e4992b384f9f1b6" - integrity sha512-gsLiKK7Qrb7zYJNgiXKpXblxbV5ffSwR0f5whkPAaBAR4fhi6bwRZxX9wBlIc5M/v8CCkXUbXZL4N/nSE97cqg== - -babel-helpers@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" - integrity sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI= - dependencies: - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-jest@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-23.6.0.tgz#a644232366557a2240a0c083da6b25786185a2f1" - integrity sha512-lqKGG6LYXYu+DQh/slrQ8nxXQkEkhugdXsU6St7GmhVS7Ilc/22ArwqXNJrf0QaOBjZB0360qZMwXqDYQHXaew== - dependencies: - babel-plugin-istanbul "^4.1.6" - babel-preset-jest "^23.2.0" - -babel-loader@^8.0.5: - version "8.1.0" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.1.0.tgz#c611d5112bd5209abe8b9fa84c3e4da25275f1c3" - integrity sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw== - dependencies: - find-cache-dir "^2.1.0" - loader-utils "^1.4.0" - mkdirp "^0.5.3" - pify "^4.0.1" - schema-utils "^2.6.5" - -babel-messages@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" - integrity sha1-8830cDhYA1sqKVHG7F7fbGLyYw4= - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-dynamic-import-node@^2.2.0, babel-plugin-dynamic-import-node@^2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" - integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== - dependencies: - object.assign "^4.1.0" - -babel-plugin-istanbul@^4.1.6: - version "4.1.6" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz#36c59b2192efce81c5b378321b74175add1c9a45" - integrity sha512-PWP9FQ1AhZhS01T/4qLSKoHGY/xvkZdVBGlKM/HuxxS3+sC66HhTNR7+MpbO/so/cz/wY94MeSWJuP1hXIPfwQ== - dependencies: - babel-plugin-syntax-object-rest-spread "^6.13.0" - find-up "^2.1.0" - istanbul-lib-instrument "^1.10.1" - test-exclude "^4.2.1" - -babel-plugin-jest-hoist@^23.2.0: - version "23.2.0" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-23.2.0.tgz#e61fae05a1ca8801aadee57a6d66b8cefaf44167" - integrity sha1-5h+uBaHKiAGq3uV6bWa4zvr0QWc= - -babel-plugin-module-resolver@3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/babel-plugin-module-resolver/-/babel-plugin-module-resolver-3.2.0.tgz#ddfa5e301e3b9aa12d852a9979f18b37881ff5a7" - integrity sha512-tjR0GvSndzPew/Iayf4uICWZqjBwnlMWjSx6brryfQ81F9rxBVqwDJtFCV8oOs0+vJeefK9TmdZtkIFdFe1UnA== - dependencies: - find-babel-config "^1.1.0" - glob "^7.1.2" - pkg-up "^2.0.0" - reselect "^3.0.1" - resolve "^1.4.0" - -babel-plugin-syntax-object-rest-spread@^6.13.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" - integrity sha1-/WU28rzhODb/o6VFjEkDpZe7O/U= - -babel-plugin-transform-es2015-modules-commonjs@^6.26.0, babel-plugin-transform-es2015-modules-commonjs@^6.26.2: - version "6.26.2" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz#58a793863a9e7ca870bdc5a881117ffac27db6f3" - integrity sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q== - dependencies: - babel-plugin-transform-strict-mode "^6.24.1" - babel-runtime "^6.26.0" - babel-template "^6.26.0" - babel-types "^6.26.0" - -babel-plugin-transform-strict-mode@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" - integrity sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g= - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-preset-jest@^23.2.0: - version "23.2.0" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-23.2.0.tgz#8ec7a03a138f001a1a8fb1e8113652bf1a55da46" - integrity sha1-jsegOhOPABoaj7HoETZSvxpV2kY= - dependencies: - babel-plugin-jest-hoist "^23.2.0" - babel-plugin-syntax-object-rest-spread "^6.13.0" - -babel-register@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" - integrity sha1-btAhFz4vy0htestFxgCahW9kcHE= - dependencies: - babel-core "^6.26.0" - babel-runtime "^6.26.0" - core-js "^2.5.0" - home-or-tmp "^2.0.0" - lodash "^4.17.4" - mkdirp "^0.5.1" - source-map-support "^0.4.15" - -babel-runtime@6.x, babel-runtime@^6.22.0, babel-runtime@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" - integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= - dependencies: - core-js "^2.4.0" - regenerator-runtime "^0.11.0" - -babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" - integrity sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI= - dependencies: - babel-runtime "^6.26.0" - babel-traverse "^6.26.0" - babel-types "^6.26.0" - babylon "^6.18.0" - lodash "^4.17.4" - -babel-traverse@^6.0.0, babel-traverse@^6.18.0, babel-traverse@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" - integrity sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4= - dependencies: - babel-code-frame "^6.26.0" - babel-messages "^6.23.0" - babel-runtime "^6.26.0" - babel-types "^6.26.0" - babylon "^6.18.0" - debug "^2.6.8" - globals "^9.18.0" - invariant "^2.2.2" - lodash "^4.17.4" - -babel-types@^6.0.0, babel-types@^6.18.0, babel-types@^6.24.1, babel-types@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" - integrity sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc= - dependencies: - babel-runtime "^6.26.0" - esutils "^2.0.2" - lodash "^4.17.4" - to-fast-properties "^1.0.3" - -babylon@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" - integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ== - -balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= - -base62@^1.1.0: - version "1.2.8" - resolved "https://registry.yarnpkg.com/base62/-/base62-1.2.8.tgz#1264cb0fb848d875792877479dbe8bae6bae3428" - integrity sha512-V6YHUbjLxN1ymqNLb1DPHoU1CpfdL7d2YTIp5W3U4hhoG4hhxNmsFDs66M9EXxBiSEke5Bt5dwdfMwwZF70iLA== - -base64-js@^1.0.2: - version "1.3.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" - integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== - -base@^0.11.1: - version "0.11.2" - resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" - integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== - dependencies: - cache-base "^1.0.1" - class-utils "^0.3.5" - component-emitter "^1.2.1" - define-property "^1.0.0" - isobject "^3.0.1" - mixin-deep "^1.2.0" - pascalcase "^0.1.1" - -batch@0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" - integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY= - -bcrypt-pbkdf@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" - integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= - dependencies: - tweetnacl "^0.14.3" - -bfj@^6.1.1: - version "6.1.2" - resolved "https://registry.yarnpkg.com/bfj/-/bfj-6.1.2.tgz#325c861a822bcb358a41c78a33b8e6e2086dde7f" - integrity sha512-BmBJa4Lip6BPRINSZ0BPEIfB1wUY/9rwbwvIHQA1KjX9om29B6id0wnWXq7m3bn5JrUVjeOTnVuhPT1FiHwPGw== - dependencies: - bluebird "^3.5.5" - check-types "^8.0.3" - hoopy "^0.1.4" - tryer "^1.0.1" - -big.js@^3.1.3: - version "3.2.0" - resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" - integrity sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q== - -big.js@^5.2.2: - version "5.2.2" - resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" - integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== - -binary-extensions@^1.0.0: - version "1.13.1" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" - integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== - -binary-extensions@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.1.0.tgz#30fa40c9e7fe07dbc895678cd287024dea241dd9" - integrity sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ== - -bindings@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" - integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== - dependencies: - file-uri-to-path "1.0.0" - -bluebird@^3.1.1, bluebird@^3.5.1, bluebird@^3.5.5: - version "3.7.2" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" - integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== - -bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.4.0: - version "4.11.9" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.9.tgz#26d556829458f9d1e81fc48952493d0ba3507828" - integrity sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw== - -bn.js@^5.1.1: - version "5.1.3" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.1.3.tgz#beca005408f642ebebea80b042b4d18d2ac0ee6b" - integrity sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ== - -body-parser@1.19.0: - version "1.19.0" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" - integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== - dependencies: - bytes "3.1.0" - content-type "~1.0.4" - debug "2.6.9" - depd "~1.1.2" - http-errors "1.7.2" - iconv-lite "0.4.24" - on-finished "~2.3.0" - qs "6.7.0" - raw-body "2.4.0" - type-is "~1.6.17" - -bonjour@^3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5" - integrity sha1-jokKGD2O6aI5OzhExpGkK897yfU= - dependencies: - array-flatten "^2.1.0" - deep-equal "^1.0.1" - dns-equal "^1.0.0" - dns-txt "^2.0.2" - multicast-dns "^6.0.1" - multicast-dns-service-types "^1.1.0" - -boolbase@^1.0.0, boolbase@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" - integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -braces@^1.8.2: - version "1.8.5" - resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" - integrity sha1-uneWLhLf+WnWt2cR6RS3N4V79qc= - dependencies: - expand-range "^1.8.1" - preserve "^0.2.0" - repeat-element "^1.1.2" - -braces@^2.3.1, braces@^2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" - integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== - dependencies: - arr-flatten "^1.1.0" - array-unique "^0.3.2" - extend-shallow "^2.0.1" - fill-range "^4.0.0" - isobject "^3.0.1" - repeat-element "^1.1.2" - snapdragon "^0.8.1" - snapdragon-node "^2.0.1" - split-string "^3.0.2" - to-regex "^3.0.1" - -braces@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -brorand@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= - -browser-process-hrtime@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" - integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== - -browser-resolve@^1.11.3: - version "1.11.3" - resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6" - integrity sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ== - dependencies: - resolve "1.1.7" - -browserify-aes@^1.0.0, browserify-aes@^1.0.4: - version "1.2.0" - resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" - integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== - dependencies: - buffer-xor "^1.0.3" - cipher-base "^1.0.0" - create-hash "^1.1.0" - evp_bytestokey "^1.0.3" - inherits "^2.0.1" - safe-buffer "^5.0.1" - -browserify-cipher@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" - integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== - dependencies: - browserify-aes "^1.0.4" - browserify-des "^1.0.0" - evp_bytestokey "^1.0.0" - -browserify-des@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" - integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== - dependencies: - cipher-base "^1.0.1" - des.js "^1.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - -browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" - integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ= - dependencies: - bn.js "^4.1.0" - randombytes "^2.0.1" - -browserify-sign@^4.0.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.1.tgz#eaf4add46dd54be3bb3b36c0cf15abbeba7956c3" - integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg== - dependencies: - bn.js "^5.1.1" - browserify-rsa "^4.0.1" - create-hash "^1.2.0" - create-hmac "^1.1.7" - elliptic "^6.5.3" - inherits "^2.0.4" - parse-asn1 "^5.1.5" - readable-stream "^3.6.0" - safe-buffer "^5.2.0" - -browserify-zlib@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" - integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== - dependencies: - pako "~1.0.5" - -browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.3.4, browserslist@^4.5.4: - version "4.14.5" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.14.5.tgz#1c751461a102ddc60e40993639b709be7f2c4015" - integrity sha512-Z+vsCZIvCBvqLoYkBFTwEYH3v5MCQbsAjp50ERycpOjnPmolg1Gjy4+KaWWpm8QOJt9GHkhdqAl14NpCX73CWA== - dependencies: - caniuse-lite "^1.0.30001135" - electron-to-chromium "^1.3.571" - escalade "^3.1.0" - node-releases "^1.1.61" - -bser@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" - integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== - dependencies: - node-int64 "^0.4.0" - -buffer-from@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" - integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== - -buffer-indexof@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" - integrity sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g== - -buffer-xor@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" - integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= - -buffer@^4.3.0: - version "4.9.2" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" - integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== - dependencies: - base64-js "^1.0.2" - ieee754 "^1.1.4" - isarray "^1.0.0" - -builtin-status-codes@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" - integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= - -bytes@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" - integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= - -bytes@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" - integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== - -cacache@^10.0.4: - version "10.0.4" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-10.0.4.tgz#6452367999eff9d4188aefd9a14e9d7c6a263460" - integrity sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA== - dependencies: - bluebird "^3.5.1" - chownr "^1.0.1" - glob "^7.1.2" - graceful-fs "^4.1.11" - lru-cache "^4.1.1" - mississippi "^2.0.0" - mkdirp "^0.5.1" - move-concurrently "^1.0.1" - promise-inflight "^1.0.1" - rimraf "^2.6.2" - ssri "^5.2.4" - unique-filename "^1.1.0" - y18n "^4.0.0" - -cacache@^12.0.2: - version "12.0.4" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" - integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ== - dependencies: - bluebird "^3.5.5" - chownr "^1.1.1" - figgy-pudding "^3.5.1" - glob "^7.1.4" - graceful-fs "^4.1.15" - infer-owner "^1.0.3" - lru-cache "^5.1.1" - mississippi "^3.0.0" - mkdirp "^0.5.1" - move-concurrently "^1.0.1" - promise-inflight "^1.0.1" - rimraf "^2.6.3" - ssri "^6.0.1" - unique-filename "^1.1.1" - y18n "^4.0.0" - -cache-base@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" - integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== - dependencies: - collection-visit "^1.0.0" - component-emitter "^1.2.1" - get-value "^2.0.6" - has-value "^1.0.0" - isobject "^3.0.1" - set-value "^2.0.0" - to-object-path "^0.3.0" - union-value "^1.0.0" - unset-value "^1.0.0" - -cache-loader@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/cache-loader/-/cache-loader-2.0.1.tgz#5758f41a62d7c23941e3c3c7016e6faeb03acb07" - integrity sha512-V99T3FOynmGx26Zom+JrVBytLBsmUCzVG2/4NnUKgvXN4bEV42R1ERl1IyiH/cvFIDA1Ytq2lPZ9tXDSahcQpQ== - dependencies: - loader-utils "^1.1.0" - mkdirp "^0.5.1" - neo-async "^2.6.0" - normalize-path "^3.0.0" - schema-utils "^1.0.0" - -call-me-maybe@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" - integrity sha1-JtII6onje1y95gJQoV8DHBak1ms= - -caller-callsite@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" - integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= - dependencies: - callsites "^2.0.0" - -caller-path@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" - integrity sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8= - dependencies: - callsites "^0.2.0" - -caller-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" - integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= - dependencies: - caller-callsite "^2.0.0" - -callsites@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" - integrity sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo= - -callsites@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" - integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -camel-case@3.0.x: - version "3.0.0" - resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73" - integrity sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M= - dependencies: - no-case "^2.2.0" - upper-case "^1.1.1" - -camelcase@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" - integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= - -camelcase@^5.0.0: - version "5.3.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== - -caniuse-api@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" - integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== - dependencies: - browserslist "^4.0.0" - caniuse-lite "^1.0.0" - lodash.memoize "^4.1.2" - lodash.uniq "^4.5.0" - -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001135: - version "1.0.30001143" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001143.tgz#560f2cfb9f313d1d7e52eb8dac0e4e36c8821c0d" - integrity sha512-p/PO5YbwmCpBJPxjOiKBvAlUPgF8dExhfEpnsH+ys4N/791WHrYrGg0cyHiAURl5hSbx5vIcjKmQAP6sHDYH3w== - -capture-exit@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-1.2.0.tgz#1c5fcc489fd0ab00d4f1ac7ae1072e3173fbab6f" - integrity sha1-HF/MSJ/QqwDU8ax64QcuMXP7q28= - dependencies: - rsvp "^3.3.3" - -case-sensitive-paths-webpack-plugin@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.3.0.tgz#23ac613cc9a856e4f88ff8bb73bbb5e989825cf7" - integrity sha512-/4YgnZS8y1UXXmC02xD5rRrBEu6T5ub+mQHLNRj0fzTRbgdBYhsNo2V5EqwgqrExjxsjtF/OpAKAMkKsxbD5XQ== - -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= - -cfb@^1.1.4: - version "1.2.0" - resolved "https://registry.yarnpkg.com/cfb/-/cfb-1.2.0.tgz#6a4d0872b525ed60349e1ef51fb4b0bf73eca9a8" - integrity sha512-sXMvHsKCICVR3Naq+J556K+ExBo9n50iKl6LGarlnvuA2035uMlGA/qVrc0wQtow5P1vJEw9UyrKLCbtIKz+TQ== - dependencies: - adler-32 "~1.2.0" - crc-32 "~1.2.0" - printj "~1.1.2" - -chalk@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" - integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= - dependencies: - ansi-styles "^2.2.1" - escape-string-regexp "^1.0.2" - has-ansi "^2.0.0" - strip-ansi "^3.0.0" - supports-color "^2.0.0" - -chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" - integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chardet@^0.4.0: - version "0.4.2" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" - integrity sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I= - -chardet@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" - integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== - -check-types@^8.0.3: - version "8.0.3" - resolved "https://registry.yarnpkg.com/check-types/-/check-types-8.0.3.tgz#3356cca19c889544f2d7a95ed49ce508a0ecf552" - integrity sha512-YpeKZngUmG65rLudJ4taU7VLkOCTMhNl/u4ctNC56LQS/zJTyNH0Lrtwm1tfTsbLlwvlfsA2d1c8vCf/Kh2KwQ== - -"chokidar@>=2.0.0 <4.0.0", chokidar@^3.4.1: - version "3.4.2" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.2.tgz#38dc8e658dec3809741eb3ef7bb0a47fe424232d" - integrity sha512-IZHaDeBeI+sZJRX7lGcXsdzgvZqKv6sECqsbErJA4mHWfpRrD8B97kSFN4cQz6nGBGiuFia1MKR4d6c1o8Cv7A== - dependencies: - anymatch "~3.1.1" - braces "~3.0.2" - glob-parent "~5.1.0" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.4.0" - optionalDependencies: - fsevents "~2.1.2" - -chokidar@^2.1.8: - version "2.1.8" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" - integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== - dependencies: - anymatch "^2.0.0" - async-each "^1.0.1" - braces "^2.3.2" - glob-parent "^3.1.0" - inherits "^2.0.3" - is-binary-path "^1.0.0" - is-glob "^4.0.0" - normalize-path "^3.0.0" - path-is-absolute "^1.0.0" - readdirp "^2.2.1" - upath "^1.1.1" - optionalDependencies: - fsevents "^1.2.7" - -chownr@^1.0.1, chownr@^1.1.1: - version "1.1.4" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" - integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== - -chrome-trace-event@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4" - integrity sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ== - dependencies: - tslib "^1.9.0" - -ci-info@^1.5.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" - integrity sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A== - -cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" - integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -circular-json@^0.3.1: - version "0.3.3" - resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" - integrity sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A== - -class-utils@^0.3.5: - version "0.3.6" - resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" - integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== - dependencies: - arr-union "^3.1.0" - define-property "^0.2.5" - isobject "^3.0.0" - static-extend "^0.1.1" - -clean-css@4.2.x: - version "4.2.3" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.3.tgz#507b5de7d97b48ee53d84adb0160ff6216380f78" - integrity sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA== - dependencies: - source-map "~0.6.0" - -cli-cursor@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" - integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= - dependencies: - restore-cursor "^2.0.0" - -cli-highlight@^2.1.0: - version "2.1.4" - resolved "https://registry.yarnpkg.com/cli-highlight/-/cli-highlight-2.1.4.tgz#098cb642cf17f42adc1c1145e07f960ec4d7522b" - integrity sha512-s7Zofobm20qriqDoU9sXptQx0t2R9PEgac92mENNm7xaEe1hn71IIMsXMK+6encA6WRCWWxIGQbipr3q998tlQ== - dependencies: - chalk "^3.0.0" - highlight.js "^9.6.0" - mz "^2.4.0" - parse5 "^5.1.1" - parse5-htmlparser2-tree-adapter "^5.1.1" - yargs "^15.0.0" - -cli-spinners@^2.0.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.4.0.tgz#c6256db216b878cfba4720e719cec7cf72685d7f" - integrity sha512-sJAofoarcm76ZGpuooaO0eDy8saEy+YoZBLjC4h8srt4jeBnkYeOgqxgsJQTpyt2LjI5PTfLJHSL+41Yu4fEJA== - -cli-width@^2.0.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" - integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw== - -clipboardy@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/clipboardy/-/clipboardy-2.3.0.tgz#3c2903650c68e46a91b388985bc2774287dba290" - integrity sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ== - dependencies: - arch "^2.1.1" - execa "^1.0.0" - is-wsl "^2.1.1" - -cliui@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" - integrity sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ== - dependencies: - string-width "^2.1.1" - strip-ansi "^4.0.0" - wrap-ansi "^2.0.0" - -cliui@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" - integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== - dependencies: - string-width "^3.1.0" - strip-ansi "^5.2.0" - wrap-ansi "^5.1.0" - -cliui@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" - integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^6.2.0" - -clone-deep@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" - integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== - dependencies: - is-plain-object "^2.0.4" - kind-of "^6.0.2" - shallow-clone "^3.0.0" - -clone@2.x: - version "2.1.2" - resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" - integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= - -clone@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" - integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= - -co@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= - -coa@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3" - integrity sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA== - dependencies: - "@types/q" "^1.5.1" - chalk "^2.4.1" - q "^1.1.2" - -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= - -codepage@~1.14.0: - version "1.14.0" - resolved "https://registry.yarnpkg.com/codepage/-/codepage-1.14.0.tgz#8cbe25481323559d7d307571b0fff91e7a1d2f99" - integrity sha1-jL4lSBMjVZ19MHVxsP/5HnodL5k= - dependencies: - commander "~2.14.1" - exit-on-epipe "~1.0.1" - -collection-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" - integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= - dependencies: - map-visit "^1.0.0" - object-visit "^1.0.0" - -color-convert@^1.9.0, color-convert@^1.9.1: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= - -color-name@^1.0.0, color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -color-string@^1.5.2: - version "1.5.3" - resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.3.tgz#c9bbc5f01b58b5492f3d6857459cb6590ce204cc" - integrity sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw== - dependencies: - color-name "^1.0.0" - simple-swizzle "^0.2.2" - -color@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/color/-/color-3.1.2.tgz#68148e7f85d41ad7649c5fa8c8106f098d229e10" - integrity sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg== - dependencies: - color-convert "^1.9.1" - color-string "^1.5.2" - -colorette@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.1.tgz#4d0b921325c14faf92633086a536db6e89564b1b" - integrity sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw== - -combined-stream@^1.0.6, combined-stream@~1.0.6: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -commander@2.17.x, commander@~2.17.1: - version "2.17.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" - integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg== - -commander@^2.18.0, commander@^2.19.0, commander@^2.20.0, commander@^2.5.0: - version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - -commander@~2.14.1: - version "2.14.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.14.1.tgz#2235123e37af8ca3c65df45b026dbd357b01b9aa" - integrity sha512-+YR16o3rK53SmWHU3rEM3tPAh2rwb1yPcQX5irVn7mb0gXbwuCCrnkbV5+PBfETdfg1vui07nM6PCG1zndcjQw== - -commander@~2.19.0: - version "2.19.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" - integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg== - -commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= - -commoner@^0.10.1: - version "0.10.8" - resolved "https://registry.yarnpkg.com/commoner/-/commoner-0.10.8.tgz#34fc3672cd24393e8bb47e70caa0293811f4f2c5" - integrity sha1-NPw2cs0kOT6LtH5wyqApOBH08sU= - dependencies: - commander "^2.5.0" - detective "^4.3.1" - glob "^5.0.15" - graceful-fs "^4.1.2" - iconv-lite "^0.4.5" - mkdirp "^0.5.0" - private "^0.1.6" - q "^1.1.2" - recast "^0.11.17" - -component-emitter@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" - integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== - -compressible@~2.0.16: - version "2.0.18" - resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" - integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== - dependencies: - mime-db ">= 1.43.0 < 2" - -compression@^1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" - integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== - dependencies: - accepts "~1.3.5" - bytes "3.0.0" - compressible "~2.0.16" - debug "2.6.9" - on-headers "~1.0.2" - safe-buffer "5.1.2" - vary "~1.1.2" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - -concat-stream@^1.5.0, concat-stream@^1.6.0: - version "1.6.2" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" - integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - -condense-newlines@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/condense-newlines/-/condense-newlines-0.2.1.tgz#3de985553139475d32502c83b02f60684d24c55f" - integrity sha1-PemFVTE5R10yUCyDsC9gaE0kxV8= - dependencies: - extend-shallow "^2.0.1" - is-whitespace "^0.3.0" - kind-of "^3.0.2" - -config-chain@^1.1.12: - version "1.1.12" - resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.12.tgz#0fde8d091200eb5e808caf25fe618c02f48e4efa" - integrity sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA== - dependencies: - ini "^1.3.4" - proto-list "~1.2.1" - -connect-history-api-fallback@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" - integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg== - -console-browserify@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" - integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== - -consolidate@^0.15.1: - version "0.15.1" - resolved "https://registry.yarnpkg.com/consolidate/-/consolidate-0.15.1.tgz#21ab043235c71a07d45d9aad98593b0dba56bab7" - integrity sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw== - dependencies: - bluebird "^3.1.1" - -constants-browserify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" - integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= - -content-disposition@0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" - integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== - dependencies: - safe-buffer "5.1.2" - -content-type@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" - integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== - -convert-source-map@^1.4.0, convert-source-map@^1.5.1, convert-source-map@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" - integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== - dependencies: - safe-buffer "~5.1.1" - -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= - -cookie@0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" - integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== - -copy-anything@^2.0.1: - version "2.0.3" - resolved "https://registry.yarnpkg.com/copy-anything/-/copy-anything-2.0.3.tgz#842407ba02466b0df844819bbe3baebbe5d45d87" - integrity sha512-GK6QUtisv4fNS+XcI7shX0Gx9ORg7QqIznyfho79JTnX1XhLiyZHfftvGiziqzRiEi/Bjhgpi+D2o7HxJFPnDQ== - dependencies: - is-what "^3.12.0" - -copy-concurrently@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" - integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== - dependencies: - aproba "^1.1.1" - fs-write-stream-atomic "^1.0.8" - iferr "^0.1.5" - mkdirp "^0.5.1" - rimraf "^2.5.4" - run-queue "^1.0.0" - -copy-descriptor@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" - integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= - -copy-webpack-plugin@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-4.6.0.tgz#e7f40dd8a68477d405dd1b7a854aae324b158bae" - integrity sha512-Y+SQCF+0NoWQryez2zXn5J5knmr9z/9qSQt7fbL78u83rxmigOy8X5+BFn8CFSuX+nKT8gpYwJX68ekqtQt6ZA== - dependencies: - cacache "^10.0.4" - find-cache-dir "^1.0.0" - globby "^7.1.1" - is-glob "^4.0.0" - loader-utils "^1.1.0" - minimatch "^3.0.4" - p-limit "^1.0.0" - serialize-javascript "^1.4.0" - -core-js@^2.4.0, core-js@^2.5.0, core-js@^2.6.5: - version "2.6.11" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c" - integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg== - -core-util-is@1.0.2, core-util-is@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= - -cosmiconfig@^5.0.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" - integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== - dependencies: - import-fresh "^2.0.0" - is-directory "^0.3.1" - js-yaml "^3.13.1" - parse-json "^4.0.0" - -crc-32@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.0.tgz#cb2db6e29b88508e32d9dd0ec1693e7b41a18208" - integrity sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA== - dependencies: - exit-on-epipe "~1.0.1" - printj "~1.1.0" - -create-ecdh@^4.0.0: - version "4.0.4" - resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" - integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== - dependencies: - bn.js "^4.1.0" - elliptic "^6.5.3" - -create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" - integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== - dependencies: - cipher-base "^1.0.1" - inherits "^2.0.1" - md5.js "^1.3.4" - ripemd160 "^2.0.1" - sha.js "^2.4.0" - -create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" - integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== - dependencies: - cipher-base "^1.0.3" - create-hash "^1.1.0" - inherits "^2.0.1" - ripemd160 "^2.0.0" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -cross-spawn@^5.0.1, cross-spawn@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" - integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= - dependencies: - lru-cache "^4.0.1" - shebang-command "^1.2.0" - which "^1.2.9" - -cross-spawn@^6.0.0, cross-spawn@^6.0.5: - version "6.0.5" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" - integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" - -cross-spawn@^7.0.0: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -crypto-browserify@^3.11.0: - version "3.12.0" - resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" - integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== - dependencies: - browserify-cipher "^1.0.0" - browserify-sign "^4.0.0" - create-ecdh "^4.0.0" - create-hash "^1.1.0" - create-hmac "^1.1.0" - diffie-hellman "^5.0.0" - inherits "^2.0.1" - pbkdf2 "^3.0.3" - public-encrypt "^4.0.0" - randombytes "^2.0.0" - randomfill "^1.0.3" - -css-color-names@0.0.4, css-color-names@^0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" - integrity sha1-gIrcLnnPhHOAabZGyyDsJ762KeA= - -css-declaration-sorter@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz#c198940f63a76d7e36c1e71018b001721054cb22" - integrity sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA== - dependencies: - postcss "^7.0.1" - timsort "^0.3.0" - -css-loader@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-1.0.1.tgz#6885bb5233b35ec47b006057da01cc640b6b79fe" - integrity sha512-+ZHAZm/yqvJ2kDtPne3uX0C+Vr3Zn5jFn2N4HywtS5ujwvsVkyg0VArEXpl3BgczDA8anieki1FIzhchX4yrDw== - dependencies: - babel-code-frame "^6.26.0" - css-selector-tokenizer "^0.7.0" - icss-utils "^2.1.0" - loader-utils "^1.0.2" - lodash "^4.17.11" - postcss "^6.0.23" - postcss-modules-extract-imports "^1.2.0" - postcss-modules-local-by-default "^1.2.0" - postcss-modules-scope "^1.1.0" - postcss-modules-values "^1.3.0" - postcss-value-parser "^3.3.0" - source-list-map "^2.0.0" - -css-select-base-adapter@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7" - integrity sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w== - -css-select@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" - integrity sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg= - dependencies: - boolbase "~1.0.0" - css-what "2.1" - domutils "1.5.1" - nth-check "~1.0.1" - -css-select@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.1.0.tgz#6a34653356635934a81baca68d0255432105dbef" - integrity sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ== - dependencies: - boolbase "^1.0.0" - css-what "^3.2.1" - domutils "^1.7.0" - nth-check "^1.0.2" - -css-selector-tokenizer@^0.7.0: - version "0.7.3" - resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz#735f26186e67c749aaf275783405cf0661fae8f1" - integrity sha512-jWQv3oCEL5kMErj4wRnK/OPoBi0D+P1FR2cDCKYPaMeD2eW3/mttav8HT4hT1CKopiJI/psEULjkClhvJo4Lvg== - dependencies: - cssesc "^3.0.0" - fastparse "^1.1.2" - -css-tree@1.0.0-alpha.37: - version "1.0.0-alpha.37" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz#98bebd62c4c1d9f960ec340cf9f7522e30709a22" - integrity sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg== - dependencies: - mdn-data "2.0.4" - source-map "^0.6.1" - -css-tree@1.0.0-alpha.39: - version "1.0.0-alpha.39" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.39.tgz#2bff3ffe1bb3f776cf7eefd91ee5cba77a149eeb" - integrity sha512-7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA== - dependencies: - mdn-data "2.0.6" - source-map "^0.6.1" - -css-what@2.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2" - integrity sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg== - -css-what@^3.2.1: - version "3.4.1" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.4.1.tgz#81cb70b609e4b1351b1e54cbc90fd9c54af86e2e" - integrity sha512-wHOppVDKl4vTAOWzJt5Ek37Sgd9qq1Bmj/T1OjvicWbU5W7ru7Pqbn0Jdqii3Drx/h+dixHKXNhZYx7blthL7g== - -css@^2.1.0: - version "2.2.4" - resolved "https://registry.yarnpkg.com/css/-/css-2.2.4.tgz#c646755c73971f2bba6a601e2cf2fd71b1298929" - integrity sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw== - dependencies: - inherits "^2.0.3" - source-map "^0.6.1" - source-map-resolve "^0.5.2" - urix "^0.1.0" - -cssesc@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" - integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== - -cssnano-preset-default@^4.0.0, cssnano-preset-default@^4.0.7: - version "4.0.7" - resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz#51ec662ccfca0f88b396dcd9679cdb931be17f76" - integrity sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA== - dependencies: - css-declaration-sorter "^4.0.1" - cssnano-util-raw-cache "^4.0.1" - postcss "^7.0.0" - postcss-calc "^7.0.1" - postcss-colormin "^4.0.3" - postcss-convert-values "^4.0.1" - postcss-discard-comments "^4.0.2" - postcss-discard-duplicates "^4.0.2" - postcss-discard-empty "^4.0.1" - postcss-discard-overridden "^4.0.1" - postcss-merge-longhand "^4.0.11" - postcss-merge-rules "^4.0.3" - postcss-minify-font-values "^4.0.2" - postcss-minify-gradients "^4.0.2" - postcss-minify-params "^4.0.2" - postcss-minify-selectors "^4.0.2" - postcss-normalize-charset "^4.0.1" - postcss-normalize-display-values "^4.0.2" - postcss-normalize-positions "^4.0.2" - postcss-normalize-repeat-style "^4.0.2" - postcss-normalize-string "^4.0.2" - postcss-normalize-timing-functions "^4.0.2" - postcss-normalize-unicode "^4.0.1" - postcss-normalize-url "^4.0.1" - postcss-normalize-whitespace "^4.0.2" - postcss-ordered-values "^4.1.2" - postcss-reduce-initial "^4.0.3" - postcss-reduce-transforms "^4.0.2" - postcss-svgo "^4.0.2" - postcss-unique-selectors "^4.0.1" - -cssnano-util-get-arguments@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz#ed3a08299f21d75741b20f3b81f194ed49cc150f" - integrity sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8= - -cssnano-util-get-match@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz#c0e4ca07f5386bb17ec5e52250b4f5961365156d" - integrity sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0= - -cssnano-util-raw-cache@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz#b26d5fd5f72a11dfe7a7846fb4c67260f96bf282" - integrity sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA== - dependencies: - postcss "^7.0.0" - -cssnano-util-same-parent@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz#574082fb2859d2db433855835d9a8456ea18bbf3" - integrity sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q== - -cssnano@^4.0.0, cssnano@^4.1.10: - version "4.1.10" - resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-4.1.10.tgz#0ac41f0b13d13d465487e111b778d42da631b8b2" - integrity sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ== - dependencies: - cosmiconfig "^5.0.0" - cssnano-preset-default "^4.0.7" - is-resolvable "^1.0.0" - postcss "^7.0.0" - -csso@^4.0.2: - version "4.0.3" - resolved "https://registry.yarnpkg.com/csso/-/csso-4.0.3.tgz#0d9985dc852c7cc2b2cacfbbe1079014d1a8e903" - integrity sha512-NL3spysxUkcrOgnpsT4Xdl2aiEiBG6bXswAABQVHcMrfjjBisFOKwLDOmf4wf32aPdcJws1zds2B0Rg+jqMyHQ== - dependencies: - css-tree "1.0.0-alpha.39" - -cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": - version "0.3.8" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" - integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== - -cssstyle@^1.0.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-1.4.0.tgz#9d31328229d3c565c61e586b02041a28fccdccf1" - integrity sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA== - dependencies: - cssom "0.3.x" - -current-script-polyfill@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/current-script-polyfill/-/current-script-polyfill-1.0.0.tgz#f31cf7e4f3e218b0726e738ca92a02d3488ef615" - integrity sha1-8xz35PPiGLBybnOMqSoC00iO9hU= - -cyclist@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" - integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= - -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= - dependencies: - assert-plus "^1.0.0" - -data-urls@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.1.0.tgz#15ee0582baa5e22bb59c77140da8f9c76963bbfe" - integrity sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ== - dependencies: - abab "^2.0.0" - whatwg-mimetype "^2.2.0" - whatwg-url "^7.0.0" - -de-indent@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" - integrity sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0= - -deasync@^0.1.15: - version "0.1.20" - resolved "https://registry.yarnpkg.com/deasync/-/deasync-0.1.20.tgz#546fd2660688a1eeed55edce2308c5cf7104f9da" - integrity sha512-E1GI7jMI57hL30OX6Ht/hfQU8DO4AuB9m72WFm4c38GNbUD4Q03//XZaOIHZiY+H1xUaomcot5yk2q/qIZQkGQ== - dependencies: - bindings "^1.5.0" - node-addon-api "^1.7.1" - -debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@=3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== - dependencies: - ms "2.0.0" - -debug@^3.1.0, debug@^3.1.1, debug@^3.2.5: - version "3.2.6" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" - integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== - dependencies: - ms "^2.1.1" - -debug@^3.2.6: - version "3.2.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - -debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: - version "4.2.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.2.0.tgz#7f150f93920e94c58f5574c2fd01a3110effe7f1" - integrity sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg== - dependencies: - ms "2.1.2" - -decamelize@^1.1.1, decamelize@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= - -decode-uri-component@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" - integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= - -deep-equal@^1.0.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" - integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== - dependencies: - is-arguments "^1.0.4" - is-date-object "^1.0.1" - is-regex "^1.0.4" - object-is "^1.0.1" - object-keys "^1.1.1" - regexp.prototype.flags "^1.2.0" - -deep-is@~0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" - integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= - -deepmerge@^1.2.0, deepmerge@^1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-1.5.2.tgz#10499d868844cdad4fee0842df8c7f6f0c95a753" - integrity sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ== - -default-gateway@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b" - integrity sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA== - dependencies: - execa "^1.0.0" - ip-regex "^2.1.0" - -default-gateway@^5.0.2: - version "5.0.5" - resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-5.0.5.tgz#4fd6bd5d2855d39b34cc5a59505486e9aafc9b10" - integrity sha512-z2RnruVmj8hVMmAnEJMTIJNijhKCDiGjbLP+BHJFOT7ld3Bo5qcIBpVYDniqhbMIIf+jZDlkP2MkPXiQy/DBLA== - dependencies: - execa "^3.3.0" - -default-require-extensions@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-1.0.0.tgz#f37ea15d3e13ffd9b437d33e1a75b5fb97874cb8" - integrity sha1-836hXT4T/9m0N9M+GnW1+5eHTLg= - dependencies: - strip-bom "^2.0.0" - -defaults@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" - integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= - dependencies: - clone "^1.0.2" - -define-properties@^1.1.2, define-properties@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" - integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== - dependencies: - object-keys "^1.0.12" - -define-property@^0.2.5: - version "0.2.5" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" - integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= - dependencies: - is-descriptor "^0.1.0" - -define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" - integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= - dependencies: - is-descriptor "^1.0.0" - -define-property@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" - integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== - dependencies: - is-descriptor "^1.0.2" - isobject "^3.0.1" - -defined@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" - integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM= - -del@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4" - integrity sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ== - dependencies: - "@types/glob" "^7.1.1" - globby "^6.1.0" - is-path-cwd "^2.0.0" - is-path-in-cwd "^2.0.0" - p-map "^2.0.0" - pify "^4.0.1" - rimraf "^2.6.3" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= - -depd@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" - integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= - -des.js@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" - integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== - dependencies: - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - -destroy@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" - integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= - -detect-indent@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" - integrity sha1-920GQ1LN9Docts5hnE7jqUdd4gg= - dependencies: - repeating "^2.0.0" - -detect-newline@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" - integrity sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I= - -detect-node@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c" - integrity sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw== - -detective@^4.3.1: - version "4.7.1" - resolved "https://registry.yarnpkg.com/detective/-/detective-4.7.1.tgz#0eca7314338442febb6d65da54c10bb1c82b246e" - integrity sha512-H6PmeeUcZloWtdt4DAkFyzFL94arpHr3NOwwmVILFiy+9Qd4JTxxXrzfyGk/lmct2qVGBwTSwSXagqu2BxmWig== - dependencies: - acorn "^5.2.1" - defined "^1.0.0" - -diff@^3.2.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" - integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== - -diffie-hellman@^5.0.0: - version "5.0.3" - resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" - integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== - dependencies: - bn.js "^4.1.0" - miller-rabin "^4.0.0" - randombytes "^2.0.0" - -dir-glob@^2.0.0, dir-glob@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.2.2.tgz#fa09f0694153c8918b18ba0deafae94769fc50c4" - integrity sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw== - dependencies: - path-type "^3.0.0" - -dns-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" - integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0= - -dns-packet@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.1.tgz#12aa426981075be500b910eedcd0b47dd7deda5a" - integrity sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg== - dependencies: - ip "^1.1.0" - safe-buffer "^5.0.1" - -dns-txt@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6" - integrity sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY= - dependencies: - buffer-indexof "^1.0.0" - -doctrine@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" - integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== - dependencies: - esutils "^2.0.2" - -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - -dom-converter@^0.2: - version "0.2.0" - resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" - integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== - dependencies: - utila "~0.4" - -dom-event-types@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/dom-event-types/-/dom-event-types-1.0.0.tgz#5830a0a29e1bf837fe50a70cd80a597232813cae" - integrity sha512-2G2Vwi2zXTHBGqXHsJ4+ak/iP0N8Ar+G8a7LiD2oup5o4sQWytwqqrZu/O6hIMV0KMID2PL69OhpshLO0n7UJQ== - -dom-serializer@0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" - integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== - dependencies: - domelementtype "^2.0.1" - entities "^2.0.0" - -domain-browser@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" - integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== - -domelementtype@1, domelementtype@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" - integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== - -domelementtype@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.0.2.tgz#f3b6e549201e46f588b59463dd77187131fe6971" - integrity sha512-wFwTwCVebUrMgGeAwRL/NhZtHAUyT9n9yg4IMDwf10+6iCMxSkVq9MGCVEH+QZWo1nNidy8kNvwmv4zWHDTqvA== - -domexception@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" - integrity sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug== - dependencies: - webidl-conversions "^4.0.2" - -domhandler@^2.3.0: - version "2.4.2" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" - integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA== - dependencies: - domelementtype "1" - -domutils@1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" - integrity sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8= - dependencies: - dom-serializer "0" - domelementtype "1" - -domutils@^1.5.1, domutils@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" - integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== - dependencies: - dom-serializer "0" - domelementtype "1" - -dot-prop@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" - integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== - dependencies: - is-obj "^2.0.0" - -dotenv-expand@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz#3fbaf020bfd794884072ea26b1e9791d45a629f0" - integrity sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA== - -dotenv@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-7.0.0.tgz#a2be3cd52736673206e8a85fb5210eea29628e7c" - integrity sha512-M3NhsLbV1i6HuGzBUH8vXrtxOk+tWmzWKDMbAVSUp3Zsjm7ywFeuwrUXhmhQyRK1q5B5GGy7hcXPbj3bnfZg2g== - -duplexer@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" - integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== - -duplexify@^3.4.2, duplexify@^3.6.0: - version "3.7.1" - resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" - integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== - dependencies: - end-of-stream "^1.0.0" - inherits "^2.0.1" - readable-stream "^2.0.0" - stream-shift "^1.0.0" - -easy-stack@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/easy-stack/-/easy-stack-1.0.0.tgz#12c91b3085a37f0baa336e9486eac4bf94e3e788" - integrity sha1-EskbMIWjfwuqM26UhurEv5Tj54g= - -ecc-jsbn@~0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" - integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= - dependencies: - jsbn "~0.1.0" - safer-buffer "^2.1.0" - -editorconfig@^0.15.3: - version "0.15.3" - resolved "https://registry.yarnpkg.com/editorconfig/-/editorconfig-0.15.3.tgz#bef84c4e75fb8dcb0ce5cee8efd51c15999befc5" - integrity sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g== - dependencies: - commander "^2.19.0" - lru-cache "^4.1.5" - semver "^5.6.0" - sigmund "^1.0.1" - -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= - -ejs@^2.6.1: - version "2.7.4" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.7.4.tgz#48661287573dcc53e366c7a1ae52c3a120eec9ba" - integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA== - -electron-to-chromium@^1.3.571: - version "1.3.577" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.577.tgz#9885f3f72c6e3367010b461ff6f2d9624a929720" - integrity sha512-dSb64JQSFif/pD8mpVAgSFkbVi6YHbK6JeEziwNNmXlr/Ne2rZtseFK5SM7JoWSLf6gP0gVvRGi4/2ZRhSX/rA== - -element-ui@^2.15.0: - version "2.15.1" - resolved "https://registry.yarnpkg.com/element-ui/-/element-ui-2.15.1.tgz#ada00aa6e32c02774a2e77563dd84668f813cdff" - integrity sha512-TqlScAKGH97XndSScUDeEHIzL1x7yg7DvQdKPEOUdiDcyIz3y3FJJBlpHYaJT96FOn1xpIcUZb+I2FJeU9EcrQ== - dependencies: - async-validator "~1.8.1" - babel-helper-vue-jsx-merge-props "^2.0.0" - deepmerge "^1.2.0" - normalize-wheel "^1.0.1" - resize-observer-polyfill "^1.5.0" - throttle-debounce "^1.0.1" - -elliptic@^6.5.3: - version "6.5.3" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.3.tgz#cb59eb2efdaf73a0bd78ccd7015a62ad6e0f93d6" - integrity sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw== - dependencies: - bn.js "^4.4.0" - brorand "^1.0.1" - hash.js "^1.0.0" - hmac-drbg "^1.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.0" - -emoji-regex@^7.0.1: - version "7.0.3" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" - integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -emojis-list@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" - integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= - -emojis-list@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" - integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== - -encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= - -end-of-stream@^1.0.0, end-of-stream@^1.1.0: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - -enhanced-resolve@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz#3b806f3bfafc1ec7de69551ef93cca46c1704126" - integrity sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ== - dependencies: - graceful-fs "^4.1.2" - memory-fs "^0.5.0" - tapable "^1.0.0" - -entities@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" - integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== - -entities@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.3.tgz#5c487e5742ab93c15abb5da22759b8590ec03b7f" - integrity sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ== - -envify@^3.4.0: - version "3.4.1" - resolved "https://registry.yarnpkg.com/envify/-/envify-3.4.1.tgz#d7122329e8df1688ba771b12501917c9ce5cbce8" - integrity sha1-1xIjKejfFoi6dxsSUBkXyc5cvOg= - dependencies: - jstransform "^11.0.3" - through "~2.3.4" - -errno@^0.1.1: - version "0.1.8" - resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" - integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== - dependencies: - prr "~1.0.1" - -errno@^0.1.3, errno@~0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" - integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg== - dependencies: - prr "~1.0.1" - -error-ex@^1.2.0, error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - -error-stack-parser@^2.0.0: - version "2.0.6" - resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.0.6.tgz#5a99a707bd7a4c58a797902d48d82803ede6aad8" - integrity sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ== - dependencies: - stackframe "^1.1.1" - -es-abstract@^1.17.0-next.1, es-abstract@^1.17.2, es-abstract@^1.17.5: - version "1.17.7" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.7.tgz#a4de61b2f66989fc7421676c1cb9787573ace54c" - integrity sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g== - dependencies: - es-to-primitive "^1.2.1" - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.1" - is-callable "^1.2.2" - is-regex "^1.1.1" - object-inspect "^1.8.0" - object-keys "^1.1.1" - object.assign "^4.1.1" - string.prototype.trimend "^1.0.1" - string.prototype.trimstart "^1.0.1" - -es-abstract@^1.18.0-next.0, es-abstract@^1.18.0-next.1: - version "1.18.0-next.1" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0-next.1.tgz#6e3a0a4bda717e5023ab3b8e90bec36108d22c68" - integrity sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA== - dependencies: - es-to-primitive "^1.2.1" - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.1" - is-callable "^1.2.2" - is-negative-zero "^2.0.0" - is-regex "^1.1.1" - object-inspect "^1.8.0" - object-keys "^1.1.1" - object.assign "^4.1.1" - string.prototype.trimend "^1.0.1" - string.prototype.trimstart "^1.0.1" - -es-to-primitive@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" - integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - -escalade@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.0.tgz#e8e2d7c7a8b76f6ee64c2181d6b8151441602d4e" - integrity sha512-mAk+hPSO8fLDkhV7V0dXazH5pDc6MrjBTPyD3VeKzxnVFjH1MIxbCdqGZB9O8+EwWakZs3ZCbDS4IpRt79V1ig== - -escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= - -escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= - -escodegen@^1.9.1: - version "1.14.3" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" - integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw== - dependencies: - esprima "^4.0.1" - estraverse "^4.2.0" - esutils "^2.0.2" - optionator "^0.8.1" - optionalDependencies: - source-map "~0.6.1" - -eslint-loader@^2.1.2: - version "2.2.1" - resolved "https://registry.yarnpkg.com/eslint-loader/-/eslint-loader-2.2.1.tgz#28b9c12da54057af0845e2a6112701a2f6bf8337" - integrity sha512-RLgV9hoCVsMLvOxCuNjdqOrUqIj9oJg8hF44vzJaYqsAHuY9G2YAeN3joQ9nxP0p5Th9iFSIpKo+SD8KISxXRg== - dependencies: - loader-fs-cache "^1.0.0" - loader-utils "^1.0.2" - object-assign "^4.0.1" - object-hash "^1.1.4" - rimraf "^2.6.1" - -eslint-plugin-vue@^4.7.1: - version "4.7.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-4.7.1.tgz#c829b9fc62582c1897b5a0b94afd44ecca511e63" - integrity sha512-esETKhVMI7Vdli70Wt4bvAwnZBJeM0pxVX9Yb0wWKxdCJc2EADalVYK/q2FzMw8oKN0wPMdqVCKS8kmR89recA== - dependencies: - vue-eslint-parser "^2.0.3" - -eslint-plugin-vue@^5.0.0: - version "5.2.3" - resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-5.2.3.tgz#3ee7597d823b5478804b2feba9863b1b74273961" - integrity sha512-mGwMqbbJf0+VvpGR5Lllq0PMxvTdrZ/ZPjmhkacrCHbubJeJOt+T6E3HUzAifa2Mxi7RSdJfC9HFpOeSYVMMIw== - dependencies: - vue-eslint-parser "^5.0.0" - -eslint-scope@^3.7.1: - version "3.7.3" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.3.tgz#bb507200d3d17f60247636160b4826284b108535" - integrity sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA== - dependencies: - esrecurse "^4.1.0" - estraverse "^4.1.1" - -eslint-scope@^4.0.0, eslint-scope@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" - integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== - dependencies: - esrecurse "^4.1.0" - estraverse "^4.1.1" - -eslint-utils@^1.3.1: - version "1.4.3" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" - integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q== - dependencies: - eslint-visitor-keys "^1.1.0" - -eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" - integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== - -eslint@^4.19.1: - version "4.19.1" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.19.1.tgz#32d1d653e1d90408854bfb296f076ec7e186a300" - integrity sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ== - dependencies: - ajv "^5.3.0" - babel-code-frame "^6.22.0" - chalk "^2.1.0" - concat-stream "^1.6.0" - cross-spawn "^5.1.0" - debug "^3.1.0" - doctrine "^2.1.0" - eslint-scope "^3.7.1" - eslint-visitor-keys "^1.0.0" - espree "^3.5.4" - esquery "^1.0.0" - esutils "^2.0.2" - file-entry-cache "^2.0.0" - functional-red-black-tree "^1.0.1" - glob "^7.1.2" - globals "^11.0.1" - ignore "^3.3.3" - imurmurhash "^0.1.4" - inquirer "^3.0.6" - is-resolvable "^1.0.0" - js-yaml "^3.9.1" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.3.0" - lodash "^4.17.4" - minimatch "^3.0.2" - mkdirp "^0.5.1" - natural-compare "^1.4.0" - optionator "^0.8.2" - path-is-inside "^1.0.2" - pluralize "^7.0.0" - progress "^2.0.0" - regexpp "^1.0.1" - require-uncached "^1.0.3" - semver "^5.3.0" - strip-ansi "^4.0.0" - strip-json-comments "~2.0.1" - table "4.0.2" - text-table "~0.2.0" - -eslint@^5.16.0: - version "5.16.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.16.0.tgz#a1e3ac1aae4a3fbd8296fcf8f7ab7314cbb6abea" - integrity sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg== - dependencies: - "@babel/code-frame" "^7.0.0" - ajv "^6.9.1" - chalk "^2.1.0" - cross-spawn "^6.0.5" - debug "^4.0.1" - doctrine "^3.0.0" - eslint-scope "^4.0.3" - eslint-utils "^1.3.1" - eslint-visitor-keys "^1.0.0" - espree "^5.0.1" - esquery "^1.0.1" - esutils "^2.0.2" - file-entry-cache "^5.0.1" - functional-red-black-tree "^1.0.1" - glob "^7.1.2" - globals "^11.7.0" - ignore "^4.0.6" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - inquirer "^6.2.2" - js-yaml "^3.13.0" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.3.0" - lodash "^4.17.11" - minimatch "^3.0.4" - mkdirp "^0.5.1" - natural-compare "^1.4.0" - optionator "^0.8.2" - path-is-inside "^1.0.2" - progress "^2.0.0" - regexpp "^2.0.1" - semver "^5.5.1" - strip-ansi "^4.0.0" - strip-json-comments "^2.0.1" - table "^5.2.3" - text-table "^0.2.0" - -espree@^3.5.2, espree@^3.5.4: - version "3.5.4" - resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.4.tgz#b0f447187c8a8bed944b815a660bddf5deb5d1a7" - integrity sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A== - dependencies: - acorn "^5.5.0" - acorn-jsx "^3.0.0" - -espree@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/espree/-/espree-4.1.0.tgz#728d5451e0fd156c04384a7ad89ed51ff54eb25f" - integrity sha512-I5BycZW6FCVIub93TeVY1s7vjhP9CY6cXCznIRfiig7nRviKZYdRnj/sHEWC6A7WE9RDWOFq9+7OsWSYz8qv2w== - dependencies: - acorn "^6.0.2" - acorn-jsx "^5.0.0" - eslint-visitor-keys "^1.0.0" - -espree@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-5.0.1.tgz#5d6526fa4fc7f0788a5cf75b15f30323e2f81f7a" - integrity sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A== - dependencies: - acorn "^6.0.7" - acorn-jsx "^5.0.0" - eslint-visitor-keys "^1.0.0" - -esprima-fb@^15001.1.0-dev-harmony-fb: - version "15001.1.0-dev-harmony-fb" - resolved "https://registry.yarnpkg.com/esprima-fb/-/esprima-fb-15001.1.0-dev-harmony-fb.tgz#30a947303c6b8d5e955bee2b99b1d233206a6901" - integrity sha1-MKlHMDxrjV6VW+4rmbHSMyBqaQE= - -esprima@^4.0.0, esprima@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -esprima@~3.1.0: - version "3.1.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" - integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM= - -esquery@^1.0.0, esquery@^1.0.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57" - integrity sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ== - dependencies: - estraverse "^5.1.0" - -esrecurse@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^4.1.1, estraverse@^4.2.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - -estraverse@^5.1.0, estraverse@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" - integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -etag@~1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= - -event-pubsub@4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/event-pubsub/-/event-pubsub-4.3.0.tgz#f68d816bc29f1ec02c539dc58c8dd40ce72cb36e" - integrity sha512-z7IyloorXvKbFx9Bpie2+vMJKKx1fH1EN5yiTfp8CiLOTptSYy1g8H4yDpGlEdshL1PBiFtBHepF2cNsqeEeFQ== - -eventemitter3@^4.0.0: - version "4.0.7" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" - integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== - -events@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.2.0.tgz#93b87c18f8efcd4202a461aec4dfc0556b639379" - integrity sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg== - -eventsource@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.0.7.tgz#8fbc72c93fcd34088090bc0a4e64f4b5cee6d8d0" - integrity sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ== - dependencies: - original "^1.0.0" - -evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" - integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== - dependencies: - md5.js "^1.3.4" - safe-buffer "^5.1.1" - -exec-sh@^0.2.0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.2.tgz#2a5e7ffcbd7d0ba2755bdecb16e5a427dfbdec36" - integrity sha512-FIUCJz1RbuS0FKTdaAafAByGS0CPvU3R0MeHxgtl+djzCc//F8HakL8GzmVNZanasTbTAY/3DRFA0KpVqj/eAw== - dependencies: - merge "^1.2.0" - -execa@^0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-0.8.0.tgz#d8d76bbc1b55217ed190fd6dd49d3c774ecfc8da" - integrity sha1-2NdrvBtVIX7RkP1t1J08d07PyNo= - dependencies: - cross-spawn "^5.0.1" - get-stream "^3.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - -execa@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" - integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== - dependencies: - cross-spawn "^6.0.0" - get-stream "^4.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - -execa@^3.3.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-3.4.0.tgz#c08ed4550ef65d858fac269ffc8572446f37eb89" - integrity sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g== - dependencies: - cross-spawn "^7.0.0" - get-stream "^5.0.0" - human-signals "^1.1.1" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.0" - onetime "^5.1.0" - p-finally "^2.0.0" - signal-exit "^3.0.2" - strip-final-newline "^2.0.0" - -exit-on-epipe@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz#0bdd92e87d5285d267daa8171d0eb06159689692" - integrity sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw== - -exit@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" - integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= - -expand-brackets@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" - integrity sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s= - dependencies: - is-posix-bracket "^0.1.0" - -expand-brackets@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= - dependencies: - debug "^2.3.3" - define-property "^0.2.5" - extend-shallow "^2.0.1" - posix-character-classes "^0.1.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -expand-range@^1.8.1: - version "1.8.2" - resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" - integrity sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc= - dependencies: - fill-range "^2.1.0" - -expect@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/expect/-/expect-23.6.0.tgz#1e0c8d3ba9a581c87bd71fb9bc8862d443425f98" - integrity sha512-dgSoOHgmtn/aDGRVFWclQyPDKl2CQRq0hmIEoUAuQs/2rn2NcvCWcSCovm6BLeuB/7EZuLGu2QfnR+qRt5OM4w== - dependencies: - ansi-styles "^3.2.0" - jest-diff "^23.6.0" - jest-get-type "^22.1.0" - jest-matcher-utils "^23.6.0" - jest-message-util "^23.4.0" - jest-regex-util "^23.3.0" - -express@^4.16.3, express@^4.17.1: - version "4.17.1" - resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" - integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== - dependencies: - accepts "~1.3.7" - array-flatten "1.1.1" - body-parser "1.19.0" - content-disposition "0.5.3" - content-type "~1.0.4" - cookie "0.4.0" - cookie-signature "1.0.6" - debug "2.6.9" - depd "~1.1.2" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - finalhandler "~1.1.2" - fresh "0.5.2" - merge-descriptors "1.0.1" - methods "~1.1.2" - on-finished "~2.3.0" - parseurl "~1.3.3" - path-to-regexp "0.1.7" - proxy-addr "~2.0.5" - qs "6.7.0" - range-parser "~1.2.1" - safe-buffer "5.1.2" - send "0.17.1" - serve-static "1.14.1" - setprototypeof "1.1.1" - statuses "~1.5.0" - type-is "~1.6.18" - utils-merge "1.0.1" - vary "~1.1.2" - -extend-shallow@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= - dependencies: - is-extendable "^0.1.0" - -extend-shallow@^3.0.0, extend-shallow@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" - integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= - dependencies: - assign-symbols "^1.0.0" - is-extendable "^1.0.1" - -extend@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - -external-editor@^2.0.4: - version "2.2.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5" - integrity sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A== - dependencies: - chardet "^0.4.0" - iconv-lite "^0.4.17" - tmp "^0.0.33" - -external-editor@^3.0.3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" - integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== - dependencies: - chardet "^0.7.0" - iconv-lite "^0.4.24" - tmp "^0.0.33" - -extglob@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" - integrity sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE= - dependencies: - is-extglob "^1.0.0" - -extglob@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" - integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== - dependencies: - array-unique "^0.3.2" - define-property "^1.0.0" - expand-brackets "^2.1.4" - extend-shallow "^2.0.1" - fragment-cache "^0.2.1" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -extract-from-css@^0.4.4: - version "0.4.4" - resolved "https://registry.yarnpkg.com/extract-from-css/-/extract-from-css-0.4.4.tgz#1ea7df2e7c7c6eb9922fa08e8adaea486f6f8f92" - integrity sha1-HqffLnx8brmSL6COitrqSG9vj5I= - dependencies: - css "^2.1.0" - -extsprintf@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= - -extsprintf@^1.2.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" - integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= - -fast-deep-equal@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" - integrity sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ= - -fast-deep-equal@^3.1.1: - version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-glob@^2.2.6: - version "2.2.7" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.7.tgz#6953857c3afa475fff92ee6015d52da70a4cd39d" - integrity sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw== - dependencies: - "@mrmlnc/readdir-enhanced" "^2.2.1" - "@nodelib/fs.stat" "^1.1.2" - glob-parent "^3.1.0" - is-glob "^4.0.0" - merge2 "^1.2.3" - micromatch "^3.1.10" - -fast-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -fast-levenshtein@~2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= - -fastparse@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.2.tgz#91728c5a5942eced8531283c79441ee4122c35a9" - integrity sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ== - -faye-websocket@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" - integrity sha1-TkkvjQTftviQA1B/btvy1QHnxvQ= - dependencies: - websocket-driver ">=0.5.1" - -faye-websocket@~0.11.1: - version "0.11.3" - resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.3.tgz#5c0e9a8968e8912c286639fde977a8b209f2508e" - integrity sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA== - dependencies: - websocket-driver ">=0.5.1" - -fb-watchman@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" - integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== - dependencies: - bser "2.1.1" - -figgy-pudding@^3.5.1: - version "3.5.2" - resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" - integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== - -figures@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" - integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= - dependencies: - escape-string-regexp "^1.0.5" - -file-entry-cache@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" - integrity sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E= - dependencies: - flat-cache "^1.2.1" - object-assign "^4.0.1" - -file-entry-cache@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" - integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== - dependencies: - flat-cache "^2.0.1" - -file-loader@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-3.0.1.tgz#f8e0ba0b599918b51adfe45d66d1e771ad560faa" - integrity sha512-4sNIOXgtH/9WZq4NvlfU3Opn5ynUsqBwSLyM+I7UOwdGigTBYfVVQEwe/msZNX/j4pCJTIM14Fsw66Svo1oVrw== - dependencies: - loader-utils "^1.0.2" - schema-utils "^1.0.0" - -file-saver@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/file-saver/-/file-saver-2.0.2.tgz#06d6e728a9ea2df2cce2f8d9e84dfcdc338ec17a" - integrity sha512-Wz3c3XQ5xroCxd1G8b7yL0Ehkf0TC9oYC6buPFkNnU9EnaPlifeAFCyCh+iewXTyFRcg0a6j3J7FmJsIhlhBdw== - -file-uri-to-path@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" - integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== - -filename-regex@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" - integrity sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY= - -fileset@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/fileset/-/fileset-2.0.3.tgz#8e7548a96d3cc2327ee5e674168723a333bba2a0" - integrity sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA= - dependencies: - glob "^7.0.3" - minimatch "^3.0.3" - -filesize@^3.6.1: - version "3.6.1" - resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.6.1.tgz#090bb3ee01b6f801a8a8be99d31710b3422bb317" - integrity sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg== - -fill-range@^2.1.0: - version "2.2.4" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.4.tgz#eb1e773abb056dcd8df2bfdf6af59b8b3a936565" - integrity sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q== - dependencies: - is-number "^2.1.0" - isobject "^2.0.0" - randomatic "^3.0.0" - repeat-element "^1.1.2" - repeat-string "^1.5.2" - -fill-range@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" - integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= - dependencies: - extend-shallow "^2.0.1" - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range "^2.1.0" - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -finalhandler@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" - integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== - dependencies: - debug "2.6.9" - encodeurl "~1.0.2" - escape-html "~1.0.3" - on-finished "~2.3.0" - parseurl "~1.3.3" - statuses "~1.5.0" - unpipe "~1.0.0" - -find-babel-config@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/find-babel-config/-/find-babel-config-1.2.0.tgz#a9b7b317eb5b9860cda9d54740a8c8337a2283a2" - integrity sha512-jB2CHJeqy6a820ssiqwrKMeyC6nNdmrcgkKWJWmpoxpE8RKciYJXCcXRq1h2AzCo5I5BJeN2tkGEO3hLTuePRA== - dependencies: - json5 "^0.5.1" - path-exists "^3.0.0" - -find-cache-dir@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-0.1.1.tgz#c8defae57c8a52a8a784f9e31c57c742e993a0b9" - integrity sha1-yN765XyKUqinhPnjHFfHQumToLk= - dependencies: - commondir "^1.0.1" - mkdirp "^0.5.1" - pkg-dir "^1.0.0" - -find-cache-dir@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-1.0.0.tgz#9288e3e9e3cc3748717d39eade17cf71fc30ee6f" - integrity sha1-kojj6ePMN0hxfTnq3hfPcfww7m8= - dependencies: - commondir "^1.0.1" - make-dir "^1.0.0" - pkg-dir "^2.0.0" - -find-cache-dir@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" - integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== - dependencies: - commondir "^1.0.1" - make-dir "^2.0.0" - pkg-dir "^3.0.0" - -find-up@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" - integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= - dependencies: - path-exists "^2.0.0" - pinkie-promise "^2.0.0" - -find-up@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= - dependencies: - locate-path "^2.0.0" - -find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== - dependencies: - locate-path "^3.0.0" - -find-up@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== - dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" - -flat-cache@^1.2.1: - version "1.3.4" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.4.tgz#2c2ef77525cc2929007dfffa1dd314aa9c9dee6f" - integrity sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg== - dependencies: - circular-json "^0.3.1" - graceful-fs "^4.1.2" - rimraf "~2.6.2" - write "^0.2.1" - -flat-cache@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" - integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== - dependencies: - flatted "^2.0.0" - rimraf "2.6.3" - write "1.0.3" - -flatted@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" - integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== - -flush-write-stream@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" - integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== - dependencies: - inherits "^2.0.3" - readable-stream "^2.3.6" - -follow-redirects@1.5.10: - version "1.5.10" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a" - integrity sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ== - dependencies: - debug "=3.1.0" - -follow-redirects@^1.0.0: - version "1.13.0" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.0.tgz#b42e8d93a2a7eea5ed88633676d6597bc8e384db" - integrity sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA== - -for-in@^1.0.1, for-in@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= - -for-own@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" - integrity sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4= - dependencies: - for-in "^1.0.1" - -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= - -form-data@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" - integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.6" - mime-types "^2.1.12" - -forwarded@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" - integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= - -frac@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/frac/-/frac-1.1.2.tgz#3d74f7f6478c88a1b5020306d747dc6313c74d0b" - integrity sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA== - -fragment-cache@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" - integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= - dependencies: - map-cache "^0.2.2" - -fresh@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= - -from2@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" - integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= - dependencies: - inherits "^2.0.1" - readable-stream "^2.0.0" - -fs-extra@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" - integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-write-stream-atomic@^1.0.8: - version "1.0.10" - resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" - integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= - dependencies: - graceful-fs "^4.1.2" - iferr "^0.1.5" - imurmurhash "^0.1.4" - readable-stream "1 || 2" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= - -fsevents@^1.2.3, fsevents@^1.2.7: - version "1.2.13" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" - integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== - dependencies: - bindings "^1.5.0" - nan "^2.12.1" - -fsevents@~2.1.2: - version "2.1.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" - integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= - -gensync@^1.0.0-beta.1: - version "1.0.0-beta.1" - resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269" - integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg== - -get-caller-file@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" - integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== - -get-caller-file@^2.0.1: - version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - -get-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" - integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= - -get-stream@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" - integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== - dependencies: - pump "^3.0.0" - -get-stream@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" - integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== - dependencies: - pump "^3.0.0" - -get-value@^2.0.3, get-value@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" - integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= - -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= - dependencies: - assert-plus "^1.0.0" - -glob-base@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" - integrity sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q= - dependencies: - glob-parent "^2.0.0" - is-glob "^2.0.0" - -glob-parent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" - integrity sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg= - dependencies: - is-glob "^2.0.0" - -glob-parent@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" - integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= - dependencies: - is-glob "^3.1.0" - path-dirname "^1.0.0" - -glob-parent@~5.1.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" - integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== - dependencies: - is-glob "^4.0.1" - -glob-to-regexp@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" - integrity sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs= - -glob@^5.0.15: - version "5.0.15" - resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" - integrity sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E= - dependencies: - inflight "^1.0.4" - inherits "2" - minimatch "2 || 3" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: - version "7.1.6" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" - integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -globals@^11.0.1, globals@^11.1.0, globals@^11.7.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - -globals@^9.18.0: - version "9.18.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" - integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ== - -globby@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" - integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= - dependencies: - array-union "^1.0.1" - glob "^7.0.3" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -globby@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/globby/-/globby-7.1.1.tgz#fb2ccff9401f8600945dfada97440cca972b8680" - integrity sha1-+yzP+UAfhgCUXfral0QMypcrhoA= - dependencies: - array-union "^1.0.1" - dir-glob "^2.0.0" - glob "^7.1.2" - ignore "^3.3.5" - pify "^3.0.0" - slash "^1.0.0" - -globby@^9.2.0: - version "9.2.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-9.2.0.tgz#fd029a706c703d29bdd170f4b6db3a3f7a7cb63d" - integrity sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg== - dependencies: - "@types/glob" "^7.1.1" - array-union "^1.0.2" - dir-glob "^2.2.2" - fast-glob "^2.2.6" - glob "^7.1.3" - ignore "^4.0.3" - pify "^4.0.1" - slash "^2.0.0" - -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6: - version "4.2.4" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" - integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== - -growly@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" - integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= - -gzip-size@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-5.1.1.tgz#cb9bee692f87c0612b232840a873904e4c135274" - integrity sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA== - dependencies: - duplexer "^0.1.1" - pify "^4.0.1" - -handle-thing@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" - integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== - -handlebars@^4.0.3: - version "4.7.6" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.6.tgz#d4c05c1baf90e9945f77aa68a7a219aa4a7df74e" - integrity sha512-1f2BACcBfiwAfStCKZNrUCgqNZkGsAT7UM3kkYtXuLo0KnaVfjKOyf7PRzB6++aK9STyT1Pd2ZCPe3EGOXleXA== - dependencies: - minimist "^1.2.5" - neo-async "^2.6.0" - source-map "^0.6.1" - wordwrap "^1.0.0" - optionalDependencies: - uglify-js "^3.1.4" - -har-schema@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= - -har-validator@~5.1.3: - version "5.1.5" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" - integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== - dependencies: - ajv "^6.12.3" - har-schema "^2.0.0" - -has-ansi@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" - integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= - dependencies: - ansi-regex "^2.0.0" - -has-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" - integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo= - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-symbols@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" - integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== - -has-value@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" - integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= - dependencies: - get-value "^2.0.3" - has-values "^0.1.4" - isobject "^2.0.0" - -has-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" - integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= - dependencies: - get-value "^2.0.6" - has-values "^1.0.0" - isobject "^3.0.0" - -has-values@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" - integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= - -has-values@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" - integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - -has@^1.0.0, has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -hash-base@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" - integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== - dependencies: - inherits "^2.0.4" - readable-stream "^3.6.0" - safe-buffer "^5.2.0" - -hash-sum@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/hash-sum/-/hash-sum-1.0.2.tgz#33b40777754c6432573c120cc3808bbd10d47f04" - integrity sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ= - -hash.js@^1.0.0, hash.js@^1.0.3: - version "1.1.7" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" - integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.1" - -he@1.2.x, he@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" - integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== - -hex-color-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" - integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ== - -highlight.js@^9.6.0: - version "9.18.3" - resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.18.3.tgz#a1a0a2028d5e3149e2380f8a865ee8516703d634" - integrity sha512-zBZAmhSupHIl5sITeMqIJnYCDfAEc3Gdkqj65wC1lpI468MMQeeQkhcIAvk+RylAkxrCcI9xy9piHiXeQ1BdzQ== - -hmac-drbg@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" - integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= - dependencies: - hash.js "^1.0.3" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.1" - -home-or-tmp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" - integrity sha1-42w/LSyufXRqhX440Y1fMqeILbg= - dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.1" - -hoopy@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/hoopy/-/hoopy-0.1.4.tgz#609207d661100033a9a9402ad3dea677381c1b1d" - integrity sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ== - -hosted-git-info@^2.1.4: - version "2.8.8" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" - integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== - -hpack.js@^2.1.6: - version "2.1.6" - resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" - integrity sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI= - dependencies: - inherits "^2.0.1" - obuf "^1.0.0" - readable-stream "^2.0.1" - wbuf "^1.1.0" - -hsl-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/hsl-regex/-/hsl-regex-1.0.0.tgz#d49330c789ed819e276a4c0d272dffa30b18fe6e" - integrity sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4= - -hsla-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/hsla-regex/-/hsla-regex-1.0.0.tgz#c1ce7a3168c8c6614033a4b5f7877f3b225f9c38" - integrity sha1-wc56MWjIxmFAM6S194d/OyJfnDg= - -html-comment-regex@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.2.tgz#97d4688aeb5c81886a364faa0cad1dda14d433a7" - integrity sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ== - -html-encoding-sniffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" - integrity sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw== - dependencies: - whatwg-encoding "^1.0.1" - -html-entities@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.3.1.tgz#fb9a1a4b5b14c5daba82d3e34c6ae4fe701a0e44" - integrity sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA== - -html-minifier@^3.2.3: - version "3.5.21" - resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.21.tgz#d0040e054730e354db008463593194015212d20c" - integrity sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA== - dependencies: - camel-case "3.0.x" - clean-css "4.2.x" - commander "2.17.x" - he "1.2.x" - param-case "2.1.x" - relateurl "0.2.x" - uglify-js "3.4.x" - -html-tags@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-2.0.0.tgz#10b30a386085f43cede353cc8fa7cb0deeea668b" - integrity sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos= - -html-webpack-plugin@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz#b01abbd723acaaa7b37b6af4492ebda03d9dd37b" - integrity sha1-sBq71yOsqqeze2r0SS69oD2d03s= - dependencies: - html-minifier "^3.2.3" - loader-utils "^0.2.16" - lodash "^4.17.3" - pretty-error "^2.0.2" - tapable "^1.0.0" - toposort "^1.0.0" - util.promisify "1.0.0" - -htmlparser2@^3.3.0: - version "3.10.1" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" - integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ== - dependencies: - domelementtype "^1.3.1" - domhandler "^2.3.0" - domutils "^1.5.1" - entities "^1.1.1" - inherits "^2.0.1" - readable-stream "^3.1.1" - -http-deceiver@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" - integrity sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc= - -http-errors@1.7.2: - version "1.7.2" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" - integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.1" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.0" - -http-errors@~1.6.2: - version "1.6.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" - integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.0" - statuses ">= 1.4.0 < 2" - -http-errors@~1.7.2: - version "1.7.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" - integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== - dependencies: - depd "~1.1.2" - inherits "2.0.4" - setprototypeof "1.1.1" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.0" - -http-parser-js@>=0.5.1: - version "0.5.2" - resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.2.tgz#da2e31d237b393aae72ace43882dd7e270a8ff77" - integrity sha512-opCO9ASqg5Wy2FNo7A0sxy71yGbbkJJXLdgMK04Tcypw9jr2MgWbyubb0+WdmDmGnFflO7fRbqbaihh/ENDlRQ== - -http-proxy-middleware@0.19.1: - version "0.19.1" - resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a" - integrity sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q== - dependencies: - http-proxy "^1.17.0" - is-glob "^4.0.0" - lodash "^4.17.11" - micromatch "^3.1.10" - -http-proxy@^1.17.0: - version "1.18.1" - resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" - integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== - dependencies: - eventemitter3 "^4.0.0" - follow-redirects "^1.0.0" - requires-port "^1.0.0" - -http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= - dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - -https-browserify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" - integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= - -human-signals@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" - integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== - -iconv-lite@0.4.24, iconv-lite@^0.4.17, iconv-lite@^0.4.24, iconv-lite@^0.4.4, iconv-lite@^0.4.5: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -icss-replace-symbols@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded" - integrity sha1-Bupvg2ead0njhs/h/oEq5dsiPe0= - -icss-utils@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-2.1.0.tgz#83f0a0ec378bf3246178b6c2ad9136f135b1c962" - integrity sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI= - dependencies: - postcss "^6.0.1" - -ieee754@^1.1.4: - version "1.1.13" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" - integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== - -iferr@^0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" - integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= - -ignore@^3.3.3, ignore@^3.3.5: - version "3.3.10" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" - integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug== - -ignore@^4.0.3, ignore@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" - integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== - -image-size@~0.5.0: - version "0.5.5" - resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c" - integrity sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w= - -import-cwd@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9" - integrity sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk= - dependencies: - import-from "^2.1.0" - -import-fresh@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" - integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= - dependencies: - caller-path "^2.0.0" - resolve-from "^3.0.0" - -import-fresh@^3.0.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66" - integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -import-from@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/import-from/-/import-from-2.1.0.tgz#335db7f2a7affd53aaa471d4b8021dee36b7f3b1" - integrity sha1-M1238qev/VOqpHHUuAId7ja387E= - dependencies: - resolve-from "^3.0.0" - -import-local@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-1.0.0.tgz#5e4ffdc03f4fe6c009c6729beb29631c2f8227bc" - integrity sha512-vAaZHieK9qjGo58agRBg+bhHX3hoTZU/Oa3GESWLz7t1U62fk63aHuDJJEteXoDeTCcPmUT+z38gkHPZkkmpmQ== - dependencies: - pkg-dir "^2.0.0" - resolve-cwd "^2.0.0" - -import-local@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" - integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== - dependencies: - pkg-dir "^3.0.0" - resolve-cwd "^2.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= - -indexes-of@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" - integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= - -infer-owner@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" - integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -inherits@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" - integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= - -inherits@2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= - -ini@^1.3.4: - version "1.3.5" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" - integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== - -inquirer@^3.0.6: - version "3.3.0" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9" - integrity sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ== - dependencies: - ansi-escapes "^3.0.0" - chalk "^2.0.0" - cli-cursor "^2.1.0" - cli-width "^2.0.0" - external-editor "^2.0.4" - figures "^2.0.0" - lodash "^4.3.0" - mute-stream "0.0.7" - run-async "^2.2.0" - rx-lite "^4.0.8" - rx-lite-aggregates "^4.0.8" - string-width "^2.1.0" - strip-ansi "^4.0.0" - through "^2.3.6" - -inquirer@^6.2.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca" - integrity sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ== - dependencies: - ansi-escapes "^3.2.0" - chalk "^2.4.2" - cli-cursor "^2.1.0" - cli-width "^2.0.0" - external-editor "^3.0.3" - figures "^2.0.0" - lodash "^4.17.12" - mute-stream "0.0.7" - run-async "^2.2.0" - rxjs "^6.4.0" - string-width "^2.1.0" - strip-ansi "^5.1.0" - through "^2.3.6" - -internal-ip@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907" - integrity sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg== - dependencies: - default-gateway "^4.2.0" - ipaddr.js "^1.9.0" - -invariant@^2.2.2, invariant@^2.2.4: - version "2.2.4" - resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" - integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== - dependencies: - loose-envify "^1.0.0" - -invert-kv@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" - integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== - -ip-regex@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" - integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= - -ip@^1.1.0, ip@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" - integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= - -ipaddr.js@1.9.1, ipaddr.js@^1.9.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" - integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== - -is-absolute-url@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" - integrity sha1-UFMN+4T8yap9vnhS6Do3uTufKqY= - -is-absolute-url@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-3.0.3.tgz#96c6a22b6a23929b11ea0afb1836c36ad4a5d698" - integrity sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q== - -is-accessor-descriptor@^0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" - integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= - dependencies: - kind-of "^3.0.2" - -is-accessor-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" - integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== - dependencies: - kind-of "^6.0.0" - -is-arguments@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.0.4.tgz#3faf966c7cba0ff437fb31f6250082fcf0448cf3" - integrity sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA== - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= - -is-arrayish@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" - integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== - -is-binary-path@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" - integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= - dependencies: - binary-extensions "^1.0.0" - -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - -is-buffer@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== - -is-callable@^1.1.4, is-callable@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.2.tgz#c7c6715cd22d4ddb48d3e19970223aceabb080d9" - integrity sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA== - -is-ci@^1.0.10: - version "1.2.1" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" - integrity sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg== - dependencies: - ci-info "^1.5.0" - -is-color-stop@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-color-stop/-/is-color-stop-1.1.0.tgz#cfff471aee4dd5c9e158598fbe12967b5cdad345" - integrity sha1-z/9HGu5N1cnhWFmPvhKWe1za00U= - dependencies: - css-color-names "^0.0.4" - hex-color-regex "^1.1.0" - hsl-regex "^1.0.0" - hsla-regex "^1.0.0" - rgb-regex "^1.0.1" - rgba-regex "^1.0.0" - -is-data-descriptor@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" - integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= - dependencies: - kind-of "^3.0.2" - -is-data-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" - integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== - dependencies: - kind-of "^6.0.0" - -is-date-object@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" - integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== - -is-descriptor@^0.1.0: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" - integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== - dependencies: - is-accessor-descriptor "^0.1.6" - is-data-descriptor "^0.1.4" - kind-of "^5.0.0" - -is-descriptor@^1.0.0, is-descriptor@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" - integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== - dependencies: - is-accessor-descriptor "^1.0.0" - is-data-descriptor "^1.0.0" - kind-of "^6.0.2" - -is-directory@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" - integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= - -is-docker@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.1.1.tgz#4125a88e44e450d384e09047ede71adc2d144156" - integrity sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw== - -is-dotfile@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" - integrity sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE= - -is-equal-shallow@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" - integrity sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ= - dependencies: - is-primitive "^2.0.0" - -is-extendable@^0.1.0, is-extendable@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= - -is-extendable@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" - integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== - dependencies: - is-plain-object "^2.0.4" - -is-extglob@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" - integrity sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA= - -is-extglob@^2.1.0, is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= - -is-finite@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.1.0.tgz#904135c77fb42c0641d6aa1bcdbc4daa8da082f3" - integrity sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w== - -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= - dependencies: - number-is-nan "^1.0.0" - -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-generator-fn@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-1.0.0.tgz#969d49e1bb3329f6bb7f09089be26578b2ddd46a" - integrity sha1-lp1J4bszKfa7fwkIm+JleLLd1Go= - -is-glob@^2.0.0, is-glob@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" - integrity sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM= - dependencies: - is-extglob "^1.0.0" - -is-glob@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" - integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= - dependencies: - is-extglob "^2.1.0" - -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" - integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== - dependencies: - is-extglob "^2.1.1" - -is-negative-zero@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.0.tgz#9553b121b0fac28869da9ed459e20c7543788461" - integrity sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE= - -is-number@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" - integrity sha1-Afy7s5NGOlSPL0ZszhbezknbkI8= - dependencies: - kind-of "^3.0.2" - -is-number@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= - dependencies: - kind-of "^3.0.2" - -is-number@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff" - integrity sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ== - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-obj@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" - integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== - -is-path-cwd@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" - integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== - -is-path-in-cwd@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz#bfe2dca26c69f397265a4009963602935a053acb" - integrity sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ== - dependencies: - is-path-inside "^2.1.0" - -is-path-inside@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2" - integrity sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg== - dependencies: - path-is-inside "^1.0.2" - -is-plain-obj@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" - integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= - -is-plain-object@^2.0.3, is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== - dependencies: - isobject "^3.0.1" - -is-posix-bracket@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" - integrity sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q= - -is-primitive@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" - integrity sha1-IHurkWOEmcB7Kt8kCkGochADRXU= - -is-regex@^1.0.4, is-regex@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.1.tgz#c6f98aacc546f6cec5468a07b7b153ab564a57b9" - integrity sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg== - dependencies: - has-symbols "^1.0.1" - -is-resolvable@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" - integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== - -is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= - -is-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" - integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== - -is-svg@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-3.0.0.tgz#9321dbd29c212e5ca99c4fa9794c714bcafa2f75" - integrity sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ== - dependencies: - html-comment-regex "^1.1.0" - -is-symbol@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" - integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== - dependencies: - has-symbols "^1.0.1" - -is-typedarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= - -is-utf8@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" - integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= - -is-what@^3.12.0: - version "3.14.1" - resolved "https://registry.yarnpkg.com/is-what/-/is-what-3.14.1.tgz#e1222f46ddda85dead0fd1c9df131760e77755c1" - integrity sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA== - -is-whitespace@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/is-whitespace/-/is-whitespace-0.3.0.tgz#1639ecb1be036aec69a54cbb401cfbed7114ab7f" - integrity sha1-Fjnssb4DauxppUy7QBz77XEUq38= - -is-windows@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" - integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== - -is-wsl@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" - integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= - -is-wsl@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" - integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== - dependencies: - is-docker "^2.0.0" - -isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= - -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= - dependencies: - isarray "1.0.0" - -isobject@^3.0.0, isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= - -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= - -istanbul-api@^1.3.1: - version "1.3.7" - resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.3.7.tgz#a86c770d2b03e11e3f778cd7aedd82d2722092aa" - integrity sha512-4/ApBnMVeEPG3EkSzcw25wDe4N66wxwn+KKn6b47vyek8Xb3NBAcg4xfuQbS7BqcZuTX4wxfD5lVagdggR3gyA== - dependencies: - async "^2.1.4" - fileset "^2.0.2" - istanbul-lib-coverage "^1.2.1" - istanbul-lib-hook "^1.2.2" - istanbul-lib-instrument "^1.10.2" - istanbul-lib-report "^1.1.5" - istanbul-lib-source-maps "^1.2.6" - istanbul-reports "^1.5.1" - js-yaml "^3.7.0" - mkdirp "^0.5.1" - once "^1.4.0" - -istanbul-lib-coverage@^1.2.0, istanbul-lib-coverage@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz#ccf7edcd0a0bb9b8f729feeb0930470f9af664f0" - integrity sha512-PzITeunAgyGbtY1ibVIUiV679EFChHjoMNRibEIobvmrCRaIgwLxNucOSimtNWUhEib/oO7QY2imD75JVgCJWQ== - -istanbul-lib-hook@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.2.2.tgz#bc6bf07f12a641fbf1c85391d0daa8f0aea6bf86" - integrity sha512-/Jmq7Y1VeHnZEQ3TL10VHyb564mn6VrQXHchON9Jf/AEcmQ3ZIiyD1BVzNOKTZf/G3gE+kiGK6SmpF9y3qGPLw== - dependencies: - append-transform "^0.4.0" - -istanbul-lib-instrument@^1.10.1, istanbul-lib-instrument@^1.10.2: - version "1.10.2" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.2.tgz#1f55ed10ac3c47f2bdddd5307935126754d0a9ca" - integrity sha512-aWHxfxDqvh/ZlxR8BBaEPVSWDPUkGD63VjGQn3jcw8jCp7sHEMKcrj4xfJn/ABzdMEHiQNyvDQhqm5o8+SQg7A== - dependencies: - babel-generator "^6.18.0" - babel-template "^6.16.0" - babel-traverse "^6.18.0" - babel-types "^6.18.0" - babylon "^6.18.0" - istanbul-lib-coverage "^1.2.1" - semver "^5.3.0" - -istanbul-lib-report@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.5.tgz#f2a657fc6282f96170aaf281eb30a458f7f4170c" - integrity sha512-UsYfRMoi6QO/doUshYNqcKJqVmFe9w51GZz8BS3WB0lYxAllQYklka2wP9+dGZeHYaWIdcXUx8JGdbqaoXRXzw== - dependencies: - istanbul-lib-coverage "^1.2.1" - mkdirp "^0.5.1" - path-parse "^1.0.5" - supports-color "^3.1.2" - -istanbul-lib-source-maps@^1.2.4, istanbul-lib-source-maps@^1.2.6: - version "1.2.6" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.6.tgz#37b9ff661580f8fca11232752ee42e08c6675d8f" - integrity sha512-TtbsY5GIHgbMsMiRw35YBHGpZ1DVFEO19vxxeiDMYaeOFOCzfnYVxvl6pOUIZR4dtPhAGpSMup8OyF8ubsaqEg== - dependencies: - debug "^3.1.0" - istanbul-lib-coverage "^1.2.1" - mkdirp "^0.5.1" - rimraf "^2.6.1" - source-map "^0.5.3" - -istanbul-reports@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.5.1.tgz#97e4dbf3b515e8c484caea15d6524eebd3ff4e1a" - integrity sha512-+cfoZ0UXzWjhAdzosCPP3AN8vvef8XDkWtTfgaN+7L3YTpNYITnCaEkceo5SEYy644VkHka/P1FvkWvrG/rrJw== - dependencies: - handlebars "^4.0.3" - -javascript-stringify@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/javascript-stringify/-/javascript-stringify-1.6.0.tgz#142d111f3a6e3dae8f4a9afd77d45855b5a9cce3" - integrity sha1-FC0RHzpuPa6PSpr9d9RYVbWpzOM= - -jest-changed-files@^23.4.2: - version "23.4.2" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-23.4.2.tgz#1eed688370cd5eebafe4ae93d34bb3b64968fe83" - integrity sha512-EyNhTAUWEfwnK0Is/09LxoqNDOn7mU7S3EHskG52djOFS/z+IT0jT3h3Ql61+dklcG7bJJitIWEMB4Sp1piHmA== - dependencies: - throat "^4.0.0" - -jest-cli@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-23.6.0.tgz#61ab917744338f443ef2baa282ddffdd658a5da4" - integrity sha512-hgeD1zRUp1E1zsiyOXjEn4LzRLWdJBV//ukAHGlx6s5mfCNJTbhbHjgxnDUXA8fsKWN/HqFFF6X5XcCwC/IvYQ== - dependencies: - ansi-escapes "^3.0.0" - chalk "^2.0.1" - exit "^0.1.2" - glob "^7.1.2" - graceful-fs "^4.1.11" - import-local "^1.0.0" - is-ci "^1.0.10" - istanbul-api "^1.3.1" - istanbul-lib-coverage "^1.2.0" - istanbul-lib-instrument "^1.10.1" - istanbul-lib-source-maps "^1.2.4" - jest-changed-files "^23.4.2" - jest-config "^23.6.0" - jest-environment-jsdom "^23.4.0" - jest-get-type "^22.1.0" - jest-haste-map "^23.6.0" - jest-message-util "^23.4.0" - jest-regex-util "^23.3.0" - jest-resolve-dependencies "^23.6.0" - jest-runner "^23.6.0" - jest-runtime "^23.6.0" - jest-snapshot "^23.6.0" - jest-util "^23.4.0" - jest-validate "^23.6.0" - jest-watcher "^23.4.0" - jest-worker "^23.2.0" - micromatch "^2.3.11" - node-notifier "^5.2.1" - prompts "^0.1.9" - realpath-native "^1.0.0" - rimraf "^2.5.4" - slash "^1.0.0" - string-length "^2.0.0" - strip-ansi "^4.0.0" - which "^1.2.12" - yargs "^11.0.0" - -jest-config@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-23.6.0.tgz#f82546a90ade2d8c7026fbf6ac5207fc22f8eb1d" - integrity sha512-i8V7z9BeDXab1+VNo78WM0AtWpBRXJLnkT+lyT+Slx/cbP5sZJ0+NDuLcmBE5hXAoK0aUp7vI+MOxR+R4d8SRQ== - dependencies: - babel-core "^6.0.0" - babel-jest "^23.6.0" - chalk "^2.0.1" - glob "^7.1.1" - jest-environment-jsdom "^23.4.0" - jest-environment-node "^23.4.0" - jest-get-type "^22.1.0" - jest-jasmine2 "^23.6.0" - jest-regex-util "^23.3.0" - jest-resolve "^23.6.0" - jest-util "^23.4.0" - jest-validate "^23.6.0" - micromatch "^2.3.11" - pretty-format "^23.6.0" - -jest-diff@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-23.6.0.tgz#1500f3f16e850bb3d71233408089be099f610c7d" - integrity sha512-Gz9l5Ov+X3aL5L37IT+8hoCUsof1CVYBb2QEkOupK64XyRR3h+uRpYIm97K7sY8diFxowR8pIGEdyfMKTixo3g== - dependencies: - chalk "^2.0.1" - diff "^3.2.0" - jest-get-type "^22.1.0" - pretty-format "^23.6.0" - -jest-docblock@^23.2.0: - version "23.2.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-23.2.0.tgz#f085e1f18548d99fdd69b20207e6fd55d91383a7" - integrity sha1-8IXh8YVI2Z/dabICB+b9VdkTg6c= - dependencies: - detect-newline "^2.1.0" - -jest-each@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-23.6.0.tgz#ba0c3a82a8054387016139c733a05242d3d71575" - integrity sha512-x7V6M/WGJo6/kLoissORuvLIeAoyo2YqLOoCDkohgJ4XOXSqOtyvr8FbInlAWS77ojBsZrafbozWoKVRdtxFCg== - dependencies: - chalk "^2.0.1" - pretty-format "^23.6.0" - -jest-environment-jsdom@^23.4.0: - version "23.4.0" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-23.4.0.tgz#056a7952b3fea513ac62a140a2c368c79d9e6023" - integrity sha1-BWp5UrP+pROsYqFAosNox52eYCM= - dependencies: - jest-mock "^23.2.0" - jest-util "^23.4.0" - jsdom "^11.5.1" - -jest-environment-node@^23.4.0: - version "23.4.0" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-23.4.0.tgz#57e80ed0841dea303167cce8cd79521debafde10" - integrity sha1-V+gO0IQd6jAxZ8zozXlSHeuv3hA= - dependencies: - jest-mock "^23.2.0" - jest-util "^23.4.0" - -jest-get-type@^22.1.0: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-22.4.3.tgz#e3a8504d8479342dd4420236b322869f18900ce4" - integrity sha512-/jsz0Y+V29w1chdXVygEKSz2nBoHoYqNShPe+QgxSNjAuP1i8+k4LbQNrfoliKej0P45sivkSCh7yiD6ubHS3w== - -jest-haste-map@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-23.6.0.tgz#2e3eb997814ca696d62afdb3f2529f5bbc935e16" - integrity sha512-uyNhMyl6dr6HaXGHp8VF7cK6KpC6G9z9LiMNsst+rJIZ8l7wY0tk8qwjPmEghczojZ2/ZhtEdIabZ0OQRJSGGg== - dependencies: - fb-watchman "^2.0.0" - graceful-fs "^4.1.11" - invariant "^2.2.4" - jest-docblock "^23.2.0" - jest-serializer "^23.0.1" - jest-worker "^23.2.0" - micromatch "^2.3.11" - sane "^2.0.0" - -jest-jasmine2@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-23.6.0.tgz#840e937f848a6c8638df24360ab869cc718592e0" - integrity sha512-pe2Ytgs1nyCs8IvsEJRiRTPC0eVYd8L/dXJGU08GFuBwZ4sYH/lmFDdOL3ZmvJR8QKqV9MFuwlsAi/EWkFUbsQ== - dependencies: - babel-traverse "^6.0.0" - chalk "^2.0.1" - co "^4.6.0" - expect "^23.6.0" - is-generator-fn "^1.0.0" - jest-diff "^23.6.0" - jest-each "^23.6.0" - jest-matcher-utils "^23.6.0" - jest-message-util "^23.4.0" - jest-snapshot "^23.6.0" - jest-util "^23.4.0" - pretty-format "^23.6.0" - -jest-leak-detector@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-23.6.0.tgz#e4230fd42cf381a1a1971237ad56897de7e171de" - integrity sha512-f/8zA04rsl1Nzj10HIyEsXvYlMpMPcy0QkQilVZDFOaPbv2ur71X5u2+C4ZQJGyV/xvVXtCCZ3wQ99IgQxftCg== - dependencies: - pretty-format "^23.6.0" - -jest-matcher-utils@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-23.6.0.tgz#726bcea0c5294261a7417afb6da3186b4b8cac80" - integrity sha512-rosyCHQfBcol4NsckTn01cdelzWLU9Cq7aaigDf8VwwpIRvWE/9zLgX2bON+FkEW69/0UuYslUe22SOdEf2nog== - dependencies: - chalk "^2.0.1" - jest-get-type "^22.1.0" - pretty-format "^23.6.0" - -jest-message-util@^23.4.0: - version "23.4.0" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-23.4.0.tgz#17610c50942349508d01a3d1e0bda2c079086a9f" - integrity sha1-F2EMUJQjSVCNAaPR4L2iwHkIap8= - dependencies: - "@babel/code-frame" "^7.0.0-beta.35" - chalk "^2.0.1" - micromatch "^2.3.11" - slash "^1.0.0" - stack-utils "^1.0.1" - -jest-mock@^23.2.0: - version "23.2.0" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-23.2.0.tgz#ad1c60f29e8719d47c26e1138098b6d18b261134" - integrity sha1-rRxg8p6HGdR8JuETgJi20YsmETQ= - -jest-regex-util@^23.3.0: - version "23.3.0" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-23.3.0.tgz#5f86729547c2785c4002ceaa8f849fe8ca471bc5" - integrity sha1-X4ZylUfCeFxAAs6qj4Sf6MpHG8U= - -jest-resolve-dependencies@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-23.6.0.tgz#b4526af24c8540d9a3fab102c15081cf509b723d" - integrity sha512-EkQWkFWjGKwRtRyIwRwI6rtPAEyPWlUC2MpzHissYnzJeHcyCn1Hc8j7Nn1xUVrS5C6W5+ZL37XTem4D4pLZdA== - dependencies: - jest-regex-util "^23.3.0" - jest-snapshot "^23.6.0" - -jest-resolve@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-23.6.0.tgz#cf1d1a24ce7ee7b23d661c33ba2150f3aebfa0ae" - integrity sha512-XyoRxNtO7YGpQDmtQCmZjum1MljDqUCob7XlZ6jy9gsMugHdN2hY4+Acz9Qvjz2mSsOnPSH7skBmDYCHXVZqkA== - dependencies: - browser-resolve "^1.11.3" - chalk "^2.0.1" - realpath-native "^1.0.0" - -jest-runner@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-23.6.0.tgz#3894bd219ffc3f3cb94dc48a4170a2e6f23a5a38" - integrity sha512-kw0+uj710dzSJKU6ygri851CObtCD9cN8aNkg8jWJf4ewFyEa6kwmiH/r/M1Ec5IL/6VFa0wnAk6w+gzUtjJzA== - dependencies: - exit "^0.1.2" - graceful-fs "^4.1.11" - jest-config "^23.6.0" - jest-docblock "^23.2.0" - jest-haste-map "^23.6.0" - jest-jasmine2 "^23.6.0" - jest-leak-detector "^23.6.0" - jest-message-util "^23.4.0" - jest-runtime "^23.6.0" - jest-util "^23.4.0" - jest-worker "^23.2.0" - source-map-support "^0.5.6" - throat "^4.0.0" - -jest-runtime@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-23.6.0.tgz#059e58c8ab445917cd0e0d84ac2ba68de8f23082" - integrity sha512-ycnLTNPT2Gv+TRhnAYAQ0B3SryEXhhRj1kA6hBPSeZaNQkJ7GbZsxOLUkwg6YmvWGdX3BB3PYKFLDQCAE1zNOw== - dependencies: - babel-core "^6.0.0" - babel-plugin-istanbul "^4.1.6" - chalk "^2.0.1" - convert-source-map "^1.4.0" - exit "^0.1.2" - fast-json-stable-stringify "^2.0.0" - graceful-fs "^4.1.11" - jest-config "^23.6.0" - jest-haste-map "^23.6.0" - jest-message-util "^23.4.0" - jest-regex-util "^23.3.0" - jest-resolve "^23.6.0" - jest-snapshot "^23.6.0" - jest-util "^23.4.0" - jest-validate "^23.6.0" - micromatch "^2.3.11" - realpath-native "^1.0.0" - slash "^1.0.0" - strip-bom "3.0.0" - write-file-atomic "^2.1.0" - yargs "^11.0.0" - -jest-serializer-vue@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/jest-serializer-vue/-/jest-serializer-vue-2.0.2.tgz#b238ef286357ec6b480421bd47145050987d59b3" - integrity sha1-sjjvKGNX7GtIBCG9RxRQUJh9WbM= - dependencies: - pretty "2.0.0" - -jest-serializer@^23.0.1: - version "23.0.1" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-23.0.1.tgz#a3776aeb311e90fe83fab9e533e85102bd164165" - integrity sha1-o3dq6zEekP6D+rnlM+hRAr0WQWU= - -jest-snapshot@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-23.6.0.tgz#f9c2625d1b18acda01ec2d2b826c0ce58a5aa17a" - integrity sha512-tM7/Bprftun6Cvj2Awh/ikS7zV3pVwjRYU2qNYS51VZHgaAMBs5l4o/69AiDHhQrj5+LA2Lq4VIvK7zYk/bswg== - dependencies: - babel-types "^6.0.0" - chalk "^2.0.1" - jest-diff "^23.6.0" - jest-matcher-utils "^23.6.0" - jest-message-util "^23.4.0" - jest-resolve "^23.6.0" - mkdirp "^0.5.1" - natural-compare "^1.4.0" - pretty-format "^23.6.0" - semver "^5.5.0" - -jest-transform-stub@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/jest-transform-stub/-/jest-transform-stub-2.0.0.tgz#19018b0851f7568972147a5d60074b55f0225a7d" - integrity sha512-lspHaCRx/mBbnm3h4uMMS3R5aZzMwyNpNIJLXj4cEsV0mIUtS4IjYJLSoyjRCtnxb6RIGJ4NL2quZzfIeNhbkg== - -jest-util@^23.4.0: - version "23.4.0" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-23.4.0.tgz#4d063cb927baf0a23831ff61bec2cbbf49793561" - integrity sha1-TQY8uSe68KI4Mf9hvsLLv0l5NWE= - dependencies: - callsites "^2.0.0" - chalk "^2.0.1" - graceful-fs "^4.1.11" - is-ci "^1.0.10" - jest-message-util "^23.4.0" - mkdirp "^0.5.1" - slash "^1.0.0" - source-map "^0.6.0" - -jest-validate@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-23.6.0.tgz#36761f99d1ed33fcd425b4e4c5595d62b6597474" - integrity sha512-OFKapYxe72yz7agrDAWi8v2WL8GIfVqcbKRCLbRG9PAxtzF9b1SEDdTpytNDN12z2fJynoBwpMpvj2R39plI2A== - dependencies: - chalk "^2.0.1" - jest-get-type "^22.1.0" - leven "^2.1.0" - pretty-format "^23.6.0" - -jest-watch-typeahead@0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/jest-watch-typeahead/-/jest-watch-typeahead-0.2.1.tgz#6c40f232996ca6c39977e929e9f79b189e7d87e4" - integrity sha512-xdhEtKSj0gmnkDQbPTIHvcMmXNUDzYpHLEJ5TFqlaI+schi2NI96xhWiZk9QoesAS7oBmKwWWsHazTrYl2ORgg== - dependencies: - ansi-escapes "^3.0.0" - chalk "^2.4.1" - jest-watcher "^23.1.0" - slash "^2.0.0" - string-length "^2.0.0" - strip-ansi "^5.0.0" - -jest-watcher@^23.1.0, jest-watcher@^23.4.0: - version "23.4.0" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-23.4.0.tgz#d2e28ce74f8dad6c6afc922b92cabef6ed05c91c" - integrity sha1-0uKM50+NrWxq/JIrksq+9u0FyRw= - dependencies: - ansi-escapes "^3.0.0" - chalk "^2.0.1" - string-length "^2.0.0" - -jest-worker@^23.2.0: - version "23.2.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-23.2.0.tgz#faf706a8da36fae60eb26957257fa7b5d8ea02b9" - integrity sha1-+vcGqNo2+uYOsmlXJX+ntdjqArk= - dependencies: - merge-stream "^1.0.1" - -jest@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest/-/jest-23.6.0.tgz#ad5835e923ebf6e19e7a1d7529a432edfee7813d" - integrity sha512-lWzcd+HSiqeuxyhG+EnZds6iO3Y3ZEnMrfZq/OTGvF/C+Z4fPMCdhWTGSAiO2Oym9rbEXfwddHhh6jqrTF3+Lw== - dependencies: - import-local "^1.0.0" - jest-cli "^23.6.0" - -jquery@^1.11.0: - version "1.12.4" - resolved "https://registry.yarnpkg.com/jquery/-/jquery-1.12.4.tgz#01e1dfba290fe73deba77ceeacb0f9ba2fec9e0c" - integrity sha1-AeHfuikP5z3rp3zurLD5ui/sngw= - -js-base64@^2.5.1: - version "2.6.4" - resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.6.4.tgz#f4e686c5de1ea1f867dbcad3d46d969428df98c4" - integrity sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ== - -js-beautify@^1.6.12, js-beautify@^1.6.14: - version "1.13.0" - resolved "https://registry.yarnpkg.com/js-beautify/-/js-beautify-1.13.0.tgz#a056d5d3acfd4918549aae3ab039f9f3c51eebb2" - integrity sha512-/Tbp1OVzZjbwzwJQFIlYLm9eWQ+3aYbBXLSaqb1mEJzhcQAfrqMMQYtjb6io+U6KpD0ID4F+Id3/xcjH3l/sqA== - dependencies: - config-chain "^1.1.12" - editorconfig "^0.15.3" - glob "^7.1.3" - mkdirp "^1.0.4" - nopt "^5.0.0" - -js-levenshtein@^1.1.3: - version "1.1.6" - resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.6.tgz#c6cee58eb3550372df8deb85fad5ce66ce01d59d" - integrity sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g== - -js-message@1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/js-message/-/js-message-1.0.5.tgz#2300d24b1af08e89dd095bc1a4c9c9cfcb892d15" - integrity sha1-IwDSSxrwjondCVvBpMnJz8uJLRU= - -js-queue@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/js-queue/-/js-queue-2.0.0.tgz#362213cf860f468f0125fc6c96abc1742531f948" - integrity sha1-NiITz4YPRo8BJfxslqvBdCUx+Ug= - dependencies: - easy-stack "^1.0.0" - -"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-tokens@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" - integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= - -js-yaml@^3.13.0, js-yaml@^3.13.1, js-yaml@^3.7.0, js-yaml@^3.9.1: - version "3.14.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" - integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= - -jsdom@^11.5.1: - version "11.12.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.12.0.tgz#1a80d40ddd378a1de59656e9e6dc5a3ba8657bc8" - integrity sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw== - dependencies: - abab "^2.0.0" - acorn "^5.5.3" - acorn-globals "^4.1.0" - array-equal "^1.0.0" - cssom ">= 0.3.2 < 0.4.0" - cssstyle "^1.0.0" - data-urls "^1.0.0" - domexception "^1.0.1" - escodegen "^1.9.1" - html-encoding-sniffer "^1.0.2" - left-pad "^1.3.0" - nwsapi "^2.0.7" - parse5 "4.0.0" - pn "^1.1.0" - request "^2.87.0" - request-promise-native "^1.0.5" - sax "^1.2.4" - symbol-tree "^3.2.2" - tough-cookie "^2.3.4" - w3c-hr-time "^1.0.1" - webidl-conversions "^4.0.2" - whatwg-encoding "^1.0.3" - whatwg-mimetype "^2.1.0" - whatwg-url "^6.4.1" - ws "^5.2.0" - xml-name-validator "^3.0.0" - -jsesc@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" - integrity sha1-RsP+yMGJKxKwgz25vHYiF226s0s= - -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= - -json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" - integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== - -json-parse-even-better-errors@^2.3.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" - integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== - -json-schema-traverse@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" - integrity sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A= - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-schema@0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" - integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= - -json-stringify-safe@~5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= - -json3@^3.3.2: - version "3.3.3" - resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81" - integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA== - -json5@^0.5.0, json5@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" - integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE= - -json5@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" - integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== - dependencies: - minimist "^1.2.0" - -json5@^2.1.2: - version "2.1.3" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" - integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== - dependencies: - minimist "^1.2.5" - -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= - optionalDependencies: - graceful-fs "^4.1.6" - -jsprim@^1.2.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" - integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.2.3" - verror "1.10.0" - -jstransform@^11.0.3: - version "11.0.3" - resolved "https://registry.yarnpkg.com/jstransform/-/jstransform-11.0.3.tgz#09a78993e0ae4d4ef4487f6155a91f6190cb4223" - integrity sha1-CaeJk+CuTU70SH9hVakfYZDLQiM= - dependencies: - base62 "^1.1.0" - commoner "^0.10.1" - esprima-fb "^15001.1.0-dev-harmony-fb" - object-assign "^2.0.0" - source-map "^0.4.2" - -killable@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" - integrity sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg== - -kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= - dependencies: - is-buffer "^1.1.5" - -kind-of@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= - dependencies: - is-buffer "^1.1.5" - -kind-of@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" - integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== - -kind-of@^6.0.0, kind-of@^6.0.2: - version "6.0.3" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" - integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== - -kleur@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/kleur/-/kleur-2.0.2.tgz#b704f4944d95e255d038f0cb05fb8a602c55a300" - integrity sha512-77XF9iTllATmG9lSlIv0qdQ2BQ/h9t0bJllHlbvsQ0zUWfU7Yi0S8L5JXzPZgkefIiajLmBJJ4BsMJmqcf7oxQ== - -klona@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.4.tgz#7bb1e3affb0cb8624547ef7e8f6708ea2e39dfc0" - integrity sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA== - -launch-editor-middleware@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/launch-editor-middleware/-/launch-editor-middleware-2.2.1.tgz#e14b07e6c7154b0a4b86a0fd345784e45804c157" - integrity sha512-s0UO2/gEGiCgei3/2UN3SMuUj1phjQN8lcpnvgLSz26fAzNWPQ6Nf/kF5IFClnfU2ehp6LrmKdMU/beveO+2jg== - dependencies: - launch-editor "^2.2.1" - -launch-editor@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.2.1.tgz#871b5a3ee39d6680fcc26d37930b6eeda89db0ca" - integrity sha512-On+V7K2uZK6wK7x691ycSUbLD/FyKKelArkbaAMSSJU8JmqmhwN2+mnJDNINuJWSrh2L0kDk+ZQtbC/gOWUwLw== - dependencies: - chalk "^2.3.0" - shell-quote "^1.6.1" - -lcid@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" - integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA== - dependencies: - invert-kv "^2.0.0" - -left-pad@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e" - integrity sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA== - -less-loader@^7.2.1: - version "7.3.0" - resolved "https://registry.yarnpkg.com/less-loader/-/less-loader-7.3.0.tgz#f9d6d36d18739d642067a05fb5bd70c8c61317e5" - integrity sha512-Mi8915g7NMaLlgi77mgTTQvK022xKRQBIVDSyfl3ErTuBhmZBQab0mjeJjNNqGbdR+qrfTleKXqbGI4uEFavxg== - dependencies: - klona "^2.0.4" - loader-utils "^2.0.0" - schema-utils "^3.0.0" - -less@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/less/-/less-4.1.1.tgz#15bf253a9939791dc690888c3ff424f3e6c7edba" - integrity sha512-w09o8tZFPThBscl5d0Ggp3RcrKIouBoQscnOMgFH3n5V3kN/CXGHNfCkRPtxJk6nKryDXaV9aHLK55RXuH4sAw== - dependencies: - copy-anything "^2.0.1" - parse-node-version "^1.0.1" - tslib "^1.10.0" - optionalDependencies: - errno "^0.1.1" - graceful-fs "^4.1.2" - image-size "~0.5.0" - make-dir "^2.1.0" - mime "^1.4.1" - needle "^2.5.2" - source-map "~0.6.0" - -leven@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" - integrity sha1-wuep93IJTe6dNCAq6KzORoeHVYA= - -levn@^0.3.0, levn@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= - dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" - -lines-and-columns@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" - integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= - -load-json-file@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" - integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA= - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - pinkie-promise "^2.0.0" - strip-bom "^2.0.0" - -loader-fs-cache@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/loader-fs-cache/-/loader-fs-cache-1.0.3.tgz#f08657646d607078be2f0a032f8bd69dd6f277d9" - integrity sha512-ldcgZpjNJj71n+2Mf6yetz+c9bM4xpKtNds4LbqXzU/PTdeAX0g3ytnU1AJMEcTk2Lex4Smpe3Q/eCTsvUBxbA== - dependencies: - find-cache-dir "^0.1.1" - mkdirp "^0.5.1" - -loader-runner@^2.3.1, loader-runner@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" - integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== - -loader-utils@^0.2.16: - version "0.2.17" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348" - integrity sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g= - dependencies: - big.js "^3.1.3" - emojis-list "^2.0.0" - json5 "^0.5.0" - object-assign "^4.0.1" - -loader-utils@^1.0.1, loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" - integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== - dependencies: - big.js "^5.2.2" - emojis-list "^3.0.0" - json5 "^1.0.1" - -loader-utils@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.0.tgz#e4cace5b816d425a166b5f097e10cd12b36064b0" - integrity sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ== - dependencies: - big.js "^5.2.2" - emojis-list "^3.0.0" - json5 "^2.1.2" - -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= - dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" - -locate-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" - integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== - dependencies: - p-locate "^3.0.0" - path-exists "^3.0.0" - -locate-path@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" - integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== - dependencies: - p-locate "^4.1.0" - -lodash.defaultsdeep@^4.6.1: - version "4.6.1" - resolved "https://registry.yarnpkg.com/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz#512e9bd721d272d94e3d3a63653fa17516741ca6" - integrity sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA== - -lodash.kebabcase@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz#8489b1cb0d29ff88195cceca448ff6d6cc295c36" - integrity sha1-hImxyw0p/4gZXM7KRI/21swpXDY= - -lodash.mapvalues@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz#1bafa5005de9dd6f4f26668c30ca37230cc9689c" - integrity sha1-G6+lAF3p3W9PJmaMMMo3IwzJaJw= - -lodash.memoize@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" - integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= - -lodash.sortby@^4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" - integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= - -lodash.transform@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.transform/-/lodash.transform-4.6.0.tgz#12306422f63324aed8483d3f38332b5f670547a0" - integrity sha1-EjBkIvYzJK7YSD0/ODMrX2cFR6A= - -lodash.uniq@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" - integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= - -lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.3.0: - version "4.17.20" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" - integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== - -log-symbols@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" - integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== - dependencies: - chalk "^2.0.1" - -loglevel@^1.6.8: - version "1.7.0" - resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.7.0.tgz#728166855a740d59d38db01cf46f042caa041bb0" - integrity sha512-i2sY04nal5jDcagM3FMfG++T69GEEM8CYuOfeOIvmXzOIcwE9a/CJPR0MFM97pYMj/u10lzz7/zd7+qwhrBTqQ== - -loose-envify@^1.0.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" - integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== - dependencies: - js-tokens "^3.0.0 || ^4.0.0" - -lower-case@^1.1.1: - version "1.1.4" - resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" - integrity sha1-miyr0bno4K6ZOkv31YdcOcQujqw= - -lru-cache@^4.0.1, lru-cache@^4.1.1, lru-cache@^4.1.2, lru-cache@^4.1.5: - version "4.1.5" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" - integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== - dependencies: - pseudomap "^1.0.2" - yallist "^2.1.2" - -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - -make-dir@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" - integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== - dependencies: - pify "^3.0.0" - -make-dir@^2.0.0, make-dir@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" - integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== - dependencies: - pify "^4.0.1" - semver "^5.6.0" - -makeerror@1.0.x: - version "1.0.11" - resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" - integrity sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= - dependencies: - tmpl "1.0.x" - -map-age-cleaner@^0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" - integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== - dependencies: - p-defer "^1.0.0" - -map-cache@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" - integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= - -map-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" - integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= - dependencies: - object-visit "^1.0.0" - -math-random@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.4.tgz#5dd6943c938548267016d4e34f057583080c514c" - integrity sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A== - -md5.js@^1.3.4: - version "1.3.5" - resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" - integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - -mdn-data@2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b" - integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA== - -mdn-data@2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.6.tgz#852dc60fcaa5daa2e8cf6c9189c440ed3e042978" - integrity sha512-rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA== - -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= - -mem@^4.0.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" - integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w== - dependencies: - map-age-cleaner "^0.1.1" - mimic-fn "^2.0.0" - p-is-promise "^2.0.0" - -memory-fs@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" - integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= - dependencies: - errno "^0.1.3" - readable-stream "^2.0.1" - -memory-fs@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c" - integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA== - dependencies: - errno "^0.1.3" - readable-stream "^2.0.1" - -merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= - -merge-source-map@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/merge-source-map/-/merge-source-map-1.1.0.tgz#2fdde7e6020939f70906a68f2d7ae685e4c8c646" - integrity sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw== - dependencies: - source-map "^0.6.1" - -merge-stream@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1" - integrity sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE= - dependencies: - readable-stream "^2.0.1" - -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - -merge2@^1.2.3: - version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -merge@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.1.tgz#38bebf80c3220a8a487b6fcfb3941bb11720c145" - integrity sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ== - -methods@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= - -micromatch@^2.3.11: - version "2.3.11" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" - integrity sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU= - dependencies: - arr-diff "^2.0.0" - array-unique "^0.2.1" - braces "^1.8.2" - expand-brackets "^0.1.4" - extglob "^0.3.1" - filename-regex "^2.0.0" - is-extglob "^1.0.0" - is-glob "^2.0.1" - kind-of "^3.0.2" - normalize-path "^2.0.1" - object.omit "^2.0.0" - parse-glob "^3.0.4" - regex-cache "^0.4.2" - -micromatch@^3.1.10, micromatch@^3.1.4: - version "3.1.10" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" - integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - braces "^2.3.1" - define-property "^2.0.2" - extend-shallow "^3.0.2" - extglob "^2.0.4" - fragment-cache "^0.2.1" - kind-of "^6.0.2" - nanomatch "^1.2.9" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.2" - -miller-rabin@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" - integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== - dependencies: - bn.js "^4.0.0" - brorand "^1.0.1" - -mime-db@1.44.0: - version "1.44.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" - integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== - -"mime-db@>= 1.43.0 < 2": - version "1.45.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.45.0.tgz#cceeda21ccd7c3a745eba2decd55d4b73e7879ea" - integrity sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w== - -mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24: - version "2.1.27" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" - integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== - dependencies: - mime-db "1.44.0" - -mime@1.6.0, mime@^1.4.1: - version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - -mime@^2.0.3, mime@^2.4.4: - version "2.4.6" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.6.tgz#e5b407c90db442f2beb5b162373d07b69affa4d1" - integrity sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA== - -mimic-fn@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" - integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== - -mimic-fn@^2.0.0, mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -mini-css-extract-plugin@^0.8.0: - version "0.8.2" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.8.2.tgz#a875e169beb27c88af77dd962771c9eedc3da161" - integrity sha512-a3Y4of27Wz+mqK3qrcd3VhYz6cU0iW5x3Sgvqzbj+XmlrSizmvu8QQMl5oMYJjgHOC4iyt+w7l4umP+dQeW3bw== - dependencies: - loader-utils "^1.1.0" - normalize-url "1.9.1" - schema-utils "^1.0.0" - webpack-sources "^1.1.0" - -minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" - integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== - -minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" - integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= - -"minimatch@2 || 3", minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - -minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" - integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== - -mississippi@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-2.0.0.tgz#3442a508fafc28500486feea99409676e4ee5a6f" - integrity sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw== - dependencies: - concat-stream "^1.5.0" - duplexify "^3.4.2" - end-of-stream "^1.1.0" - flush-write-stream "^1.0.0" - from2 "^2.1.0" - parallel-transform "^1.1.0" - pump "^2.0.1" - pumpify "^1.3.3" - stream-each "^1.1.0" - through2 "^2.0.0" - -mississippi@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" - integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA== - dependencies: - concat-stream "^1.5.0" - duplexify "^3.4.2" - end-of-stream "^1.1.0" - flush-write-stream "^1.0.0" - from2 "^2.1.0" - parallel-transform "^1.1.0" - pump "^3.0.0" - pumpify "^1.3.3" - stream-each "^1.1.0" - through2 "^2.0.0" - -mixin-deep@^1.2.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" - integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== - dependencies: - for-in "^1.0.2" - is-extendable "^1.0.1" - -mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5, mkdirp@~0.5.1: - version "0.5.5" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" - integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== - dependencies: - minimist "^1.2.5" - -mkdirp@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - -moment@^2.24.0: - version "2.29.0" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.0.tgz#fcbef955844d91deb55438613ddcec56e86a3425" - integrity sha512-z6IJ5HXYiuxvFTI6eiQ9dm77uE0gyy1yXNApVHqTcnIKfY9tIwEjlzsZ6u1LQXvVgKeTnv9Xm7NDvJ7lso3MtA== - -move-concurrently@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" - integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= - dependencies: - aproba "^1.1.1" - copy-concurrently "^1.0.0" - fs-write-stream-atomic "^1.0.8" - mkdirp "^0.5.1" - rimraf "^2.5.4" - run-queue "^1.0.3" - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= - -ms@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" - integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== - -ms@2.1.2, ms@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -multicast-dns-service-types@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" - integrity sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE= - -multicast-dns@^6.0.1: - version "6.2.3" - resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229" - integrity sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g== - dependencies: - dns-packet "^1.3.1" - thunky "^1.0.2" - -mute-stream@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" - integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= - -mz@^2.4.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" - integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== - dependencies: - any-promise "^1.0.0" - object-assign "^4.0.1" - thenify-all "^1.0.0" - -nan@^2.12.1: - version "2.14.1" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.1.tgz#d7be34dfa3105b91494c3147089315eff8874b01" - integrity sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw== - -nanomatch@^1.2.9: - version "1.2.13" - resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" - integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - define-property "^2.0.2" - extend-shallow "^3.0.2" - fragment-cache "^0.2.1" - is-windows "^1.0.2" - kind-of "^6.0.2" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= - -needle@^2.5.2: - version "2.6.0" - resolved "https://registry.yarnpkg.com/needle/-/needle-2.6.0.tgz#24dbb55f2509e2324b4a99d61f413982013ccdbe" - integrity sha512-KKYdza4heMsEfSWD7VPUIz3zX2XDwOyX2d+geb4vrERZMT5RMU6ujjaD+I5Yr54uZxQ2w6XRTAhHBbSCyovZBg== - dependencies: - debug "^3.2.6" - iconv-lite "^0.4.4" - sax "^1.2.4" - -negotiator@0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" - integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== - -neo-async@^2.5.0, neo-async@^2.6.0, neo-async@^2.6.1: - version "2.6.2" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" - integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== - -nice-try@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" - integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== - -no-case@^2.2.0: - version "2.3.2" - resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac" - integrity sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ== - dependencies: - lower-case "^1.1.1" - -node-addon-api@^1.7.1: - version "1.7.2" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-1.7.2.tgz#3df30b95720b53c24e59948b49532b662444f54d" - integrity sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg== - -node-cache@^4.1.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/node-cache/-/node-cache-4.2.1.tgz#efd8474dee4edec4138cdded580f5516500f7334" - integrity sha512-BOb67bWg2dTyax5kdef5WfU3X8xu4wPg+zHzkvls0Q/QpYycIFRLEEIdAx9Wma43DxG6Qzn4illdZoYseKWa4A== - dependencies: - clone "2.x" - lodash "^4.17.15" - -node-forge@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3" - integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA== - -node-int64@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" - integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= - -node-ipc@^9.1.1: - version "9.1.1" - resolved "https://registry.yarnpkg.com/node-ipc/-/node-ipc-9.1.1.tgz#4e245ed6938e65100e595ebc5dc34b16e8dd5d69" - integrity sha512-FAyICv0sIRJxVp3GW5fzgaf9jwwRQxAKDJlmNFUL5hOy+W4X/I5AypyHoq0DXXbo9o/gt79gj++4cMr4jVWE/w== - dependencies: - event-pubsub "4.3.0" - js-message "1.0.5" - js-queue "2.0.0" - -node-libs-browser@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" - integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== - dependencies: - assert "^1.1.1" - browserify-zlib "^0.2.0" - buffer "^4.3.0" - console-browserify "^1.1.0" - constants-browserify "^1.0.0" - crypto-browserify "^3.11.0" - domain-browser "^1.1.1" - events "^3.0.0" - https-browserify "^1.0.0" - os-browserify "^0.3.0" - path-browserify "0.0.1" - process "^0.11.10" - punycode "^1.2.4" - querystring-es3 "^0.2.0" - readable-stream "^2.3.3" - stream-browserify "^2.0.1" - stream-http "^2.7.2" - string_decoder "^1.0.0" - timers-browserify "^2.0.4" - tty-browserify "0.0.0" - url "^0.11.0" - util "^0.11.0" - vm-browserify "^1.0.1" - -node-notifier@^5.2.1: - version "5.4.3" - resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.4.3.tgz#cb72daf94c93904098e28b9c590fd866e464bd50" - integrity sha512-M4UBGcs4jeOK9CjTsYwkvH6/MzuUmGCyTW+kCY7uO+1ZVr0+FHGdPdIf5CCLqAaxnRrWidyoQlNkMIIVwbKB8Q== - dependencies: - growly "^1.3.0" - is-wsl "^1.1.0" - semver "^5.5.0" - shellwords "^0.1.1" - which "^1.3.0" - -node-releases@^1.1.61: - version "1.1.61" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.61.tgz#707b0fca9ce4e11783612ba4a2fcba09047af16e" - integrity sha512-DD5vebQLg8jLCOzwupn954fbIiZht05DAZs0k2u8NStSe6h9XdsuIQL8hSRKYiU8WUQRznmSDrKGbv3ObOmC7g== - -nopt@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" - integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== - dependencies: - abbrev "1" - -normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" - integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== - dependencies: - hosted-git-info "^2.1.4" - resolve "^1.10.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -normalize-path@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-1.0.0.tgz#32d0e472f91ff345701c15a8311018d3b0a90379" - integrity sha1-MtDkcvkf80VwHBWoMRAY07CpA3k= - -normalize-path@^2.0.1, normalize-path@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= - dependencies: - remove-trailing-separator "^1.0.1" - -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -normalize-range@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" - integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= - -normalize-url@1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" - integrity sha1-LMDWazHqIwNkWENuNiDYWVTGbDw= - dependencies: - object-assign "^4.0.1" - prepend-http "^1.0.0" - query-string "^4.1.0" - sort-keys "^1.0.0" - -normalize-url@^3.0.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" - integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== - -normalize-wheel@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/normalize-wheel/-/normalize-wheel-1.0.1.tgz#aec886affdb045070d856447df62ecf86146ec45" - integrity sha1-rsiGr/2wRQcNhWRH32Ls+GFG7EU= - -npm-run-path@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= - dependencies: - path-key "^2.0.0" - -npm-run-path@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" - integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== - dependencies: - path-key "^3.0.0" - -nth-check@^1.0.2, nth-check@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" - integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== - dependencies: - boolbase "~1.0.0" - -num2fraction@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" - integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4= - -number-is-nan@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= - -nwsapi@^2.0.7: - version "2.2.0" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" - integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== - -oauth-sign@~0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" - integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== - -object-assign@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-2.1.1.tgz#43c36e5d569ff8e4816c4efa8be02d26967c18aa" - integrity sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo= - -object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= - -object-copy@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" - integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= - dependencies: - copy-descriptor "^0.1.0" - define-property "^0.2.5" - kind-of "^3.0.3" - -object-hash@^1.1.4: - version "1.3.1" - resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-1.3.1.tgz#fde452098a951cb145f039bb7d455449ddc126df" - integrity sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA== - -object-inspect@^1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.8.0.tgz#df807e5ecf53a609cc6bfe93eac3cc7be5b3a9d0" - integrity sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA== - -object-is@^1.0.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.3.tgz#2e3b9e65560137455ee3bd62aec4d90a2ea1cc81" - integrity sha512-teyqLvFWzLkq5B9ki8FVWA902UER2qkxmdA4nLf+wjOLAWgxzCWZNCxpDq9MvE8MmhWNr+I8w3BN49Vx36Y6Xg== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.18.0-next.1" - -object-keys@^1.0.12, object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object-visit@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" - integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= - dependencies: - isobject "^3.0.0" - -object.assign@^4.1.0, object.assign@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.1.tgz#303867a666cdd41936ecdedfb1f8f3e32a478cdd" - integrity sha512-VT/cxmx5yaoHSOTSyrCygIDFco+RsibY2NM0a4RdEeY/4KgqezwFtK1yr3U67xYhqJSlASm2pKhLVzPj2lr4bA== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.18.0-next.0" - has-symbols "^1.0.1" - object-keys "^1.1.1" - -object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz#369bf1f9592d8ab89d712dced5cb81c7c5352649" - integrity sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" - -object.omit@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" - integrity sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo= - dependencies: - for-own "^0.1.4" - is-extendable "^0.1.1" - -object.pick@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" - integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= - dependencies: - isobject "^3.0.1" - -object.values@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.1.tgz#68a99ecde356b7e9295a3c5e0ce31dc8c953de5e" - integrity sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" - function-bind "^1.1.1" - has "^1.0.3" - -obuf@^1.0.0, obuf@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" - integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== - -on-finished@~2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" - integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= - dependencies: - ee-first "1.1.1" - -on-headers@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" - integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== - -once@^1.3.0, once@^1.3.1, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= - dependencies: - wrappy "1" - -onetime@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" - integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= - dependencies: - mimic-fn "^1.0.0" - -onetime@^5.1.0: - version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - -open@^6.3.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/open/-/open-6.4.0.tgz#5c13e96d0dc894686164f18965ecfe889ecfc8a9" - integrity sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg== - dependencies: - is-wsl "^1.1.0" - -opener@^1.5.1: - version "1.5.2" - resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" - integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== - -opn@^5.5.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc" - integrity sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA== - dependencies: - is-wsl "^1.1.0" - -optionator@^0.8.1, optionator@^0.8.2: - version "0.8.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" - integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== - dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.6" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - word-wrap "~1.2.3" - -ora@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/ora/-/ora-3.4.0.tgz#bf0752491059a3ef3ed4c85097531de9fdbcd318" - integrity sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg== - dependencies: - chalk "^2.4.2" - cli-cursor "^2.1.0" - cli-spinners "^2.0.0" - log-symbols "^2.2.0" - strip-ansi "^5.2.0" - wcwidth "^1.0.1" - -original@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" - integrity sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg== - dependencies: - url-parse "^1.4.3" - -os-browserify@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" - integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= - -os-homedir@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" - integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= - -os-locale@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" - integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q== - dependencies: - execa "^1.0.0" - lcid "^2.0.0" - mem "^4.0.0" - -os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= - -p-defer@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" - integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= - -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= - -p-finally@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-2.0.1.tgz#bd6fcaa9c559a096b680806f4d657b3f0f240561" - integrity sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw== - -p-is-promise@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" - integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== - -p-limit@^1.0.0, p-limit@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" - integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== - dependencies: - p-try "^1.0.0" - -p-limit@^2.0.0, p-limit@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" - integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== - dependencies: - p-try "^2.0.0" - -p-locate@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= - dependencies: - p-limit "^1.1.0" - -p-locate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" - integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== - dependencies: - p-limit "^2.0.0" - -p-locate@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" - integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== - dependencies: - p-limit "^2.2.0" - -p-map@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" - integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== - -p-retry@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-3.0.1.tgz#316b4c8893e2c8dc1cfa891f406c4b422bebf328" - integrity sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w== - dependencies: - retry "^0.12.0" - -p-try@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" - integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= - -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== - -pako@~1.0.5: - version "1.0.11" - resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" - integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== - -parallel-transform@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" - integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg== - dependencies: - cyclist "^1.0.1" - inherits "^2.0.3" - readable-stream "^2.1.5" - -param-case@2.1.x: - version "2.1.1" - resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247" - integrity sha1-35T9jPZTHs915r75oIWPvHK+Ikc= - dependencies: - no-case "^2.2.0" - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -parse-asn1@^5.0.0, parse-asn1@^5.1.5: - version "5.1.6" - resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4" - integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== - dependencies: - asn1.js "^5.2.0" - browserify-aes "^1.0.0" - evp_bytestokey "^1.0.0" - pbkdf2 "^3.0.3" - safe-buffer "^5.1.1" - -parse-glob@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" - integrity sha1-ssN2z7EfNVE7rdFz7wu246OIORw= - dependencies: - glob-base "^0.3.0" - is-dotfile "^1.0.0" - is-extglob "^1.0.0" - is-glob "^2.0.0" - -parse-json@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" - integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= - dependencies: - error-ex "^1.2.0" - -parse-json@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" - integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= - dependencies: - error-ex "^1.3.1" - json-parse-better-errors "^1.0.1" - -parse-json@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.1.0.tgz#f96088cdf24a8faa9aea9a009f2d9d942c999646" - integrity sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ== - dependencies: - "@babel/code-frame" "^7.0.0" - error-ex "^1.3.1" - json-parse-even-better-errors "^2.3.0" - lines-and-columns "^1.1.6" - -parse-node-version@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parse-node-version/-/parse-node-version-1.0.1.tgz#e2b5dbede00e7fa9bc363607f53327e8b073189b" - integrity sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA== - -parse5-htmlparser2-tree-adapter@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-5.1.1.tgz#e8c743d4e92194d5293ecde2b08be31e67461cbc" - integrity sha512-CF+TKjXqoqyDwHqBhFQ+3l5t83xYi6fVT1tQNg+Ye0JRLnTxWvIroCjEp1A0k4lneHNBGnICUf0cfYVYGEazqw== - dependencies: - parse5 "^5.1.1" - -parse5@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" - integrity sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA== - -parse5@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" - integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== - -parseurl@~1.3.2, parseurl@~1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" - integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== - -pascalcase@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= - -path-browserify@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" - integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== - -path-dirname@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" - integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= - -path-exists@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" - integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= - dependencies: - pinkie-promise "^2.0.0" - -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= - -path-is-inside@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" - integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= - -path-key@^2.0.0, path-key@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= - -path-key@^3.0.0, path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-parse@^1.0.5, path-parse@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" - integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== - -path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" - integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= - -path-type@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" - integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE= - dependencies: - graceful-fs "^4.1.2" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -path-type@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" - integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== - dependencies: - pify "^3.0.0" - -pbkdf2@^3.0.3: - version "3.1.1" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.1.tgz#cb8724b0fada984596856d1a6ebafd3584654b94" - integrity sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg== - dependencies: - create-hash "^1.1.2" - create-hmac "^1.1.4" - ripemd160 "^2.0.1" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -perfect-scrollbar@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/perfect-scrollbar/-/perfect-scrollbar-1.5.0.tgz#821d224ed8ff61990c23f26db63048cdc75b6b83" - integrity sha512-NrNHJn5mUGupSiheBTy6x+6SXCFbLlm8fVZh9moIzw/LgqElN5q4ncR4pbCBCYuCJ8Kcl9mYM0NgDxvW+b4LxA== - -performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= - -picomatch@^2.0.4, picomatch@^2.2.1: - version "2.2.2" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" - integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== - -pify@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= - -pify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= - -pify@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" - integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== - -pinkie-promise@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" - integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= - dependencies: - pinkie "^2.0.0" - -pinkie@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" - integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= - -pkg-dir@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" - integrity sha1-ektQio1bstYp1EcFb/TpyTFM89Q= - dependencies: - find-up "^1.0.0" - -pkg-dir@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" - integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= - dependencies: - find-up "^2.1.0" - -pkg-dir@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" - integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== - dependencies: - find-up "^3.0.0" - -pkg-up@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-2.0.0.tgz#c819ac728059a461cab1c3889a2be3c49a004d7f" - integrity sha1-yBmscoBZpGHKscOImivjxJoATX8= - dependencies: - find-up "^2.1.0" - -pluralize@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" - integrity sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow== - -pn@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" - integrity sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA== - -portfinder@^1.0.20, portfinder@^1.0.26: - version "1.0.28" - resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.28.tgz#67c4622852bd5374dd1dd900f779f53462fac778" - integrity sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA== - dependencies: - async "^2.6.2" - debug "^3.1.1" - mkdirp "^0.5.5" - -posix-character-classes@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" - integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= - -postcss-calc@^7.0.1: - version "7.0.5" - resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-7.0.5.tgz#f8a6e99f12e619c2ebc23cf6c486fdc15860933e" - integrity sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg== - dependencies: - postcss "^7.0.27" - postcss-selector-parser "^6.0.2" - postcss-value-parser "^4.0.2" - -postcss-colormin@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-4.0.3.tgz#ae060bce93ed794ac71264f08132d550956bd381" - integrity sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw== - dependencies: - browserslist "^4.0.0" - color "^3.0.0" - has "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-convert-values@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz#ca3813ed4da0f812f9d43703584e449ebe189a7f" - integrity sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ== - dependencies: - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-discard-comments@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz#1fbabd2c246bff6aaad7997b2b0918f4d7af4033" - integrity sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg== - dependencies: - postcss "^7.0.0" - -postcss-discard-duplicates@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz#3fe133cd3c82282e550fc9b239176a9207b784eb" - integrity sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ== - dependencies: - postcss "^7.0.0" - -postcss-discard-empty@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz#c8c951e9f73ed9428019458444a02ad90bb9f765" - integrity sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w== - dependencies: - postcss "^7.0.0" - -postcss-discard-overridden@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz#652aef8a96726f029f5e3e00146ee7a4e755ff57" - integrity sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg== - dependencies: - postcss "^7.0.0" - -postcss-load-config@^2.0.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.1.2.tgz#c5ea504f2c4aef33c7359a34de3573772ad7502a" - integrity sha512-/rDeGV6vMUo3mwJZmeHfEDvwnTKKqQ0S7OHUi/kJvvtx3aWtyWG2/0ZWnzCt2keEclwN6Tf0DST2v9kITdOKYw== - dependencies: - cosmiconfig "^5.0.0" - import-cwd "^2.0.0" - -postcss-loader@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-3.0.0.tgz#6b97943e47c72d845fa9e03f273773d4e8dd6c2d" - integrity sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA== - dependencies: - loader-utils "^1.1.0" - postcss "^7.0.0" - postcss-load-config "^2.0.0" - schema-utils "^1.0.0" - -postcss-merge-longhand@^4.0.11: - version "4.0.11" - resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz#62f49a13e4a0ee04e7b98f42bb16062ca2549e24" - integrity sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw== - dependencies: - css-color-names "0.0.4" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - stylehacks "^4.0.0" - -postcss-merge-rules@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz#362bea4ff5a1f98e4075a713c6cb25aefef9a650" - integrity sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ== - dependencies: - browserslist "^4.0.0" - caniuse-api "^3.0.0" - cssnano-util-same-parent "^4.0.0" - postcss "^7.0.0" - postcss-selector-parser "^3.0.0" - vendors "^1.0.0" - -postcss-minify-font-values@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz#cd4c344cce474343fac5d82206ab2cbcb8afd5a6" - integrity sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg== - dependencies: - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-minify-gradients@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz#93b29c2ff5099c535eecda56c4aa6e665a663471" - integrity sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q== - dependencies: - cssnano-util-get-arguments "^4.0.0" - is-color-stop "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-minify-params@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz#6b9cef030c11e35261f95f618c90036d680db874" - integrity sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg== - dependencies: - alphanum-sort "^1.0.0" - browserslist "^4.0.0" - cssnano-util-get-arguments "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - uniqs "^2.0.0" - -postcss-minify-selectors@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz#e2e5eb40bfee500d0cd9243500f5f8ea4262fbd8" - integrity sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g== - dependencies: - alphanum-sort "^1.0.0" - has "^1.0.0" - postcss "^7.0.0" - postcss-selector-parser "^3.0.0" - -postcss-modules-extract-imports@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.1.tgz#dc87e34148ec7eab5f791f7cd5849833375b741a" - integrity sha512-6jt9XZwUhwmRUhb/CkyJY020PYaPJsCyt3UjbaWo6XEbH/94Hmv6MP7fG2C5NDU/BcHzyGYxNtHvM+LTf9HrYw== - dependencies: - postcss "^6.0.1" - -postcss-modules-local-by-default@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz#f7d80c398c5a393fa7964466bd19500a7d61c069" - integrity sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk= - dependencies: - css-selector-tokenizer "^0.7.0" - postcss "^6.0.1" - -postcss-modules-scope@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz#d6ea64994c79f97b62a72b426fbe6056a194bb90" - integrity sha1-1upkmUx5+XtipytCb75gVqGUu5A= - dependencies: - css-selector-tokenizer "^0.7.0" - postcss "^6.0.1" - -postcss-modules-values@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz#ecffa9d7e192518389f42ad0e83f72aec456ea20" - integrity sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA= - dependencies: - icss-replace-symbols "^1.1.0" - postcss "^6.0.1" - -postcss-normalize-charset@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz#8b35add3aee83a136b0471e0d59be58a50285dd4" - integrity sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g== - dependencies: - postcss "^7.0.0" - -postcss-normalize-display-values@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz#0dbe04a4ce9063d4667ed2be476bb830c825935a" - integrity sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ== - dependencies: - cssnano-util-get-match "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-positions@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz#05f757f84f260437378368a91f8932d4b102917f" - integrity sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA== - dependencies: - cssnano-util-get-arguments "^4.0.0" - has "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-repeat-style@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz#c4ebbc289f3991a028d44751cbdd11918b17910c" - integrity sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q== - dependencies: - cssnano-util-get-arguments "^4.0.0" - cssnano-util-get-match "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-string@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz#cd44c40ab07a0c7a36dc5e99aace1eca4ec2690c" - integrity sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA== - dependencies: - has "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-timing-functions@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz#8e009ca2a3949cdaf8ad23e6b6ab99cb5e7d28d9" - integrity sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A== - dependencies: - cssnano-util-get-match "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-unicode@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz#841bd48fdcf3019ad4baa7493a3d363b52ae1cfb" - integrity sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg== - dependencies: - browserslist "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-url@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz#10e437f86bc7c7e58f7b9652ed878daaa95faae1" - integrity sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA== - dependencies: - is-absolute-url "^2.0.0" - normalize-url "^3.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-whitespace@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz#bf1d4070fe4fcea87d1348e825d8cc0c5faa7d82" - integrity sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA== - dependencies: - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-ordered-values@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz#0cf75c820ec7d5c4d280189559e0b571ebac0eee" - integrity sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw== - dependencies: - cssnano-util-get-arguments "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-reduce-initial@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz#7fd42ebea5e9c814609639e2c2e84ae270ba48df" - integrity sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA== - dependencies: - browserslist "^4.0.0" - caniuse-api "^3.0.0" - has "^1.0.0" - postcss "^7.0.0" - -postcss-reduce-transforms@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz#17efa405eacc6e07be3414a5ca2d1074681d4e29" - integrity sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg== - dependencies: - cssnano-util-get-match "^4.0.0" - has "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-selector-parser@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz#b310f5c4c0fdaf76f94902bbaa30db6aa84f5270" - integrity sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA== - dependencies: - dot-prop "^5.2.0" - indexes-of "^1.0.1" - uniq "^1.0.1" - -postcss-selector-parser@^6.0.2: - version "6.0.4" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz#56075a1380a04604c38b063ea7767a129af5c2b3" - integrity sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw== - dependencies: - cssesc "^3.0.0" - indexes-of "^1.0.1" - uniq "^1.0.1" - util-deprecate "^1.0.2" - -postcss-svgo@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-4.0.2.tgz#17b997bc711b333bab143aaed3b8d3d6e3d38258" - integrity sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw== - dependencies: - is-svg "^3.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - svgo "^1.0.0" - -postcss-unique-selectors@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz#9446911f3289bfd64c6d680f073c03b1f9ee4bac" - integrity sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg== - dependencies: - alphanum-sort "^1.0.0" - postcss "^7.0.0" - uniqs "^2.0.0" - -postcss-value-parser@^3.0.0, postcss-value-parser@^3.3.0: - version "3.3.1" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" - integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== - -postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" - integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== - -postcss@^6.0.1, postcss@^6.0.23: - version "6.0.23" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324" - integrity sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag== - dependencies: - chalk "^2.4.1" - source-map "^0.6.1" - supports-color "^5.4.0" - -postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.27, postcss@^7.0.32: - version "7.0.35" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.35.tgz#d2be00b998f7f211d8a276974079f2e92b970e24" - integrity sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg== - dependencies: - chalk "^2.4.2" - source-map "^0.6.1" - supports-color "^6.1.0" - -preact@^8.4.2: - version "8.5.3" - resolved "https://registry.yarnpkg.com/preact/-/preact-8.5.3.tgz#78c2a5562fcecb1fed1d0055fa4ac1e27bde17c1" - integrity sha512-O3kKP+1YdgqHOFsZF2a9JVdtqD+RPzCQc3rP+Ualf7V6rmRDchZ9MJbiGTT7LuyqFKZqlHSOyO/oMFmI2lVTsw== - -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= - -prepend-http@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" - integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= - -preserve@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" - integrity sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks= - -prettier@^1.18.2: - version "1.19.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" - integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== - -pretty-error@^2.0.2: - version "2.1.1" - resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.1.tgz#5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3" - integrity sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM= - dependencies: - renderkid "^2.0.1" - utila "~0.4" - -pretty-format@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-23.6.0.tgz#5eaac8eeb6b33b987b7fe6097ea6a8a146ab5760" - integrity sha512-zf9NV1NSlDLDjycnwm6hpFATCGl/K1lt0R/GdkAK2O5LN/rwJoB+Mh93gGJjut4YbmecbfgLWVGSTCr0Ewvvbw== - dependencies: - ansi-regex "^3.0.0" - ansi-styles "^3.2.0" - -pretty@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pretty/-/pretty-2.0.0.tgz#adbc7960b7bbfe289a557dc5f737619a220d06a5" - integrity sha1-rbx5YLe7/iiaVX3F9zdhmiINBqU= - dependencies: - condense-newlines "^0.2.1" - extend-shallow "^2.0.1" - js-beautify "^1.6.12" - -printj@~1.1.0, printj@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/printj/-/printj-1.1.2.tgz#d90deb2975a8b9f600fb3a1c94e3f4c53c78a222" - integrity sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ== - -private@^0.1.6, private@^0.1.8, private@~0.1.5: - version "0.1.8" - resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" - integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== - -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - -process@^0.11.10: - version "0.11.10" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= - -progress@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== - -promise-inflight@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" - integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= - -prompts@^0.1.9: - version "0.1.14" - resolved "https://registry.yarnpkg.com/prompts/-/prompts-0.1.14.tgz#a8e15c612c5c9ec8f8111847df3337c9cbd443b2" - integrity sha512-rxkyiE9YH6zAz/rZpywySLKkpaj0NMVyNw1qhsubdbjjSgcayjTShDreZGlFMcGSu5sab3bAKPfFk78PB90+8w== - dependencies: - kleur "^2.0.1" - sisteransi "^0.1.1" - -proto-list@~1.2.1: - version "1.2.4" - resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" - integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk= - -proxy-addr@~2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" - integrity sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw== - dependencies: - forwarded "~0.1.2" - ipaddr.js "1.9.1" - -prr@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" - integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= - -pseudomap@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= - -psl@^1.1.28: - version "1.8.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" - integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== - -public-encrypt@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" - integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== - dependencies: - bn.js "^4.1.0" - browserify-rsa "^4.0.0" - create-hash "^1.1.0" - parse-asn1 "^5.0.0" - randombytes "^2.0.1" - safe-buffer "^5.1.2" - -pump@^2.0.0, pump@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" - integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -pumpify@^1.3.3: - version "1.5.1" - resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" - integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== - dependencies: - duplexify "^3.6.0" - inherits "^2.0.3" - pump "^2.0.0" - -punycode@1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" - integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= - -punycode@^1.2.4: - version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= - -punycode@^2.1.0, punycode@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== - -q@^1.1.2: - version "1.5.1" - resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" - integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= - -qs@6.7.0: - version "6.7.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" - integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== - -qs@~6.5.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" - integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== - -query-string@^4.1.0: - version "4.3.4" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" - integrity sha1-u7aTucqRXCMlFbIosaArYJBD2+s= - dependencies: - object-assign "^4.1.0" - strict-uri-encode "^1.0.0" - -querystring-es3@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" - integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= - -querystring@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" - integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= - -querystringify@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" - integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== - -randomatic@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.1.tgz#b776efc59375984e36c537b2f51a1f0aff0da1ed" - integrity sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw== - dependencies: - is-number "^4.0.0" - kind-of "^6.0.0" - math-random "^1.0.1" - -randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - -randomfill@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" - integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== - dependencies: - randombytes "^2.0.5" - safe-buffer "^5.1.0" - -range-parser@^1.2.1, range-parser@~1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" - integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== - -raw-body@2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" - integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== - dependencies: - bytes "3.1.0" - http-errors "1.7.2" - iconv-lite "0.4.24" - unpipe "1.0.0" - -read-pkg-up@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" - integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI= - dependencies: - find-up "^1.0.0" - read-pkg "^1.0.0" - -read-pkg@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" - integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg= - dependencies: - load-json-file "^1.0.0" - normalize-package-data "^2.3.2" - path-type "^1.0.0" - -read-pkg@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" - integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== - dependencies: - "@types/normalize-package-data" "^2.4.0" - normalize-package-data "^2.5.0" - parse-json "^5.0.0" - type-fest "^0.6.0" - -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: - version "2.3.7" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" - integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readdirp@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" - integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== - dependencies: - graceful-fs "^4.1.11" - micromatch "^3.1.10" - readable-stream "^2.0.2" - -readdirp@~3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.4.0.tgz#9fdccdf9e9155805449221ac645e8303ab5b9ada" - integrity sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ== - dependencies: - picomatch "^2.2.1" - -realpath-native@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.1.0.tgz#2003294fea23fb0672f2476ebe22fcf498a2d65c" - integrity sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA== - dependencies: - util.promisify "^1.0.0" - -recast@^0.11.17: - version "0.11.23" - resolved "https://registry.yarnpkg.com/recast/-/recast-0.11.23.tgz#451fd3004ab1e4df9b4e4b66376b2a21912462d3" - integrity sha1-RR/TAEqx5N+bTktmN2sqIZEkYtM= - dependencies: - ast-types "0.9.6" - esprima "~3.1.0" - private "~0.1.5" - source-map "~0.5.0" - -regenerate-unicode-properties@^8.2.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" - integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA== - dependencies: - regenerate "^1.4.0" - -regenerate@^1.4.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.1.tgz#cad92ad8e6b591773485fbe05a485caf4f457e6f" - integrity sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A== - -regenerator-runtime@^0.11.0: - version "0.11.1" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" - integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== - -regenerator-runtime@^0.13.4: - version "0.13.7" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" - integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== - -regenerator-transform@^0.14.2: - version "0.14.5" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4" - integrity sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw== - dependencies: - "@babel/runtime" "^7.8.4" - -regex-cache@^0.4.2: - version "0.4.4" - resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" - integrity sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ== - dependencies: - is-equal-shallow "^0.1.3" - -regex-not@^1.0.0, regex-not@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" - integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== - dependencies: - extend-shallow "^3.0.2" - safe-regex "^1.1.0" - -regexp.prototype.flags@^1.2.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz#7aba89b3c13a64509dabcf3ca8d9fbb9bdf5cb75" - integrity sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" - -regexpp@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-1.1.0.tgz#0e3516dd0b7904f413d2d4193dce4618c3a689ab" - integrity sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw== - -regexpp@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" - integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== - -regexpu-core@^4.7.0: - version "4.7.1" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.1.tgz#2dea5a9a07233298fbf0db91fa9abc4c6e0f8ad6" - integrity sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ== - dependencies: - regenerate "^1.4.0" - regenerate-unicode-properties "^8.2.0" - regjsgen "^0.5.1" - regjsparser "^0.6.4" - unicode-match-property-ecmascript "^1.0.4" - unicode-match-property-value-ecmascript "^1.2.0" - -regjsgen@^0.5.1: - version "0.5.2" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" - integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== - -regjsparser@^0.6.4: - version "0.6.4" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.4.tgz#a769f8684308401a66e9b529d2436ff4d0666272" - integrity sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw== - dependencies: - jsesc "~0.5.0" - -relateurl@0.2.x: - version "0.2.7" - resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" - integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= - -remove-trailing-separator@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= - -renderkid@^2.0.1: - version "2.0.3" - resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.3.tgz#380179c2ff5ae1365c522bf2fcfcff01c5b74149" - integrity sha512-z8CLQp7EZBPCwCnncgf9C4XAi3WR0dv+uWu/PjIyhhAb5d6IJ/QZqlHFprHeKT+59//V6BNUsLbvN8+2LarxGA== - dependencies: - css-select "^1.1.0" - dom-converter "^0.2" - htmlparser2 "^3.3.0" - strip-ansi "^3.0.0" - utila "^0.4.0" - -repeat-element@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" - integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== - -repeat-string@^1.5.2, repeat-string@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= - -repeating@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" - integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo= - dependencies: - is-finite "^1.0.0" - -request-promise-core@1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.4.tgz#3eedd4223208d419867b78ce815167d10593a22f" - integrity sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw== - dependencies: - lodash "^4.17.19" - -request-promise-native@^1.0.5, request-promise-native@^1.0.7: - version "1.0.9" - resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.9.tgz#e407120526a5efdc9a39b28a5679bf47b9d9dc28" - integrity sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g== - dependencies: - request-promise-core "1.1.4" - stealthy-require "^1.1.1" - tough-cookie "^2.3.3" - -request@^2.87.0: - version "2.88.2" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" - integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.8.0" - caseless "~0.12.0" - combined-stream "~1.0.6" - extend "~3.0.2" - forever-agent "~0.6.1" - form-data "~2.3.2" - har-validator "~5.1.3" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.19" - oauth-sign "~0.9.0" - performance-now "^2.1.0" - qs "~6.5.2" - safe-buffer "^5.1.2" - tough-cookie "~2.5.0" - tunnel-agent "^0.6.0" - uuid "^3.3.2" - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= - -require-main-filename@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" - integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= - -require-main-filename@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" - integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== - -require-uncached@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" - integrity sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM= - dependencies: - caller-path "^0.1.0" - resolve-from "^1.0.0" - -requires-port@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" - integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= - -reselect@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/reselect/-/reselect-3.0.1.tgz#efdaa98ea7451324d092b2b2163a6a1d7a9a2147" - integrity sha1-79qpjqdFEyTQkrKyFjpqHXqaIUc= - -resize-observer-polyfill@^1.5.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464" - integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg== - -resolve-cwd@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" - integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= - dependencies: - resolve-from "^3.0.0" - -resolve-from@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" - integrity sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY= - -resolve-from@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" - integrity sha1-six699nWiBvItuZTM17rywoYh0g= - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -resolve-url@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= - -resolve@1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" - integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= - -resolve@^1.10.0, resolve@^1.12.0, resolve@^1.3.2, resolve@^1.4.0, resolve@^1.8.1: - version "1.17.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" - integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== - dependencies: - path-parse "^1.0.6" - -restore-cursor@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" - integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= - dependencies: - onetime "^2.0.0" - signal-exit "^3.0.2" - -ret@~0.1.10: - version "0.1.15" - resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" - integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== - -retry@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" - integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= - -rgb-regex@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/rgb-regex/-/rgb-regex-1.0.1.tgz#c0e0d6882df0e23be254a475e8edd41915feaeb1" - integrity sha1-wODWiC3w4jviVKR16O3UGRX+rrE= - -rgba-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3" - integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM= - -rimraf@2.6.3, rimraf@~2.6.2: - version "2.6.3" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" - integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== - dependencies: - glob "^7.1.3" - -rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3: - version "2.7.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" - integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== - dependencies: - glob "^7.1.3" - -ripemd160@^2.0.0, ripemd160@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" - integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - -rsvp@^3.3.3: - version "3.6.2" - resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-3.6.2.tgz#2e96491599a96cde1b515d5674a8f7a91452926a" - integrity sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw== - -run-async@^2.2.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" - integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== - -run-queue@^1.0.0, run-queue@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" - integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= - dependencies: - aproba "^1.1.1" - -rx-lite-aggregates@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be" - integrity sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74= - dependencies: - rx-lite "*" - -rx-lite@*, rx-lite@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" - integrity sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ= - -rxjs@^6.4.0: - version "6.6.3" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.3.tgz#8ca84635c4daa900c0d3967a6ee7ac60271ee552" - integrity sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ== - dependencies: - tslib "^1.9.0" - -safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" - integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= - dependencies: - ret "~0.1.10" - -"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -sane@^2.0.0: - version "2.5.2" - resolved "https://registry.yarnpkg.com/sane/-/sane-2.5.2.tgz#b4dc1861c21b427e929507a3e751e2a2cb8ab3fa" - integrity sha1-tNwYYcIbQn6SlQej51HiosuKs/o= - dependencies: - anymatch "^2.0.0" - capture-exit "^1.2.0" - exec-sh "^0.2.0" - fb-watchman "^2.0.0" - micromatch "^3.1.4" - minimist "^1.1.1" - walker "~1.0.5" - watch "~0.18.0" - optionalDependencies: - fsevents "^1.2.3" - -sass-loader@^7.1.0: - version "7.3.1" - resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-7.3.1.tgz#a5bf68a04bcea1c13ff842d747150f7ab7d0d23f" - integrity sha512-tuU7+zm0pTCynKYHpdqaPpe+MMTQ76I9TPZ7i4/5dZsigE350shQWe5EZNl5dBidM49TPET75tNqRbcsUZWeNA== - dependencies: - clone-deep "^4.0.1" - loader-utils "^1.0.1" - neo-async "^2.5.0" - pify "^4.0.1" - semver "^6.3.0" - -sass@^1.18.0: - version "1.26.12" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.26.12.tgz#79eddaa1773fff32ccf19e00d1ce380fc2afc7d0" - integrity sha512-hmSwtBOWoS9zwe0yAS+QmaseVCUELiGV22gXHDR7+9stEsVuEuxfY1GhC8XmUpC+Ir3Hwq7NxSUNbnmkznnF7g== - dependencies: - chokidar ">=2.0.0 <4.0.0" - -sax@^1.2.4, sax@~1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== - -schema-utils@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" - integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g== - dependencies: - ajv "^6.1.0" - ajv-errors "^1.0.0" - ajv-keywords "^3.1.0" - -schema-utils@^2.6.5: - version "2.7.1" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" - integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== - dependencies: - "@types/json-schema" "^7.0.5" - ajv "^6.12.4" - ajv-keywords "^3.5.2" - -schema-utils@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.0.0.tgz#67502f6aa2b66a2d4032b4279a2944978a0913ef" - integrity sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA== - dependencies: - "@types/json-schema" "^7.0.6" - ajv "^6.12.5" - ajv-keywords "^3.5.2" - -select-hose@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" - integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo= - -selfsigned@^1.10.7: - version "1.10.8" - resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.8.tgz#0d17208b7d12c33f8eac85c41835f27fc3d81a30" - integrity sha512-2P4PtieJeEwVgTU9QEcwIRDQ/mXJLX8/+I3ur+Pg16nS8oNbrGxEso9NyYWy8NAmXiNl4dlAp5MwoNeCWzON4w== - dependencies: - node-forge "^0.10.0" - -"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - -semver@^6.0.0, semver@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - -send@0.17.1: - version "0.17.1" - resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" - integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== - dependencies: - debug "2.6.9" - depd "~1.1.2" - destroy "~1.0.4" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "~1.7.2" - mime "1.6.0" - ms "2.1.1" - on-finished "~2.3.0" - range-parser "~1.2.1" - statuses "~1.5.0" - -serialize-javascript@^1.4.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.9.1.tgz#cfc200aef77b600c47da9bb8149c943e798c2fdb" - integrity sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A== - -serialize-javascript@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" - integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== - dependencies: - randombytes "^2.1.0" - -serve-index@^1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" - integrity sha1-03aNabHn2C5c4FD/9bRTvqEqkjk= - dependencies: - accepts "~1.3.4" - batch "0.6.1" - debug "2.6.9" - escape-html "~1.0.3" - http-errors "~1.6.2" - mime-types "~2.1.17" - parseurl "~1.3.2" - -serve-static@1.14.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" - integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== - dependencies: - encodeurl "~1.0.2" - escape-html "~1.0.3" - parseurl "~1.3.3" - send "0.17.1" - -set-blocking@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= - -set-value@^2.0.0, set-value@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" - integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.3" - split-string "^3.0.1" - -setimmediate@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" - integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= - -setprototypeof@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" - integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== - -setprototypeof@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" - integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== - -sha.js@^2.4.0, sha.js@^2.4.8: - version "2.4.11" - resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" - integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -shallow-clone@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" - integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== - dependencies: - kind-of "^6.0.2" - -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= - dependencies: - shebang-regex "^1.0.0" - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -shell-quote@^1.6.1: - version "1.7.2" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" - integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== - -shellwords@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" - integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== - -sigmund@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590" - integrity sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA= - -signal-exit@^3.0.0, signal-exit@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" - integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== - -simple-swizzle@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" - integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo= - dependencies: - is-arrayish "^0.3.1" - -sisteransi@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-0.1.1.tgz#5431447d5f7d1675aac667ccd0b865a4994cb3ce" - integrity sha512-PmGOd02bM9YO5ifxpw36nrNMBTptEtfRl4qUYl9SndkolplkrZZOW7PGHjrZL53QvMVj9nQ+TKqUnRsw4tJa4g== - -slash@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" - integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU= - -slash@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" - integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== - -slice-ansi@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d" - integrity sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg== - dependencies: - is-fullwidth-code-point "^2.0.0" - -slice-ansi@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" - integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== - dependencies: - ansi-styles "^3.2.0" - astral-regex "^1.0.0" - is-fullwidth-code-point "^2.0.0" - -snapdragon-node@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" - integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== - dependencies: - define-property "^1.0.0" - isobject "^3.0.0" - snapdragon-util "^3.0.1" - -snapdragon-util@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" - integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== - dependencies: - kind-of "^3.2.0" - -snapdragon@^0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" - integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== - dependencies: - base "^0.11.1" - debug "^2.2.0" - define-property "^0.2.5" - extend-shallow "^2.0.1" - map-cache "^0.2.2" - source-map "^0.5.6" - source-map-resolve "^0.5.0" - use "^3.1.0" - -sockjs-client@1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.4.0.tgz#c9f2568e19c8fd8173b4997ea3420e0bb306c7d5" - integrity sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g== - dependencies: - debug "^3.2.5" - eventsource "^1.0.7" - faye-websocket "~0.11.1" - inherits "^2.0.3" - json3 "^3.3.2" - url-parse "^1.4.3" - -sockjs@0.3.20: - version "0.3.20" - resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.20.tgz#b26a283ec562ef8b2687b44033a4eeceac75d855" - integrity sha512-SpmVOVpdq0DJc0qArhF3E5xsxvaiqGNb73XfgBpK1y3UD5gs8DSo8aCTsuT5pX8rssdc2NDIzANwP9eCAiSdTA== - dependencies: - faye-websocket "^0.10.0" - uuid "^3.4.0" - websocket-driver "0.6.5" - -sort-keys@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" - integrity sha1-RBttTTRnmPG05J6JIK37oOVD+a0= - dependencies: - is-plain-obj "^1.0.0" - -source-list-map@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" - integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== - -source-map-resolve@^0.5.0, source-map-resolve@^0.5.2: - version "0.5.3" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" - integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== - dependencies: - atob "^2.1.2" - decode-uri-component "^0.2.0" - resolve-url "^0.2.1" - source-map-url "^0.4.0" - urix "^0.1.0" - -source-map-support@^0.4.15: - version "0.4.18" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" - integrity sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA== - dependencies: - source-map "^0.5.6" - -source-map-support@^0.5.6, source-map-support@~0.5.12: - version "0.5.19" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" - integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map-url@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" - integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= - -source-map@^0.4.2: - version "0.4.4" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" - integrity sha1-66T12pwNyZneaAMti092FzZSA2s= - dependencies: - amdefine ">=0.0.4" - -source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.0: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= - -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -spdx-correct@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" - integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" - integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== - -spdx-expression-parse@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" - integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.6" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.6.tgz#c80757383c28abf7296744998cbc106ae8b854ce" - integrity sha512-+orQK83kyMva3WyPf59k1+Y525csj5JejicWut55zeTWANuN17qSiSLUXWtzHeNWORSvT7GLDJ/E/XiIWoXBTw== - -spdy-transport@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" - integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== - dependencies: - debug "^4.1.0" - detect-node "^2.0.4" - hpack.js "^2.1.6" - obuf "^1.1.2" - readable-stream "^3.0.6" - wbuf "^1.7.3" - -spdy@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b" - integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== - dependencies: - debug "^4.1.0" - handle-thing "^2.0.0" - http-deceiver "^1.2.7" - select-hose "^2.0.0" - spdy-transport "^3.0.0" - -split-string@^3.0.1, split-string@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" - integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== - dependencies: - extend-shallow "^3.0.0" - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= - -ssf@~0.10.3: - version "0.10.3" - resolved "https://registry.yarnpkg.com/ssf/-/ssf-0.10.3.tgz#8eae1fc29c90a552e7921208f81892d6f77acb2b" - integrity sha512-pRuUdW0WwyB2doSqqjWyzwCD6PkfxpHAHdZp39K3dp/Hq7f+xfMwNAWIi16DyrRg4gg9c/RvLYkJTSawTPTm1w== - dependencies: - frac "~1.1.2" - -sshpk@^1.7.0: - version "1.16.1" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" - integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - bcrypt-pbkdf "^1.0.0" - dashdash "^1.12.0" - ecc-jsbn "~0.1.1" - getpass "^0.1.1" - jsbn "~0.1.0" - safer-buffer "^2.0.2" - tweetnacl "~0.14.0" - -ssri@^5.2.4: - version "5.3.0" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-5.3.0.tgz#ba3872c9c6d33a0704a7d71ff045e5ec48999d06" - integrity sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ== - dependencies: - safe-buffer "^5.1.1" - -ssri@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8" - integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA== - dependencies: - figgy-pudding "^3.5.1" - -stable@^0.1.8: - version "0.1.8" - resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" - integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== - -stack-utils@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.2.tgz#33eba3897788558bebfc2db059dc158ec36cebb8" - integrity sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA== - -stackframe@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.2.0.tgz#52429492d63c62eb989804c11552e3d22e779303" - integrity sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA== - -static-extend@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" - integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= - dependencies: - define-property "^0.2.5" - object-copy "^0.1.0" - -"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@~1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" - integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= - -stealthy-require@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" - integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= - -sticky-sidebar@^3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/sticky-sidebar/-/sticky-sidebar-3.3.1.tgz#142bf6b64c2b416e4b707ebf8f09b8b5a5043877" - integrity sha1-FCv2tkwrQW5LcH6/jwm4taUEOHc= - -stream-browserify@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" - integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== - dependencies: - inherits "~2.0.1" - readable-stream "^2.0.2" - -stream-each@^1.1.0: - version "1.2.3" - resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" - integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw== - dependencies: - end-of-stream "^1.1.0" - stream-shift "^1.0.0" - -stream-http@^2.7.2: - version "2.8.3" - resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" - integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== - dependencies: - builtin-status-codes "^3.0.0" - inherits "^2.0.1" - readable-stream "^2.3.6" - to-arraybuffer "^1.0.0" - xtend "^4.0.0" - -stream-shift@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" - integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== - -strict-uri-encode@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" - integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= - -string-length@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/string-length/-/string-length-2.0.0.tgz#d40dbb686a3ace960c1cffca562bf2c45f8363ed" - integrity sha1-1A27aGo6zpYMHP/KVivyxF+DY+0= - dependencies: - astral-regex "^1.0.0" - strip-ansi "^4.0.0" - -string-width@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" - -string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - -string-width@^3.0.0, string-width@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" - integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== - dependencies: - emoji-regex "^7.0.1" - is-fullwidth-code-point "^2.0.0" - strip-ansi "^5.1.0" - -string-width@^4.1.0, string-width@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" - integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.0" - -string.prototype.padend@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.1.0.tgz#dc08f57a8010dc5c153550318f67e13adbb72ac3" - integrity sha512-3aIv8Ffdp8EZj8iLwREGpQaUZiPyrWrpzMBHvkiSW/bK/EGve9np07Vwy7IJ5waydpGXzQZu/F8Oze2/IWkBaA== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" - -string.prototype.padstart@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string.prototype.padstart/-/string.prototype.padstart-3.1.0.tgz#b47c087540d0710be5a49375751a0a627bd4ff90" - integrity sha512-envqZvUp2JItI+OeQ5UAh1ihbAV5G/2bixTojvlIa090GGqF+NQRxbWb2nv9fTGrZABv6+pE6jXoAZhhS2k4Hw== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" - -string.prototype.trimend@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913" - integrity sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.5" - -string.prototype.trimstart@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz#14af6d9f34b053f7cfc89b72f8f2ee14b9039a54" - integrity sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.5" - -string_decoder@^1.0.0, string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -strip-ansi@^3.0.0, strip-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= - dependencies: - ansi-regex "^2.0.0" - -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= - dependencies: - ansi-regex "^3.0.0" - -strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== - dependencies: - ansi-regex "^4.1.0" - -strip-ansi@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" - integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== - dependencies: - ansi-regex "^5.0.0" - -strip-bom@3.0.0, strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= - -strip-bom@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" - integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4= - dependencies: - is-utf8 "^0.2.0" - -strip-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= - -strip-final-newline@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" - integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== - -strip-indent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" - integrity sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g= - -strip-json-comments@^2.0.0, strip-json-comments@^2.0.1, strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= - -stylehacks@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.3.tgz#6718fcaf4d1e07d8a1318690881e8d96726a71d5" - integrity sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g== - dependencies: - browserslist "^4.0.0" - postcss "^7.0.0" - postcss-selector-parser "^3.0.0" - -supports-color@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" - integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= - -supports-color@^3.1.2: - version "3.2.3" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" - integrity sha1-ZawFBLOVQXHYpklGsq48u4pfVPY= - dependencies: - has-flag "^1.0.0" - -supports-color@^5.3.0, supports-color@^5.4.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" - integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -svg-tags@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764" - integrity sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q= - -svgo@^1.0.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167" - integrity sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw== - dependencies: - chalk "^2.4.1" - coa "^2.0.2" - css-select "^2.0.0" - css-select-base-adapter "^0.1.1" - css-tree "1.0.0-alpha.37" - csso "^4.0.2" - js-yaml "^3.13.1" - mkdirp "~0.5.1" - object.values "^1.1.0" - sax "~1.2.4" - stable "^0.1.8" - unquote "~1.1.1" - util.promisify "~1.0.0" - -symbol-tree@^3.2.2: - version "3.2.4" - resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" - integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== - -table@4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/table/-/table-4.0.2.tgz#a33447375391e766ad34d3486e6e2aedc84d2e36" - integrity sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA== - dependencies: - ajv "^5.2.3" - ajv-keywords "^2.1.0" - chalk "^2.1.0" - lodash "^4.17.4" - slice-ansi "1.0.0" - string-width "^2.1.1" - -table@^5.2.3: - version "5.4.6" - resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" - integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== - dependencies: - ajv "^6.10.2" - lodash "^4.17.14" - slice-ansi "^2.1.0" - string-width "^3.0.0" - -tapable@^1.0.0, tapable@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" - integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== - -terser-webpack-plugin@^1.2.3, terser-webpack-plugin@^1.4.3: - version "1.4.5" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz#a217aefaea330e734ffacb6120ec1fa312d6040b" - integrity sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw== - dependencies: - cacache "^12.0.2" - find-cache-dir "^2.1.0" - is-wsl "^1.1.0" - schema-utils "^1.0.0" - serialize-javascript "^4.0.0" - source-map "^0.6.1" - terser "^4.1.2" - webpack-sources "^1.4.0" - worker-farm "^1.7.0" - -terser@^4.1.2: - version "4.8.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" - integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== - dependencies: - commander "^2.20.0" - source-map "~0.6.1" - source-map-support "~0.5.12" - -test-exclude@^4.2.1: - version "4.2.3" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.2.3.tgz#a9a5e64474e4398339245a0a769ad7c2f4a97c20" - integrity sha512-SYbXgY64PT+4GAL2ocI3HwPa4Q4TBKm0cwAVeKOt/Aoc0gSpNRjJX8w0pA1LMKZ3LBmd8pYBqApFNQLII9kavA== - dependencies: - arrify "^1.0.1" - micromatch "^2.3.11" - object-assign "^4.1.0" - read-pkg-up "^1.0.1" - require-main-filename "^1.0.1" - -text-table@^0.2.0, text-table@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= - -thenify-all@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" - integrity sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY= - dependencies: - thenify ">= 3.1.0 < 4" - -"thenify@>= 3.1.0 < 4": - version "3.3.1" - resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" - integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== - dependencies: - any-promise "^1.0.0" - -thread-loader@^2.1.2: - version "2.1.3" - resolved "https://registry.yarnpkg.com/thread-loader/-/thread-loader-2.1.3.tgz#cbd2c139fc2b2de6e9d28f62286ab770c1acbdda" - integrity sha512-wNrVKH2Lcf8ZrWxDF/khdlLlsTMczdcwPA9VEK4c2exlEPynYWxi9op3nPTo5lAnDIkE0rQEB3VBP+4Zncc9Hg== - dependencies: - loader-runner "^2.3.1" - loader-utils "^1.1.0" - neo-async "^2.6.0" - -throat@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" - integrity sha1-iQN8vJLFarGJJua6TLsgDhVnKmo= - -throttle-debounce@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/throttle-debounce/-/throttle-debounce-1.1.0.tgz#51853da37be68a155cb6e827b3514a3c422e89cd" - integrity sha512-XH8UiPCQcWNuk2LYePibW/4qL97+ZQ1AN3FNXwZRBNPPowo/NRU5fAlDCSNBJIYCKbioZfuYtMhG4quqoJhVzg== - -through2@^2.0.0: - version "2.0.5" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" - integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== - dependencies: - readable-stream "~2.3.6" - xtend "~4.0.1" - -through@^2.3.6, through@~2.3.4: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= - -thunky@^1.0.2: - version "1.1.0" - resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" - integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== - -timers-browserify@^2.0.4: - version "2.0.11" - resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.11.tgz#800b1f3eee272e5bc53ee465a04d0e804c31211f" - integrity sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ== - dependencies: - setimmediate "^1.0.4" - -timsort@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" - integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q= - -tiny-slider@^2.9.2: - version "2.9.3" - resolved "https://registry.yarnpkg.com/tiny-slider/-/tiny-slider-2.9.3.tgz#94d8158f704f3192fef1634c0ae6779fb14ea04e" - integrity sha512-KZY45m+t3fb3Kwlqsic0PIos1lgTNXBEC5N/AhI3aNEcryrd0nXohZMbVPMkcNYdbLjY1IUJAXWYAO6/RGJnKw== - -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - dependencies: - os-tmpdir "~1.0.2" - -tmpl@1.0.x: - version "1.0.4" - resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" - integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE= - -to-arraybuffer@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" - integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= - -to-fast-properties@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" - integrity sha1-uDVx+k2MJbguIxsG46MFXeTKGkc= - -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= - -to-object-path@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" - integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= - dependencies: - kind-of "^3.0.2" - -to-regex-range@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" - integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= - dependencies: - is-number "^3.0.0" - repeat-string "^1.6.1" - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -to-regex@^3.0.1, to-regex@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" - integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== - dependencies: - define-property "^2.0.2" - extend-shallow "^3.0.2" - regex-not "^1.0.2" - safe-regex "^1.1.0" - -toidentifier@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" - integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== - -toposort@^1.0.0: - version "1.0.7" - resolved "https://registry.yarnpkg.com/toposort/-/toposort-1.0.7.tgz#2e68442d9f64ec720b8cc89e6443ac6caa950029" - integrity sha1-LmhELZ9k7HILjMieZEOsbKqVACk= - -tough-cookie@^2.3.3, tough-cookie@^2.3.4, tough-cookie@~2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" - integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== - dependencies: - psl "^1.1.28" - punycode "^2.1.1" - -tr46@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" - integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk= - dependencies: - punycode "^2.1.0" - -trim-right@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" - integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= - -tryer@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/tryer/-/tryer-1.0.1.tgz#f2c85406800b9b0f74c9f7465b81eaad241252f8" - integrity sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA== - -tsconfig@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/tsconfig/-/tsconfig-7.0.0.tgz#84538875a4dc216e5c4a5432b3a4dec3d54e91b7" - integrity sha512-vZXmzPrL+EmC4T/4rVlT2jNVMWCi/O4DIiSj3UHg1OE5kCKbk4mfrXc6dZksLgRM/TZlKnousKH9bbTazUWRRw== - dependencies: - "@types/strip-bom" "^3.0.0" - "@types/strip-json-comments" "0.0.30" - strip-bom "^3.0.0" - strip-json-comments "^2.0.0" - -tslib@^1.10.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tslib@^1.9.0: - version "1.13.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" - integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== - -tty-browserify@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" - integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= - -tui-code-snippet@^1.5.0: - version "1.5.2" - resolved "https://registry.yarnpkg.com/tui-code-snippet/-/tui-code-snippet-1.5.2.tgz#f4b8f0f1ac996b0b5b621f77c9507af19a0de238" - integrity sha512-6UqTlQaaC1KLcmC0HAoq5dtl1G4Fib+R+NC7pmaV7kiIlZ7JqKhUmnOoGRcreAyzd81UTK/vCvhrw9QJskpCFQ== - -tui-code-snippet@^2.2.0: - version "2.3.2" - resolved "https://registry.yarnpkg.com/tui-code-snippet/-/tui-code-snippet-2.3.2.tgz#39eb3ce46ea92043b3244f155797248535880c5d" - integrity sha512-6jGbM/m7A2L59lJSripwMVp87awrWgJXezlLV8GuAha3s0k01E4+MndoU5WlXd4dauVRgzHhKguTVslx/jMehw== - -tui-date-picker@^3.3.3: - version "3.3.4" - resolved "https://registry.yarnpkg.com/tui-date-picker/-/tui-date-picker-3.3.4.tgz#e3422ce6e38e6d86579823a3d7153eb83e850109" - integrity sha512-tJekUFhVFh6OeHSkKP6zgVjMNacLToDxaNVpVtmEZgmEo7r1xCgqq3RgVOqf7Im+7cHE5BQtJdcX/ZNP3tO9Yg== - dependencies: - jquery "^1.11.0" - tui-code-snippet "^1.5.0" - tui-time-picker "^1.3.0" - -tui-grid@4.5.2: - version "4.5.2" - resolved "https://registry.yarnpkg.com/tui-grid/-/tui-grid-4.5.2.tgz#c0c9768f2f239885cf0d248e843e5b5d2e40a26f" - integrity sha512-2paT4WsfaSrun2dYvp37+E3Z8qTKQaHv/Ask4yOhBklt7pZNKJWBTGnY+7eFe3W/fgcGQ0oC5nkELilOVAZkAQ== - dependencies: - preact "^8.4.2" - tui-date-picker "^3.3.3" - tui-pagination "^3.3.2" - -tui-grid@^4.5.0: - version "4.15.1" - resolved "https://registry.yarnpkg.com/tui-grid/-/tui-grid-4.15.1.tgz#5e8ff373aa5b5540f196010d78f433688d92a036" - integrity sha512-/94PMCTWXn9EF6/RAVOQauJSM2S/LrvUKKaffRVXN1cUSG733iMs6cgAoE6zihBCgyHBEiemSzZ74lwGA7SqiA== - dependencies: - tui-date-picker "^3.3.3" - tui-pagination "^3.3.2" - -tui-pagination@^3.3.2: - version "3.4.0" - resolved "https://registry.yarnpkg.com/tui-pagination/-/tui-pagination-3.4.0.tgz#183f4a9563599d96d5f812c294b9e9bb6261d798" - integrity sha512-jqIeVsESOFsQfywaM58ex/P3X28lvoUVPeH/5XamfWdDMssIUdHjKy9bsJJEBgeYJPLoNenn0toXJFha2mcsTQ== - dependencies: - tui-code-snippet "^2.2.0" - -tui-time-picker@^1.3.0: - version "1.6.1" - resolved "https://registry.yarnpkg.com/tui-time-picker/-/tui-time-picker-1.6.1.tgz#9cd0e34262d0c3fac773069701f115a5a4c3666e" - integrity sha512-UynhhFjTh+fLMqCm8vbMVQZocKs9WweEZ9N66gHtPCv3JQQ1gg7ZKr8p6rOV9Z8F1aztmKGaSH+nIhwmQqwHQw== - dependencies: - jquery "^1.11.0" - tui-code-snippet "^1.5.0" - -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= - dependencies: - safe-buffer "^5.0.1" - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= - -type-check@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= - dependencies: - prelude-ls "~1.1.2" - -type-fest@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" - integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== - -type-is@~1.6.17, type-is@~1.6.18: - version "1.6.18" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" - integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== - dependencies: - media-typer "0.3.0" - mime-types "~2.1.24" - -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= - -uglify-js@3.4.x: - version "3.4.10" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.10.tgz#9ad9563d8eb3acdfb8d38597d2af1d815f6a755f" - integrity sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw== - dependencies: - commander "~2.19.0" - source-map "~0.6.1" - -uglify-js@^3.1.4: - version "3.11.1" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.11.1.tgz#32d274fea8aac333293044afd7f81409d5040d38" - integrity sha512-OApPSuJcxcnewwjSGGfWOjx3oix5XpmrK9Z2j0fTRlHGoZ49IU6kExfZTM0++fCArOOCet+vIfWwFHbvWqwp6g== - -unicode-canonical-property-names-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" - integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== - -unicode-match-property-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" - integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== - dependencies: - unicode-canonical-property-names-ecmascript "^1.0.4" - unicode-property-aliases-ecmascript "^1.0.4" - -unicode-match-property-value-ecmascript@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" - integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== - -unicode-property-aliases-ecmascript@^1.0.4: - version "1.1.0" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" - integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== - -union-value@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" - integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== - dependencies: - arr-union "^3.1.0" - get-value "^2.0.6" - is-extendable "^0.1.1" - set-value "^2.0.1" - -uniq@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" - integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= - -uniqs@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" - integrity sha1-/+3ks2slKQaW5uFl1KWe25mOawI= - -unique-filename@^1.1.0, unique-filename@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" - integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== - dependencies: - unique-slug "^2.0.0" - -unique-slug@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" - integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== - dependencies: - imurmurhash "^0.1.4" - -universalify@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== - -unpipe@1.0.0, unpipe@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= - -unquote@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" - integrity sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ= - -unset-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" - integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= - dependencies: - has-value "^0.3.1" - isobject "^3.0.0" - -upath@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" - integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== - -upper-case@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" - integrity sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg= - -uri-js@^4.2.2: - version "4.4.0" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.0.tgz#aa714261de793e8a82347a7bcc9ce74e86f28602" - integrity sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g== - dependencies: - punycode "^2.1.0" - -urix@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" - integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= - -url-loader@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-1.1.2.tgz#b971d191b83af693c5e3fea4064be9e1f2d7f8d8" - integrity sha512-dXHkKmw8FhPqu8asTc1puBfe3TehOCo2+RmOOev5suNCIYBcT626kxiWg1NBVkwc4rO8BGa7gP70W7VXuqHrjg== - dependencies: - loader-utils "^1.1.0" - mime "^2.0.3" - schema-utils "^1.0.0" - -url-parse@^1.4.3: - version "1.4.7" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.7.tgz#a8a83535e8c00a316e403a5db4ac1b9b853ae278" - integrity sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg== - dependencies: - querystringify "^2.1.1" - requires-port "^1.0.0" - -url@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" - integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= - dependencies: - punycode "1.3.2" - querystring "0.2.0" - -use@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" - integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== - -util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= - -util.promisify@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" - integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA== - dependencies: - define-properties "^1.1.2" - object.getownpropertydescriptors "^2.0.3" - -util.promisify@^1.0.0, util.promisify@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.1.tgz#6baf7774b80eeb0f7520d8b81d07982a59abbaee" - integrity sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.2" - has-symbols "^1.0.1" - object.getownpropertydescriptors "^2.1.0" - -util@0.10.3: - version "0.10.3" - resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" - integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= - dependencies: - inherits "2.0.1" - -util@^0.11.0: - version "0.11.1" - resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" - integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== - dependencies: - inherits "2.0.3" - -utila@^0.4.0, utila@~0.4: - version "0.4.0" - resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" - integrity sha1-ihagXURWV6Oupe7MWxKk+lN5dyw= - -utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= - -uuid@^3.3.2, uuid@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" - integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== - -v-runtime-template@^1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/v-runtime-template/-/v-runtime-template-1.10.0.tgz#8ea7066c37cf4be5c701a06ca247e1afda89c4be" - integrity sha512-WLlq9jUepSfUrMEenw3mn7FDXX6hhbl11JjC1OKhwLzifHzVrY5a696TUHDPyj9jke3GGnR7b+2T3od/RL5cww== - -validate-npm-package-license@^3.0.1: - version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" - integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - -vary@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= - -vendors@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.4.tgz#e2b800a53e7a29b93506c3cf41100d16c4c4ad8e" - integrity sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w== - -verror@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - -vm-browserify@^1.0.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" - integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== - -vue-custom-scrollbar@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/vue-custom-scrollbar/-/vue-custom-scrollbar-1.4.0.tgz#878190a38686637e44b59808993ddfef380e3189" - integrity sha512-ap5yZruXBoc7rp+o40VNt7ShoxaTKC3m384afE/6KgDNfo/UiwPu0houuJxxyLKdrspvwNgecfx7J6vqe7KWww== - dependencies: - perfect-scrollbar "^1.5.0" - vue "^2.6.11" - -vue-eslint-parser@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-2.0.3.tgz#c268c96c6d94cfe3d938a5f7593959b0ca3360d1" - integrity sha512-ZezcU71Owm84xVF6gfurBQUGg8WQ+WZGxgDEQu1IHFBZNx7BFZg3L1yHxrCBNNwbwFtE1GuvfJKMtb6Xuwc/Bw== - dependencies: - debug "^3.1.0" - eslint-scope "^3.7.1" - eslint-visitor-keys "^1.0.0" - espree "^3.5.2" - esquery "^1.0.0" - lodash "^4.17.4" - -vue-eslint-parser@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-5.0.0.tgz#00f4e4da94ec974b821a26ff0ed0f7a78402b8a1" - integrity sha512-JlHVZwBBTNVvzmifwjpZYn0oPWH2SgWv5dojlZBsrhablDu95VFD+hriB1rQGwbD+bms6g+rAFhQHk6+NyiS6g== - dependencies: - debug "^4.1.0" - eslint-scope "^4.0.0" - eslint-visitor-keys "^1.0.0" - espree "^4.1.0" - esquery "^1.0.1" - lodash "^4.17.11" - -vue-hot-reload-api@^2.3.0: - version "2.3.4" - resolved "https://registry.yarnpkg.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz#532955cc1eb208a3d990b3a9f9a70574657e08f2" - integrity sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog== - -vue-jest@^3.0.4: - version "3.0.7" - resolved "https://registry.yarnpkg.com/vue-jest/-/vue-jest-3.0.7.tgz#a6d29758a5cb4d750f5d1242212be39be4296a33" - integrity sha512-PIOxFM+wsBMry26ZpfBvUQ/DGH2hvp5khDQ1n51g3bN0TwFwTy4J85XVfxTRMukqHji/GnAoGUnlZ5Ao73K62w== - dependencies: - babel-plugin-transform-es2015-modules-commonjs "^6.26.0" - chalk "^2.1.0" - deasync "^0.1.15" - extract-from-css "^0.4.4" - find-babel-config "^1.1.0" - js-beautify "^1.6.14" - node-cache "^4.1.1" - object-assign "^4.1.1" - source-map "^0.5.6" - tsconfig "^7.0.0" - vue-template-es2015-compiler "^1.6.0" - -vue-loader@^15.7.0: - version "15.9.3" - resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-15.9.3.tgz#0de35d9e555d3ed53969516cac5ce25531299dda" - integrity sha512-Y67VnGGgVLH5Voostx8JBZgPQTlDQeOVBLOEsjc2cXbCYBKexSKEpOA56x0YZofoDOTszrLnIShyOX1p9uCEHA== - dependencies: - "@vue/component-compiler-utils" "^3.1.0" - hash-sum "^1.0.2" - loader-utils "^1.1.0" - vue-hot-reload-api "^2.3.0" - vue-style-loader "^4.1.0" - -vue-router@^3.0.3: - version "3.4.5" - resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-3.4.5.tgz#d396ec037b35931bdd1e9b7edd86f9788dc15175" - integrity sha512-ioRY5QyDpXM9TDjOX6hX79gtaMXSVDDzSlbIlyAmbHNteIL81WIVB2e+jbzV23vzxtoV0krdS2XHm+GxFg+Nxg== - -vue-scrollbar@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/vue-scrollbar/-/vue-scrollbar-1.0.4.tgz#8e2b583d4761a32c56c3a2662e306f9a7a862c55" - integrity sha1-jitYPUdhoyxWw6JmLjBvmnqGLFU= - dependencies: - vue "^1.0.21" - -vue-style-loader@^4.1.0: - version "4.1.2" - resolved "https://registry.yarnpkg.com/vue-style-loader/-/vue-style-loader-4.1.2.tgz#dedf349806f25ceb4e64f3ad7c0a44fba735fcf8" - integrity sha512-0ip8ge6Gzz/Bk0iHovU9XAUQaFt/G2B61bnWa2tCcqqdgfHs1lF9xXorFbE55Gmy92okFT+8bfmySuUOu13vxQ== - dependencies: - hash-sum "^1.0.2" - loader-utils "^1.0.2" - -vue-template-compiler@^2.6.10: - version "2.6.12" - resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.6.12.tgz#947ed7196744c8a5285ebe1233fe960437fcc57e" - integrity sha512-OzzZ52zS41YUbkCBfdXShQTe69j1gQDZ9HIX8miuC9C3rBCk9wIRjLiZZLrmX9V+Ftq/YEyv1JaVr5Y/hNtByg== - dependencies: - de-indent "^1.0.2" - he "^1.1.0" - -vue-template-es2015-compiler@^1.6.0, vue-template-es2015-compiler@^1.9.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz#1ee3bc9a16ecbf5118be334bb15f9c46f82f5825" - integrity sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw== - -vue-tiny-slider@^0.1.35: - version "0.1.39" - resolved "https://registry.yarnpkg.com/vue-tiny-slider/-/vue-tiny-slider-0.1.39.tgz#9301eada256fa12725b050767e1e67a287b3e3ef" - integrity sha512-dLOuMI6YyIBabXPZTQ0LL2jhOqZuwsCD7ztPEoE1ejFQ9GNxyRxwkRsIwUtVnq5SCTzQAhCYlgoibyMGoDHReA== - dependencies: - lodash "^4.17.11" - tiny-slider "^2.9.2" - -vue@^1.0.21: - version "1.0.28" - resolved "https://registry.yarnpkg.com/vue/-/vue-1.0.28.tgz#ed2ff07b200bde15c87a90ef8727ceea7d38567d" - integrity sha1-7S/weyAL3hXIepDvhyfO6n04Vn0= - dependencies: - envify "^3.4.0" - -vue@^2.6.10, vue@^2.6.11: - version "2.6.12" - resolved "https://registry.yarnpkg.com/vue/-/vue-2.6.12.tgz#f5ebd4fa6bd2869403e29a896aed4904456c9123" - integrity sha512-uhmLFETqPPNyuLLbsKz6ioJ4q7AZHzD8ZVFNATNyICSZouqP2Sz0rotWQC8UNBF6VGSCs5abnKJoStA6JbCbfg== - -vuejs-daum-postcode@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/vuejs-daum-postcode/-/vuejs-daum-postcode-1.0.4.tgz#084b7a6d3e42f3727c79f7ad7d5b161c7c27840d" - integrity sha512-xkKqhehDcZVrLAwA1bzbk1E9wA1v4qYcZnddso6W67snv9CWoQzhmlyvRr6LmaFNS4h53ja4paWpuiLXW9fA3g== - -vuex@^3.0.1: - version "3.5.1" - resolved "https://registry.yarnpkg.com/vuex/-/vuex-3.5.1.tgz#f1b8dcea649bc25254cf4f4358081dbf5da18b3d" - integrity sha512-w7oJzmHQs0FM9LXodfskhw9wgKBiaB+totOdb8sNzbTB2KDCEEwEs29NzBZFh/lmEK1t5tDmM1vtsO7ubG1DFw== - -w3c-hr-time@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" - integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== - dependencies: - browser-process-hrtime "^1.0.0" - -walker@~1.0.5: - version "1.0.7" - resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" - integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= - dependencies: - makeerror "1.0.x" - -watch@~0.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/watch/-/watch-0.18.0.tgz#28095476c6df7c90c963138990c0a5423eb4b986" - integrity sha1-KAlUdsbffJDJYxOJkMClQj60uYY= - dependencies: - exec-sh "^0.2.0" - minimist "^1.2.0" - -watchpack-chokidar2@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz#9948a1866cbbd6cb824dea13a7ed691f6c8ddff0" - integrity sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA== - dependencies: - chokidar "^2.1.8" - -watchpack@^1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.4.tgz#6e9da53b3c80bb2d6508188f5b200410866cd30b" - integrity sha512-aWAgTW4MoSJzZPAicljkO1hsi1oKj/RRq/OJQh2PKI2UKL04c2Bs+MBOB+BBABHTXJpf9mCwHN7ANCvYsvY2sg== - dependencies: - graceful-fs "^4.1.2" - neo-async "^2.5.0" - optionalDependencies: - chokidar "^3.4.1" - watchpack-chokidar2 "^2.0.0" - -wbuf@^1.1.0, wbuf@^1.7.3: - version "1.7.3" - resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" - integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== - dependencies: - minimalistic-assert "^1.0.0" - -wcwidth@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" - integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= - dependencies: - defaults "^1.0.3" - -webidl-conversions@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" - integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== - -webpack-bundle-analyzer@^3.3.0: - version "3.9.0" - resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.9.0.tgz#f6f94db108fb574e415ad313de41a2707d33ef3c" - integrity sha512-Ob8amZfCm3rMB1ScjQVlbYYUEJyEjdEtQ92jqiFUYt5VkEeO2v5UMbv49P/gnmCZm3A6yaFQzCBvpZqN4MUsdA== - dependencies: - acorn "^7.1.1" - acorn-walk "^7.1.1" - bfj "^6.1.1" - chalk "^2.4.1" - commander "^2.18.0" - ejs "^2.6.1" - express "^4.16.3" - filesize "^3.6.1" - gzip-size "^5.0.0" - lodash "^4.17.19" - mkdirp "^0.5.1" - opener "^1.5.1" - ws "^6.0.0" - -webpack-chain@^4.11.0: - version "4.12.1" - resolved "https://registry.yarnpkg.com/webpack-chain/-/webpack-chain-4.12.1.tgz#6c8439bbb2ab550952d60e1ea9319141906c02a6" - integrity sha512-BCfKo2YkDe2ByqkEWe1Rw+zko4LsyS75LVr29C6xIrxAg9JHJ4pl8kaIZ396SUSNp6b4815dRZPSTAS8LlURRQ== - dependencies: - deepmerge "^1.5.2" - javascript-stringify "^1.6.0" - -webpack-dev-middleware@^3.7.2: - version "3.7.2" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz#0019c3db716e3fa5cecbf64f2ab88a74bab331f3" - integrity sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw== - dependencies: - memory-fs "^0.4.1" - mime "^2.4.4" - mkdirp "^0.5.1" - range-parser "^1.2.1" - webpack-log "^2.0.0" - -webpack-dev-server@^3.4.1: - version "3.11.0" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz#8f154a3bce1bcfd1cc618ef4e703278855e7ff8c" - integrity sha512-PUxZ+oSTxogFQgkTtFndEtJIPNmml7ExwufBZ9L2/Xyyd5PnOL5UreWe5ZT7IU25DSdykL9p1MLQzmLh2ljSeg== - dependencies: - ansi-html "0.0.7" - bonjour "^3.5.0" - chokidar "^2.1.8" - compression "^1.7.4" - connect-history-api-fallback "^1.6.0" - debug "^4.1.1" - del "^4.1.1" - express "^4.17.1" - html-entities "^1.3.1" - http-proxy-middleware "0.19.1" - import-local "^2.0.0" - internal-ip "^4.3.0" - ip "^1.1.5" - is-absolute-url "^3.0.3" - killable "^1.0.1" - loglevel "^1.6.8" - opn "^5.5.0" - p-retry "^3.0.1" - portfinder "^1.0.26" - schema-utils "^1.0.0" - selfsigned "^1.10.7" - semver "^6.3.0" - serve-index "^1.9.1" - sockjs "0.3.20" - sockjs-client "1.4.0" - spdy "^4.0.2" - strip-ansi "^3.0.1" - supports-color "^6.1.0" - url "^0.11.0" - webpack-dev-middleware "^3.7.2" - webpack-log "^2.0.0" - ws "^6.2.1" - yargs "^13.3.2" - -webpack-log@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f" - integrity sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg== - dependencies: - ansi-colors "^3.0.0" - uuid "^3.3.2" - -webpack-merge@^4.2.1: - version "4.2.2" - resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.2.2.tgz#a27c52ea783d1398afd2087f547d7b9d2f43634d" - integrity sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g== - dependencies: - lodash "^4.17.15" - -webpack-sources@^1.1.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1: - version "1.4.3" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" - integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== - dependencies: - source-list-map "^2.0.0" - source-map "~0.6.1" - -webpack@^4.0.0: - version "4.44.2" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.44.2.tgz#6bfe2b0af055c8b2d1e90ed2cd9363f841266b72" - integrity sha512-6KJVGlCxYdISyurpQ0IPTklv+DULv05rs2hseIXer6D7KrUicRDLFb4IUM1S6LUAKypPM/nSiVSuv8jHu1m3/Q== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-module-context" "1.9.0" - "@webassemblyjs/wasm-edit" "1.9.0" - "@webassemblyjs/wasm-parser" "1.9.0" - acorn "^6.4.1" - ajv "^6.10.2" - ajv-keywords "^3.4.1" - chrome-trace-event "^1.0.2" - enhanced-resolve "^4.3.0" - eslint-scope "^4.0.3" - json-parse-better-errors "^1.0.2" - loader-runner "^2.4.0" - loader-utils "^1.2.3" - memory-fs "^0.4.1" - micromatch "^3.1.10" - mkdirp "^0.5.3" - neo-async "^2.6.1" - node-libs-browser "^2.2.1" - schema-utils "^1.0.0" - tapable "^1.1.3" - terser-webpack-plugin "^1.4.3" - watchpack "^1.7.4" - webpack-sources "^1.4.1" - -websocket-driver@0.6.5: - version "0.6.5" - resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.6.5.tgz#5cb2556ceb85f4373c6d8238aa691c8454e13a36" - integrity sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY= - dependencies: - websocket-extensions ">=0.1.1" - -websocket-driver@>=0.5.1: - version "0.7.4" - resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" - integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== - dependencies: - http-parser-js ">=0.5.1" - safe-buffer ">=5.1.0" - websocket-extensions ">=0.1.1" - -websocket-extensions@>=0.1.1: - version "0.1.4" - resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" - integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== - -whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3: - version "1.0.5" - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" - integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== - dependencies: - iconv-lite "0.4.24" - -whatwg-mimetype@^2.1.0, whatwg-mimetype@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" - integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== - -whatwg-url@^6.4.1: - version "6.5.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.5.0.tgz#f2df02bff176fd65070df74ad5ccbb5a199965a8" - integrity sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ== - dependencies: - lodash.sortby "^4.7.0" - tr46 "^1.0.1" - webidl-conversions "^4.0.2" - -whatwg-url@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" - integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg== - dependencies: - lodash.sortby "^4.7.0" - tr46 "^1.0.1" - webidl-conversions "^4.0.2" - -which-module@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" - integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= - -which@^1.2.12, which@^1.2.9, which@^1.3.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - -which@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -wmf@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wmf/-/wmf-1.0.2.tgz#7d19d621071a08c2bdc6b7e688a9c435298cc2da" - integrity sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw== - -word-wrap@~1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" - integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== - -wordwrap@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= - -worker-farm@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" - integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw== - dependencies: - errno "~0.1.7" - -wrap-ansi@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" - integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - -wrap-ansi@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" - integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== - dependencies: - ansi-styles "^3.2.0" - string-width "^3.0.0" - strip-ansi "^5.0.0" - -wrap-ansi@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" - integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= - -write-file-atomic@^2.1.0: - version "2.4.3" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" - integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== - dependencies: - graceful-fs "^4.1.11" - imurmurhash "^0.1.4" - signal-exit "^3.0.2" - -write@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" - integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== - dependencies: - mkdirp "^0.5.1" - -write@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" - integrity sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c= - dependencies: - mkdirp "^0.5.1" - -ws@^5.2.0: - version "5.2.2" - resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f" - integrity sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA== - dependencies: - async-limiter "~1.0.0" - -ws@^6.0.0, ws@^6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb" - integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA== - dependencies: - async-limiter "~1.0.0" - -xlsx@^0.15.3: - version "0.15.6" - resolved "https://registry.yarnpkg.com/xlsx/-/xlsx-0.15.6.tgz#461f841d6d9ea1a8375e2cd246bf23aece08a1d5" - integrity sha512-7vD9eutyLs65iDjNFimVN+gk/oDkfkCgpQUjdE82QgzJCrBHC4bGPH7fzKVyy0UPp3gyFVQTQEFJaWaAvZCShQ== - dependencies: - adler-32 "~1.2.0" - cfb "^1.1.4" - codepage "~1.14.0" - commander "~2.17.1" - crc-32 "~1.2.0" - exit-on-epipe "~1.0.1" - ssf "~0.10.3" - wmf "~1.0.1" - -xml-name-validator@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" - integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== - -xtend@^4.0.0, xtend@~4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - -y18n@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" - integrity sha1-bRX7qITAhnnA136I53WegR4H+kE= - -y18n@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" - integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== - -yallist@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" - integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= - -yallist@^3.0.2: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - -yargs-parser@^13.1.2: - version "13.1.2" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" - integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs-parser@^18.1.2: - version "18.1.3" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" - integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs-parser@^9.0.2: - version "9.0.2" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077" - integrity sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc= - dependencies: - camelcase "^4.1.0" - -yargs@^11.0.0: - version "11.1.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-11.1.1.tgz#5052efe3446a4df5ed669c995886cc0f13702766" - integrity sha512-PRU7gJrJaXv3q3yQZ/+/X6KBswZiaQ+zOmdprZcouPYtQgvNU35i+68M4b1ZHLZtYFT5QObFLV+ZkmJYcwKdiw== - dependencies: - cliui "^4.0.0" - decamelize "^1.1.1" - find-up "^2.1.0" - get-caller-file "^1.0.1" - os-locale "^3.1.0" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^2.0.0" - which-module "^2.0.0" - y18n "^3.2.1" - yargs-parser "^9.0.2" - -yargs@^13.3.2: - version "13.3.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" - integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== - dependencies: - cliui "^5.0.0" - find-up "^3.0.0" - get-caller-file "^2.0.1" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^3.0.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^13.1.2" - -yargs@^15.0.0: - version "15.4.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" - integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== - dependencies: - cliui "^6.0.0" - decamelize "^1.2.0" - find-up "^4.1.0" - get-caller-file "^2.0.1" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^4.2.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^18.1.2" - -yorkie@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/yorkie/-/yorkie-2.0.0.tgz#92411912d435214e12c51c2ae1093e54b6bb83d9" - integrity sha512-jcKpkthap6x63MB4TxwCyuIGkV0oYP/YRyuQU5UO0Yz/E/ZAu+653/uov+phdmO54n6BcvFRyyt0RRrWdN2mpw== - dependencies: - execa "^0.8.0" - is-ci "^1.0.10" - normalize-path "^1.0.0" - strip-indent "^2.0.0" diff --git a/src/main/java/kr/co/uplus/ez/Scheduler.java b/src/main/java/kr/co/uplus/ez/Scheduler.java index d4354d4..0b2b29f 100644 --- a/src/main/java/kr/co/uplus/ez/Scheduler.java +++ b/src/main/java/kr/co/uplus/ez/Scheduler.java @@ -1,21 +1,21 @@ -package kr.co.uplus.ez; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.scheduling.annotation.Scheduled; -import org.springframework.stereotype.Component; - -@Component -public class Scheduler { - - private static final Logger log = LoggerFactory.getLogger(Scheduler.class); - - /** - * 스케줄러 트리거는 해당영역에 선언 / 서비스영역은 별도 - */ - @Scheduled(initialDelay = 60000, fixedRateString = "${schedule.sample.init:60000}") - public void init() { - // 스케줄 서비스 정의 - log.info("schduler trigger"); - } -} +package kr.co.uplus.ez; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +@Component +public class Scheduler { + + private static final Logger log = LoggerFactory.getLogger(Scheduler.class); + + /** + * 스케줄러 트리거는 해당영역에 선언 / 서비스영역은 별도 + */ + @Scheduled(initialDelay = 60000, fixedRateString = "${schedule.sample.init:60000}") + public void init() { + // 스케줄 서비스 정의 + log.info("schduler trigger"); + } +} diff --git a/src/main/java/kr/co/uplus/ez/WebApplication.java b/src/main/java/kr/co/uplus/ez/WebApplication.java index 1cd6748..2984040 100644 --- a/src/main/java/kr/co/uplus/ez/WebApplication.java +++ b/src/main/java/kr/co/uplus/ez/WebApplication.java @@ -1,73 +1,73 @@ -package kr.co.uplus.ez; - -import javax.annotation.PostConstruct; -import javax.annotation.PreDestroy; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration; -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; -import org.springframework.core.env.AbstractEnvironment; - -@SpringBootApplication(exclude = { SecurityAutoConfiguration.class }) -public class WebApplication extends SpringBootServletInitializer { - - private static final Logger log = LoggerFactory.getLogger(WebApplication.class); - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(WebApplication.class); - } - - public static void main(String[] args) throws Exception { - if (System.getProperty(AbstractEnvironment.ACTIVE_PROFILES_PROPERTY_NAME) == null) { - System.setProperty(AbstractEnvironment.ACTIVE_PROFILES_PROPERTY_NAME, "local"); - } - - SpringApplication.run(WebApplication.class, args); - } - - @PostConstruct - public void onStartup() { - Thread checkThread = new Thread(new CheckProcess()); - checkThread.setDaemon(true); - checkThread.start(); - log.info("################ System-up start ################"); - } - - @PreDestroy - public void onExit() { - log.info("################ System-down start ################"); - } -} - -class CheckProcess implements Runnable { - - private static final Logger log = LoggerFactory.getLogger(CheckProcess.class); - - private static final String PROC_NAME = "mhez-admin"; - @Override - public void run() { - while (true) { - try { - process(); - Thread.sleep(1000 * 60); - } catch (InterruptedException e) { - } - } - } - - private void process() { - Runtime runtime = Runtime.getRuntime(); - long totalMemory = runtime.totalMemory() / (1024 * 1024); - long freeMemory = runtime.freeMemory() / (1024 * 1024); - long maxMemory = runtime.maxMemory() / (1024 * 1024); - long usedMemory = totalMemory - freeMemory; - - log.info("{} Process Monitoring : maxMemory -> {}MB, totalMemory -> {}MB, usedMemory -> {}MB, freeMemory -> {}MB, ActiveThread -> {}", - PROC_NAME, maxMemory, totalMemory, usedMemory, freeMemory, Thread.activeCount()); - } +package kr.co.uplus.ez; + +import javax.annotation.PostConstruct; +import javax.annotation.PreDestroy; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration; +import org.springframework.boot.builder.SpringApplicationBuilder; +import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; +import org.springframework.core.env.AbstractEnvironment; + +@SpringBootApplication(exclude = { SecurityAutoConfiguration.class }) +public class WebApplication extends SpringBootServletInitializer { + + private static final Logger log = LoggerFactory.getLogger(WebApplication.class); + + @Override + protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { + return application.sources(WebApplication.class); + } + + public static void main(String[] args) throws Exception { + if (System.getProperty(AbstractEnvironment.ACTIVE_PROFILES_PROPERTY_NAME) == null) { + System.setProperty(AbstractEnvironment.ACTIVE_PROFILES_PROPERTY_NAME, "local"); + } + + SpringApplication.run(WebApplication.class, args); + } + + @PostConstruct + public void onStartup() { + Thread checkThread = new Thread(new CheckProcess()); + checkThread.setDaemon(true); + checkThread.start(); + log.info("################ System-up start ################"); + } + + @PreDestroy + public void onExit() { + log.info("################ System-down start ################"); + } +} + +class CheckProcess implements Runnable { + + private static final Logger log = LoggerFactory.getLogger(CheckProcess.class); + + private static final String PROC_NAME = "mhez-admin"; + @Override + public void run() { + while (true) { + try { + process(); + Thread.sleep(1000 * 60); + } catch (InterruptedException e) { + } + } + } + + private void process() { + Runtime runtime = Runtime.getRuntime(); + long totalMemory = runtime.totalMemory() / (1024 * 1024); + long freeMemory = runtime.freeMemory() / (1024 * 1024); + long maxMemory = runtime.maxMemory() / (1024 * 1024); + long usedMemory = totalMemory - freeMemory; + + log.info("{} Process Monitoring : maxMemory -> {}MB, totalMemory -> {}MB, usedMemory -> {}MB, freeMemory -> {}MB, ActiveThread -> {}", + PROC_NAME, maxMemory, totalMemory, usedMemory, freeMemory, Thread.activeCount()); + } } \ No newline at end of file diff --git a/src/main/java/kr/co/uplus/ez/api/attractMgt/AttractMgtController.java b/src/main/java/kr/co/uplus/ez/api/attractMgt/AttractMgtController.java index a38434b..1e3e5a5 100644 --- a/src/main/java/kr/co/uplus/ez/api/attractMgt/AttractMgtController.java +++ b/src/main/java/kr/co/uplus/ez/api/attractMgt/AttractMgtController.java @@ -1,80 +1,81 @@ -/** - * date : 2022. 4. 26. - * auth : ckr - * desc : 유치 현황 관리 - */ -package kr.co.uplus.ez.api.attractMgt; - -import java.util.Map; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; - -import kr.co.uplus.ez.common.data.ApiResponseMessage; - -@RestController -@RequestMapping(value = "api/v1/bo/attractMgt") -public class AttractMgtController { - @Autowired - AttractMgtService attractService; - - /** - * date : 2022. 4. 26. - * auth : ckr - * desc : 유치채널 목록조회 - * @param paramMap - * @return - * @throws Exception - */ - @RequestMapping(value = "/channelList" , method = {RequestMethod.POST}) - @ResponseBody - public ApiResponseMessage channelList(@RequestBody Map paramMap) throws Exception{ - return attractService.channelList(paramMap); - } - - /** - * date : 2022. 4. 26. - * auth : ckr - * desc : 유치채널 목록 엑셀 다운로드 - * @param paramMap - * @return - * @throws Exception - */ - @RequestMapping(value = "/channelListExcel" , method = {RequestMethod.POST}) - @ResponseBody - public ApiResponseMessage channelListExcel(@RequestBody Map paramMap) throws Exception{ - return attractService.channelListExcel(paramMap); - } - - /** - * date : 2022. 4. 26. - * auth : ckr - * desc : 유치 채널 상세 조회 - * @param paramMap - * @return - * @throws Exception - */ - @RequestMapping(value = "/channelDetail" , method = {RequestMethod.POST}) - @ResponseBody - public ApiResponseMessage channelDetail(@RequestBody Map paramMap) throws Exception{ - return attractService.channelDetail(paramMap); - } - - /** - * date : 2022. 4. 26. - * auth : ckr - * desc : 발송건수 엑셀 다운로드 - * @param paramMap - * @return - * @throws Exception - */ - @RequestMapping(value = "/sendNumberListExcel" , method = {RequestMethod.POST}) - @ResponseBody - public ApiResponseMessage sendNumberListExcel(@RequestBody Map paramMap) throws Exception{ - return attractService.sendNumberListExcel(paramMap); - } -} +/** + * date : 2022. 4. 26. + * auth : ckr + * desc : 유치 현황 관리 + */ +package kr.co.uplus.ez.api.attractMgt; + +import java.util.Map; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +import kr.co.uplus.ez.common.data.ApiResponseMessage; + +@RestController +@RequestMapping(value = "api/v1/bo/attractMgt") +public class AttractMgtController { + + @Autowired + AttractMgtService attractService; + + /** + * date : 2022. 4. 26. + * auth : ckr + * desc : 유치채널 목록조회 + * @param paramMap + * @return + * @throws Exception + */ + @RequestMapping(value = "/channelList" , method = {RequestMethod.POST}) + @ResponseBody + public ApiResponseMessage channelList(@RequestBody Map paramMap) throws Exception{ + return attractService.channelList(paramMap); + } + + /** + * date : 2022. 4. 26. + * auth : ckr + * desc : 유치채널 목록 엑셀 다운로드 + * @param paramMap + * @return + * @throws Exception + */ + @RequestMapping(value = "/channelListExcel" , method = {RequestMethod.POST}) + @ResponseBody + public ApiResponseMessage channelListExcel(@RequestBody Map paramMap) throws Exception{ + return attractService.channelListExcel(paramMap); + } + + /** + * date : 2022. 4. 26. + * auth : ckr + * desc : 유치 채널 상세 조회 + * @param paramMap + * @return + * @throws Exception + */ + @RequestMapping(value = "/channelDetail" , method = {RequestMethod.POST}) + @ResponseBody + public ApiResponseMessage channelDetail(@RequestBody Map paramMap) throws Exception{ + return attractService.channelDetail(paramMap); + } + + /** + * date : 2022. 4. 26. + * auth : ckr + * desc : 발송건수 엑셀 다운로드 + * @param paramMap + * @return + * @throws Exception + */ + @RequestMapping(value = "/sendNumberListExcel" , method = {RequestMethod.POST}) + @ResponseBody + public ApiResponseMessage sendNumberListExcel(@RequestBody Map paramMap) throws Exception{ + return attractService.sendNumberListExcel(paramMap); + } +} diff --git a/src/main/java/kr/co/uplus/ez/api/attractMgt/AttractMgtMapper.java b/src/main/java/kr/co/uplus/ez/api/attractMgt/AttractMgtMapper.java index 863ee2f..1e79500 100644 --- a/src/main/java/kr/co/uplus/ez/api/attractMgt/AttractMgtMapper.java +++ b/src/main/java/kr/co/uplus/ez/api/attractMgt/AttractMgtMapper.java @@ -1,8 +1,8 @@ -package kr.co.uplus.ez.api.attractMgt; - -import org.apache.ibatis.annotations.Mapper; - -@Mapper -public class AttractMgtMapper { - -} +package kr.co.uplus.ez.api.attractMgt; + +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public class AttractMgtMapper { + +} diff --git a/src/main/java/kr/co/uplus/ez/api/attractMgt/AttractMgtService.java b/src/main/java/kr/co/uplus/ez/api/attractMgt/AttractMgtService.java index 9787a71..e4ff42c 100644 --- a/src/main/java/kr/co/uplus/ez/api/attractMgt/AttractMgtService.java +++ b/src/main/java/kr/co/uplus/ez/api/attractMgt/AttractMgtService.java @@ -1,230 +1,230 @@ -package kr.co.uplus.ez.api.attractMgt; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.springframework.stereotype.Service; - -import kr.co.uplus.ez.common.data.ApiResponseCode; -import kr.co.uplus.ez.common.data.ApiResponseMessage; - -@Service -public class AttractMgtService { - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 유치채널 목록조회 - * @param paramMap - * @return - */ - public ApiResponseMessage channelList(Map paramMap) { - ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); - Map dataObj = new HashMap<>(); - List> dataList = new ArrayList<>(); - Map data = new HashMap<>(); - - data.put("totalCnt", "999"); - data.put("currentPage", "1"); - dataObj.put("paging", data); - - for(int i=1; i<10; i++) { - data = new HashMap<>(); - data.put("no", ""+i); - data.put("regDt", "2022-03-10"); - data.put("channelNm", "업체명"); - data.put("adminId", "uplus01"); - data.put("custNm", "유플러스"); - data.put("bRegNo", "221-81-39938"); - data.put("userNm", "유플러스스"); - data.put("stat", "사용"); - data.put("custType", "법인사용자"); - data.put("totalSendingCnt", "1440000"); - data.put("serviceId", "serviceId"); - dataList.add(data); - } - dataObj.put("list", dataList); - result.setData(dataObj); - return result; - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 유치채널 목록 엑셀 다운로드 - * @param paramMap - * @return - */ - public ApiResponseMessage channelListExcel(Map paramMap) { - ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); - Map dataObj = new HashMap<>(); - List> dataList = new ArrayList<>(); - Map data = new HashMap<>(); - - data.put("totalCnt", "999"); - data.put("currentPage", "1"); - dataObj.put("paging", data); - - for(int i=1; i<50; i++) { - data = new HashMap<>(); - data.put("no", ""+i); - data.put("regDt", "2022-03-10"); - data.put("channelNm", "업체명"); - data.put("adminId", "uplus01"); - data.put("custNm", "유플러스"); - data.put("bRegNo", "221-81-39938"); - data.put("userNm", "유플러스스"); - data.put("stat", "사용"); - data.put("custType", "법인사용자"); - data.put("totalSendingCnt", "1440000"); - data.put("serviceId", "serviceId"); - dataList.add(data); - } - dataObj.put("list", dataList); - result.setData(dataObj); - return result; - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 유치 채널 상세 조회 - * @param paramMap - * @return - */ - public ApiResponseMessage channelDetail(Map paramMap) { - ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); - Map dataObj = new HashMap<>(); - List> dataList = new ArrayList<>(); - Map data = new HashMap<>(); - - dataObj.put("subsDt", "2022-03-10"); - dataObj.put("stat", "사용"); - dataObj.put("custNm", "홍길동"); - dataObj.put("plan", "요금제1"); - dataObj.put("reprNm", "홍길동"); - dataObj.put("custType", "법인사업자"); - dataObj.put("bRegNo", "1231212345"); - dataObj.put("cprRegNo", "1234561234567"); - dataObj.put("adr1", "12345"); - dataObj.put("adr2", "서울 마포구 월드컵북로 416"); - dataObj.put("adr3", "유플러스 상암사옥"); - dataObj.put("channelId", "Uplus01"); - dataObj.put("channelNm", "홍길동"); - dataObj.put("adminId", "uplus02"); - dataObj.put("adminNm", "김철수"); - - data.put("date", "합계"); - data.put("sms", "360000"); - data.put("lms", "360000"); - data.put("mms", "360000"); - data.put("totiTalk", "360000"); - data.put("allSendingCnt", "1440000"); - dataList.add(data); - - data = new HashMap<>(); - data.put("date", "2022-03"); - data.put("sms", "10000"); - data.put("lms", "10000"); - data.put("mms", "10000"); - data.put("totiTalk", "10000"); - data.put("allSendingCnt", "40000"); - dataList.add(data); - - data = new HashMap<>(); - data.put("date", "2022-02"); - data.put("sms", "10000"); - data.put("lms", "10000"); - data.put("mms", "10000"); - data.put("totiTalk", "10000"); - data.put("allSendingCnt", "40000"); - dataList.add(data); - - data = new HashMap<>(); - data.put("date", "2022-01"); - data.put("sms", "10000"); - data.put("lms", "10000"); - data.put("mms", "10000"); - data.put("totiTalk", "10000"); - data.put("allSendingCnt", "40000"); - dataList.add(data); - - dataObj.put("list", dataList); - result.setData(dataObj); - - return result; - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 발송건수 엑셀 다운로드 - * @param paramMap - * @return - */ - public ApiResponseMessage sendNumberListExcel(Map paramMap) { - ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); - Map dataObj = new HashMap<>(); - List> dataList = new ArrayList<>(); - Map data = new HashMap<>(); - - dataObj.put("subsDt", "2022-03-10"); - dataObj.put("stat", "사용"); - dataObj.put("custNm", "홍길동"); - dataObj.put("plan", "요금제1"); - dataObj.put("reprNm", "홍길동"); - dataObj.put("custType", "법인사업자"); - dataObj.put("bRegNo", "1231212345"); - dataObj.put("cprRegNo", "1234561234567"); - dataObj.put("adr1", "12345"); - dataObj.put("adr2", "서울 마포구 월드컵북로 416"); - dataObj.put("adr3", "유플러스 상암사옥"); - dataObj.put("channelId", "Uplus01"); - dataObj.put("channelNm", "홍길동"); - dataObj.put("adminId", "uplus02"); - dataObj.put("adminNm", "김철수"); - - data.put("date", "합계"); - data.put("sms", "360000"); - data.put("lms", "360000"); - data.put("mms", "360000"); - data.put("totiTalk", "360000"); - data.put("allSendingCnt", "1440000"); - dataList.add(data); - - data = new HashMap<>(); - data.put("date", "2022-03"); - data.put("sms", "10000"); - data.put("lms", "10000"); - data.put("mms", "10000"); - data.put("totiTalk", "10000"); - data.put("allSendingCnt", "40000"); - dataList.add(data); - - data = new HashMap<>(); - data.put("date", "2022-02"); - data.put("sms", "10000"); - data.put("lms", "10000"); - data.put("mms", "10000"); - data.put("totiTalk", "10000"); - data.put("allSendingCnt", "40000"); - dataList.add(data); - - data = new HashMap<>(); - data.put("date", "2022-01"); - data.put("sms", "10000"); - data.put("lms", "10000"); - data.put("mms", "10000"); - data.put("totiTalk", "10000"); - data.put("allSendingCnt", "40000"); - dataList.add(data); - - dataObj.put("list", dataList); - result.setData(dataObj); - - return result; - } - -} +package kr.co.uplus.ez.api.attractMgt; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.springframework.stereotype.Service; + +import kr.co.uplus.ez.common.data.ApiResponseCode; +import kr.co.uplus.ez.common.data.ApiResponseMessage; + +@Service +public class AttractMgtService { + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 유치채널 목록조회 + * @param paramMap + * @return + */ + public ApiResponseMessage channelList(Map paramMap) { + ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); + Map dataObj = new HashMap<>(); + List> dataList = new ArrayList<>(); + Map data = new HashMap<>(); + + data.put("totalCnt", "999"); + data.put("currentPage", "1"); + dataObj.put("paging", data); + + for(int i=1; i<10; i++) { + data = new HashMap<>(); + data.put("no", ""+i); + data.put("regDt", "2022-03-10"); + data.put("channelNm", "업체명"); + data.put("adminId", "uplus01"); + data.put("custNm", "유플러스"); + data.put("bRegNo", "221-81-39938"); + data.put("userNm", "유플러스스"); + data.put("stat", "사용"); + data.put("custType", "법인사용자"); + data.put("totalSendingCnt", "1440000"); + data.put("serviceId", "serviceId"); + dataList.add(data); + } + dataObj.put("list", dataList); + result.setData(dataObj); + return result; + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 유치채널 목록 엑셀 다운로드 + * @param paramMap + * @return + */ + public ApiResponseMessage channelListExcel(Map paramMap) { + ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); + Map dataObj = new HashMap<>(); + List> dataList = new ArrayList<>(); + Map data = new HashMap<>(); + + data.put("totalCnt", "999"); + data.put("currentPage", "1"); + dataObj.put("paging", data); + + for(int i=1; i<50; i++) { + data = new HashMap<>(); + data.put("no", ""+i); + data.put("regDt", "2022-03-10"); + data.put("channelNm", "업체명"); + data.put("adminId", "uplus01"); + data.put("custNm", "유플러스"); + data.put("bRegNo", "221-81-39938"); + data.put("userNm", "유플러스스"); + data.put("stat", "사용"); + data.put("custType", "법인사용자"); + data.put("totalSendingCnt", "1440000"); + data.put("serviceId", "serviceId"); + dataList.add(data); + } + dataObj.put("list", dataList); + result.setData(dataObj); + return result; + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 유치 채널 상세 조회 + * @param paramMap + * @return + */ + public ApiResponseMessage channelDetail(Map paramMap) { + ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); + Map dataObj = new HashMap<>(); + List> dataList = new ArrayList<>(); + Map data = new HashMap<>(); + + dataObj.put("subsDt", "2022-03-10"); + dataObj.put("stat", "사용"); + dataObj.put("custNm", "홍길동"); + dataObj.put("plan", "요금제1"); + dataObj.put("reprNm", "홍길동"); + dataObj.put("custType", "법인사업자"); + dataObj.put("bRegNo", "1231212345"); + dataObj.put("cprRegNo", "1234561234567"); + dataObj.put("adr1", "12345"); + dataObj.put("adr2", "서울 마포구 월드컵북로 416"); + dataObj.put("adr3", "유플러스 상암사옥"); + dataObj.put("channelId", "Uplus01"); + dataObj.put("channelNm", "홍길동"); + dataObj.put("adminId", "uplus02"); + dataObj.put("adminNm", "김철수"); + + data.put("date", "합계"); + data.put("sms", "360000"); + data.put("lms", "360000"); + data.put("mms", "360000"); + data.put("totiTalk", "360000"); + data.put("allSendingCnt", "1440000"); + dataList.add(data); + + data = new HashMap<>(); + data.put("date", "2022-03"); + data.put("sms", "10000"); + data.put("lms", "10000"); + data.put("mms", "10000"); + data.put("totiTalk", "10000"); + data.put("allSendingCnt", "40000"); + dataList.add(data); + + data = new HashMap<>(); + data.put("date", "2022-02"); + data.put("sms", "10000"); + data.put("lms", "10000"); + data.put("mms", "10000"); + data.put("totiTalk", "10000"); + data.put("allSendingCnt", "40000"); + dataList.add(data); + + data = new HashMap<>(); + data.put("date", "2022-01"); + data.put("sms", "10000"); + data.put("lms", "10000"); + data.put("mms", "10000"); + data.put("totiTalk", "10000"); + data.put("allSendingCnt", "40000"); + dataList.add(data); + + dataObj.put("list", dataList); + result.setData(dataObj); + + return result; + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 발송건수 엑셀 다운로드 + * @param paramMap + * @return + */ + public ApiResponseMessage sendNumberListExcel(Map paramMap) { + ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); + Map dataObj = new HashMap<>(); + List> dataList = new ArrayList<>(); + Map data = new HashMap<>(); + + dataObj.put("subsDt", "2022-03-10"); + dataObj.put("stat", "사용"); + dataObj.put("custNm", "홍길동"); + dataObj.put("plan", "요금제1"); + dataObj.put("reprNm", "홍길동"); + dataObj.put("custType", "법인사업자"); + dataObj.put("bRegNo", "1231212345"); + dataObj.put("cprRegNo", "1234561234567"); + dataObj.put("adr1", "12345"); + dataObj.put("adr2", "서울 마포구 월드컵북로 416"); + dataObj.put("adr3", "유플러스 상암사옥"); + dataObj.put("channelId", "Uplus01"); + dataObj.put("channelNm", "홍길동"); + dataObj.put("adminId", "uplus02"); + dataObj.put("adminNm", "김철수"); + + data.put("date", "합계"); + data.put("sms", "360000"); + data.put("lms", "360000"); + data.put("mms", "360000"); + data.put("totiTalk", "360000"); + data.put("allSendingCnt", "1440000"); + dataList.add(data); + + data = new HashMap<>(); + data.put("date", "2022-03"); + data.put("sms", "10000"); + data.put("lms", "10000"); + data.put("mms", "10000"); + data.put("totiTalk", "10000"); + data.put("allSendingCnt", "40000"); + dataList.add(data); + + data = new HashMap<>(); + data.put("date", "2022-02"); + data.put("sms", "10000"); + data.put("lms", "10000"); + data.put("mms", "10000"); + data.put("totiTalk", "10000"); + data.put("allSendingCnt", "40000"); + dataList.add(data); + + data = new HashMap<>(); + data.put("date", "2022-01"); + data.put("sms", "10000"); + data.put("lms", "10000"); + data.put("mms", "10000"); + data.put("totiTalk", "10000"); + data.put("allSendingCnt", "40000"); + dataList.add(data); + + dataObj.put("list", dataList); + result.setData(dataObj); + + return result; + } + +} diff --git a/src/main/java/kr/co/uplus/ez/api/calculate/CalculateController.java b/src/main/java/kr/co/uplus/ez/api/calculate/CalculateController.java index 1ff5a14..bc2534f 100644 --- a/src/main/java/kr/co/uplus/ez/api/calculate/CalculateController.java +++ b/src/main/java/kr/co/uplus/ez/api/calculate/CalculateController.java @@ -1,52 +1,52 @@ -/** - * date : 2022. 4. 25. - * auth : ckr - * desc : 정산 - */ -package kr.co.uplus.ez.api.calculate; - -import java.util.Map; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; - -import kr.co.uplus.ez.common.data.ApiResponseMessage; - -@RestController -@RequestMapping(value = "api/v1/bo/calculate") -public class CalculateController { - @Autowired - CalculateService calculateService; - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 정산 이력 목록 조회 - * @param paramMap - * @return - * @throws Exception - */ - @RequestMapping(value = "/calcList" , method = {RequestMethod.POST}) - @ResponseBody - public ApiResponseMessage calcList(@RequestBody Map paramMap) throws Exception{ - return calculateService.calcList(paramMap); - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 정산 이력 목록 엑셀 다운로드 - * @param paramMap - * @return - * @throws Exception - */ - @RequestMapping(value = "/calcListExcel" , method = {RequestMethod.POST}) - @ResponseBody - public ApiResponseMessage calcListExcel(@RequestBody Map paramMap) throws Exception{ - return calculateService.calcListExcel(paramMap); - } -} +/** + * date : 2022. 4. 25. + * auth : ckr + * desc : 정산 + */ +package kr.co.uplus.ez.api.calculate; + +import java.util.Map; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +import kr.co.uplus.ez.common.data.ApiResponseMessage; + +@RestController +@RequestMapping(value = "api/v1/bo/calculate") +public class CalculateController { + @Autowired + CalculateService calculateService; + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 정산 이력 목록 조회 + * @param paramMap + * @return + * @throws Exception + */ + @RequestMapping(value = "/calcList" , method = {RequestMethod.POST}) + @ResponseBody + public ApiResponseMessage calcList(@RequestBody Map paramMap) throws Exception{ + return calculateService.calcList(paramMap); + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 정산 이력 목록 엑셀 다운로드 + * @param paramMap + * @return + * @throws Exception + */ + @RequestMapping(value = "/calcListExcel" , method = {RequestMethod.POST}) + @ResponseBody + public ApiResponseMessage calcListExcel(@RequestBody Map paramMap) throws Exception{ + return calculateService.calcListExcel(paramMap); + } +} diff --git a/src/main/java/kr/co/uplus/ez/api/calculate/CalculateMapper.java b/src/main/java/kr/co/uplus/ez/api/calculate/CalculateMapper.java index e283327..1d91f70 100644 --- a/src/main/java/kr/co/uplus/ez/api/calculate/CalculateMapper.java +++ b/src/main/java/kr/co/uplus/ez/api/calculate/CalculateMapper.java @@ -1,8 +1,8 @@ -package kr.co.uplus.ez.api.calculate; - -import org.apache.ibatis.annotations.Mapper; - -@Mapper -public class CalculateMapper { - -} +package kr.co.uplus.ez.api.calculate; + +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public class CalculateMapper { + +} diff --git a/src/main/java/kr/co/uplus/ez/api/calculate/CalculateService.java b/src/main/java/kr/co/uplus/ez/api/calculate/CalculateService.java index 0af8b61..bc4d107 100644 --- a/src/main/java/kr/co/uplus/ez/api/calculate/CalculateService.java +++ b/src/main/java/kr/co/uplus/ez/api/calculate/CalculateService.java @@ -1,96 +1,96 @@ -package kr.co.uplus.ez.api.calculate; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.springframework.stereotype.Service; - -import kr.co.uplus.ez.common.data.ApiResponseCode; -import kr.co.uplus.ez.common.data.ApiResponseMessage; - -@Service -public class CalculateService { - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 정산 이력 목록 조회 - * @param paramMap - * @return - */ - public ApiResponseMessage calcList(Map paramMap) { - ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); - Map dataObj = new HashMap<>(); - List> dataList = new ArrayList<>(); - Map data = new HashMap<>(); - data.put("totalCnt","999"); - data.put("currentPage","1"); - dataObj.put("paging", data); - - for(int i=0; i<10; i++) { - data = new HashMap<>(); - data.put("date", "2022-02"); - data.put("custNm", "유플러스"+(i+1)); - data.put("bRegNo", "22-81-39937"); - data.put("plan", "요금제1(50000)"); - data.put("startAmount", "50000"); - data.put("useAmount", "100000"); - data.put("carryOverAmount", "-"); - data.put("unitAmount", "-"); - data.put("extshAmount", "-"); - data.put("requestAmount", "100000"); - data.put("allSendingCnt", "84000000"); - data.put("sms", "21000000"); - data.put("lms", "21000000"); - data.put("mms", "21000000"); - data.put("notiTalk", "21000000"); - dataList.add(data); - } - dataObj.put("list", dataList); - result.setData(dataObj); - return result; - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 정산 이력 목록 엑셀 다운로드 - * @param paramMap - * @return - */ - public ApiResponseMessage calcListExcel(Map paramMap) { - ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); - Map dataObj = new HashMap<>(); - List> dataList = new ArrayList<>(); - Map data = new HashMap<>(); - data.put("totalCnt","999"); - data.put("currentPage","1"); - dataObj.put("paging", data); - - for(int i=0; i<10; i++) { - data = new HashMap<>(); - data.put("date", "2022-02"); - data.put("custNm", "유플러스"+(i+1)); - data.put("bRegNo", "22-81-39937"); - data.put("plan", "요금제1(50000)"); - data.put("startAmount", "50000"); - data.put("useAmount", "100000"); - data.put("carryOverAmount", "-"); - data.put("unitAmount", "-"); - data.put("extshAmount", "-"); - data.put("requestAmount", "100000"); - data.put("allSendingCnt", "84000000"); - data.put("sms", "21000000"); - data.put("lms", "21000000"); - data.put("mms", "21000000"); - data.put("notiTalk", "21000000"); - dataList.add(data); - } - dataObj.put("list", dataList); - result.setData(dataObj); - return result; - } - -} +package kr.co.uplus.ez.api.calculate; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.springframework.stereotype.Service; + +import kr.co.uplus.ez.common.data.ApiResponseCode; +import kr.co.uplus.ez.common.data.ApiResponseMessage; + +@Service +public class CalculateService { + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 정산 이력 목록 조회 + * @param paramMap + * @return + */ + public ApiResponseMessage calcList(Map paramMap) { + ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); + Map dataObj = new HashMap<>(); + List> dataList = new ArrayList<>(); + Map data = new HashMap<>(); + data.put("totalCnt","999"); + data.put("currentPage","1"); + dataObj.put("paging", data); + + for(int i=0; i<10; i++) { + data = new HashMap<>(); + data.put("date", "2022-02"); + data.put("custNm", "유플러스"+(i+1)); + data.put("bRegNo", "22-81-39937"); + data.put("plan", "요금제1(50000)"); + data.put("startAmount", "50000"); + data.put("useAmount", "100000"); + data.put("carryOverAmount", "-"); + data.put("unitAmount", "-"); + data.put("extshAmount", "-"); + data.put("requestAmount", "100000"); + data.put("allSendingCnt", "84000000"); + data.put("sms", "21000000"); + data.put("lms", "21000000"); + data.put("mms", "21000000"); + data.put("notiTalk", "21000000"); + dataList.add(data); + } + dataObj.put("list", dataList); + result.setData(dataObj); + return result; + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 정산 이력 목록 엑셀 다운로드 + * @param paramMap + * @return + */ + public ApiResponseMessage calcListExcel(Map paramMap) { + ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); + Map dataObj = new HashMap<>(); + List> dataList = new ArrayList<>(); + Map data = new HashMap<>(); + data.put("totalCnt","999"); + data.put("currentPage","1"); + dataObj.put("paging", data); + + for(int i=0; i<10; i++) { + data = new HashMap<>(); + data.put("date", "2022-02"); + data.put("custNm", "유플러스"+(i+1)); + data.put("bRegNo", "22-81-39937"); + data.put("plan", "요금제1(50000)"); + data.put("startAmount", "50000"); + data.put("useAmount", "100000"); + data.put("carryOverAmount", "-"); + data.put("unitAmount", "-"); + data.put("extshAmount", "-"); + data.put("requestAmount", "100000"); + data.put("allSendingCnt", "84000000"); + data.put("sms", "21000000"); + data.put("lms", "21000000"); + data.put("mms", "21000000"); + data.put("notiTalk", "21000000"); + dataList.add(data); + } + dataObj.put("list", dataList); + result.setData(dataObj); + return result; + } + +} diff --git a/src/main/java/kr/co/uplus/ez/api/channelMgt/ChannelMgtController.java b/src/main/java/kr/co/uplus/ez/api/channelMgt/ChannelMgtController.java index 00a03e2..863cf99 100644 --- a/src/main/java/kr/co/uplus/ez/api/channelMgt/ChannelMgtController.java +++ b/src/main/java/kr/co/uplus/ez/api/channelMgt/ChannelMgtController.java @@ -1,38 +1,38 @@ -/** - * date : 2022. 4. 25. - * auth : ckr - * desc : 채널관리 - */ -package kr.co.uplus.ez.api.channelMgt; - -import java.util.Map; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; - -import kr.co.uplus.ez.common.data.ApiResponseMessage; - -@RestController -@RequestMapping(value = "api/v1/bo/channelMgt") -public class ChannelMgtController { - @Autowired - ChannelMgtService channelService; - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 알림톡 템플릿 목록 조회 - * @param paramMap - * @return - * @throws Exception - */ - @RequestMapping(value = "/tmpltList" , method = {RequestMethod.POST}) - @ResponseBody - public ApiResponseMessage tmpltList(@RequestBody Map paramMap) throws Exception{ - return channelService.tmpltList(paramMap); - } -} +/** + * date : 2022. 4. 25. + * auth : ckr + * desc : 채널관리 + */ +package kr.co.uplus.ez.api.channelMgt; + +import java.util.Map; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +import kr.co.uplus.ez.common.data.ApiResponseMessage; + +@RestController +@RequestMapping(value = "api/v1/bo/channelMgt") +public class ChannelMgtController { + @Autowired + ChannelMgtService channelService; + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 알림톡 템플릿 목록 조회 + * @param paramMap + * @return + * @throws Exception + */ + @RequestMapping(value = "/tmpltList" , method = {RequestMethod.POST}) + @ResponseBody + public ApiResponseMessage tmpltList(@RequestBody Map paramMap) throws Exception{ + return channelService.tmpltList(paramMap); + } +} diff --git a/src/main/java/kr/co/uplus/ez/api/channelMgt/ChannelMgtMapper.java b/src/main/java/kr/co/uplus/ez/api/channelMgt/ChannelMgtMapper.java index ad2d1bc..57c0f22 100644 --- a/src/main/java/kr/co/uplus/ez/api/channelMgt/ChannelMgtMapper.java +++ b/src/main/java/kr/co/uplus/ez/api/channelMgt/ChannelMgtMapper.java @@ -1,8 +1,8 @@ -package kr.co.uplus.ez.api.channelMgt; - -import org.apache.ibatis.annotations.Mapper; - -@Mapper -public class ChannelMgtMapper { - -} +package kr.co.uplus.ez.api.channelMgt; + +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public class ChannelMgtMapper { + +} diff --git a/src/main/java/kr/co/uplus/ez/api/channelMgt/ChannelMgtService.java b/src/main/java/kr/co/uplus/ez/api/channelMgt/ChannelMgtService.java index 5774ee9..e508d2f 100644 --- a/src/main/java/kr/co/uplus/ez/api/channelMgt/ChannelMgtService.java +++ b/src/main/java/kr/co/uplus/ez/api/channelMgt/ChannelMgtService.java @@ -1,51 +1,51 @@ -package kr.co.uplus.ez.api.channelMgt; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.springframework.stereotype.Service; - -import kr.co.uplus.ez.common.data.ApiResponseCode; -import kr.co.uplus.ez.common.data.ApiResponseMessage; - -@Service -public class ChannelMgtService { - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 알림톡 템플릿 목록 조회 - * @param paramMap - * @return - */ - public ApiResponseMessage tmpltList(Map paramMap) { - ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); - Map dataObj = new HashMap<>(); - List> dataList = new ArrayList<>(); - Map data = new HashMap<>(); - data.put("totalCnt","999"); - data.put("currentPage","1"); - dataObj.put("paging", data); - - for(int i=0; i<10; i++) { - data = new HashMap<>(); - data.put("no", ""+(i+1)); - data.put("custNm", "유플러스"); - data.put("bRegNo", "229-81-39938"); - data.put("tmpltCd", "Abc"); - data.put("tmpltNm", "부가정보형"); - data.put("stat", "승인"); - data.put("returnReason", ""); - data.put("sendProfile", "@유플러스"); - data.put("lastChgDt", "2022-03-10"); - - dataList.add(data); - } - dataObj.put("list", dataList); - result.setData(dataObj); - return result; - } - -} +package kr.co.uplus.ez.api.channelMgt; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.springframework.stereotype.Service; + +import kr.co.uplus.ez.common.data.ApiResponseCode; +import kr.co.uplus.ez.common.data.ApiResponseMessage; + +@Service +public class ChannelMgtService { + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 알림톡 템플릿 목록 조회 + * @param paramMap + * @return + */ + public ApiResponseMessage tmpltList(Map paramMap) { + ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); + Map dataObj = new HashMap<>(); + List> dataList = new ArrayList<>(); + Map data = new HashMap<>(); + data.put("totalCnt","999"); + data.put("currentPage","1"); + dataObj.put("paging", data); + + for(int i=0; i<10; i++) { + data = new HashMap<>(); + data.put("no", ""+(i+1)); + data.put("custNm", "유플러스"); + data.put("bRegNo", "229-81-39938"); + data.put("tmpltCd", "Abc"); + data.put("tmpltNm", "부가정보형"); + data.put("stat", "승인"); + data.put("returnReason", ""); + data.put("sendProfile", "@유플러스"); + data.put("lastChgDt", "2022-03-10"); + + dataList.add(data); + } + dataObj.put("list", dataList); + result.setData(dataObj); + return result; + } + +} diff --git a/src/main/java/kr/co/uplus/ez/api/comm/CommController.java b/src/main/java/kr/co/uplus/ez/api/comm/CommController.java index a9a5c9e..e22a958 100644 --- a/src/main/java/kr/co/uplus/ez/api/comm/CommController.java +++ b/src/main/java/kr/co/uplus/ez/api/comm/CommController.java @@ -1,78 +1,107 @@ -/** - * date : 2022. 4. 26. - * auth : ckr - * desc : 공통 - */ -package kr.co.uplus.ez.api.comm; - -import java.util.Map; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; - -import kr.co.uplus.ez.common.data.ApiResponseMessage; - -@RestController -@RequestMapping(value = "api/v1/bo/comm") -public class CommController { - - @Autowired - CommService commService; - - /** - * date : 2022. 4. 26. - * auth : ckr - * desc : 메뉴 목록 조회 - * @param paramMap - * @throws Exception - */ - @RequestMapping(value = "/getMenu" , method = {RequestMethod.POST}) - @ResponseBody - public ApiResponseMessage getMenu() throws Exception{ - return commService.getMenu(); - } - - /** - * date : 2022. 4. 26. - * auth : ckr - * desc : 공통 코드 조회 - * @param paramMap - * @throws Exception - */ - @RequestMapping(value = "/getCode" , method = {RequestMethod.POST}) - @ResponseBody - public ApiResponseMessage getCode(@RequestBody Map paramMap) throws Exception{ - return commService.getCode(paramMap); - } - - /** - * date : 2022. 4. 26. - * auth : ckr - * desc : 토큰요청 - * @param paramMap - * @throws Exception - */ - @RequestMapping(value = "/getToken" , method = {RequestMethod.POST}) - @ResponseBody - public ApiResponseMessage getToken(@RequestBody Map paramMap) throws Exception{ - return commService.getToken(paramMap); - } - - /** - * date : 2022. 4. 26. - * auth : ckr - * desc : 토큰연장 - * @param paramMap - * @throws Exception - */ - @RequestMapping(value = "/refreshToken" , method = {RequestMethod.POST}) - @ResponseBody - public ApiResponseMessage refreshToken(@RequestBody Map paramMap) throws Exception{ - return commService.refreshToken(paramMap); - } - -} +/** + * date : 2022. 4. 26. + * auth : ckr + * desc : 공통 + */ +package kr.co.uplus.ez.api.comm; + +import javax.servlet.http.HttpServletResponse; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiResponse; +import io.swagger.annotations.ApiResponses; +import kr.co.uplus.ez.api.comm.dto.AuthResDto; +import kr.co.uplus.ez.api.comm.dto.CodeReqDto; +import kr.co.uplus.ez.api.comm.dto.CodeResDto; +import kr.co.uplus.ez.api.comm.dto.MenuResDto; +import kr.co.uplus.ez.api.comm.dto.RefreshTokenReqDto; +import kr.co.uplus.ez.api.comm.dto.RefreshTokenResDto; + +/** + * 공통관리 Controller. + * + * @author rejoice + * + */ +@RestController +@RequestMapping(value = "api/v1/bo/comm") +public class CommController { + + @Autowired + CommService commService; + + /** + * date : 2022. 4. 26. + * auth : ckr + * desc : 메뉴 목록 조회 + * + * @return MenuResDto + */ + @ApiOperation(value = "getMenu", notes = "메뉴 목록 조회") + @ApiResponses({ + @ApiResponse(code = HttpServletResponse.SC_OK, message = "SUCESS") + }) + @RequestMapping(value = "/getMenu" , method = {RequestMethod.POST}) + @ResponseBody + public MenuResDto getMenu() { + return commService.getMenu(); + } + + /** + * date : 2022. 4. 26. + * auth : ckr + * desc : 공통 코드 조회 + * + * @param codeReqDto + * @return CodeResDto + */ + @ApiOperation(value = "getCode", notes = "공통 코드 조회") + @ApiResponses({ + @ApiResponse(code = HttpServletResponse.SC_OK, message = "SUCESS") + }) + @RequestMapping(value = "/getCode" , method = {RequestMethod.POST}) + @ResponseBody + public CodeResDto getCode(@RequestBody CodeReqDto codeReqDto) { + return commService.getCode(codeReqDto); + } + + /** + * date : 2022. 4. 26. + * auth : ckr + * desc : 토큰연장 + * + * @param refreshTokenReqDto + * @return RefreshTokenResDto + */ + @ApiOperation(value = "refreshToken", notes = "토큰연장") + @ApiResponses({ + @ApiResponse(code = HttpServletResponse.SC_OK, message = "SUCESS") + }) + @RequestMapping(value = "/refreshToken" , method = {RequestMethod.POST}) + @ResponseBody + public RefreshTokenResDto refreshToken(@RequestBody RefreshTokenReqDto refreshTokenReqDto) { + return commService.refreshToken(refreshTokenReqDto); + } + + /** + * 권한 코드 조회. + * + * @return + */ + @ApiOperation(value = "getAuth", notes = "권한 코드 조회") + @ApiResponses({ + @ApiResponse(code = HttpServletResponse.SC_OK, message = "SUCESS") + }) + @RequestMapping(value = "/getAuth" , method = {RequestMethod.POST}) + @ResponseBody + public AuthResDto getAuth() { + return commService.getAuth(); + } +} \ No newline at end of file diff --git a/src/main/java/kr/co/uplus/ez/api/comm/CommMapper.java b/src/main/java/kr/co/uplus/ez/api/comm/CommMapper.java index 4ebbf05..771815c 100644 --- a/src/main/java/kr/co/uplus/ez/api/comm/CommMapper.java +++ b/src/main/java/kr/co/uplus/ez/api/comm/CommMapper.java @@ -1,10 +1,19 @@ -package kr.co.uplus.ez.api.comm; - -import java.util.List; - -import org.apache.ibatis.annotations.Mapper; - -@Mapper -public interface CommMapper { - public List getMenuByRole(String role) throws Exception; -} +package kr.co.uplus.ez.api.comm; + +import java.util.List; + +import org.apache.ibatis.annotations.Mapper; + +import kr.co.uplus.ez.api.comm.dto.Auth; +import kr.co.uplus.ez.api.comm.dto.Code; +import kr.co.uplus.ez.api.comm.dto.CodeReqDto; +import kr.co.uplus.ez.api.comm.dto.Menu; + +@Mapper +public interface CommMapper { + public List getMenuByRole(String role); + + public List getCommCode(CodeReqDto codeReqDto); + + public List getAuthCode(); +} diff --git a/src/main/java/kr/co/uplus/ez/api/comm/CommService.java b/src/main/java/kr/co/uplus/ez/api/comm/CommService.java index 69d8a40..41dbb01 100644 --- a/src/main/java/kr/co/uplus/ez/api/comm/CommService.java +++ b/src/main/java/kr/co/uplus/ez/api/comm/CommService.java @@ -1,90 +1,143 @@ -package kr.co.uplus.ez.api.comm; - -import java.util.List; -import java.util.Map; -import java.util.function.Function; -import java.util.stream.Collectors; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import kr.co.uplus.ez.common.data.ApiResponseCode; -import kr.co.uplus.ez.common.data.ApiResponseMessage; -import kr.co.uplus.ez.common.utils.SpringUtils; - -@Service -public class CommService { - private final Logger log = LoggerFactory.getLogger(getClass()); - - @Autowired - CommMapper commMapper; - /** - * date : 2022. 4. 26. - * auth : ckr - * desc : 메뉴 목록 조회 - * @param paramMap - * @return - */ - public ApiResponseMessage getMenu() throws Exception{ - ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); - String currUserRole = SpringUtils.getCurrentUserRole(); - log.debug("currUserRole : {}", currUserRole); - List menuList = commMapper.getMenuByRole(currUserRole); - - Menu root = new Menu(); - Map map = menuList.stream().collect( - Collectors.toMap(Menu::getMenuNo, Function.identity())); - - for (Menu menu : menuList) { - Integer prntId = menu.getPrntsMenuNo(); - if (prntId == null || prntId == 0) { - root.addChild(menu); - } - else { - map.get(prntId).addChild(menu); - } - } - - result.setData(root); - return result; - } - - /** - * date : 2022. 4. 26. - * auth : ckr - * desc : 공통 코드 조회 - * @param paramMap - * @return - */ - public ApiResponseMessage getCode(Map paramMap) { - ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); - return result; - } - - /** - * date : 2022. 4. 26. - * auth : ckr - * desc : 토큰요청 - * @param paramMap - * @return - */ - public ApiResponseMessage getToken(Map paramMap) { - ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); - return result; - } - - /** - * date : 2022. 4. 26. - * auth : ckr - * desc : 토큰연장 - * @param paramMap - * @return - */ - public ApiResponseMessage refreshToken(Map paramMap) { - ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); - return result; - } - -} +package kr.co.uplus.ez.api.comm; + +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +import org.mybatis.spring.SqlSessionTemplate; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Service; + +import kr.co.uplus.ez.api.comm.dto.Auth; +import kr.co.uplus.ez.api.comm.dto.AuthRes; +import kr.co.uplus.ez.api.comm.dto.AuthResDto; +import kr.co.uplus.ez.api.comm.dto.Code; +import kr.co.uplus.ez.api.comm.dto.CodeReqDto; +import kr.co.uplus.ez.api.comm.dto.CodeRes; +import kr.co.uplus.ez.api.comm.dto.CodeResDto; +import kr.co.uplus.ez.api.comm.dto.Menu; +import kr.co.uplus.ez.api.comm.dto.MenuResDto; +import kr.co.uplus.ez.api.comm.dto.RefreshTokenReqDto; +import kr.co.uplus.ez.api.comm.dto.RefreshTokenResDto; +import kr.co.uplus.ez.common.data.ApiResponseCode; +import kr.co.uplus.ez.common.utils.SpringUtils; + +@Service +public class CommService { + + private final Logger log = LoggerFactory.getLogger(getClass()); + + @Autowired + @Qualifier("sqlSessionTemplateDb1") + private SqlSessionTemplate sqlSessionMaster; + + @Autowired + @Qualifier("sqlSessionTemplateDb2") + private SqlSessionTemplate sqlSessionSlave; + + /** + * date : 2022. 4. 26. + * auth : ckr + * desc : 메뉴 목록 조회 + * + * @return MenuResDto + */ + public MenuResDto getMenu() { + + CommMapper commMapper = sqlSessionSlave.getMapper(CommMapper.class); + + String currUserRole = SpringUtils.getCurrentUserRole(); + log.debug("currUserRole : {}", currUserRole); + List menuList = commMapper.getMenuByRole(currUserRole); + + Menu root = new Menu(); + Map map = menuList.stream().collect( + Collectors.toMap(Menu::getMenuNo, Function.identity())); + + for (Menu menu : menuList) { + Integer prntId = menu.getPrntsMenuNo(); + if (prntId == null || prntId == 0) { + root.addChild(menu); + } + else { + map.get(prntId).addChild(menu); + } + } + MenuResDto result = new MenuResDto(ApiResponseCode.SUCCESS, root); + return result; + } + + /** + * date : 2022. 4. 26. + * auth : ckr + * desc : 공통 코드 조회 + * @param codeReqDto + * @return CodeResDto + */ + public CodeResDto getCode(CodeReqDto codeReqDto) { + // 1.디비 메퍼 정하기 + CommMapper commMapper = sqlSessionSlave.getMapper(CommMapper.class); + + // 2. request 파라미터 벨리데이션 체크 필수값, 데이터 타입 + + // 3. 쿼리 조회 메퍼를 통해서 메퍼.xml 데이터 들고오기 + List codeList = commMapper.getCommCode(codeReqDto); + + // 응답 파라이터 + CodeRes codRes = new CodeRes(); + codRes.setList(codeList); + + // 응답 메시지 + CodeResDto result = new CodeResDto(); + result.setData(codRes); + + return result; + } + + /** + * date : 2022. 4. 26. + * auth : ckr + * desc : 토큰연장 + * @param refreshTokenReqDto + * @return RefreshTokenResDto + */ + public RefreshTokenResDto refreshToken(RefreshTokenReqDto refreshTokenReqDto) { + + // 1. 리프레시 토큰 조회. + + // 2. AuthToken 생성. + + // 3. 응답. + + + + RefreshTokenResDto result = new RefreshTokenResDto(ApiResponseCode.SUCCESS); + return result; + } + + /** + * 권한 코드 조회. + * + * @return AuthResDto + */ + public AuthResDto getAuth(){ + // 1.디비 메퍼 정하기 + CommMapper commMapper = sqlSessionSlave.getMapper(CommMapper.class); + + List auths = commMapper.getAuthCode(); + + // 응답 파라이터 + AuthRes authRes = new AuthRes(); + authRes.setList(auths); + + // 응답 메시지 + AuthResDto result = new AuthResDto(); + result.setData(authRes); + + return result; + } +} \ No newline at end of file diff --git a/src/main/java/kr/co/uplus/ez/api/comm/Menu.java b/src/main/java/kr/co/uplus/ez/api/comm/Menu.java index bd0b14f..8bbbc42 100644 --- a/src/main/java/kr/co/uplus/ez/api/comm/Menu.java +++ b/src/main/java/kr/co/uplus/ez/api/comm/Menu.java @@ -1,29 +1,29 @@ -package kr.co.uplus.ez.api.comm; - -import java.util.ArrayList; -import java.util.List; - -import lombok.Data; - -@Data -public class Menu { - - private Integer menuNo; // 메뉴 번호 - private Integer prntsMenuNo; // 부모 메뉴 번호 - private String menuNm; // 메뉴 명 - private Integer menuOdrg; // 메뉴 순서 - private String useYn; // 사용 여부 - private Integer autchkGrpno; // 권한체크 그룹번호 - private Integer menuLvl; // 메뉴 레벨 - private String menuUrl; // 메뉴 URL - private String regId; // 등록 ID - private String regDt; // 등록 일시 - private String chgId; // 변경 ID - private String chgDt; // 변경 일시 - private List children = new ArrayList<>(); - - public void addChild(Menu menu) { - children.add(menu); - } - -} +package kr.co.uplus.ez.api.comm; + +import java.util.ArrayList; +import java.util.List; + +import lombok.Data; + +@Data +public class Menu { + + private Integer menuNo; // 메뉴 번호 + private Integer prntsMenuNo; // 부모 메뉴 번호 + private String menuNm; // 메뉴 명 + private Integer menuOdrg; // 메뉴 순서 + private String useYn; // 사용 여부 + private Integer autchkGrpno; // 권한체크 그룹번호 + private Integer menuLvl; // 메뉴 레벨 + private String menuUrl; // 메뉴 URL + private String regId; // 등록 ID + private String regDt; // 등록 일시 + private String chgId; // 변경 ID + private String chgDt; // 변경 일시 + private List children = new ArrayList<>(); + + public void addChild(Menu menu) { + children.add(menu); + } + +} diff --git a/src/main/java/kr/co/uplus/ez/api/comm/dto/Auth.java b/src/main/java/kr/co/uplus/ez/api/comm/dto/Auth.java new file mode 100644 index 0000000..045b316 --- /dev/null +++ b/src/main/java/kr/co/uplus/ez/api/comm/dto/Auth.java @@ -0,0 +1,14 @@ +package kr.co.uplus.ez.api.comm.dto; + +import java.io.Serializable; + +import lombok.Data; + +@SuppressWarnings("serial") +@Data +public class Auth implements Serializable{ + + private String autCd; + private String autNm; + private String useYn; +} diff --git a/src/main/java/kr/co/uplus/ez/api/comm/dto/AuthRes.java b/src/main/java/kr/co/uplus/ez/api/comm/dto/AuthRes.java new file mode 100644 index 0000000..3411332 --- /dev/null +++ b/src/main/java/kr/co/uplus/ez/api/comm/dto/AuthRes.java @@ -0,0 +1,16 @@ +package kr.co.uplus.ez.api.comm.dto; + +import java.io.Serializable; +import java.util.List; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@SuppressWarnings("serial") +@Data +public class AuthRes implements Serializable { + + @ApiModelProperty(name = "권한리스트", example = "권한리스트", dataType = "List") + private List list; + +} diff --git a/src/main/java/kr/co/uplus/ez/api/comm/dto/AuthResDto.java b/src/main/java/kr/co/uplus/ez/api/comm/dto/AuthResDto.java new file mode 100644 index 0000000..94e70b9 --- /dev/null +++ b/src/main/java/kr/co/uplus/ez/api/comm/dto/AuthResDto.java @@ -0,0 +1,33 @@ +package kr.co.uplus.ez.api.comm.dto; + +import java.io.Serializable; + +import io.swagger.annotations.ApiModelProperty; +import kr.co.uplus.ez.common.data.ApiResponseCode; +import kr.co.uplus.ez.common.data.ResponseMessage; +import lombok.Data; + +@SuppressWarnings("serial") +@Data +public class AuthResDto extends ResponseMessage implements Serializable { + + @ApiModelProperty(example = "데이터") + private AuthRes data; + + public AuthResDto() { + this.retCode = ApiResponseCode.SUCCESS.getResultCode(); + this.retMsg = ApiResponseCode.SUCCESS.getResultMsg(); + } + + public AuthResDto(ApiResponseCode returnStr) { + this.retCode = returnStr.getResultCode(); + this.retMsg = returnStr.getResultMsg(); + } + + public AuthResDto(ApiResponseCode returnStr, AuthRes data) { + this.retCode = returnStr.getResultCode(); + this.retMsg = returnStr.getResultMsg(); + this.data = data; + } + +} diff --git a/src/main/java/kr/co/uplus/ez/api/comm/dto/Code.java b/src/main/java/kr/co/uplus/ez/api/comm/dto/Code.java new file mode 100644 index 0000000..6031fa0 --- /dev/null +++ b/src/main/java/kr/co/uplus/ez/api/comm/dto/Code.java @@ -0,0 +1,23 @@ +package kr.co.uplus.ez.api.comm.dto; + +import java.io.Serializable; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@SuppressWarnings("serial") +@Data +public class Code implements Serializable { + + @ApiModelProperty(name = "그룹코드", example = "그룹코드", dataType = "String") + private String grpCd; + @ApiModelProperty(name = "상세코드", example = "상세코드", dataType = "String") + private String code; + @ApiModelProperty(name = "상세코드명", example = "상세코드명", dataType = "String") + private String codeNm; + @ApiModelProperty(name = "정렬순서", example = "정렬순서", dataType = "Integer") + private Integer sortOrder; + @ApiModelProperty(name = "사용여부", example = "사용여부", dataType = "String") + private String useYn; + +} diff --git a/src/main/java/kr/co/uplus/ez/api/comm/dto/CodeReqDto.java b/src/main/java/kr/co/uplus/ez/api/comm/dto/CodeReqDto.java new file mode 100644 index 0000000..570365f --- /dev/null +++ b/src/main/java/kr/co/uplus/ez/api/comm/dto/CodeReqDto.java @@ -0,0 +1,15 @@ +package kr.co.uplus.ez.api.comm.dto; + +import java.io.Serializable; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@SuppressWarnings("serial") +@Data +public class CodeReqDto implements Serializable{ + + @ApiModelProperty(example = "그룹코드", name = "그룹코드", dataType = "String") + private String grpCd; + +} diff --git a/src/main/java/kr/co/uplus/ez/api/comm/dto/CodeRes.java b/src/main/java/kr/co/uplus/ez/api/comm/dto/CodeRes.java new file mode 100644 index 0000000..d240ccb --- /dev/null +++ b/src/main/java/kr/co/uplus/ez/api/comm/dto/CodeRes.java @@ -0,0 +1,16 @@ +package kr.co.uplus.ez.api.comm.dto; + +import java.io.Serializable; +import java.util.List; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@SuppressWarnings("serial") +@Data +public class CodeRes implements Serializable { + + @ApiModelProperty(name = "코드리스트", example = "코드리스트", dataType = "List") + private List list; + +} diff --git a/src/main/java/kr/co/uplus/ez/api/comm/dto/CodeResDto.java b/src/main/java/kr/co/uplus/ez/api/comm/dto/CodeResDto.java new file mode 100644 index 0000000..732f9e1 --- /dev/null +++ b/src/main/java/kr/co/uplus/ez/api/comm/dto/CodeResDto.java @@ -0,0 +1,32 @@ +package kr.co.uplus.ez.api.comm.dto; + +import java.io.Serializable; + +import io.swagger.annotations.ApiModelProperty; +import kr.co.uplus.ez.common.data.ApiResponseCode; +import kr.co.uplus.ez.common.data.ResponseMessage; +import lombok.Data; + +@SuppressWarnings("serial") +@Data +public class CodeResDto extends ResponseMessage implements Serializable{ + + @ApiModelProperty(example = "데이터") + private CodeRes data; + + public CodeResDto() { + this.retCode = ApiResponseCode.SUCCESS.getResultCode(); + this.retMsg = ApiResponseCode.SUCCESS.getResultMsg(); + } + + public CodeResDto(ApiResponseCode returnStr) { + this.retCode = returnStr.getResultCode(); + this.retMsg = returnStr.getResultMsg(); + } + + public CodeResDto(ApiResponseCode returnStr, CodeRes data) { + this.retCode = returnStr.getResultCode(); + this.retMsg = returnStr.getResultMsg(); + this.data = data; + } +} diff --git a/src/main/java/kr/co/uplus/ez/api/comm/dto/Menu.java b/src/main/java/kr/co/uplus/ez/api/comm/dto/Menu.java new file mode 100644 index 0000000..64f1a1c --- /dev/null +++ b/src/main/java/kr/co/uplus/ez/api/comm/dto/Menu.java @@ -0,0 +1,45 @@ +package kr.co.uplus.ez.api.comm.dto; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@SuppressWarnings("serial") +@Data +public class Menu implements Serializable{ + + @ApiModelProperty(name = "메뉴 번호", example = "메뉴 번호", dataType = "Integer") + private Integer menuNo; + @ApiModelProperty(name = "부모 메뉴 번호", example = "부모 메뉴 번호", dataType = "Integer") + private Integer prntsMenuNo; + @ApiModelProperty(name = "메뉴 명", example = "메뉴 명") + private String menuNm; + @ApiModelProperty(name = "메뉴 순서", example = "메뉴 순서", dataType = "Integer") + private Integer menuOdrg; + @ApiModelProperty(name = "사용 여부", example = "사용 여부") + private String useYn; + @ApiModelProperty(name = "권한체크 그룹번호", example = "권한체크 그룹번호", dataType = "Integer") + private Integer autchkGrpno; + @ApiModelProperty(name = "메뉴 레벨", example = "메뉴 레벨", dataType = "Integer") + private Integer menuLvl; + @ApiModelProperty(name = "메뉴 URL", example = "메뉴 URL") + private String menuUrl; + @ApiModelProperty(name = "등록 ID", example = "등록 ID") + private String regId; + @ApiModelProperty(name = "등록 일시", example = "등록 일시") + private String regDt; + @ApiModelProperty(name = "변경 ID", example = "변경 ID") + private String chgId; + @ApiModelProperty(name = "변경 일시", example = "변경 일시") + private String chgDt; + @ApiModelProperty(name = "하위 메뉴 정보", example = "하위 메뉴 정보", dataType = "List") + private List children = new ArrayList<>(); + + public void addChild(Menu menu) { + children.add(menu); + } + +} \ No newline at end of file diff --git a/src/main/java/kr/co/uplus/ez/api/comm/dto/MenuResDto.java b/src/main/java/kr/co/uplus/ez/api/comm/dto/MenuResDto.java new file mode 100644 index 0000000..239e10c --- /dev/null +++ b/src/main/java/kr/co/uplus/ez/api/comm/dto/MenuResDto.java @@ -0,0 +1,33 @@ +package kr.co.uplus.ez.api.comm.dto; + +import java.io.Serializable; + +import io.swagger.annotations.ApiModelProperty; +import kr.co.uplus.ez.common.data.ApiResponseCode; +import kr.co.uplus.ez.common.data.ResponseMessage; +import lombok.Data; + +@SuppressWarnings("serial") +@Data +public class MenuResDto extends ResponseMessage implements Serializable{ + + @ApiModelProperty(example = "데이터") + private Menu data; + + public MenuResDto() { + this.retCode = ApiResponseCode.SUCCESS.getResultCode(); + this.retMsg = ApiResponseCode.SUCCESS.getResultMsg(); + } + + public MenuResDto(ApiResponseCode returnStr) { + this.retCode = returnStr.getResultCode(); + this.retMsg = returnStr.getResultMsg(); + } + + public MenuResDto(ApiResponseCode returnStr, Menu data) { + this.retCode = returnStr.getResultCode(); + this.retMsg = returnStr.getResultMsg(); + this.data = data; + } + +} diff --git a/src/main/java/kr/co/uplus/ez/api/comm/dto/RefreshToken.java b/src/main/java/kr/co/uplus/ez/api/comm/dto/RefreshToken.java new file mode 100644 index 0000000..3fc8c5f --- /dev/null +++ b/src/main/java/kr/co/uplus/ez/api/comm/dto/RefreshToken.java @@ -0,0 +1,17 @@ +package kr.co.uplus.ez.api.comm.dto; + +import java.io.Serializable; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@SuppressWarnings("serial") +@Data +public class RefreshToken implements Serializable{ + + @ApiModelProperty(name = "인증토큰", example = "인증토큰", dataType = "String") + private String accessToken; + @ApiModelProperty(name = "토큰 만료시간", example = "토큰 만료시간", dataType = "String") + private String expireTime; + +} \ No newline at end of file diff --git a/src/main/java/kr/co/uplus/ez/api/comm/dto/RefreshTokenReqDto.java b/src/main/java/kr/co/uplus/ez/api/comm/dto/RefreshTokenReqDto.java new file mode 100644 index 0000000..3c70531 --- /dev/null +++ b/src/main/java/kr/co/uplus/ez/api/comm/dto/RefreshTokenReqDto.java @@ -0,0 +1,16 @@ +package kr.co.uplus.ez.api.comm.dto; + +import java.io.Serializable; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@SuppressWarnings("serial") +@Data +public class RefreshTokenReqDto implements Serializable{ + + @ApiModelProperty(example = "사용자 ID", name = "사용자 ID", dataType = "String") + private String userId; + @ApiModelProperty(example = "Refresh 토큰", name = "Refresh 토큰", dataType = "String") + private String refreshToken; +} diff --git a/src/main/java/kr/co/uplus/ez/api/comm/dto/RefreshTokenResDto.java b/src/main/java/kr/co/uplus/ez/api/comm/dto/RefreshTokenResDto.java new file mode 100644 index 0000000..6e4c1ce --- /dev/null +++ b/src/main/java/kr/co/uplus/ez/api/comm/dto/RefreshTokenResDto.java @@ -0,0 +1,32 @@ +package kr.co.uplus.ez.api.comm.dto; + +import java.io.Serializable; + +import io.swagger.annotations.ApiModelProperty; +import kr.co.uplus.ez.common.data.ApiResponseCode; +import kr.co.uplus.ez.common.data.ResponseMessage; +import lombok.Data; + +@SuppressWarnings("serial") +@Data +public class RefreshTokenResDto extends ResponseMessage implements Serializable{ + + @ApiModelProperty(example = "데이터") + private RefreshToken data; + + public RefreshTokenResDto() { + this.retCode = ApiResponseCode.SUCCESS.getResultCode(); + this.retMsg = ApiResponseCode.SUCCESS.getResultMsg(); + } + + public RefreshTokenResDto(ApiResponseCode returnStr) { + this.retCode = returnStr.getResultCode(); + this.retMsg = returnStr.getResultMsg(); + } + + public RefreshTokenResDto(ApiResponseCode returnStr, RefreshToken data) { + this.retCode = returnStr.getResultCode(); + this.retMsg = returnStr.getResultMsg(); + this.data = data; + } +} diff --git a/src/main/java/kr/co/uplus/ez/api/custMgt/CustMgtController.java b/src/main/java/kr/co/uplus/ez/api/custMgt/CustMgtController.java index 77d0102..d681be3 100644 --- a/src/main/java/kr/co/uplus/ez/api/custMgt/CustMgtController.java +++ b/src/main/java/kr/co/uplus/ez/api/custMgt/CustMgtController.java @@ -1,238 +1,268 @@ -/** - * date : 2022. 4. 25. - * auth : ckr - * desc : 고객 관리 - */ -package kr.co.uplus.ez.api.custMgt; - -import java.util.Map; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; - -import kr.co.uplus.ez.common.data.ApiResponseMessage; - - - -@RestController -@RequestMapping(value = "api/v1/bo/custMgt") -public class CustMgtController { - - @Autowired - CustMgtService custService; - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 청약 고객 정보 목록 조회 - * @param paramMap - * @return - * @throws Exception - */ - @RequestMapping(value = "/subsList" , method = {RequestMethod.POST}) - @ResponseBody - public ApiResponseMessage subsList(@RequestBody Map paramMap) throws Exception{ - return custService.subsList(paramMap); - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 청약 고객 정보 목록 엑셀 다운로드 - * @param paramMap - * @return - * @throws Exception - */ - @RequestMapping(value = "/subsListExcel" , method = {RequestMethod.POST}) - @ResponseBody - public ApiResponseMessage subsListExcel(@RequestBody Map paramMap) throws Exception{ - return custService.subsListExcel(paramMap); - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 청약 정보 상세 조회 - * @param paramMap - * @return - * @throws Exception - */ - @RequestMapping(value = "/subsDetail" , method = {RequestMethod.POST}) - @ResponseBody - public ApiResponseMessage subsDetail(@RequestBody Map paramMap) throws Exception{ - return custService.subsDetail(paramMap); - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 관리자명 조회 - * @param paramMap - * @return - * @throws Exception - */ - @RequestMapping(value = "/adminInfo" , method = {RequestMethod.POST}) - @ResponseBody - public ApiResponseMessage adminInfo(@RequestBody Map paramMap) throws Exception{ - return custService.adminInfo(paramMap); - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 이월금액 목록 조회 - * @param paramMap - * @return - * @throws Exception - */ - @RequestMapping(value = "/carryOverList" , method = {RequestMethod.POST}) - @ResponseBody - public ApiResponseMessage carryOverList(@RequestBody Map paramMap) throws Exception{ - return custService.carryOverList(paramMap); - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 회원목록조회 - * @param paramMap - * @return - * @throws Exception - */ - @RequestMapping(value = "/memberList" , method = {RequestMethod.POST}) - @ResponseBody - public ApiResponseMessage memberList(@RequestBody Map paramMap) throws Exception{ - return custService.memberList(paramMap); - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 회원 정보 상세 조회 - * @param paramMap - * @return - * @throws Exception - */ - @RequestMapping(value = "/memberDetail" , method = {RequestMethod.POST}) - @ResponseBody - public ApiResponseMessage memberDetail(@RequestBody Map paramMap) throws Exception{ - return custService.memberDetail(paramMap); - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 테스트ID 등록 - * @param paramMap - * @return - * @throws Exception - */ - @RequestMapping(value = "/insertTestId" , method = {RequestMethod.POST}) - @ResponseBody - public ApiResponseMessage insertTestId(@RequestBody Map paramMap) throws Exception{ - return custService.insertTestId(paramMap); - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 전체 메모 목록 조회 - * @param paramMap - * @return - * @throws Exception - */ - @RequestMapping(value = "/allMemoList" , method = {RequestMethod.POST}) - @ResponseBody - public ApiResponseMessage allMemoList(@RequestBody Map paramMap) throws Exception{ - return custService.allMemoList(paramMap); - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 메모 삭제 - * @param paramMap - * @return - * @throws Exception - */ - @RequestMapping(value = "/deleteMemo" , method = {RequestMethod.POST}) - @ResponseBody - public ApiResponseMessage deleteMemo(@RequestBody Map paramMap) throws Exception{ - return custService.deleteMemo(paramMap); - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 사용자 정보 등록 - * @param paramMap - * @return - * @throws Exception - */ - @RequestMapping(value = "/insertUser" , method = {RequestMethod.POST}) - @ResponseBody - public ApiResponseMessage insertUser(@RequestBody Map paramMap) throws Exception{ - return custService.insertUser(paramMap); - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 사용자 정보 수정 - * @param paramMap - * @return - * @throws Exception - */ - @RequestMapping(value = "/updateUser" , method = {RequestMethod.POST}) - @ResponseBody - public ApiResponseMessage updateUser(@RequestBody Map paramMap) throws Exception{ - return custService.updateUser(paramMap); - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 사용자ID 대량등록 - * @param paramMap - * @return - * @throws Exception - */ - @RequestMapping(value = "/insertMassUser" , method = {RequestMethod.POST}) - @ResponseBody - public ApiResponseMessage insertMassUser(@RequestBody Map paramMap) throws Exception{ - return custService.insertMassUser(paramMap); - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 사용자 정보 삭제 - * @param paramMap - * @return - * @throws Exception - */ - @RequestMapping(value = "/deleteUser" , method = {RequestMethod.POST}) - @ResponseBody - public ApiResponseMessage deleteUser(@RequestBody Map paramMap) throws Exception{ - return custService.deleteUser(paramMap); - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 관리자 정보 수정 - * @param paramMap - * @return - * @throws Exception - */ - @RequestMapping(value = "/updateMember" , method = {RequestMethod.POST}) - @ResponseBody - public ApiResponseMessage updateMember(@RequestBody Map paramMap) throws Exception{ - return custService.updateMember(paramMap); - } - -} +/** + * date : 2022. 4. 25. + * auth : ckr + * desc : 고객 관리 + */ +package kr.co.uplus.ez.api.custMgt; + +import java.util.Map; + +import javax.servlet.http.HttpServletResponse; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiResponse; +import io.swagger.annotations.ApiResponses; +import kr.co.uplus.ez.api.custMgt.dto.AdminInfoReqDto; +import kr.co.uplus.ez.api.custMgt.dto.AdminInfoResDto; +import kr.co.uplus.ez.api.custMgt.dto.CarryOverListReqDto; +import kr.co.uplus.ez.api.custMgt.dto.CarryOverListResDto; +import kr.co.uplus.ez.api.custMgt.dto.MemberDetailReqDto; +import kr.co.uplus.ez.api.custMgt.dto.MemberListReqDto; +import kr.co.uplus.ez.api.custMgt.dto.MemberListResDto; +import kr.co.uplus.ez.api.custMgt.dto.SubsDetailReqDto; +import kr.co.uplus.ez.api.custMgt.dto.SubsDetailResDto; +import kr.co.uplus.ez.api.custMgt.dto.SubsListExcelReqDto; +import kr.co.uplus.ez.api.custMgt.dto.SubsListExcelResDto; +import kr.co.uplus.ez.api.custMgt.dto.SubsListReqDto; +import kr.co.uplus.ez.api.custMgt.dto.SubsListResDto; +import kr.co.uplus.ez.common.data.ApiResponseMessage; + +/** + * 고객관리 Controller. + * + * @author rejoice. + * + */ +@RestController +@RequestMapping(value = "api/v1/bo/custMgt") +public class CustMgtController { + + @Autowired + CustMgtService custService; + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 청약 고객 정보 목록 조회 + * + * @param subsListReqDto + * @return SubsListResDto + * @throws Exception + */ + @ApiOperation(value = "subsList", notes = "청약 고객 정보 목록 조회") + @ApiResponses({ + @ApiResponse(code = HttpServletResponse.SC_OK, message = "SUCESS") + }) + @RequestMapping(value = "/subsList" , method = {RequestMethod.POST}) + @ResponseBody + public SubsListResDto subsList(@RequestBody SubsListReqDto subsListReqDto) throws Exception{ + return custService.subsList(subsListReqDto); + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 청약 고객 정보 목록 엑셀 다운로드 + * + * @param subsListExcelReqDto + * @return SubsListExcelResDto + * @throws Exception + */ + @RequestMapping(value = "/subsListExcel" , method = {RequestMethod.POST}) + @ResponseBody + public SubsListExcelResDto subsListExcel(@RequestBody SubsListExcelReqDto subsListExcelReqDto) throws Exception{ + return custService.subsListExcel(subsListExcelReqDto); + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 청약 정보 상세 조회 + * + * @param subsDetailReqDto + * @return SubsDetailResDto + * @throws Exception + */ + @RequestMapping(value = "/subsDetail" , method = {RequestMethod.POST}) + @ResponseBody + public SubsDetailResDto subsDetail(@RequestBody SubsDetailReqDto subsDetailReqDto) throws Exception{ + return custService.subsDetail(subsDetailReqDto); + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 관리자명 조회 + * @param adminInfoReqDto + * @return AdminInfoResDto + * @throws Exception + */ + @RequestMapping(value = "/adminInfo" , method = {RequestMethod.POST}) + @ResponseBody + public AdminInfoResDto adminInfo(@RequestBody AdminInfoReqDto adminInfoReqDto) throws Exception{ + return custService.adminInfo(adminInfoReqDto); + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 이월금액 목록 조회 + * + * @param carryOverListReqDto + * @return CarryOverListResDto + * @throws Exception + */ + @RequestMapping(value = "/carryOverList" , method = {RequestMethod.POST}) + @ResponseBody + public CarryOverListResDto carryOverList(@RequestBody CarryOverListReqDto carryOverListReqDto) throws Exception{ + return custService.carryOverList(carryOverListReqDto); + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 회원목록조회 + * @param memberListReqDto + * @return MemberListResDto + * @throws Exception + */ + @RequestMapping(value = "/memberList" , method = {RequestMethod.POST}) + @ResponseBody + public MemberListResDto memberList(@RequestBody MemberListReqDto memberListReqDto) throws Exception{ + return custService.memberList(memberListReqDto); + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 회원 정보 상세 조회 + * @param paramMap + * @return + * @throws Exception + */ + @RequestMapping(value = "/memberDetail" , method = {RequestMethod.POST}) + @ResponseBody + public ApiResponseMessage memberDetail(@RequestBody MemberDetailReqDto memberDetailReqDto) throws Exception{ + return custService.memberDetail(memberDetailReqDto); + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 테스트ID 등록 + * @param paramMap + * @return + * @throws Exception + */ + @RequestMapping(value = "/insertTestId" , method = {RequestMethod.POST}) + @ResponseBody + public ApiResponseMessage insertTestId(@RequestBody Map paramMap) throws Exception{ + return custService.insertTestId(paramMap); + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 전체 메모 목록 조회 + * @param paramMap + * @return + * @throws Exception + */ + @RequestMapping(value = "/allMemoList" , method = {RequestMethod.POST}) + @ResponseBody + public ApiResponseMessage allMemoList(@RequestBody Map paramMap) throws Exception{ + return custService.allMemoList(paramMap); + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 메모 삭제 + * @param paramMap + * @return + * @throws Exception + */ + @RequestMapping(value = "/deleteMemo" , method = {RequestMethod.POST}) + @ResponseBody + public ApiResponseMessage deleteMemo(@RequestBody Map paramMap) throws Exception{ + return custService.deleteMemo(paramMap); + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 사용자 정보 등록 + * @param paramMap + * @return + * @throws Exception + */ + @RequestMapping(value = "/insertUser" , method = {RequestMethod.POST}) + @ResponseBody + public ApiResponseMessage insertUser(@RequestBody Map paramMap) throws Exception{ + return custService.insertUser(paramMap); + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 사용자 정보 수정 + * @param paramMap + * @return + * @throws Exception + */ + @RequestMapping(value = "/updateUser" , method = {RequestMethod.POST}) + @ResponseBody + public ApiResponseMessage updateUser(@RequestBody Map paramMap) throws Exception{ + return custService.updateUser(paramMap); + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 사용자ID 대량등록 + * @param paramMap + * @return + * @throws Exception + */ + @RequestMapping(value = "/insertMassUser" , method = {RequestMethod.POST}) + @ResponseBody + public ApiResponseMessage insertMassUser(@RequestBody Map paramMap) throws Exception{ + return custService.insertMassUser(paramMap); + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 사용자 정보 삭제 + * @param paramMap + * @return + * @throws Exception + */ + @RequestMapping(value = "/deleteUser" , method = {RequestMethod.POST}) + @ResponseBody + public ApiResponseMessage deleteUser(@RequestBody Map paramMap) throws Exception{ + return custService.deleteUser(paramMap); + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 관리자 정보 수정 + * @param paramMap + * @return + * @throws Exception + */ + @RequestMapping(value = "/updateMember" , method = {RequestMethod.POST}) + @ResponseBody + public ApiResponseMessage updateMember(@RequestBody Map paramMap) throws Exception{ + return custService.updateMember(paramMap); + } + +} diff --git a/src/main/java/kr/co/uplus/ez/api/custMgt/CustMgtMapper.java b/src/main/java/kr/co/uplus/ez/api/custMgt/CustMgtMapper.java index efc63c8..c5748c9 100644 --- a/src/main/java/kr/co/uplus/ez/api/custMgt/CustMgtMapper.java +++ b/src/main/java/kr/co/uplus/ez/api/custMgt/CustMgtMapper.java @@ -1,5 +1,16 @@ -package kr.co.uplus.ez.api.custMgt; - -public class CustMgtMapper { - -} +package kr.co.uplus.ez.api.custMgt; + +import java.util.List; + +import org.apache.ibatis.annotations.Mapper; + +import kr.co.uplus.ez.api.custMgt.dto.SubsList; +import kr.co.uplus.ez.api.custMgt.dto.SubsListReqDto; + +@Mapper +public interface CustMgtMapper { + + int selectSubsListTotalCnt(SubsListReqDto subsListReqDto); + + List selectSubsLists(SubsListReqDto subsListReqDto); +} diff --git a/src/main/java/kr/co/uplus/ez/api/custMgt/CustMgtService.java b/src/main/java/kr/co/uplus/ez/api/custMgt/CustMgtService.java index 70c9e5a..0fceec2 100644 --- a/src/main/java/kr/co/uplus/ez/api/custMgt/CustMgtService.java +++ b/src/main/java/kr/co/uplus/ez/api/custMgt/CustMgtService.java @@ -1,422 +1,450 @@ -package kr.co.uplus.ez.api.custMgt; - -import java.util.ArrayList; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.springframework.stereotype.Service; - -import kr.co.uplus.ez.common.data.ApiResponseCode; -import kr.co.uplus.ez.common.data.ApiResponseMessage; -import kr.co.uplus.ez.common.data.Const; -import kr.co.uplus.ez.common.utils.DateUtils; - -@Service -public class CustMgtService { - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 청약 고객 정보 목록 조회 - * @param paramMap - * @return - */ - public ApiResponseMessage subsList(Map paramMap) { - ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); - - List> dataList = new ArrayList<>(); - Map dataObj = new HashMap<>(); - Map paging = new HashMap<>(); - Map data = new HashMap<>(); - - paging.put(Const.getTotalCnt(), "5"); - paging.put(Const.getCurrentPage(), "1"); - dataObj.put("paging", paging); - - Date now = new Date(); - String nowStr = DateUtils.dateToStr(now, "YYYY-MM-dd"); - - for(int i=1; i<=20; i++) { - data.put("no", ""+i); - data.put("serviceId", "Uplus01"); - data.put("custNm", "유플러스"); - data.put("regNo", "1234"+i); - data.put("regDt", nowStr); - data.put("stat", "사용중"); - data.put("channel", "유플러스"); - data.put("plan", "요금제3"); - data.put("carryOver", ""+(100000*i)); - dataList.add(data); - } - - dataObj.put("list", dataList); - result.setData(dataObj); - - return result; - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 청약 고객 정보 목록 엑셀 다운로드 - * @param paramMap - * @return - */ - public ApiResponseMessage subsListExcel(Map paramMap) { - ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); - - List> dataList = new ArrayList<>(); - Map dataObj = new HashMap<>(); - Map paging = new HashMap<>(); - Map data = new HashMap<>(); - - paging.put(Const.getTotalCnt(), "5"); - paging.put(Const.getCurrentPage(), "1"); - dataObj.put("paging", paging); - - Date now = new Date(); - String nowStr = DateUtils.dateToStr(now, "YYYY-MM-dd"); - - for(int i=1; i<=25; i++) { - data = new HashMap<>(); - data.put("no", ""+i); - data.put("serviceId", "Uplus01"); - data.put("custNm", "유플러스"); - data.put("regNo", "1234"+i); - data.put("regDt", nowStr); - data.put("stat", "사용중"); - data.put("channel", "유플러스"); - data.put("plan", "요금제3"); - data.put("carryOver", ""+(100000*i)); - dataList.add(data); - } - - dataObj.put("list", dataList); - result.setData(dataObj); - - return result; - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 청약 정보 상세 조회 - * @param paramMap - * @return - */ - public ApiResponseMessage subsDetail(Map paramMap) { - ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); - - Date now = new Date(); - String nowStr = DateUtils.dateToStr(now, "YYYY-MM-dd"); - - Map data = new HashMap<>(); - data.put("custNm", "유플러스"); - data.put("reprNm", "홍길동"); - data.put("custType", "법인사업자"); - data.put("adr1", "12345"); - data.put("adr2", "서울 마포구 월드컵북로 416"); - data.put("adr3", "유플러스 상암사옥"); - data.put("bRegNo", "1231212345"); - data.put("cprRegNo", "1234561234567"); - data.put("subsDt", nowStr); - data.put("stat", "사용"); - data.put("plan", "요금제1"); - data.put("subsNo", "12345"); - data.put("adminId", "Uplus02"); - data.put("adminNm", "김철수"); - data.put("channelId", "Uplus01"); - data.put("channelNm", "홍길동"); - data.put("serviceId", "uplus01"); - data.put("useAuth", "관리자ID"); - data.put("userNm", "유플러스"); - data.put("mdn", "01012341234"); - data.put("carryOver", "100000"); - data.put("userCnt", "10"); - - result.setData(data); - - return result; - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 관리자명 조회 - * @param paramMap - * @return - */ - public ApiResponseMessage adminInfo(Map paramMap) { - ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); - - Map data = new HashMap<>(); - data.put("adminId", "uplus01"); - data.put("adminCd", "U00001"); - data.put("adminNm", "홍길동"); - data.put("agencyNm", "lg대리점"); - result.setData(data); - - return result; - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 이월금액 목록 조회 - * @param paramMap - * @return - */ - public ApiResponseMessage carryOverList(Map paramMap) { - ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); - - Map dataObj = new HashMap<>(); - List> dataList = new ArrayList<>(); - - Map data = new HashMap<>(); - data.put("date", "2022-03"); - data.put("startAmount", "130000"); - data.put("useAmount", "130000"); - data.put("krrrAmount", "-"); - data.put("extshAmoutn", "-"); - dataList.add(data); - - data = new HashMap<>(); - data.put("date", "2022-02"); - data.put("startAmount", "80000"); - data.put("useAmount", "-"); - data.put("krrrAmount", "80000"); - data.put("extshAmoutn", "-"); - dataList.add(data); - - data = new HashMap<>(); - data.put("date", "2022-01"); - data.put("startAmount", "50000"); - data.put("useAmount", "20000"); - data.put("krrrAmount", "30000"); - data.put("extshAmoutn", "-"); - dataList.add(data); - - data = new HashMap<>(); - data.put("date", "2021-12"); - data.put("startAmount", "50000"); - data.put("useAmount", "50000"); - data.put("krrrAmount", "-"); - data.put("extshAmoutn", "-"); - dataList.add(data); - - dataObj.put("list", dataList); - - result.setData(dataObj); - - return result; - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 회원목록조회 - * @param paramMap - * @return - */ - public ApiResponseMessage memberList(Map paramMap) { - ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); - - Map dataObj = new HashMap<>(); - List> dataList = new ArrayList<>(); - Map paging = new HashMap<>(); - Map data = new HashMap<>(); - - paging.put(Const.getTotalCnt(), "5"); - paging.put(Const.getCurrentPage(), "1"); - dataObj.put("paging", paging); - - Date now = new Date(); - String nowStr = DateUtils.dateToStr(now, "YYYY-MM-dd"); - - for(int i=1; i<=20; i++) { - data = new HashMap<>(); - data.put("no", ""+i); - data.put("userNm", "홍길동"+i); - data.put("userType", "관리자"); - data.put("adminId", "Uplus0"+i); - data.put("userId", "Uplus0"+i); - data.put("regDt", nowStr); - data.put("userStat", "사용"); - dataList.add(data); - } - - dataObj.put("list", dataList); - result.setData(dataObj); - - return result; - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 회원 정보 상세 조회 - * @param paramMap - * @return - */ - public ApiResponseMessage memberDetail(Map paramMap) { - ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); - Map dataObj = new HashMap<>(); - List> dataList = new ArrayList<>(); - Map data = new HashMap<>(); - - data.put("userNm", "유플러스"); - data.put("regDt", "2022-03-06"); - data.put("userType", "관리자ID"); - data.put("userId", "Uplus01"); - data.put("adminId", "Uplus02"); - data.put("adminNm", "김철수"); - data.put("sendingLimit", "100000"); - data.put("lineType", "일반"); - data.put("userStat", "Y"); - data.put("lastLoginDt", "2022-03-10 14:15:45"); - data.put("memo", "메모 입력 란입니다. \n작성글은 저장 버튼으로 저장퇴고 마지막 저장 내용은 남아 있습니다."); - data.put("mdn", "01012345689"); - data.put("email", "lgTester@lgUplus.co.kr"); - - dataObj.put("data", data); - - for(int i=1; i<=5; i++) { - data = new HashMap<>(); - data.put("no", ""+i); - data.put("userId", "userId"+i); - data.put("userNm", "홍길동"+i); - data.put("mdn", "010-1234-1234"); - data.put("userStat", "Y"); - dataList.add(data); - } - - dataObj.put("list", dataList); - - result.setData(dataObj); - return result; - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 테스트ID 등록 - * @param paramMap - * @return - */ - public ApiResponseMessage insertTestId(Map paramMap) { - ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); - - return result; - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 전체 메모 목록 조회 - * @param paramMap - * @return - */ - public ApiResponseMessage allMemoList(Map paramMap) { - ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); - Map dataObj = new HashMap<>(); - List> dataList = new ArrayList<>(); - Map paging = new HashMap<>(); - Map data; - - paging.put("totalCnt", "50"); - paging.put("currentPage", "1"); - dataObj.put("paging", paging); - - for(int i=1; i<=5; i++) { - data = new HashMap<>(); - data.put("memo", "작성한 메모 내용이 노출됩니다. \r\n" - + "해당영역은 최대 5줄까지 노출되며 이후 우측 스크롤이 생성됩니다.\r\n" - + "작성한 메모 내용이 노출됩니다. \r\n" - + "해당영역은 최대 5줄까지 노출되며 이후 우측 스크롤이 생성됩니다.\r\n" - + "작성한 메모 내용이 노출됩니다. \r\n" - + ""); - data.put("register", "관리자"); - data.put("regDt", "2022-03-10"); - dataList.add(data); - } - dataObj.put("list", dataList); - result.setData(dataObj); - - return result; - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 메모 삭제 - * @param paramMap - * @return - */ - public ApiResponseMessage deleteMemo(Map paramMap) { - ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); - return result; - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 사용자 정보 등록 - * @param paramMap - * @return - */ - public ApiResponseMessage insertUser(Map paramMap) { - ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); - return result; - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 사용자 정보 수정 - * @param paramMap - * @return - */ - public ApiResponseMessage updateUser(Map paramMap) { - ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); - return result; - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 사용자ID 대량등록 - * @param paramMap - * @return - */ - public ApiResponseMessage insertMassUser(Map paramMap) { - ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); - return result; - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 사용자 정보 삭제 - * @param paramMap - * @return - */ - public ApiResponseMessage deleteUser(Map paramMap) { - ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); - return result; - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 관리자 정보 수정 - * @param paramMap - * @return - */ - public ApiResponseMessage updateMember(Map paramMap) { - ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); - return result; - } - -} +package kr.co.uplus.ez.api.custMgt; + +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.mybatis.spring.SqlSessionTemplate; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Service; + +import kr.co.uplus.ez.api.custMgt.dto.AdminInfoReqDto; +import kr.co.uplus.ez.api.custMgt.dto.AdminInfoResDto; +import kr.co.uplus.ez.api.custMgt.dto.CarryOverListReqDto; +import kr.co.uplus.ez.api.custMgt.dto.CarryOverListResDto; +import kr.co.uplus.ez.api.custMgt.dto.MemberDetailReqDto; +import kr.co.uplus.ez.api.custMgt.dto.MemberListReqDto; +import kr.co.uplus.ez.api.custMgt.dto.MemberListResDto; +import kr.co.uplus.ez.api.custMgt.dto.SubsDetailReqDto; +import kr.co.uplus.ez.api.custMgt.dto.SubsDetailResDto; +import kr.co.uplus.ez.api.custMgt.dto.SubsList; +import kr.co.uplus.ez.api.custMgt.dto.SubsListExcelReqDto; +import kr.co.uplus.ez.api.custMgt.dto.SubsListExcelResDto; +import kr.co.uplus.ez.api.custMgt.dto.SubsListReqDto; +import kr.co.uplus.ez.api.custMgt.dto.SubsListRes; +import kr.co.uplus.ez.api.custMgt.dto.SubsListResDto; +import kr.co.uplus.ez.common.data.ApiResponseCode; +import kr.co.uplus.ez.common.data.ApiResponseMessage; +import kr.co.uplus.ez.common.data.Const; +import kr.co.uplus.ez.common.data.Paging; +import kr.co.uplus.ez.common.utils.DateUtils; + +@Service +public class CustMgtService { + + private static final Logger logger = LoggerFactory.getLogger(CustMgtService.class); + + + @Autowired + @Qualifier("sqlSessionTemplateDb1") + private SqlSessionTemplate sqlSessionMaster; + + @Autowired + @Qualifier("sqlSessionTemplateDb2") + private SqlSessionTemplate sqlSessionSlave; + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 청약 고객 정보 목록 조회 + * @param subsListReqDto + * @return subsListResDto + */ + public SubsListResDto subsList(SubsListReqDto subsListReqDto) { + + CustMgtMapper custMgtMapper = sqlSessionSlave.getMapper(CustMgtMapper.class); + + int totalCnt = custMgtMapper.selectSubsListTotalCnt(subsListReqDto); + + if(totalCnt == 0) { + return new SubsListResDto(ApiResponseCode.CM_NOT_FOUND); + } + String nowPage = String.valueOf(subsListReqDto.getPage()); + + int page = subsListReqDto.getPage(); + int pagePerRows = subsListReqDto.getPagePerRows(); + page = (page -1) * pagePerRows; + subsListReqDto.setPage(page); + + List subsLists = custMgtMapper.selectSubsLists(subsListReqDto); + + + SubsListRes subsListRes = new SubsListRes(); + subsListRes.setList(subsLists); + + Paging paging = new Paging(); + paging.setPage(nowPage); + paging.setTotalCnt(String.valueOf(totalCnt)); + subsListRes.setPaging(paging); + + return new SubsListResDto(ApiResponseCode.SUCCESS, subsListRes); + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 청약 고객 정보 목록 엑셀 다운로드 + * @param subsListExcelReqDto + * @return subsListExcelResDto + */ + public SubsListExcelResDto subsListExcel(SubsListExcelReqDto subsListExcelReqDto) { + SubsListExcelResDto subsListExcelResDto = new SubsListExcelResDto(ApiResponseCode.SUCCESS); + + List> dataList = new ArrayList<>(); + Map dataObj = new HashMap<>(); + Map paging = new HashMap<>(); + Map data = new HashMap<>(); + + paging.put(Const.TOTAL_CNT, "5"); + paging.put(Const.CURRENT_PAGE, "1"); + dataObj.put("paging", paging); + + Date now = new Date(); + String nowStr = DateUtils.dateToStr(now, "YYYY-MM-dd"); + + for(int i=1; i<=25; i++) { + data = new HashMap<>(); + data.put("no", ""+i); + data.put("serviceId", "Uplus01"); + data.put("custNm", "유플러스"); + data.put("regNo", "1234"+i); + data.put("regDt", nowStr); + data.put("stat", "사용중"); + data.put("channel", "유플러스"); + data.put("plan", "요금제3"); + data.put("carryOver", ""+(100000*i)); + dataList.add(data); + } + + dataObj.put("list", dataList); +// subsListExcelResDto.setData(dataObj); + + return subsListExcelResDto; + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 청약 정보 상세 조회 + * @param subsDetailReqDto + * @return subsDetailResDto + */ + public SubsDetailResDto subsDetail(SubsDetailReqDto subsDetailReqDto) { + SubsDetailResDto subsDetailResDto = new SubsDetailResDto(ApiResponseCode.SUCCESS); + + Date now = new Date(); + String nowStr = DateUtils.dateToStr(now, "YYYY-MM-dd"); + + Map data = new HashMap<>(); + data.put("custNm", "유플러스"); + data.put("reprNm", "홍길동"); + data.put("custType", "법인사업자"); + data.put("adr1", "12345"); + data.put("adr2", "서울 마포구 월드컵북로 416"); + data.put("adr3", "유플러스 상암사옥"); + data.put("bRegNo", "1231212345"); + data.put("cprRegNo", "1234561234567"); + data.put("subsDt", nowStr); + data.put("stat", "사용"); + data.put("plan", "요금제1"); + data.put("subsNo", "12345"); + data.put("adminId", "Uplus02"); + data.put("adminNm", "김철수"); + data.put("channelId", "Uplus01"); + data.put("channelNm", "홍길동"); + data.put("serviceId", "uplus01"); + data.put("useAuth", "관리자ID"); + data.put("userNm", "유플러스"); + data.put("mdn", "01012341234"); + data.put("carryOver", "100000"); + data.put("userCnt", "10"); + +// subsDetailResDto.setData(data); + + return subsDetailResDto; + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 관리자명 조회 + * @param adminInfoReqDto + * @return adminInfoResDto + */ + public AdminInfoResDto adminInfo(AdminInfoReqDto adminInfoReqDto) { + AdminInfoResDto adminInfoResDto = new AdminInfoResDto(ApiResponseCode.SUCCESS); + + Map data = new HashMap<>(); + data.put("adminId", "uplus01"); + data.put("adminCd", "U00001"); + data.put("adminNm", "홍길동"); + data.put("agencyNm", "lg대리점"); +// result.setData(data); + + return adminInfoResDto; + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 이월금액 목록 조회 + * @param carryOverListReqDto + * @return carryOverListResDto + */ + public CarryOverListResDto carryOverList(CarryOverListReqDto carryOverListReqDto) { + CarryOverListResDto carryOverListResDto = new CarryOverListResDto(ApiResponseCode.SUCCESS); + + Map dataObj = new HashMap<>(); + List> dataList = new ArrayList<>(); + + Map data = new HashMap<>(); + data.put("date", "2022-03"); + data.put("startAmount", "130000"); + data.put("useAmount", "130000"); + data.put("krrrAmount", "-"); + data.put("extshAmoutn", "-"); + dataList.add(data); + + data = new HashMap<>(); + data.put("date", "2022-02"); + data.put("startAmount", "80000"); + data.put("useAmount", "-"); + data.put("krrrAmount", "80000"); + data.put("extshAmoutn", "-"); + dataList.add(data); + + data = new HashMap<>(); + data.put("date", "2022-01"); + data.put("startAmount", "50000"); + data.put("useAmount", "20000"); + data.put("krrrAmount", "30000"); + data.put("extshAmoutn", "-"); + dataList.add(data); + + data = new HashMap<>(); + data.put("date", "2021-12"); + data.put("startAmount", "50000"); + data.put("useAmount", "50000"); + data.put("krrrAmount", "-"); + data.put("extshAmoutn", "-"); + dataList.add(data); + + dataObj.put("list", dataList); + +// carryOverListResDto.setData(dataObj); + + return carryOverListResDto; + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 회원목록조회 + * @param memberListReqDto + * @return memberListResDto + */ + public MemberListResDto memberList(MemberListReqDto memberListReqDto) { + MemberListResDto memberListResDto = new MemberListResDto(ApiResponseCode.SUCCESS); + + Map dataObj = new HashMap<>(); + List> dataList = new ArrayList<>(); + Map paging = new HashMap<>(); + Map data = new HashMap<>(); + + paging.put(Const.TOTAL_CNT, "5"); + paging.put(Const.CURRENT_PAGE, "1"); + dataObj.put("paging", paging); + + Date now = new Date(); + String nowStr = DateUtils.dateToStr(now, "YYYY-MM-dd"); + + for(int i=1; i<=20; i++) { + data = new HashMap<>(); + data.put("no", ""+i); + data.put("userNm", "홍길동"+i); + data.put("userType", "관리자"); + data.put("adminId", "Uplus0"+i); + data.put("userId", "Uplus0"+i); + data.put("regDt", nowStr); + data.put("userStat", "사용"); + dataList.add(data); + } + + dataObj.put("list", dataList); +// memberListResDto.setData(dataObj); + + return memberListResDto; + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 회원 정보 상세 조회 + * @param paramMap + * @return + */ + public ApiResponseMessage memberDetail(MemberDetailReqDto memberDetailReqDto) { + ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); + Map dataObj = new HashMap<>(); + List> dataList = new ArrayList<>(); + Map data = new HashMap<>(); + + data.put("userNm", "유플러스"); + data.put("regDt", "2022-03-06"); + data.put("userType", "관리자ID"); + data.put("userId", "Uplus01"); + data.put("adminId", "Uplus02"); + data.put("adminNm", "김철수"); + data.put("sendingLimit", "100000"); + data.put("lineType", "일반"); + data.put("userStat", "Y"); + data.put("lastLoginDt", "2022-03-10 14:15:45"); + data.put("memo", "메모 입력 란입니다. \n작성글은 저장 버튼으로 저장퇴고 마지막 저장 내용은 남아 있습니다."); + data.put("mdn", "01012345689"); + data.put("email", "lgTester@lgUplus.co.kr"); + + dataObj.put("data", data); + + for(int i=1; i<=5; i++) { + data = new HashMap<>(); + data.put("no", ""+i); + data.put("userId", "userId"+i); + data.put("userNm", "홍길동"+i); + data.put("mdn", "010-1234-1234"); + data.put("userStat", "Y"); + dataList.add(data); + } + + dataObj.put("list", dataList); + + result.setData(dataObj); + return result; + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 테스트ID 등록 + * @param paramMap + * @return + */ + public ApiResponseMessage insertTestId(Map paramMap) { + ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); + + return result; + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 전체 메모 목록 조회 + * @param paramMap + * @return + */ + public ApiResponseMessage allMemoList(Map paramMap) { + ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); + Map dataObj = new HashMap<>(); + List> dataList = new ArrayList<>(); + Map paging = new HashMap<>(); + Map data; + + paging.put("totalCnt", "50"); + paging.put("currentPage", "1"); + dataObj.put("paging", paging); + + for(int i=1; i<=5; i++) { + data = new HashMap<>(); + data.put("memo", "작성한 메모 내용이 노출됩니다. \r\n" + + "해당영역은 최대 5줄까지 노출되며 이후 우측 스크롤이 생성됩니다.\r\n" + + "작성한 메모 내용이 노출됩니다. \r\n" + + "해당영역은 최대 5줄까지 노출되며 이후 우측 스크롤이 생성됩니다.\r\n" + + "작성한 메모 내용이 노출됩니다. \r\n" + + ""); + data.put("register", "관리자"); + data.put("regDt", "2022-03-10"); + dataList.add(data); + } + dataObj.put("list", dataList); + result.setData(dataObj); + + return result; + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 메모 삭제 + * @param paramMap + * @return + */ + public ApiResponseMessage deleteMemo(Map paramMap) { + ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); + return result; + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 사용자 정보 등록 + * @param paramMap + * @return + */ + public ApiResponseMessage insertUser(Map paramMap) { + ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); + return result; + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 사용자 정보 수정 + * @param paramMap + * @return + */ + public ApiResponseMessage updateUser(Map paramMap) { + ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); + return result; + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 사용자ID 대량등록 + * @param paramMap + * @return + */ + public ApiResponseMessage insertMassUser(Map paramMap) { + ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); + return result; + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 사용자 정보 삭제 + * @param paramMap + * @return + */ + public ApiResponseMessage deleteUser(Map paramMap) { + ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); + return result; + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 관리자 정보 수정 + * @param paramMap + * @return + */ + public ApiResponseMessage updateMember(Map paramMap) { + ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); + return result; + } + +} diff --git a/src/main/java/kr/co/uplus/ez/api/custMgt/dto/AdminInfo.java b/src/main/java/kr/co/uplus/ez/api/custMgt/dto/AdminInfo.java new file mode 100644 index 0000000..d92919a --- /dev/null +++ b/src/main/java/kr/co/uplus/ez/api/custMgt/dto/AdminInfo.java @@ -0,0 +1,21 @@ +package kr.co.uplus.ez.api.custMgt.dto; + +import java.io.Serializable; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@SuppressWarnings("serial") +@Data +public class AdminInfo implements Serializable { + + @ApiModelProperty(example = "관리자ID", name = "관리자ID", dataType = "String") + private String adminId; + @ApiModelProperty(example = "관리자코드", name = "관리자코드", dataType = "String") + private String adminCd; + @ApiModelProperty(example = "관리자명", name = "관리자명", dataType = "String") + private String adminNm; + @ApiModelProperty(example = "대리점명", name = "대리점명", dataType = "String") + private String agencyNm; + +} \ No newline at end of file diff --git a/src/main/java/kr/co/uplus/ez/api/custMgt/dto/AdminInfoReqDto.java b/src/main/java/kr/co/uplus/ez/api/custMgt/dto/AdminInfoReqDto.java new file mode 100644 index 0000000..e22951d --- /dev/null +++ b/src/main/java/kr/co/uplus/ez/api/custMgt/dto/AdminInfoReqDto.java @@ -0,0 +1,15 @@ +package kr.co.uplus.ez.api.custMgt.dto; + +import java.io.Serializable; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@SuppressWarnings("serial") +@Data +public class AdminInfoReqDto implements Serializable { + + @ApiModelProperty(example = "관리자ID", name = "관리자ID", dataType = "String") + private String adminId; + +} \ No newline at end of file diff --git a/src/main/java/kr/co/uplus/ez/api/custMgt/dto/AdminInfoResDto.java b/src/main/java/kr/co/uplus/ez/api/custMgt/dto/AdminInfoResDto.java new file mode 100644 index 0000000..a5cba93 --- /dev/null +++ b/src/main/java/kr/co/uplus/ez/api/custMgt/dto/AdminInfoResDto.java @@ -0,0 +1,32 @@ +package kr.co.uplus.ez.api.custMgt.dto; + +import java.io.Serializable; + +import io.swagger.annotations.ApiModelProperty; +import kr.co.uplus.ez.common.data.ApiResponseCode; +import kr.co.uplus.ez.common.data.ResponseMessage; +import lombok.Data; + +@SuppressWarnings("serial") +@Data +public class AdminInfoResDto extends ResponseMessage implements Serializable{ + + @ApiModelProperty(example = "데이터") + private AdminInfo data; + + public AdminInfoResDto() { + this.retCode = ApiResponseCode.SUCCESS.getResultCode(); + this.retMsg = ApiResponseCode.SUCCESS.getResultMsg(); + } + + public AdminInfoResDto(ApiResponseCode returnStr) { + this.retCode = returnStr.getResultCode(); + this.retMsg = returnStr.getResultMsg(); + } + + public AdminInfoResDto(ApiResponseCode returnStr, AdminInfo data) { + this.retCode = returnStr.getResultCode(); + this.retMsg = returnStr.getResultMsg(); + this.data = data; + } +} diff --git a/src/main/java/kr/co/uplus/ez/api/custMgt/dto/CarryOverList.java b/src/main/java/kr/co/uplus/ez/api/custMgt/dto/CarryOverList.java new file mode 100644 index 0000000..0ab4166 --- /dev/null +++ b/src/main/java/kr/co/uplus/ez/api/custMgt/dto/CarryOverList.java @@ -0,0 +1,31 @@ +package kr.co.uplus.ez.api.custMgt.dto; + +import java.io.Serializable; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@SuppressWarnings("serial") +@Data +public class CarryOverList implements Serializable { + + @ApiModelProperty(example = "리스트 번호", name = "리스트 번호", dataType = "String") + private String no; + @ApiModelProperty(example = "서비스ID", name = "서비스ID", dataType = "String") + private String serviceId; + @ApiModelProperty(example = "고객사명", name = "고객사명", dataType = "String") + private String custNm; + @ApiModelProperty(example = "가입번호", name = "가입번호", dataType = "String") + private String regNo; + @ApiModelProperty(example = "가입일", name = "가입일", dataType = "String") + private String regDt; + @ApiModelProperty(example = "상태", name = "상태", dataType = "String") + private String stat; + @ApiModelProperty(example = "유치채널", name = "유치채널", dataType = "String") + private String channel; + @ApiModelProperty(example = "요금제", name = "요금제", dataType = "String") + private String plan; + @ApiModelProperty(example = "이월누적금액", name = "이월누적금액", dataType = "String") + private String carryOver; + +} \ No newline at end of file diff --git a/src/main/java/kr/co/uplus/ez/api/custMgt/dto/CarryOverListReqDto.java b/src/main/java/kr/co/uplus/ez/api/custMgt/dto/CarryOverListReqDto.java new file mode 100644 index 0000000..9dc74ff --- /dev/null +++ b/src/main/java/kr/co/uplus/ez/api/custMgt/dto/CarryOverListReqDto.java @@ -0,0 +1,15 @@ +package kr.co.uplus.ez.api.custMgt.dto; + +import java.io.Serializable; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@SuppressWarnings("serial") +@Data +public class CarryOverListReqDto implements Serializable { + + @ApiModelProperty(example = "서비스ID", name = "서비스ID", dataType = "String") + private String serviceId; + +} \ No newline at end of file diff --git a/src/main/java/kr/co/uplus/ez/api/custMgt/dto/CarryOverListRes.java b/src/main/java/kr/co/uplus/ez/api/custMgt/dto/CarryOverListRes.java new file mode 100644 index 0000000..7d8f809 --- /dev/null +++ b/src/main/java/kr/co/uplus/ez/api/custMgt/dto/CarryOverListRes.java @@ -0,0 +1,13 @@ +package kr.co.uplus.ez.api.custMgt.dto; + +import java.io.Serializable; +import java.util.List; + +import lombok.Data; + +@SuppressWarnings("serial") +@Data +public class CarryOverListRes implements Serializable{ + + private List list; +} diff --git a/src/main/java/kr/co/uplus/ez/api/custMgt/dto/CarryOverListResDto.java b/src/main/java/kr/co/uplus/ez/api/custMgt/dto/CarryOverListResDto.java new file mode 100644 index 0000000..36a6ea6 --- /dev/null +++ b/src/main/java/kr/co/uplus/ez/api/custMgt/dto/CarryOverListResDto.java @@ -0,0 +1,32 @@ +package kr.co.uplus.ez.api.custMgt.dto; + +import java.io.Serializable; + +import io.swagger.annotations.ApiModelProperty; +import kr.co.uplus.ez.common.data.ApiResponseCode; +import kr.co.uplus.ez.common.data.ResponseMessage; +import lombok.Data; + +@SuppressWarnings("serial") +@Data +public class CarryOverListResDto extends ResponseMessage implements Serializable{ + + @ApiModelProperty(example = "데이터") + private CarryOverListRes data; + + public CarryOverListResDto() { + this.retCode = ApiResponseCode.SUCCESS.getResultCode(); + this.retMsg = ApiResponseCode.SUCCESS.getResultMsg(); + } + + public CarryOverListResDto(ApiResponseCode returnStr) { + this.retCode = returnStr.getResultCode(); + this.retMsg = returnStr.getResultMsg(); + } + + public CarryOverListResDto(ApiResponseCode returnStr, CarryOverListRes data) { + this.retCode = returnStr.getResultCode(); + this.retMsg = returnStr.getResultMsg(); + this.data = data; + } +} diff --git a/src/main/java/kr/co/uplus/ez/api/custMgt/dto/MemberDetail.java b/src/main/java/kr/co/uplus/ez/api/custMgt/dto/MemberDetail.java new file mode 100644 index 0000000..5717266 --- /dev/null +++ b/src/main/java/kr/co/uplus/ez/api/custMgt/dto/MemberDetail.java @@ -0,0 +1,28 @@ +package kr.co.uplus.ez.api.custMgt.dto; + +import java.io.Serializable; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@SuppressWarnings("serial") +@Data +public class MemberDetail implements Serializable { + + @ApiModelProperty(example = "관리자ID", name = "관리자ID", dataType = "String") + private String adminId; + @ApiModelProperty(example = "관리자코드", name = "관리자코드", dataType = "String") + private String adminCd; + @ApiModelProperty(example = "관리자명", name = "관리자명", dataType = "String") + private String adminNm; + @ApiModelProperty(example = "대리점명", name = "대리점명", dataType = "String") + private String agencyNm; + +// no +// userId +// userNm +// mdn +// userStat + + +} \ No newline at end of file diff --git a/src/main/java/kr/co/uplus/ez/api/custMgt/dto/MemberDetailReqDto.java b/src/main/java/kr/co/uplus/ez/api/custMgt/dto/MemberDetailReqDto.java new file mode 100644 index 0000000..94d235f --- /dev/null +++ b/src/main/java/kr/co/uplus/ez/api/custMgt/dto/MemberDetailReqDto.java @@ -0,0 +1,15 @@ +package kr.co.uplus.ez.api.custMgt.dto; + +import java.io.Serializable; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@SuppressWarnings("serial") +@Data +public class MemberDetailReqDto implements Serializable { + + @ApiModelProperty(example = "사용자 ID", name = "사용자 ID", dataType = "String") + private String userId; + +} \ No newline at end of file diff --git a/src/main/java/kr/co/uplus/ez/api/custMgt/dto/MemberList.java b/src/main/java/kr/co/uplus/ez/api/custMgt/dto/MemberList.java new file mode 100644 index 0000000..1533ce9 --- /dev/null +++ b/src/main/java/kr/co/uplus/ez/api/custMgt/dto/MemberList.java @@ -0,0 +1,27 @@ +package kr.co.uplus.ez.api.custMgt.dto; + +import java.io.Serializable; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@SuppressWarnings("serial") +@Data +public class MemberList implements Serializable { + + @ApiModelProperty(example = "리스트 번호", name = "리스트 번호", dataType = "String") + private String no; + @ApiModelProperty(example = "사용자 이름", name = "사용자 이름", dataType = "String") + private String userNm; + @ApiModelProperty(example = "사용자 구분", name = "사용자 구분", dataType = "String") + private String userType; + @ApiModelProperty(example = "사용자 관리자ID", name = "사용자 관리자ID", dataType = "String") + private String adminId; + @ApiModelProperty(example = "사용자 ID", name = "사용자 ID", dataType = "String") + private String userId; + @ApiModelProperty(example = "사용자 등록일", name = "사용자 등록일", dataType = "String") + private String regDt; + @ApiModelProperty(example = "사용자 상태", name = "사용자 상태", dataType = "String") + private String userStat; + +} \ No newline at end of file diff --git a/src/main/java/kr/co/uplus/ez/api/custMgt/dto/MemberListReqDto.java b/src/main/java/kr/co/uplus/ez/api/custMgt/dto/MemberListReqDto.java new file mode 100644 index 0000000..cabb241 --- /dev/null +++ b/src/main/java/kr/co/uplus/ez/api/custMgt/dto/MemberListReqDto.java @@ -0,0 +1,26 @@ +package kr.co.uplus.ez.api.custMgt.dto; + +import java.io.Serializable; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@SuppressWarnings("serial") +@Data +public class MemberListReqDto implements Serializable { + + @ApiModelProperty(example = "조회 시작 날짜", name = "조회 시작 날짜", notes = "YYYYMMDD", dataType = "String") + private String startDt; + @ApiModelProperty(example = "조회 종료 날짜", name = "조회 종료 날짜", notes = "YYYYMMDD", dataType = "String") + private String endDt; + @ApiModelProperty(example = "청약 상태", name = "청약 상태", notes = "항목 : 전체(Default)/사용(01)/미납중지(02)/일시중지(03)/해지(04)", dataType = "String") + private String searchType1; + @ApiModelProperty(example = "유치채널", name = "유치채널", notes = "항목 : 전체(Default)/고객 셀프가입(01)/대리점(02)/고객센터(03)/직접영업(04)", dataType = "String") + private String searchType2; + @ApiModelProperty(example = "상세검색", name = "상세검색", notes = "항목 : 고객사명(01)/가입번호(02)/서비스ID(03)", dataType = "String") + private String searchType3; + @ApiModelProperty(example = "검색어 (입력항목)", name = "검색어 (입력항목)", dataType = "String") + private String searchText1; + @ApiModelProperty(example = "페이지당 조회할 목록 수", name = "페이지당 조회할 목록 수", dataType = "String") + private String pagePerRows; +} \ No newline at end of file diff --git a/src/main/java/kr/co/uplus/ez/api/custMgt/dto/MemberListRes.java b/src/main/java/kr/co/uplus/ez/api/custMgt/dto/MemberListRes.java new file mode 100644 index 0000000..a71cccb --- /dev/null +++ b/src/main/java/kr/co/uplus/ez/api/custMgt/dto/MemberListRes.java @@ -0,0 +1,15 @@ +package kr.co.uplus.ez.api.custMgt.dto; + +import java.io.Serializable; +import java.util.List; + +import kr.co.uplus.ez.common.data.Paging; +import lombok.Data; + +@SuppressWarnings("serial") +@Data +public class MemberListRes implements Serializable{ + + private Paging paging; + private List list; +} diff --git a/src/main/java/kr/co/uplus/ez/api/custMgt/dto/MemberListResDto.java b/src/main/java/kr/co/uplus/ez/api/custMgt/dto/MemberListResDto.java new file mode 100644 index 0000000..43fe1d1 --- /dev/null +++ b/src/main/java/kr/co/uplus/ez/api/custMgt/dto/MemberListResDto.java @@ -0,0 +1,32 @@ +package kr.co.uplus.ez.api.custMgt.dto; + +import java.io.Serializable; + +import io.swagger.annotations.ApiModelProperty; +import kr.co.uplus.ez.common.data.ApiResponseCode; +import kr.co.uplus.ez.common.data.ResponseMessage; +import lombok.Data; + +@SuppressWarnings("serial") +@Data +public class MemberListResDto extends ResponseMessage implements Serializable{ + + @ApiModelProperty(example = "데이터") + private MemberListRes data; + + public MemberListResDto() { + this.retCode = ApiResponseCode.SUCCESS.getResultCode(); + this.retMsg = ApiResponseCode.SUCCESS.getResultMsg(); + } + + public MemberListResDto(ApiResponseCode returnStr) { + this.retCode = returnStr.getResultCode(); + this.retMsg = returnStr.getResultMsg(); + } + + public MemberListResDto(ApiResponseCode returnStr, MemberListRes data) { + this.retCode = returnStr.getResultCode(); + this.retMsg = returnStr.getResultMsg(); + this.data = data; + } +} diff --git a/src/main/java/kr/co/uplus/ez/api/custMgt/dto/SubsDetail.java b/src/main/java/kr/co/uplus/ez/api/custMgt/dto/SubsDetail.java new file mode 100644 index 0000000..0500536 --- /dev/null +++ b/src/main/java/kr/co/uplus/ez/api/custMgt/dto/SubsDetail.java @@ -0,0 +1,59 @@ +package kr.co.uplus.ez.api.custMgt.dto; + +import java.io.Serializable; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@SuppressWarnings("serial") +@Data +public class SubsDetail implements Serializable { + + @ApiModelProperty(example = "고객사명", name = "고객사명", dataType = "String") + private String custNm; + @ApiModelProperty(example = "대표자명", name = "대표자명", dataType = "String") + private String reprNm; + @ApiModelProperty(example = "사용자구분", name = "사용자구분", dataType = "String") + private String custType; + @ApiModelProperty(example = "사업장주소1", name = "사업장주소1", dataType = "String") + private String adr1; + @ApiModelProperty(example = "사업장주소2", name = "사업장주소2", dataType = "String") + private String adr2; + @ApiModelProperty(example = "사업장주소3", name = "사업장주소3", dataType = "String") + private String adr3; + @ApiModelProperty(example = "사업자등록번호", name = "사업자등록번호", dataType = "String") + private String bRegNo; + @ApiModelProperty(example = "법인등록번호", name = "법인등록번호", dataType = "String") + private String cprRegNo; + @ApiModelProperty(example = "생년월일", name = "생년월일", dataType = "String") + private String birth; + @ApiModelProperty(example = "청약가입일", name = "청약가입일", dataType = "String") + private String subsDt; + @ApiModelProperty(example = "청약상태", name = "청약상태", dataType = "String") + private String stat; + @ApiModelProperty(example = "청약요금제명", name = "청약요금제명", dataType = "String") + private String plan; + @ApiModelProperty(example = "청약가입번호", name = "청약가입번호", dataType = "String") + private String subsNo; + @ApiModelProperty(example = "관리자ID", name = "관리자ID", dataType = "String") + private String adminId; + @ApiModelProperty(example = "관리자명", name = "관리자명", dataType = "String") + private String adminNm; + @ApiModelProperty(example = "유치자ID", name = "유치자ID", dataType = "String") + private String channelId; + @ApiModelProperty(example = "유치자명", name = "유치자명", dataType = "String") + private String channelNm; + @ApiModelProperty(example = "서비스ID", name = "서비스ID", dataType = "String") + private String serviceId; + @ApiModelProperty(example = "이용권한", name = "이용권한", dataType = "String") + private String useAuth; + @ApiModelProperty(example = "사용자명", name = "사용자명", dataType = "String") + private String userNm; + @ApiModelProperty(example = "휴대폰번호", name = "휴대폰번호", dataType = "String") + private String mdn; + @ApiModelProperty(example = "이월누적금액", name = "이월누적금액", dataType = "String") + private String carryOver; + @ApiModelProperty(example = "사용자ID개수", name = "사용자ID개수", dataType = "String") + private String userCnt; + +} \ No newline at end of file diff --git a/src/main/java/kr/co/uplus/ez/api/custMgt/dto/SubsDetailReqDto.java b/src/main/java/kr/co/uplus/ez/api/custMgt/dto/SubsDetailReqDto.java new file mode 100644 index 0000000..a4565ca --- /dev/null +++ b/src/main/java/kr/co/uplus/ez/api/custMgt/dto/SubsDetailReqDto.java @@ -0,0 +1,15 @@ +package kr.co.uplus.ez.api.custMgt.dto; + +import java.io.Serializable; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@SuppressWarnings("serial") +@Data +public class SubsDetailReqDto implements Serializable { + + @ApiModelProperty(example = "서비스ID", name = "서비스ID", dataType = "String") + private String serviceId; + +} \ No newline at end of file diff --git a/src/main/java/kr/co/uplus/ez/api/custMgt/dto/SubsDetailResDto.java b/src/main/java/kr/co/uplus/ez/api/custMgt/dto/SubsDetailResDto.java new file mode 100644 index 0000000..21b7d37 --- /dev/null +++ b/src/main/java/kr/co/uplus/ez/api/custMgt/dto/SubsDetailResDto.java @@ -0,0 +1,32 @@ +package kr.co.uplus.ez.api.custMgt.dto; + +import java.io.Serializable; + +import io.swagger.annotations.ApiModelProperty; +import kr.co.uplus.ez.common.data.ApiResponseCode; +import kr.co.uplus.ez.common.data.ResponseMessage; +import lombok.Data; + +@SuppressWarnings("serial") +@Data +public class SubsDetailResDto extends ResponseMessage implements Serializable{ + + @ApiModelProperty(example = "데이터") + private SubsDetail data; + + public SubsDetailResDto() { + this.retCode = ApiResponseCode.SUCCESS.getResultCode(); + this.retMsg = ApiResponseCode.SUCCESS.getResultMsg(); + } + + public SubsDetailResDto(ApiResponseCode returnStr) { + this.retCode = returnStr.getResultCode(); + this.retMsg = returnStr.getResultMsg(); + } + + public SubsDetailResDto(ApiResponseCode returnStr, SubsDetail data) { + this.retCode = returnStr.getResultCode(); + this.retMsg = returnStr.getResultMsg(); + this.data = data; + } +} diff --git a/src/main/java/kr/co/uplus/ez/api/custMgt/dto/SubsList.java b/src/main/java/kr/co/uplus/ez/api/custMgt/dto/SubsList.java new file mode 100644 index 0000000..57885f6 --- /dev/null +++ b/src/main/java/kr/co/uplus/ez/api/custMgt/dto/SubsList.java @@ -0,0 +1,31 @@ +package kr.co.uplus.ez.api.custMgt.dto; + +import java.io.Serializable; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@SuppressWarnings("serial") +@Data +public class SubsList implements Serializable { + + @ApiModelProperty(example = "리스트 번호", name = "리스트 번호", dataType = "String") + private String no; + @ApiModelProperty(example = "서비스ID", name = "서비스ID", dataType = "String") + private String serviceId; + @ApiModelProperty(example = "고객사명", name = "고객사명", dataType = "String") + private String custNm; + @ApiModelProperty(example = "가입번호", name = "가입번호", dataType = "String") + private String regNo; + @ApiModelProperty(example = "가입일", name = "가입일", dataType = "String") + private String regDt; + @ApiModelProperty(example = "상태", name = "상태", dataType = "String") + private String stat; + @ApiModelProperty(example = "유치채널", name = "유치채널", dataType = "String") + private String channel; + @ApiModelProperty(example = "요금제", name = "요금제", dataType = "String") + private String plan; + @ApiModelProperty(example = "이월누적금액", name = "이월누적금액", dataType = "String") + private String carryOver; + +} \ No newline at end of file diff --git a/src/main/java/kr/co/uplus/ez/api/custMgt/dto/SubsListExcelReqDto.java b/src/main/java/kr/co/uplus/ez/api/custMgt/dto/SubsListExcelReqDto.java new file mode 100644 index 0000000..9682ba3 --- /dev/null +++ b/src/main/java/kr/co/uplus/ez/api/custMgt/dto/SubsListExcelReqDto.java @@ -0,0 +1,24 @@ +package kr.co.uplus.ez.api.custMgt.dto; + +import java.io.Serializable; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@SuppressWarnings("serial") +@Data +public class SubsListExcelReqDto implements Serializable { + + @ApiModelProperty(example = "조회 시작 날짜", name = "조회 시작 날짜", notes = "YYYYMMDD", dataType = "String") + private String startDt; + @ApiModelProperty(example = "조회 종료 날짜", name = "조회 종료 날짜", notes = "YYYYMMDD", dataType = "String") + private String endDt; + @ApiModelProperty(example = "청약 상태", name = "청약 상태", notes = "항목 : 전체(Default)/사용(01)/미납중지(02)/일시중지(03)/해지(04)", dataType = "String") + private String searchType1; + @ApiModelProperty(example = "유치채널", name = "유치채널", notes = "항목 : 전체(Default)/고객 셀프가입(01)/대리점(02)/고객센터(03)/직접영업(04)", dataType = "String") + private String searchType2; + @ApiModelProperty(example = "상세검색", name = "상세검색", notes = "항목 : 고객사명(01)/가입번호(02)/서비스ID(03)", dataType = "String") + private String searchType3; + @ApiModelProperty(example = "검색어 (입력항목)", name = "검색어 (입력항목)", dataType = "String") + private String searchText1; +} \ No newline at end of file diff --git a/src/main/java/kr/co/uplus/ez/api/custMgt/dto/SubsListExcelResDto.java b/src/main/java/kr/co/uplus/ez/api/custMgt/dto/SubsListExcelResDto.java new file mode 100644 index 0000000..bf91275 --- /dev/null +++ b/src/main/java/kr/co/uplus/ez/api/custMgt/dto/SubsListExcelResDto.java @@ -0,0 +1,32 @@ +package kr.co.uplus.ez.api.custMgt.dto; + +import java.io.Serializable; + +import io.swagger.annotations.ApiModelProperty; +import kr.co.uplus.ez.common.data.ApiResponseCode; +import kr.co.uplus.ez.common.data.ResponseMessage; +import lombok.Data; + +@SuppressWarnings("serial") +@Data +public class SubsListExcelResDto extends ResponseMessage implements Serializable{ + + @ApiModelProperty(example = "데이터") + private SubsListRes data; + + public SubsListExcelResDto() { + this.retCode = ApiResponseCode.SUCCESS.getResultCode(); + this.retMsg = ApiResponseCode.SUCCESS.getResultMsg(); + } + + public SubsListExcelResDto(ApiResponseCode returnStr) { + this.retCode = returnStr.getResultCode(); + this.retMsg = returnStr.getResultMsg(); + } + + public SubsListExcelResDto(ApiResponseCode returnStr, SubsListRes data) { + this.retCode = returnStr.getResultCode(); + this.retMsg = returnStr.getResultMsg(); + this.data = data; + } +} diff --git a/src/main/java/kr/co/uplus/ez/api/custMgt/dto/SubsListReqDto.java b/src/main/java/kr/co/uplus/ez/api/custMgt/dto/SubsListReqDto.java new file mode 100644 index 0000000..9aa933e --- /dev/null +++ b/src/main/java/kr/co/uplus/ez/api/custMgt/dto/SubsListReqDto.java @@ -0,0 +1,29 @@ +package kr.co.uplus.ez.api.custMgt.dto; + +import java.io.Serializable; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@SuppressWarnings("serial") +@Data +public class SubsListReqDto implements Serializable { + + @ApiModelProperty(example = "조회 시작 날짜", name = "조회 시작 날짜", notes = "YYYYMMDD", dataType = "String") + private String startDt; + @ApiModelProperty(example = "조회 종료 날짜", name = "조회 종료 날짜", notes = "YYYYMMDD", dataType = "String") + private String endDt; + @ApiModelProperty(example = "청약 상태", name = "청약 상태", notes = "항목 : 전체(Default)/사용(01)/미납중지(02)/일시중지(03)/해지(04)", dataType = "String") + private String searchType1; + @ApiModelProperty(example = "유치채널", name = "유치채널", notes = "항목 : 전체(Default)/고객 셀프가입(01)/대리점(02)/고객센터(03)/직접영업(04)", dataType = "String") + private String searchType2; + @ApiModelProperty(example = "상세검색", name = "상세검색", notes = "항목 : 고객사명(01)/가입번호(02)/서비스ID(03)", dataType = "String") + private String searchType3; + @ApiModelProperty(example = "검색어 (입력항목)", name = "검색어 (입력항목)", dataType = "String") + private String searchText1; + @ApiModelProperty(example = "페이지당 조회할 목록 수", name = "페이지당 조회할 목록 수", dataType = "String") + private int pagePerRows; + @ApiModelProperty(example = "현재 페이지", name = "현재 페이지", dataType = "String") + private int page; + +} \ No newline at end of file diff --git a/src/main/java/kr/co/uplus/ez/api/custMgt/dto/SubsListRes.java b/src/main/java/kr/co/uplus/ez/api/custMgt/dto/SubsListRes.java new file mode 100644 index 0000000..020b760 --- /dev/null +++ b/src/main/java/kr/co/uplus/ez/api/custMgt/dto/SubsListRes.java @@ -0,0 +1,15 @@ +package kr.co.uplus.ez.api.custMgt.dto; + +import java.io.Serializable; +import java.util.List; + +import kr.co.uplus.ez.common.data.Paging; +import lombok.Data; + +@SuppressWarnings("serial") +@Data +public class SubsListRes implements Serializable{ + + private Paging paging; + private List list; +} diff --git a/src/main/java/kr/co/uplus/ez/api/custMgt/dto/SubsListResDto.java b/src/main/java/kr/co/uplus/ez/api/custMgt/dto/SubsListResDto.java new file mode 100644 index 0000000..63cf854 --- /dev/null +++ b/src/main/java/kr/co/uplus/ez/api/custMgt/dto/SubsListResDto.java @@ -0,0 +1,32 @@ +package kr.co.uplus.ez.api.custMgt.dto; + +import java.io.Serializable; + +import io.swagger.annotations.ApiModelProperty; +import kr.co.uplus.ez.common.data.ApiResponseCode; +import kr.co.uplus.ez.common.data.ResponseMessage; +import lombok.Data; + +@SuppressWarnings("serial") +@Data +public class SubsListResDto extends ResponseMessage implements Serializable{ + + @ApiModelProperty(example = "데이터") + private SubsListRes data; + + public SubsListResDto() { + this.retCode = ApiResponseCode.SUCCESS.getResultCode(); + this.retMsg = ApiResponseCode.SUCCESS.getResultMsg(); + } + + public SubsListResDto(ApiResponseCode returnStr) { + this.retCode = returnStr.getResultCode(); + this.retMsg = returnStr.getResultMsg(); + } + + public SubsListResDto(ApiResponseCode returnStr, SubsListRes data) { + this.retCode = returnStr.getResultCode(); + this.retMsg = returnStr.getResultMsg(); + this.data = data; + } +} diff --git a/src/main/java/kr/co/uplus/ez/api/login/LoginController.java b/src/main/java/kr/co/uplus/ez/api/login/LoginController.java index 81cd0a1..98a3f9c 100644 --- a/src/main/java/kr/co/uplus/ez/api/login/LoginController.java +++ b/src/main/java/kr/co/uplus/ez/api/login/LoginController.java @@ -1,118 +1,248 @@ -/** - * date : 2022. 4. 25. - * auth : ckr - * desc : 로그인 - */ - package kr.co.uplus.ez.api.login; -import java.util.Map; +import java.util.List; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.AuthenticationException; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.web.authentication.logout.SecurityContextLogoutHandler; +import org.springframework.security.web.savedrequest.HttpSessionRequestCache; +import org.springframework.security.web.savedrequest.RequestCache; +import org.springframework.security.web.savedrequest.SavedRequest; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; -import kr.co.uplus.ez.common.data.ApiResponseMessage; - +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiResponse; +import io.swagger.annotations.ApiResponses; +import kr.co.uplus.ez.api.login.dto.AuthNumReqDto; +import kr.co.uplus.ez.api.login.dto.AuthNumResDto; +import kr.co.uplus.ez.api.login.dto.AuthUser; +import kr.co.uplus.ez.api.login.dto.ChkAuthNumReqDto; +import kr.co.uplus.ez.api.login.dto.ChkAuthNumResDto; +import kr.co.uplus.ez.api.login.dto.LoginReqDto; +import kr.co.uplus.ez.api.login.dto.LoginRes; +import kr.co.uplus.ez.api.login.dto.LoginResDto; +import kr.co.uplus.ez.api.login.dto.LogoutReqDto; +import kr.co.uplus.ez.api.login.dto.LogoutResDto; +import kr.co.uplus.ez.api.login.dto.ResetPasswordReqDto; +import kr.co.uplus.ez.api.login.dto.ResetPasswordResDto; +import kr.co.uplus.ez.api.login.dto.UpdatePasswordReqDto; +import kr.co.uplus.ez.api.login.dto.UpdatePasswordResDto; +import kr.co.uplus.ez.common.data.ApiResponseCode; +import kr.co.uplus.ez.common.data.Const; +import kr.co.uplus.ez.common.jwt.JwtService; +import kr.co.uplus.ez.config.SecurityConfig; @RestController -@RequestMapping(value = "api/v1/bo/login") +@RequestMapping(value = "/api/v1/bo/login") public class LoginController { - - @Autowired - LoginService2 loginService; - - @Autowired - private AuthenticationManager authManager; - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 사용자 로그인 - * @param paramMap - * @return - * @throws Exception - */ - /*@RequestMapping(value = "/login" , method = {RequestMethod.POST}) - @ResponseBody - public ApiResponseMessage login(@RequestBody Map paramMap) throws Exception{ + private static final Logger logger = LoggerFactory.getLogger(LoginController.class); + + @Autowired + private AuthenticationManager authManager; + @Autowired + private LoginSuccessHandler loginSuccessHandler; + @Autowired + private LoginFailureHandler loginFailureHandler; + @Autowired + private LoginService loginService; + @Autowired + private JwtService jwtSvc; + + // 2차인증 제외 ID + @Value("#{'${authentication.without.id}'.split(',')}") + private List authenticationWithoutId; + - return loginService.login(paramMap); - }*/ - /** - * date : 2022. 4. 25. + * date : 2022. 5. 3. * auth : ckr - * desc : 인증번호 요청 - * @param paramMap - * @return - * @throws Exception + * desc : HUBEZ_BO_API_2001 - 로그인. + * @param loginReqDto + * @return LoginResDto + * @ */ - /* 삭제 예정 - @RequestMapping(value = "/authNum" , method = {RequestMethod.POST}) - @ResponseBody - public ApiResponseMessage authNum(@RequestBody Map paramMap) throws Exception{ - return loginService.authNum(paramMap); + @ApiOperation(value = "login", notes = "로그인") + @ApiResponses({ + @ApiResponse(code = HttpServletResponse.SC_OK, message = "SUCESS") + }) + @PostMapping("login") + public LoginResDto login(@RequestBody LoginReqDto loginReqDto) { + return loginService.firstLoginChk(loginReqDto); + } + + + /** + * 로그인 전에 요청했던 URL 반환 + */ + private String getReturnUrl(HttpServletRequest request, HttpServletResponse response) { + RequestCache requestCache = new HttpSessionRequestCache(); + SavedRequest savedRequest = requestCache.getRequest(request, response); + if (savedRequest == null) { + AuthUser user = (AuthUser) request.getAttribute(Const.KEY_LOAD_USER); + return SecurityConfig.LOGIN_SUCC_URL; + } + return savedRequest.getRedirectUrl(); } - */ - + /** - * date : 2022. 4. 25. + * date : 2022. 5. 17. * auth : ckr - * desc : 인증번호 확인 - * @param paramMap - * @return - * @throws Exception + * desc : HUBEZ_BO_API_2002 - 인증번호 요청. + * @param reqAuthNumDto + * @return AuthNumResDto + * @ */ - /*@RequestMapping(value = "/confirmNum" , method = {RequestMethod.POST}) + @ApiOperation(value = "authNum", notes = "인증번호 요청") + @ApiResponses({ + @ApiResponse(code = HttpServletResponse.SC_OK, message = "SUCESS") + }) + @PostMapping("authNum") @ResponseBody - public ApiResponseMessage confirmNum(@RequestBody Map paramMap) throws Exception{ - return loginService.confirmNum(paramMap); - }*/ - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 비밀번호 초기화 요청 - * @param paramMap - * @return - * @throws Exception - */ - @RequestMapping(value = "/resetPassword" , method = {RequestMethod.POST}) - @ResponseBody - public ApiResponseMessage resetPassword(@RequestBody Map paramMap) throws Exception{ - return loginService.resetPassword(paramMap); + public AuthNumResDto authNum(@RequestBody AuthNumReqDto authNumReqDto) { + return loginService.sendAuthNum(authNumReqDto); } - + /** - * date : 2022. 4. 25. + * date : 2022. 5. 17. * auth : ckr - * desc : 비밀번호 변경 - * @param paramMap - * @return - * @throws Exception + * desc : HUBEZ_BO_API_2003 - 인증번호 확인. + * 2차인증번호 인증 Spring security + * + * @param authNumDto + * @param request + * @param response + * @return ChkAuthNumResDto */ - @RequestMapping(value = "/updatePassword" , method = {RequestMethod.POST}) + @ApiOperation(value = "confirmNum", notes = "인증번호 확인") + @ApiResponses({ + @ApiResponse(code = HttpServletResponse.SC_OK, message = "SUCESS") + }) + @PostMapping("confirmNum") @ResponseBody - public ApiResponseMessage updatePassword(@RequestBody Map paramMap) throws Exception{ - return loginService.updatePassword(paramMap); + public ChkAuthNumResDto confirmNum(@RequestBody ChkAuthNumReqDto authNumDto, HttpServletRequest request, HttpServletResponse response) { + AuthUser user = new AuthUser(); + user.setOprtrId(authNumDto.getOprtrId()); + user.setInputPwd(authNumDto.getOprtrPw()); + + // 시큐리티 인증 + UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(user.getUsername(), user.getPassword()); + Authentication authentication = null; + + try { + authentication = authManager.authenticate(token); + } + catch (AuthenticationException e) { + request.setAttribute(SecurityConfig.LOGIN_ID_PARAM, user.getOprtrId()); + ApiResponseCode resultCode = loginFailureHandler.process(request, response, e); + return new ChkAuthNumResDto(resultCode); + } + + // 2차인증 패스.. + for (int i = 0; i < authenticationWithoutId.size(); i++) { + if (authNumDto.getOprtrId().contains(authenticationWithoutId.get(i).trim())) { + loginSuccessHandler.process(request, response, authentication); + + // access 토큰 생성 + jwtSvc.generatePrivateToken(response, authentication, true); + + String nextUrl = getReturnUrl(request, response); + logger.debug("login SUCCESS - nextUrl = [{}]", nextUrl); + ChkAuthNumResDto result = new ChkAuthNumResDto(ApiResponseCode.SUCCESS, new LoginRes(SecurityConfig.LOGIN_SUCC_URL)); + return result; + } + } + + ApiResponseCode rCode = loginService.confirmNum(authNumDto); + + if(rCode.equals(ApiResponseCode.SUCCESS)) { + + // 2차인증후 시큐리티 성공핸들러 + rCode = loginSuccessHandler.process(request, response, authentication); + + // access 토큰 생성 + jwtSvc.generatePrivateToken(response, authentication, true); + + String nextUrl = getReturnUrl(request, response); + logger.debug("login SUCCESS - nextUrl = [{}]", nextUrl); + ChkAuthNumResDto result = new ChkAuthNumResDto(rCode, new LoginRes(SecurityConfig.LOGIN_SUCC_URL)); + return result; + }else { + ChkAuthNumResDto result = new ChkAuthNumResDto(rCode); + return result; + } + } - + /** - * date : 2022. 4. 26. - * auth : ckr - * desc : 로그아웃 - * @param paramMap - * @return - * @throws Exception + * HUBEZ_BO_API_2004 - 비밀번호 초기화 요청. + * + * @param resetPasswordReqDto + * @return ResetPasswordResDto + * @ */ -// @RequestMapping(value = "/logout" , method = {RequestMethod.POST}) -// @ResponseBody -// public ApiResponseMessage logout(@RequestBody Map paramMap) throws Exception{ -// return loginService.logout(paramMap); -// } + @ApiOperation(value = "resetPassword", notes = "비밀번호 초기화 요청") + @ApiResponses({ + @ApiResponse(code = HttpServletResponse.SC_OK, message = "SUCESS") + }) + @PostMapping("resetPassword") + @ResponseBody + public ResetPasswordResDto resetPassword(@RequestBody ResetPasswordReqDto resetPasswordReqDto) { + return loginService.resetPassword(resetPasswordReqDto); + } + + /** + * HUBEZ_BO_API_2005 - 비밀번호 변경. + * + * @param updatePasswordReqDto + * @return UpdatePasswordResDto + * @ + */ + @ApiOperation(value = "updatePassword", notes = "비밀번호 변경") + @ApiResponses({ + @ApiResponse(code = HttpServletResponse.SC_OK, message = "SUCESS") + }) + @PostMapping("updatePassword") + @ResponseBody + public UpdatePasswordResDto updatePassword(@RequestBody UpdatePasswordReqDto updatePasswordReqDto) { + return loginService.updatePassword(updatePasswordReqDto); + } + + /** + * HUBEZ_BO_API_2006 - 로그아웃. + * + * @param logoutReqDto + * @param request + * @param response + * @return LogoutResDto + * @ + */ + @ApiOperation(value = "logout", notes = "로그아웃") + @ApiResponses({ + @ApiResponse(code = HttpServletResponse.SC_OK, message = "SUCESS") + }) + @PostMapping("logout") + @ResponseBody + public LogoutResDto logout(@RequestBody LogoutReqDto logoutReqDto, HttpServletRequest request, HttpServletResponse response) { + Authentication auth = SecurityContextHolder.getContext().getAuthentication(); + if (auth != null){ + new SecurityContextLogoutHandler().logout(request, response, auth); + } + jwtSvc.destroyPrivateToken(request, response); + + return new LogoutResDto(); + } } diff --git a/src/main/java/kr/co/uplus/ez/common/auth/LoginFailureHandler.java b/src/main/java/kr/co/uplus/ez/api/login/LoginFailureHandler.java similarity index 95% rename from src/main/java/kr/co/uplus/ez/common/auth/LoginFailureHandler.java rename to src/main/java/kr/co/uplus/ez/api/login/LoginFailureHandler.java index 263aced..69914dc 100644 --- a/src/main/java/kr/co/uplus/ez/common/auth/LoginFailureHandler.java +++ b/src/main/java/kr/co/uplus/ez/api/login/LoginFailureHandler.java @@ -1,4 +1,4 @@ -package kr.co.uplus.ez.common.auth; +package kr.co.uplus.ez.api.login; import java.io.IOException; @@ -15,10 +15,9 @@ import org.springframework.security.authentication.LockedException; import org.springframework.security.core.AuthenticationException; import org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler; -import kr.co.uplus.ez.common.consts.Const; -import kr.co.uplus.ez.common.consts.ResultCode; -import kr.co.uplus.ez.common.consts.UserStatus; +import kr.co.uplus.ez.api.login.dto.AuthUser; import kr.co.uplus.ez.common.data.ApiResponseCode; +import kr.co.uplus.ez.common.data.Const; import kr.co.uplus.ez.config.SecurityConfig; /** diff --git a/src/main/java/kr/co/uplus/ez/api/login/LoginMapper.java b/src/main/java/kr/co/uplus/ez/api/login/LoginMapper.java index 0f2863d..fe00782 100644 --- a/src/main/java/kr/co/uplus/ez/api/login/LoginMapper.java +++ b/src/main/java/kr/co/uplus/ez/api/login/LoginMapper.java @@ -1,8 +1,33 @@ package kr.co.uplus.ez.api.login; +import java.util.List; + import org.apache.ibatis.annotations.Mapper; -@Mapper -public class LoginMapper { +import kr.co.uplus.ez.api.login.dto.AuthNum; +import kr.co.uplus.ez.api.login.dto.AuthUser; +import kr.co.uplus.ez.api.login.dto.SmsAuthNum; +@Mapper +public interface LoginMapper { + + public AuthUser getByUsername(String username); + + public int increaseFailCount(String username); + + public int increaseAuthFailCnt(String userId); + public int setUserStatus(AuthUser user); + public void setLoginInfo(String userId); + public int addAuthNum(AuthNum authNum); + + public AuthUser getUser(AuthUser authUser); + + public AuthNum getAuthNum(AuthNum authNum); + public int setAuthUserInfo(AuthNum authNum); + public int setAuthNum(AuthNum authNum); + public List getSmsAuthNumByNum(String issNum); + public String getSmsAuthPhone(SmsAuthNum num); + + // 관리자 정보 수정. + int updateAdmUser(AuthUser authUser); } diff --git a/src/main/java/kr/co/uplus/ez/api/login/LoginService.java b/src/main/java/kr/co/uplus/ez/api/login/LoginService.java new file mode 100644 index 0000000..687d7bf --- /dev/null +++ b/src/main/java/kr/co/uplus/ez/api/login/LoginService.java @@ -0,0 +1,351 @@ +package kr.co.uplus.ez.api.login; + +import java.util.List; + +import org.apache.commons.codec.binary.StringUtils; +import org.apache.commons.lang3.RandomStringUtils; +import org.mybatis.spring.SqlSessionTemplate; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import kr.co.uplus.ez.api.login.dto.AuthNum; +import kr.co.uplus.ez.api.login.dto.AuthNumReqDto; +import kr.co.uplus.ez.api.login.dto.AuthNumResDto; +import kr.co.uplus.ez.api.login.dto.AuthUser; +import kr.co.uplus.ez.api.login.dto.ChkAuthNumReqDto; +import kr.co.uplus.ez.api.login.dto.LoginReqDto; +import kr.co.uplus.ez.api.login.dto.LoginRes; +import kr.co.uplus.ez.api.login.dto.LoginResDto; +import kr.co.uplus.ez.api.login.dto.ResetPasswordReqDto; +import kr.co.uplus.ez.api.login.dto.ResetPasswordResDto; +import kr.co.uplus.ez.api.login.dto.UpdatePasswordReqDto; +import kr.co.uplus.ez.api.login.dto.UpdatePasswordResDto; +import kr.co.uplus.ez.common.data.ApiResponseCode; +import kr.co.uplus.ez.common.data.Const; +import kr.co.uplus.ez.common.utils.EncryptionUtil; +import kr.co.uplus.ez.common.utils.TextUtils; +import kr.co.uplus.ez.config.SecurityConfig; + +@Service +public class LoginService { + + private static final Logger logger = LoggerFactory.getLogger(LoginService.class); + + @Autowired + @Qualifier("sqlSessionTemplateDb1") + private SqlSessionTemplate sqlSessionMaster; + + @Autowired + @Qualifier("sqlSessionTemplateDb2") + private SqlSessionTemplate sqlSessionSlave; + + // 2차인증 제외 ID + @Value("#{'${authentication.without.id}'.split(',')}") + private List authenticationWithoutId; + + /** + * 1차 로그인 인증 + * + * @param loginInfo + * @return LoginResDto + */ + public LoginResDto firstLoginChk(LoginReqDto loginInfo) { + + LoginMapper loginMapper = sqlSessionMaster.getMapper(LoginMapper.class); + + String userId = loginInfo.getOprtrId(); + AuthUser dbUserParam = new AuthUser(); + dbUserParam.setOprtrId(userId); + + AuthUser user = loginMapper.getUser(dbUserParam); + + if (user == null) { + // 사용자 여부 + return new LoginResDto(ApiResponseCode.CE_ID_NOT_FOUND); + } + + if (user.getLoginFailCnt() >= Const.MAX_LOGIN_FAIL) { + // 5회 로그인 실패 체크 + return new LoginResDto(ApiResponseCode.CE_TO_LOCK); + } + + if (user.getSttusCd().equals(Const.CODE_VALUE_02)) { + // 사용자 상태 체크 + return new LoginResDto(ApiResponseCode.SS_NOT_USE); + } + + // 비밀번호 체크 + String userPw = loginInfo.getOprtrPw(); + String encPwd = EncryptionUtil.getCustomSHA512(userId, userPw); + if (!user.getPwd().equals(encPwd)) { + // 로그인 실패 카운트 증가 + loginMapper.increaseFailCount(userId); + + return new LoginResDto(ApiResponseCode.CE_ID_PWD); + } else { + + // 비밀번호 만료 일시 체크. + if(StringUtils.equals(Const.COMM_YES, user.getPwChangeCheck())) { + return new LoginResDto(ApiResponseCode.CE_PWD_EXPIRE); + } + + // 로그인 실패카운트 초기화 + loginMapper.setLoginInfo(user.getOprtrId()); + } + + return new LoginResDto(ApiResponseCode.SUCCESS, new LoginRes(SecurityConfig.LOGIN_SUCC_URL)); + } + + /** + * 인증번호 요청 + * + * @param reqAuthNumDto + * @return AuthNumResDto + */ + public AuthNumResDto sendAuthNum(AuthNumReqDto reqAuthNumDto) { + + LoginMapper loginMapper = sqlSessionMaster.getMapper(LoginMapper.class); + + // 1차 로그인 체크 + if (reqAuthNumDto.getIsLogin() != null && reqAuthNumDto.getIsLogin()) { + // return 1차로그인 인증 실패 코드 + } + + String userId = reqAuthNumDto.getOprtrId(); // 인증 받고자 하는 userId + + + // 2차인증 패스.. + for (int i = 0; i < authenticationWithoutId.size(); i++) { + if (userId.contains(authenticationWithoutId.get(i).trim())) { + return new AuthNumResDto(); + } + } + + AuthUser dbUserParam = new AuthUser(); + dbUserParam.setOprtrId(userId); + + AuthUser user = loginMapper.getUser(dbUserParam); + + // 인증 요청 계정의 정보 체크(ID, HP) + if (user != null) { + if (!user.getOprtrId().equals(userId)) { + return new AuthNumResDto(ApiResponseCode.CE_ID_HP); + } + if (!user.getHpNo().equals(reqAuthNumDto.getHpNo())) { + return new AuthNumResDto(ApiResponseCode.CE_ID_HP); + } + } else { + return new AuthNumResDto(ApiResponseCode.CE_ID_NOT_FOUND); + } + + // 2차 인증 실패 카운트 체크 + int autchrFailCnt = user.getAuthchrFailCnt(); + if (autchrFailCnt >= Const.MAX_AUTHNUM_FAIL) { + return new AuthNumResDto(ApiResponseCode.CE_AUTHNUM_LOCK); + } + + String authNum = TextUtils.randNumStr(6); + + // 발행한 인증번호 DB에 저장 + AuthNum anum = new AuthNum(); + anum.setAuthTpCd(Const.AUTH_TP_CD); + anum.setSttusCd(Const.AUTH_STTUS_CD_01); + anum.setHpNo(user.getHpNo()); + anum.setChrVal(authNum); + anum.setRegId(user.getOprtrId()); + loginMapper.addAuthNum(anum); + + // 문자발송 + // TODO -> hubez_send.EZ_MSG_REAL 등록 필요. + + return new AuthNumResDto(); + + } + + /** + * 인증 번호 확인 + * + * @param authNumDto + * @return ApiResponseCode + */ + public ApiResponseCode confirmNum(ChkAuthNumReqDto authNumDto) { + + LoginMapper loginMapper = sqlSessionMaster.getMapper(LoginMapper.class); + + AuthNum anum = new AuthNum(); + anum.setOprtrId(authNumDto.getOprtrId()); + anum.setAuthTpCd(Const.AUTH_TP_CD); + anum.setSttusCd(Const.AUTH_STTUS_CD_01); // 사용중 + anum.setHpNo(authNumDto.getHpNo()); + + AuthNum curr = loginMapper.getAuthNum(anum); + + if (curr == null) { + return ApiResponseCode.CE_WRONG_AUTHNUM; + } + + if (curr.getAuthchrFailCnt() >= Const.MAX_AUTHNUM_FAIL) { + return ApiResponseCode.CE_AUTHNUM_LOCK; + } + + + if (!curr.getChrVal().equals(authNumDto.getChrVal())) { + // 실패 카운트 증가 + String oprtrId = curr.getOprtrId(); + loginMapper.increaseAuthFailCnt(oprtrId); + + return ApiResponseCode.CE_WRONG_AUTHNUM; + } + + AuthNum authNum = new AuthNum(); + authNum.setOprtrId(curr.getOprtrId()); + authNum.setAuthchrFailCnt(0); + loginMapper.setAuthUserInfo(authNum); + + // 인증요청 + authNum = new AuthNum(); + authNum.setSeqNo(curr.getSeqNo()); + authNum.setSttusCd(Const.AUTH_STTUS_CD_02); + loginMapper.setAuthNum(authNum); + + return ApiResponseCode.SUCCESS; + } + + /** + * 비밀번호 초기화. + * + * @param resetPasswordReqDto + * @return ResetPasswordResDto + */ + public ResetPasswordResDto resetPassword(ResetPasswordReqDto resetPasswordReqDto) { + + LoginMapper loginMapper = sqlSessionMaster.getMapper(LoginMapper.class); + + AuthUser dbUserParam = new AuthUser(); + dbUserParam.setOprtrId(resetPasswordReqDto.getUserId()); + + // 1. 사용자 ID 조회 + AuthUser user = loginMapper.getUser(dbUserParam); + + if (user == null) { + // 사용자 여부 + return new ResetPasswordResDto(ApiResponseCode.CE_ID_NOT_FOUND); + } + + // 2. 임시비밀번호 생성 + String randomPw = RandomStringUtils.randomAlphanumeric(10); + + // 3. update EZ_ADM_USER (비밀번호, 임시비밀번호여부, 비밀번호변경일시) + AuthUser authUser = new AuthUser(); + authUser.setOprtrId(resetPasswordReqDto.getUserId()); + authUser.setTmpPwdYn(Const.COMM_YES); + authUser.setPwd(EncryptionUtil.getCustomSHA512(resetPasswordReqDto.getUserId(), randomPw)); + authUser.setPwdChgDt(Const.COMM_YES); + + int reslut = loginMapper.updateAdmUser(authUser); + + if(reslut < 1) { + // 업데이트 실패. + return new ResetPasswordResDto(ApiResponseCode.CM_DB_QUERY_ERR); + } + + // 4. 임시 비밀번호 문자발송 + // TODO -> hubez_send.EZ_MSG_REAL 등록 필요. + + return new ResetPasswordResDto(); + } + + /** + * 비밀번호 변경. + * + * @param updatePasswordReqDto + * @return UpdatePasswordResDto + */ + public UpdatePasswordResDto updatePassword(UpdatePasswordReqDto updatePasswordReqDto) { + + LoginMapper loginMapper = sqlSessionMaster.getMapper(LoginMapper.class); + + AuthUser dbUserParam = new AuthUser(); + dbUserParam.setOprtrId(updatePasswordReqDto.getUserId()); + dbUserParam.setPwd(EncryptionUtil.getCustomSHA512(updatePasswordReqDto.getUserId(), updatePasswordReqDto.getOldPw())); + // 1. 사용자 ID 조회 + AuthUser user = loginMapper.getUser(dbUserParam); + + if (user == null) { + // 사용자 여부 + return new UpdatePasswordResDto(ApiResponseCode.CE_ID_NOT_FOUND); + } + + String newPw = EncryptionUtil.getCustomSHA512(updatePasswordReqDto.getUserId(), updatePasswordReqDto.getNewPw()); + + // 2. 비밀번호 변경 - update EZ_ADM_USER (비밀번호, 비밀번호변경일시) + AuthUser authUser = new AuthUser(); + authUser.setOprtrId(updatePasswordReqDto.getUserId()); + authUser.setPwd(newPw); + authUser.setPwdChgDt(Const.COMM_YES); + + int reslut = loginMapper.updateAdmUser(authUser); + + if(reslut < 1) { + // 업데이트 실패. + return new UpdatePasswordResDto(ApiResponseCode.CM_DB_QUERY_ERR); + } + + return new UpdatePasswordResDto(); + } + + /** + * 로그인 성공시 초기화. + * + * @param userId + */ + public void setLoginInfo(String userId) { + LoginMapper authUserMapper = sqlSessionMaster.getMapper(LoginMapper.class); + authUserMapper.setLoginInfo(userId); + } + + /** + * 로그인 실패 카운트 증가. + * + * @param userId + * @return FailCnt + */ + public int increaseFailCount(String userId) { + LoginMapper authUserMapper = sqlSessionMaster.getMapper(LoginMapper.class); + authUserMapper.increaseFailCount(userId); + AuthUser user = authUserMapper.getByUsername(userId); + return user.getLoginFailCnt(); + } + + /** + * 사용자 상태 변경. + * + * @param userId + * @param status + */ + public void setUserStatus(String userId, String status) { + LoginMapper authUserMapper = sqlSessionMaster.getMapper(LoginMapper.class); + AuthUser user = new AuthUser(); + user.setOprtrId(userId); + user.setSttusCd(status); + authUserMapper.setUserStatus(user); + } + + /** + * 사용자 정보 조회. + * + * @param userId + * @return AuthUser + */ + public AuthUser getUser(String userId) { + LoginMapper authUserMapper = sqlSessionSlave.getMapper(LoginMapper.class); + AuthUser dbUserParam = new AuthUser(); + dbUserParam.setOprtrId(userId); + return authUserMapper.getUser(dbUserParam); + } + +} diff --git a/src/main/java/kr/co/uplus/ez/api/login/LoginService2.java b/src/main/java/kr/co/uplus/ez/api/login/LoginService2.java deleted file mode 100644 index 2e3e1c8..0000000 --- a/src/main/java/kr/co/uplus/ez/api/login/LoginService2.java +++ /dev/null @@ -1,100 +0,0 @@ -package kr.co.uplus.ez.api.login; - -import java.util.HashMap; -import java.util.Map; - -import org.springframework.stereotype.Service; - -import kr.co.uplus.ez.common.data.ApiResponseCode; -import kr.co.uplus.ez.common.data.ApiResponseMessage; - -@Service -public class LoginService2 { - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 사용자 로그인 - * @param paramMap - * @return - * @throws Exception - */ - public ApiResponseMessage login(Map paramMap) { - ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); - return result; - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 인증번호 요청 - * @param paramMap - * @return - * @throws Exception - */ - public ApiResponseMessage authNum(Map paramMap) { - ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); - - return result; - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 인증번호 확인 - * @param paramMap - * @return - * @throws Exception - */ - public ApiResponseMessage confirmNum(Map paramMap) { - ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); - - Map dataObj = new HashMap<>(); - - // 2차 인증 후 메뉴 URL - dataObj.put("nextUrl", "/custMgt/subsList"); - - result.setData(dataObj); - - return result; - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 비밀번호 초기화 요청 - * @param paramMap - * @return - * @throws Exception - */ - public ApiResponseMessage resetPassword(Map paramMap) { - ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); - return result; - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 비밀번호 변경 - * @param paramMap - * @return - * @throws Exception - */ - public ApiResponseMessage updatePassword(Map paramMap) { - ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); - return result; - } - - /** - * date : 2022. 4. 26. - * auth : ckr - * desc : 로그아웃 - * @param paramMap - * @return - */ - public ApiResponseMessage logout(Map paramMap) { - ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); - return result; - } - -} diff --git a/src/main/java/kr/co/uplus/ez/common/auth/LoginSuccessHandler.java b/src/main/java/kr/co/uplus/ez/api/login/LoginSuccessHandler.java similarity index 81% rename from src/main/java/kr/co/uplus/ez/common/auth/LoginSuccessHandler.java rename to src/main/java/kr/co/uplus/ez/api/login/LoginSuccessHandler.java index a92e9fa..22a99de 100644 --- a/src/main/java/kr/co/uplus/ez/common/auth/LoginSuccessHandler.java +++ b/src/main/java/kr/co/uplus/ez/api/login/LoginSuccessHandler.java @@ -1,4 +1,4 @@ -package kr.co.uplus.ez.common.auth; +package kr.co.uplus.ez.api.login; import java.io.IOException; @@ -8,13 +8,11 @@ import javax.servlet.http.HttpServletResponse; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.core.Authentication; -import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler; -import kr.co.uplus.ez.common.consts.Const; -import kr.co.uplus.ez.common.consts.ResultCode; +import kr.co.uplus.ez.api.login.dto.AuthUser; import kr.co.uplus.ez.common.data.ApiResponseCode; -import kr.co.uplus.ez.common.data.ApiResponseMessage; +import kr.co.uplus.ez.common.data.Const; /** * 로그인에 성공하면 호출되는 기본 핸들러는 SavedRequestAwareAuthenticationSuccessHandler 클래스이다. @@ -29,14 +27,14 @@ public class LoginSuccessHandler extends SavedRequestAwareAuthenticationSuccessH process(request, response, authentication); super.onAuthenticationSuccess(request, response, authentication); } - + public ApiResponseCode process(HttpServletRequest request, HttpServletResponse response, Authentication authentication) { AuthUser user = (AuthUser) request.getAttribute(Const.KEY_LOAD_USER); user.setPwd(null); - ApiResponseCode rCode = ApiResponseCode.SUCCESS; + ApiResponseCode rCode = ApiResponseCode.SUCCESS; svc.setLoginInfo(user.getOprtrId()); - + super.clearAuthenticationAttributes(request); return rCode; } diff --git a/src/main/java/kr/co/uplus/ez/common/auth/UserDetailsServiceImpl.java b/src/main/java/kr/co/uplus/ez/api/login/UserDetailsServiceImpl.java similarity index 60% rename from src/main/java/kr/co/uplus/ez/common/auth/UserDetailsServiceImpl.java rename to src/main/java/kr/co/uplus/ez/api/login/UserDetailsServiceImpl.java index 95ce3dc..5762114 100644 --- a/src/main/java/kr/co/uplus/ez/common/auth/UserDetailsServiceImpl.java +++ b/src/main/java/kr/co/uplus/ez/api/login/UserDetailsServiceImpl.java @@ -1,12 +1,14 @@ -package kr.co.uplus.ez.common.auth; +package kr.co.uplus.ez.api.login; import java.util.List; import javax.servlet.http.HttpServletRequest; +import org.mybatis.spring.SqlSessionTemplate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.AuthorityUtils; import org.springframework.security.core.userdetails.UserDetails; @@ -14,7 +16,8 @@ import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.stereotype.Service; -import kr.co.uplus.ez.common.consts.Const; +import kr.co.uplus.ez.api.login.dto.AuthUser; +import kr.co.uplus.ez.common.data.Const; import kr.co.uplus.ez.common.utils.SpringUtils; import lombok.extern.slf4j.Slf4j; @@ -24,10 +27,18 @@ public class UserDetailsServiceImpl implements UserDetailsService { private static final Logger logger = LoggerFactory.getLogger(UserDetailsServiceImpl.class); @Autowired - private AuthUserDao dao; - - /* ckr + @Qualifier("sqlSessionTemplateDb1") + private SqlSessionTemplate sqlSessionMaster; + + @Autowired + @Qualifier("sqlSessionTemplateDb2") + private SqlSessionTemplate sqlSessionSlave; + + @SuppressWarnings("unused") public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { + + LoginMapper authUserMapper = sqlSessionMaster.getMapper(LoginMapper.class); + logger.debug("username = [{}]", username); String corpId = null; if (username.indexOf(".") > -1) { @@ -35,43 +46,7 @@ public class UserDetailsServiceImpl implements UserDetailsService { corpId = splts[0]; username = splts[1]; } - AuthUser user = dao.getByUsername(username); - - if (corpId != null) { - user.setCorpId(corpId); - } - - HttpServletRequest request = SpringUtils.getCurrentRequest(); - request.setAttribute(Const.KEY_LOAD_USER, user); - - logger.debug("user = [{}]", user); - if (user == null) { - throw new UsernameNotFoundException(username); - } - - List roles = AuthorityUtils.createAuthorityList(dao.getRoles(username)); - logger.debug("roles = [{}]", roles); - if (roles.isEmpty()) { - roles = AuthorityUtils.createAuthorityList("ROLE_USER"); -// throw new UsernameNotFoundException(username); - } - - user.setAuthorities(roles); - logger.debug("user = [{}]", user); - - return user; - } - */ - - public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { - logger.debug("username = [{}]", username); - String corpId = null; - if (username.indexOf(".") > -1) { - String[] splts = username.split("\\."); - corpId = splts[0]; - username = splts[1]; - } - AuthUser user = dao.getByUsername(username); + AuthUser user = authUserMapper.getByUsername(username); log.info("userPWD = {}",user.getPwd()); if (corpId != null) { user.setCorpId(corpId); diff --git a/src/main/java/kr/co/uplus/ez/common/auth/AuthNum.java b/src/main/java/kr/co/uplus/ez/api/login/dto/AuthNum.java similarity index 93% rename from src/main/java/kr/co/uplus/ez/common/auth/AuthNum.java rename to src/main/java/kr/co/uplus/ez/api/login/dto/AuthNum.java index 15e0a65..6edfe1e 100644 --- a/src/main/java/kr/co/uplus/ez/common/auth/AuthNum.java +++ b/src/main/java/kr/co/uplus/ez/api/login/dto/AuthNum.java @@ -1,11 +1,11 @@ -package kr.co.uplus.ez.common.auth; +package kr.co.uplus.ez.api.login.dto; import lombok.Data; // 인증문자 @Data public class AuthNum { - + private Integer seqNo; // 일련번호 private String authTpCd; // 인증 유형 코드 private String sttusCd; // 상태 코드 diff --git a/src/main/java/kr/co/uplus/ez/api/login/dto/AuthNumReqDto.java b/src/main/java/kr/co/uplus/ez/api/login/dto/AuthNumReqDto.java new file mode 100644 index 0000000..d30f414 --- /dev/null +++ b/src/main/java/kr/co/uplus/ez/api/login/dto/AuthNumReqDto.java @@ -0,0 +1,20 @@ +package kr.co.uplus.ez.api.login.dto; + +import java.io.Serializable; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +// 인증문자 요청 Dto +@SuppressWarnings("serial") +@Data +public class AuthNumReqDto implements Serializable { + + @ApiModelProperty(example = "어드민 사용자 ID", name = "어드민 사용자 ID", dataType = "String") + public String oprtrId; + @ApiModelProperty(example = "휴대폰 번호", name = "휴대폰 번호", dataType = "String") + public String hpNo; + @ApiModelProperty(example = "1차 로그인 여부", name = "1차 로그인 여부", dataType = "String") + public Boolean isLogin; + +} diff --git a/src/main/java/kr/co/uplus/ez/api/login/dto/AuthNumResDto.java b/src/main/java/kr/co/uplus/ez/api/login/dto/AuthNumResDto.java new file mode 100644 index 0000000..7ccba43 --- /dev/null +++ b/src/main/java/kr/co/uplus/ez/api/login/dto/AuthNumResDto.java @@ -0,0 +1,23 @@ +package kr.co.uplus.ez.api.login.dto; + +import java.io.Serializable; + +import kr.co.uplus.ez.common.data.ApiResponseCode; +import kr.co.uplus.ez.common.data.ResponseMessage; +import lombok.Data; + +@SuppressWarnings("serial") +@Data +public class AuthNumResDto extends ResponseMessage implements Serializable{ + + public AuthNumResDto() { + this.retCode = ApiResponseCode.SUCCESS.getResultCode(); + this.retMsg = ApiResponseCode.SUCCESS.getResultMsg(); + } + + public AuthNumResDto(ApiResponseCode returnStr) { + this.retCode = returnStr.getResultCode(); + this.retMsg = returnStr.getResultMsg(); + } + +} diff --git a/src/main/java/kr/co/uplus/ez/api/login/dto/AuthUser.java b/src/main/java/kr/co/uplus/ez/api/login/dto/AuthUser.java new file mode 100644 index 0000000..b05575a --- /dev/null +++ b/src/main/java/kr/co/uplus/ez/api/login/dto/AuthUser.java @@ -0,0 +1,199 @@ +package kr.co.uplus.ez.api.login.dto; + +import java.util.Collection; + +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.userdetails.UserDetails; + +import kr.co.uplus.ez.common.utils.EncryptionUtil; +import lombok.Setter; +import lombok.ToString; + +// security authUser +@ToString +@Setter +public class AuthUser implements UserDetails { + private static final long serialVersionUID = -2568297930450189586L; + + private String oprtrId; // 운영자 ID + private String oprtrNm; // 운영자 명 + private String sttusCd; // 상태_코드 + private String pwd; // 비밀번호 + private String tmpPwdYn; // 임시비밀번호 여부. + private String email; // 이메일 주소 + private String hpNo; // 휴대폰 번호 + private String autCd; // 권한 코드 + private int authchrFailCnt; // 인증문자 실패 횟수 + private String rFrshTkn; // 리프레쉬 토큰 + private String rFrshTknDt; // 리프레쉬 토큰 발행 일시 + private int refreshTokenExpiration; // 리프레쉬 토큰 만료 시간(초). + private String lastLoginDt; // 마지막 로그인 일시 + private int loginFailCnt; // 로그인 실패 횟수 + private String pwdChgDt; // 비밀번호 변경 일시 + private String regId; // 등록 ID + private String regDt; // 등록 일시 + private String chgId; // 변경 ID + private String chgDt; // 변경 일시 + private String inputPwd; // 화면 입력 비밀번호 + private String agencyCd; // 대리점 코드 + private String accNm; // 대리점 명 + private String accSttusCd; // 계정 상태 코드 + private String pwChangeCheck; // 비밀번호 변경 여부 + + private Collection authorities; + + + public String getOprtrId() { + return oprtrId; + } + private String corpId; // temp data + + public String getCorpId() { + return corpId; + } + + public String getUsername() { + String uname = ""; + if (corpId != null && !"".equals(corpId)) { + uname += corpId + "."; + } + uname += oprtrId; + return uname; + } + + public Collection getAuthorities() { + return authorities; + } + + public String getSttusCd() { + return sttusCd; + } + +// public void setPwd(String pwd) { +// this.pwd = EncryptionUtil.getCustomSHA512(this.oprtrId, pwd); +// } + public void setInputPwd(String inputPwd) { + this.pwd = EncryptionUtil.getCustomSHA512(this.oprtrId, inputPwd); + } + + public String getInputPwd() { + return inputPwd; + } + + public String getPwd() { + return pwd; + } + + public String getEmail() { + return email; + } + + public String getHpNo() { + return hpNo; + } + + public String getAutCd() { + return autCd; + } + + public int getAuthchrFailCnt() { + return authchrFailCnt; + } + + public String getRfreshTkn() { + return rFrshTkn; + } + + public String getRfreshTknDt() { + return rFrshTknDt; + } + + public String getLastLoginDt() { + return lastLoginDt; + } + + public int getLoginFailCnt() { + return loginFailCnt; + } + + public String getPwdChgDt() { + return pwdChgDt; + } + + public String getRegId() { + return regId; + } + + public String getRegDt() { + return regDt; + } + + public String getChgId() { + return chgId; + } + + public String getChgDt() { + return chgDt; + } + + public boolean isAccountNonExpired() { + return true; + } + + public boolean isAccountNonLocked() { + return sttusCd.equals("01"); + } + + public boolean isCredentialsNonExpired() { + return true; + } + + public boolean isEnabled() { + return sttusCd.equals("01"); + } + + public String getPassword() { + //return "{noop}"+pwd; + return pwd; + } + + public String getAgencyCd() { + return agencyCd; + } + + public String getAccNm() { + return accNm; + } + + public String accSttusCd() { + return accSttusCd; + } + + public String getTmpPwdYn() { + return tmpPwdYn; + } + + public int getRefreshTokenExpiration() { + return refreshTokenExpiration; + } + + public String getrFrshTkn() { + return rFrshTkn; + } + + public String getrFrshTknDt() { + return rFrshTknDt; + } + + public String getOprtrNm() { + return oprtrNm; + } + + public String getAccSttusCd() { + return accSttusCd; + } + + public String getPwChangeCheck() { + return pwChangeCheck; + } +} \ No newline at end of file diff --git a/src/main/java/kr/co/uplus/ez/api/login/dto/ChkAuthNumReqDto.java b/src/main/java/kr/co/uplus/ez/api/login/dto/ChkAuthNumReqDto.java new file mode 100644 index 0000000..96eac20 --- /dev/null +++ b/src/main/java/kr/co/uplus/ez/api/login/dto/ChkAuthNumReqDto.java @@ -0,0 +1,24 @@ +package kr.co.uplus.ez.api.login.dto; + +import java.io.Serializable; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +// 인증문자 확인 Dto +@SuppressWarnings("serial") +@Data +public class ChkAuthNumReqDto implements Serializable{ + + @ApiModelProperty(example = "어드민 사용자 ID", name = "어드민 사용자 ID", dataType = "String") + public String oprtrId; + @ApiModelProperty(example = "어드민 사용자 PW", name = "어드민 사용자 PW", dataType = "String") + public String oprtrPw; + @ApiModelProperty(example = "휴대폰 번호", name = "휴대폰 번호", dataType = "String") + public String hpNo; + @ApiModelProperty(example = "인증 번호", name = "인증 번호", dataType = "String") + public String chrVal; + @ApiModelProperty(example = "1차 로그인 여부", name = "1차 로그인 여부", dataType = "String") + public Boolean isLogin; + +} diff --git a/src/main/java/kr/co/uplus/ez/api/login/dto/ChkAuthNumResDto.java b/src/main/java/kr/co/uplus/ez/api/login/dto/ChkAuthNumResDto.java new file mode 100644 index 0000000..9fabaa1 --- /dev/null +++ b/src/main/java/kr/co/uplus/ez/api/login/dto/ChkAuthNumResDto.java @@ -0,0 +1,33 @@ +package kr.co.uplus.ez.api.login.dto; + +import java.io.Serializable; + +import io.swagger.annotations.ApiModelProperty; +import kr.co.uplus.ez.common.data.ApiResponseCode; +import kr.co.uplus.ez.common.data.ResponseMessage; +import lombok.Data; + +@SuppressWarnings("serial") +@Data +public class ChkAuthNumResDto extends ResponseMessage implements Serializable{ + + @ApiModelProperty(example = "데이터") + private LoginRes data; + + public ChkAuthNumResDto(ApiResponseCode returnStr, LoginRes data) { + this.retCode = returnStr.getResultCode(); + this.retMsg = returnStr.getResultMsg(); + this.data = data; + } + + public ChkAuthNumResDto() { + this.retCode = ApiResponseCode.SUCCESS.getResultCode(); + this.retMsg = ApiResponseCode.SUCCESS.getResultMsg(); + } + + public ChkAuthNumResDto(ApiResponseCode returnStr) { + this.retCode = returnStr.getResultCode(); + this.retMsg = returnStr.getResultMsg(); + } + +} diff --git a/src/main/java/kr/co/uplus/ez/api/login/dto/LoginReqDto.java b/src/main/java/kr/co/uplus/ez/api/login/dto/LoginReqDto.java new file mode 100644 index 0000000..b9fc67d --- /dev/null +++ b/src/main/java/kr/co/uplus/ez/api/login/dto/LoginReqDto.java @@ -0,0 +1,16 @@ +package kr.co.uplus.ez.api.login.dto; + +import java.io.Serializable; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@SuppressWarnings("serial") +@Data +public class LoginReqDto implements Serializable { + + @ApiModelProperty(example = "어드민 사용자 ID", name = "어드민 사용자 ID", dataType = "String") + private String oprtrId; + @ApiModelProperty(example = "어드민 사용자 Pw", name = "어드민 사용자 Pw", dataType = "String") + private String oprtrPw; +} \ No newline at end of file diff --git a/src/main/java/kr/co/uplus/ez/api/login/dto/LoginRes.java b/src/main/java/kr/co/uplus/ez/api/login/dto/LoginRes.java new file mode 100644 index 0000000..6d2b7fd --- /dev/null +++ b/src/main/java/kr/co/uplus/ez/api/login/dto/LoginRes.java @@ -0,0 +1,25 @@ +package kr.co.uplus.ez.api.login.dto; + +import java.io.Serializable; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@SuppressWarnings("serial") +@Data +public class LoginRes implements Serializable { + + @ApiModelProperty(name = "메인 URL", example = "메인 URL", dataType = "String") + private String nextUrl; + + + public LoginRes(String nextUrl) { + super(); + this.nextUrl = nextUrl; + } + + + public LoginRes() { + super(); + } +} diff --git a/src/main/java/kr/co/uplus/ez/api/login/dto/LoginResDto.java b/src/main/java/kr/co/uplus/ez/api/login/dto/LoginResDto.java new file mode 100644 index 0000000..22ac031 --- /dev/null +++ b/src/main/java/kr/co/uplus/ez/api/login/dto/LoginResDto.java @@ -0,0 +1,32 @@ +package kr.co.uplus.ez.api.login.dto; + +import java.io.Serializable; + +import io.swagger.annotations.ApiModelProperty; +import kr.co.uplus.ez.common.data.ApiResponseCode; +import kr.co.uplus.ez.common.data.ResponseMessage; +import lombok.Data; + +@SuppressWarnings("serial") +@Data +public class LoginResDto extends ResponseMessage implements Serializable{ + + @ApiModelProperty(example = "데이터") + private LoginRes data; + + public LoginResDto() { + this.retCode = ApiResponseCode.SUCCESS.getResultCode(); + this.retMsg = ApiResponseCode.SUCCESS.getResultMsg(); + } + + public LoginResDto(ApiResponseCode returnStr) { + this.retCode = returnStr.getResultCode(); + this.retMsg = returnStr.getResultMsg(); + } + + public LoginResDto(ApiResponseCode returnStr, LoginRes data) { + this.retCode = returnStr.getResultCode(); + this.retMsg = returnStr.getResultMsg(); + this.data = data; + } +} diff --git a/src/main/java/kr/co/uplus/ez/api/login/dto/LogoutReqDto.java b/src/main/java/kr/co/uplus/ez/api/login/dto/LogoutReqDto.java new file mode 100644 index 0000000..76d4de8 --- /dev/null +++ b/src/main/java/kr/co/uplus/ez/api/login/dto/LogoutReqDto.java @@ -0,0 +1,14 @@ +package kr.co.uplus.ez.api.login.dto; + +import java.io.Serializable; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@SuppressWarnings("serial") +@Data +public class LogoutReqDto implements Serializable { + + @ApiModelProperty(example = "로그인 ID", name = "로그인 ID", dataType = "String") + private String loginId; +} \ No newline at end of file diff --git a/src/main/java/kr/co/uplus/ez/api/login/dto/LogoutResDto.java b/src/main/java/kr/co/uplus/ez/api/login/dto/LogoutResDto.java new file mode 100644 index 0000000..f5a3e47 --- /dev/null +++ b/src/main/java/kr/co/uplus/ez/api/login/dto/LogoutResDto.java @@ -0,0 +1,22 @@ +package kr.co.uplus.ez.api.login.dto; + +import java.io.Serializable; + +import kr.co.uplus.ez.common.data.ApiResponseCode; +import kr.co.uplus.ez.common.data.ResponseMessage; +import lombok.Data; + +@SuppressWarnings("serial") +@Data +public class LogoutResDto extends ResponseMessage implements Serializable{ + + public LogoutResDto() { + this.retCode = ApiResponseCode.SUCCESS.getResultCode(); + this.retMsg = ApiResponseCode.SUCCESS.getResultMsg(); + } + + public LogoutResDto(ApiResponseCode returnStr) { + this.retCode = returnStr.getResultCode(); + this.retMsg = returnStr.getResultMsg(); + } +} \ No newline at end of file diff --git a/src/main/java/kr/co/uplus/ez/api/login/dto/ResetPasswordReqDto.java b/src/main/java/kr/co/uplus/ez/api/login/dto/ResetPasswordReqDto.java new file mode 100644 index 0000000..dabedbe --- /dev/null +++ b/src/main/java/kr/co/uplus/ez/api/login/dto/ResetPasswordReqDto.java @@ -0,0 +1,14 @@ +package kr.co.uplus.ez.api.login.dto; + +import java.io.Serializable; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@SuppressWarnings("serial") +@Data +public class ResetPasswordReqDto implements Serializable { + + @ApiModelProperty(example = "사용자ID", name = "사용자ID", dataType = "String") + private String userId; +} \ No newline at end of file diff --git a/src/main/java/kr/co/uplus/ez/api/login/dto/ResetPasswordResDto.java b/src/main/java/kr/co/uplus/ez/api/login/dto/ResetPasswordResDto.java new file mode 100644 index 0000000..083cdf5 --- /dev/null +++ b/src/main/java/kr/co/uplus/ez/api/login/dto/ResetPasswordResDto.java @@ -0,0 +1,22 @@ +package kr.co.uplus.ez.api.login.dto; + +import java.io.Serializable; + +import kr.co.uplus.ez.common.data.ApiResponseCode; +import kr.co.uplus.ez.common.data.ResponseMessage; +import lombok.Data; + +@SuppressWarnings("serial") +@Data +public class ResetPasswordResDto extends ResponseMessage implements Serializable{ + + public ResetPasswordResDto() { + this.retCode = ApiResponseCode.SUCCESS.getResultCode(); + this.retMsg = ApiResponseCode.SUCCESS.getResultMsg(); + } + + public ResetPasswordResDto(ApiResponseCode returnStr) { + this.retCode = returnStr.getResultCode(); + this.retMsg = returnStr.getResultMsg(); + } +} \ No newline at end of file diff --git a/src/main/java/kr/co/uplus/ez/common/auth/SmsAuthNum.java b/src/main/java/kr/co/uplus/ez/api/login/dto/SmsAuthNum.java similarity index 89% rename from src/main/java/kr/co/uplus/ez/common/auth/SmsAuthNum.java rename to src/main/java/kr/co/uplus/ez/api/login/dto/SmsAuthNum.java index 18bba6b..a32bab2 100644 --- a/src/main/java/kr/co/uplus/ez/common/auth/SmsAuthNum.java +++ b/src/main/java/kr/co/uplus/ez/api/login/dto/SmsAuthNum.java @@ -1,8 +1,8 @@ -package kr.co.uplus.ez.common.auth; +package kr.co.uplus.ez.api.login.dto; import org.joda.time.DateTime; -import kr.co.uplus.ez.common.consts.Const; +import kr.co.uplus.ez.common.data.Const; import kr.co.uplus.ez.common.utils.DateUtils; import lombok.Data; diff --git a/src/main/java/kr/co/uplus/ez/api/login/dto/UpdatePasswordReqDto.java b/src/main/java/kr/co/uplus/ez/api/login/dto/UpdatePasswordReqDto.java new file mode 100644 index 0000000..b7bbc22 --- /dev/null +++ b/src/main/java/kr/co/uplus/ez/api/login/dto/UpdatePasswordReqDto.java @@ -0,0 +1,19 @@ +package kr.co.uplus.ez.api.login.dto; + +import java.io.Serializable; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@SuppressWarnings("serial") +@Data +public class UpdatePasswordReqDto implements Serializable { + + @ApiModelProperty(example = "사용자ID", name = "사용자ID", dataType = "String") + private String userId; + @ApiModelProperty(example = "기존 비밀번호", name = "기존 비밀번호", dataType = "String") + private String oldPw; + @ApiModelProperty(example = "새로운 비밀번호", name = "새로운 비밀번호", dataType = "String") + private String newPw; + +} \ No newline at end of file diff --git a/src/main/java/kr/co/uplus/ez/api/login/dto/UpdatePasswordResDto.java b/src/main/java/kr/co/uplus/ez/api/login/dto/UpdatePasswordResDto.java new file mode 100644 index 0000000..e1a1798 --- /dev/null +++ b/src/main/java/kr/co/uplus/ez/api/login/dto/UpdatePasswordResDto.java @@ -0,0 +1,22 @@ +package kr.co.uplus.ez.api.login.dto; + +import java.io.Serializable; + +import kr.co.uplus.ez.common.data.ApiResponseCode; +import kr.co.uplus.ez.common.data.ResponseMessage; +import lombok.Data; + +@SuppressWarnings("serial") +@Data +public class UpdatePasswordResDto extends ResponseMessage implements Serializable{ + + public UpdatePasswordResDto() { + this.retCode = ApiResponseCode.SUCCESS.getResultCode(); + this.retMsg = ApiResponseCode.SUCCESS.getResultMsg(); + } + + public UpdatePasswordResDto(ApiResponseCode returnStr) { + this.retCode = returnStr.getResultCode(); + this.retMsg = returnStr.getResultMsg(); + } +} \ No newline at end of file diff --git a/src/main/java/kr/co/uplus/ez/common/auth/UserPassword.java b/src/main/java/kr/co/uplus/ez/api/login/dto/UserPassword.java similarity index 93% rename from src/main/java/kr/co/uplus/ez/common/auth/UserPassword.java rename to src/main/java/kr/co/uplus/ez/api/login/dto/UserPassword.java index 20bde37..e0e2862 100644 --- a/src/main/java/kr/co/uplus/ez/common/auth/UserPassword.java +++ b/src/main/java/kr/co/uplus/ez/api/login/dto/UserPassword.java @@ -1,4 +1,4 @@ -package kr.co.uplus.ez.common.auth; +package kr.co.uplus.ez.api.login.dto; import lombok.Getter; import lombok.Setter; diff --git a/src/main/java/kr/co/uplus/ez/api/mntrng/MntrngController.java b/src/main/java/kr/co/uplus/ez/api/mntrng/MntrngController.java index 2b92213..aca8557 100644 --- a/src/main/java/kr/co/uplus/ez/api/mntrng/MntrngController.java +++ b/src/main/java/kr/co/uplus/ez/api/mntrng/MntrngController.java @@ -1,50 +1,50 @@ -/** - * date : 2022. 4. 25. - * auth : ckr - * desc : 모니터링 - */ -package kr.co.uplus.ez.api.mntrng; - -import java.util.Map; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; - -import kr.co.uplus.ez.common.data.ApiResponseMessage; - -@RestController -@RequestMapping(value = "api/v1/bo/mntrng") -public class MntrngController { - @Autowired - MntrngService mntrngService; - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 발송내역 목록 조회 - * @param paramMap - * @throws Exception - */ - @RequestMapping(value = "/sendList" , method = {RequestMethod.POST}) - @ResponseBody - public ApiResponseMessage sendList(@RequestBody Map paramMap) throws Exception{ - return mntrngService.sendList(paramMap); - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 실시간 발송 현황 정보 조회 - * @param paramMap - * @throws Exception - */ - @RequestMapping(value = "/liveSendSttus" , method = {RequestMethod.POST}) - @ResponseBody - public ApiResponseMessage liveSendSttus(@RequestBody Map paramMap) throws Exception{ - return mntrngService.liveSendSttus(paramMap); - } -} +/** + * date : 2022. 4. 25. + * auth : ckr + * desc : 모니터링 + */ +package kr.co.uplus.ez.api.mntrng; + +import java.util.Map; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +import kr.co.uplus.ez.common.data.ApiResponseMessage; + +@RestController +@RequestMapping(value = "api/v1/bo/mntrng") +public class MntrngController { + @Autowired + MntrngService mntrngService; + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 발송내역 목록 조회 + * @param paramMap + * @throws Exception + */ + @RequestMapping(value = "/sendList" , method = {RequestMethod.POST}) + @ResponseBody + public ApiResponseMessage sendList(@RequestBody Map paramMap) throws Exception{ + return mntrngService.sendList(paramMap); + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 실시간 발송 현황 정보 조회 + * @param paramMap + * @throws Exception + */ + @RequestMapping(value = "/liveSendSttus" , method = {RequestMethod.POST}) + @ResponseBody + public ApiResponseMessage liveSendSttus(@RequestBody Map paramMap) throws Exception{ + return mntrngService.liveSendSttus(paramMap); + } +} diff --git a/src/main/java/kr/co/uplus/ez/api/mntrng/MntrngMapper.java b/src/main/java/kr/co/uplus/ez/api/mntrng/MntrngMapper.java index 0a270a1..90a3398 100644 --- a/src/main/java/kr/co/uplus/ez/api/mntrng/MntrngMapper.java +++ b/src/main/java/kr/co/uplus/ez/api/mntrng/MntrngMapper.java @@ -1,8 +1,8 @@ -package kr.co.uplus.ez.api.mntrng; - -import org.apache.ibatis.annotations.Mapper; - -@Mapper -public class MntrngMapper { - -} +package kr.co.uplus.ez.api.mntrng; + +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public class MntrngMapper { + +} diff --git a/src/main/java/kr/co/uplus/ez/api/mntrng/MntrngService.java b/src/main/java/kr/co/uplus/ez/api/mntrng/MntrngService.java index 27604b9..16c9213 100644 --- a/src/main/java/kr/co/uplus/ez/api/mntrng/MntrngService.java +++ b/src/main/java/kr/co/uplus/ez/api/mntrng/MntrngService.java @@ -1,152 +1,152 @@ -package kr.co.uplus.ez.api.mntrng; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.springframework.stereotype.Service; - -import kr.co.uplus.ez.common.data.ApiResponseCode; -import kr.co.uplus.ez.common.data.ApiResponseMessage; - -@Service -public class MntrngService { - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 발송내역 목록 조회 - * @param paramMap - * @return - */ - public ApiResponseMessage sendList(Map paramMap) { - ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); - Map dataObj = new HashMap<>(); - List> dataList = new ArrayList<>(); - Map data = new HashMap<>(); - data.put("totalCnt","999"); - data.put("currentPage","1"); - dataObj.put("paging", data); - - for(int i=0; i<10; i++) { - data = new HashMap<>(); - data.put("no", ""+(i+1)); - data.put("sendingDt", "2022-03-12"); - data.put("custNm", "유플러스"+(i+1)); - data.put("userId", "Uplus01"); - data.put("recvNum", "010-1234-1234"); - data.put("sendNum", "010-1234-5678"); - data.put("reqChannel", "SMS"); - data.put("lastChannel", "SMS"); - data.put("mlcmnCmpny", "LGT"); - data.put("resultCd", "성공(100)"); - data.put("reqDt", "2022-03-12 12:00:56"); - data.put("comptDt", "2022-03-12 12:00:56"); - - dataList.add(data); - } - dataObj.put("list", dataList); - result.setData(dataObj); - - return result; - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 실시간 발송 현황 정보 조회 - * @param paramMap - * @return - */ - public ApiResponseMessage liveSendSttus(Map paramMap) { - ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); - Map dataObj = new HashMap<>(); - - // 최근 10분 발송 현황 - List> dataList = new ArrayList<>(); - Map data = new HashMap<>(); - data.put("channel", "SMS"); - data.put("sendingCnt", "100"); - data.put("succesCnt", "100"); - data.put("succesRatio", "100%"); - dataList.add(data); - data = new HashMap<>(); - data.put("channel", "LMS"); - data.put("sendingCnt", "100"); - data.put("succesCnt", "100"); - data.put("succesRatio", "100%"); - dataList.add(data); - data = new HashMap<>(); - data.put("channel", "MMS"); - data.put("sendingCnt", "100"); - data.put("succesCnt", "100"); - data.put("succesRatio", "100%"); - data = new HashMap<>(); - data.put("channel", "알림톡"); - data.put("sendingCnt", "100"); - data.put("succesCnt", "100"); - data.put("succesRatio", "100%"); - dataList.add(data); - dataObj.put("listM", dataList); - - // 최근 1시간 발송 현황 - dataList = new ArrayList<>(); - data = new HashMap<>(); - data.put("channel", "SMS"); - data.put("sendingCnt", "100"); - data.put("succesCnt", "100"); - data.put("succesRatio", "100%"); - dataList.add(data); - data = new HashMap<>(); - data.put("channel", "LMS"); - data.put("sendingCnt", "100"); - data.put("succesCnt", "100"); - data.put("succesRatio", "100%"); - dataList.add(data); - data = new HashMap<>(); - data.put("channel", "MMS"); - data.put("sendingCnt", "100"); - data.put("succesCnt", "100"); - data.put("succesRatio", "100%"); - data = new HashMap<>(); - data.put("channel", "알림톡"); - data.put("sendingCnt", "100"); - data.put("succesCnt", "100"); - data.put("succesRatio", "100%"); - dataList.add(data); - dataObj.put("listH", dataList); - - // 당일 발송 현황 - dataList = new ArrayList<>(); - data = new HashMap<>(); - data.put("channel", "SMS"); - data.put("sendingCnt", "100"); - data.put("succesCnt", "100"); - data.put("succesRatio", "100%"); - dataList.add(data); - data = new HashMap<>(); - data.put("channel", "LMS"); - data.put("sendingCnt", "100"); - data.put("succesCnt", "100"); - data.put("succesRatio", "100%"); - dataList.add(data); - data = new HashMap<>(); - data.put("channel", "MMS"); - data.put("sendingCnt", "100"); - data.put("succesCnt", "100"); - data.put("succesRatio", "100%"); - data = new HashMap<>(); - data.put("channel", "알림톡"); - data.put("sendingCnt", "100"); - data.put("succesCnt", "100"); - data.put("succesRatio", "100%"); - dataList.add(data); - dataObj.put("listD", dataList); - - result.setData(dataObj); - - return result; - } - -} +package kr.co.uplus.ez.api.mntrng; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.springframework.stereotype.Service; + +import kr.co.uplus.ez.common.data.ApiResponseCode; +import kr.co.uplus.ez.common.data.ApiResponseMessage; + +@Service +public class MntrngService { + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 발송내역 목록 조회 + * @param paramMap + * @return + */ + public ApiResponseMessage sendList(Map paramMap) { + ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); + Map dataObj = new HashMap<>(); + List> dataList = new ArrayList<>(); + Map data = new HashMap<>(); + data.put("totalCnt","999"); + data.put("currentPage","1"); + dataObj.put("paging", data); + + for(int i=0; i<10; i++) { + data = new HashMap<>(); + data.put("no", ""+(i+1)); + data.put("sendingDt", "2022-03-12"); + data.put("custNm", "유플러스"+(i+1)); + data.put("userId", "Uplus01"); + data.put("recvNum", "010-1234-1234"); + data.put("sendNum", "010-1234-5678"); + data.put("reqChannel", "SMS"); + data.put("lastChannel", "SMS"); + data.put("mlcmnCmpny", "LGT"); + data.put("resultCd", "성공(100)"); + data.put("reqDt", "2022-03-12 12:00:56"); + data.put("comptDt", "2022-03-12 12:00:56"); + + dataList.add(data); + } + dataObj.put("list", dataList); + result.setData(dataObj); + + return result; + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 실시간 발송 현황 정보 조회 + * @param paramMap + * @return + */ + public ApiResponseMessage liveSendSttus(Map paramMap) { + ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); + Map dataObj = new HashMap<>(); + + // 최근 10분 발송 현황 + List> dataList = new ArrayList<>(); + Map data = new HashMap<>(); + data.put("channel", "SMS"); + data.put("sendingCnt", "100"); + data.put("succesCnt", "100"); + data.put("succesRatio", "100%"); + dataList.add(data); + data = new HashMap<>(); + data.put("channel", "LMS"); + data.put("sendingCnt", "100"); + data.put("succesCnt", "100"); + data.put("succesRatio", "100%"); + dataList.add(data); + data = new HashMap<>(); + data.put("channel", "MMS"); + data.put("sendingCnt", "100"); + data.put("succesCnt", "100"); + data.put("succesRatio", "100%"); + data = new HashMap<>(); + data.put("channel", "알림톡"); + data.put("sendingCnt", "100"); + data.put("succesCnt", "100"); + data.put("succesRatio", "100%"); + dataList.add(data); + dataObj.put("listM", dataList); + + // 최근 1시간 발송 현황 + dataList = new ArrayList<>(); + data = new HashMap<>(); + data.put("channel", "SMS"); + data.put("sendingCnt", "100"); + data.put("succesCnt", "100"); + data.put("succesRatio", "100%"); + dataList.add(data); + data = new HashMap<>(); + data.put("channel", "LMS"); + data.put("sendingCnt", "100"); + data.put("succesCnt", "100"); + data.put("succesRatio", "100%"); + dataList.add(data); + data = new HashMap<>(); + data.put("channel", "MMS"); + data.put("sendingCnt", "100"); + data.put("succesCnt", "100"); + data.put("succesRatio", "100%"); + data = new HashMap<>(); + data.put("channel", "알림톡"); + data.put("sendingCnt", "100"); + data.put("succesCnt", "100"); + data.put("succesRatio", "100%"); + dataList.add(data); + dataObj.put("listH", dataList); + + // 당일 발송 현황 + dataList = new ArrayList<>(); + data = new HashMap<>(); + data.put("channel", "SMS"); + data.put("sendingCnt", "100"); + data.put("succesCnt", "100"); + data.put("succesRatio", "100%"); + dataList.add(data); + data = new HashMap<>(); + data.put("channel", "LMS"); + data.put("sendingCnt", "100"); + data.put("succesCnt", "100"); + data.put("succesRatio", "100%"); + dataList.add(data); + data = new HashMap<>(); + data.put("channel", "MMS"); + data.put("sendingCnt", "100"); + data.put("succesCnt", "100"); + data.put("succesRatio", "100%"); + data = new HashMap<>(); + data.put("channel", "알림톡"); + data.put("sendingCnt", "100"); + data.put("succesCnt", "100"); + data.put("succesRatio", "100%"); + dataList.add(data); + dataObj.put("listD", dataList); + + result.setData(dataObj); + + return result; + } + +} diff --git a/src/main/java/kr/co/uplus/ez/api/riskMgt/RiskMgtMapper.java b/src/main/java/kr/co/uplus/ez/api/riskMgt/RiskMgtMapper.java index 0337706..d8a97f4 100644 --- a/src/main/java/kr/co/uplus/ez/api/riskMgt/RiskMgtMapper.java +++ b/src/main/java/kr/co/uplus/ez/api/riskMgt/RiskMgtMapper.java @@ -1,8 +1,8 @@ -package kr.co.uplus.ez.api.riskMgt; - -import org.apache.ibatis.annotations.Mapper; - -@Mapper -public class RiskMgtMapper { - -} +package kr.co.uplus.ez.api.riskMgt; + +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public class RiskMgtMapper { + +} diff --git a/src/main/java/kr/co/uplus/ez/api/riskMgt/RiskMgtService.java b/src/main/java/kr/co/uplus/ez/api/riskMgt/RiskMgtService.java index 4e33465..8cd5b57 100644 --- a/src/main/java/kr/co/uplus/ez/api/riskMgt/RiskMgtService.java +++ b/src/main/java/kr/co/uplus/ez/api/riskMgt/RiskMgtService.java @@ -1,278 +1,278 @@ -package kr.co.uplus.ez.api.riskMgt; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.springframework.stereotype.Service; - -import kr.co.uplus.ez.common.data.ApiResponseCode; -import kr.co.uplus.ez.common.data.ApiResponseMessage; - -@Service -public class RiskMgtService { - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 발신번호 차단 목록 조회 - * @param paramMap - * @return - */ - public ApiResponseMessage sendNumIntrcpList(Map paramMap) { - ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); - Map dataObj = new HashMap<>(); - List> dataList = new ArrayList<>(); - Map data = new HashMap<>(); - data.put("totalCnt","999"); - data.put("currentPage","1"); - dataObj.put("paging", data); - - for(int i=0; i<10; i++) { - data = new HashMap<>(); - data.put("no", ""+(i+1)); - data.put("sendNum", "0212345678"); - data.put("intrcpYn", "미차단"); - data.put("sendType", "문자"); - data.put("lastUpdateDt", "2022-03-10"); - data.put("intrcpReason", "도박"); - data.put("register", "kkkkkkf"); - - dataList.add(data); - } - dataObj.put("list", dataList); - result.setData(dataObj); - - return result; - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 발신번호 차단 상세 정보 조회 - * @param paramMap - * @return - */ - public ApiResponseMessage sendNumIntrcpDetail(Map paramMap) { - ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); - Map dataObj = new HashMap<>(); - dataObj.put("sendNum", "0212345678"); - dataObj.put("sendType", "공용"); - dataObj.put("intrcpReason", "도박"); - dataObj.put("memo", "고객사 요청"); - dataObj.put("intrcpYn", "차단"); - - result.setData(dataObj); - - return result; - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 발신번호 차단 신규 등록 - * @param paramMap - * @return - */ - public ApiResponseMessage sendNumInsertIntrcp(Map paramMap) { - ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); - return result; - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 발신번호 차단 수정 - * @param paramMap - * @return - */ - public ApiResponseMessage sendNumUpdateIntrcp(Map paramMap) { - ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); - return result; - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 발신번호 차단 삭제 - * @param paramMap - * @return - */ - public ApiResponseMessage sendNumDeleteIntrcp(Map paramMap) { - ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); - return result; - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 080수신번호 차단 목록 조회 - * @param paramMap - * @return - */ - public ApiResponseMessage zezNumIntrcpList(Map paramMap) { - ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); - Map dataObj = new HashMap<>(); - List> dataList = new ArrayList<>(); - Map data = new HashMap<>(); - data.put("totalCnt","999"); - data.put("currentPage","1"); - dataObj.put("paging", data); - - for(int i=0; i<10; i++) { - data = new HashMap<>(); - data.put("no", ""+(i+1)); - data.put("custNm", "가나다"); - data.put("bRegNo", "123-11-12345"); - data.put("authCd", "12345"); - data.put("recvNum", "01012345678"); - data.put("regDt", "2022-03-10"); - data.put("regType", "자동등록"); - - dataList.add(data); - } - dataObj.put("list", dataList); - result.setData(dataObj); - - return result; - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 메시지 차단 목록 조회 - * @param paramMap - * @return - */ - public ApiResponseMessage msgIntrcpList(Map paramMap) { - ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); - Map dataObj = new HashMap<>(); - List> dataList = new ArrayList<>(); - Map data = new HashMap<>(); - data.put("totalCnt","999"); - data.put("currentPage","1"); - dataObj.put("paging", data); - - for(int i=0; i<10; i++) { - data = new HashMap<>(); - data.put("no", ""+(i+1)); - data.put("intrcpMsg", "도박"); - data.put("intrcpYn", "차단"); - data.put("lastUpdateDt", "2022-03-10"); - data.put("intrcpReason", "도박"); - data.put("register", "Abcefu"); - dataList.add(data); - } - dataObj.put("list", dataList); - result.setData(dataObj); - - return result; - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 메시지 차단 상세 정보 조회 - * @param paramMap - * @return - */ - public ApiResponseMessage msgIntrcpDetail(Map paramMap) { - ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); - Map dataObj = new HashMap<>(); - - dataObj.put("intrcpMsgId", "testMsgId"); - dataObj.put("intrcpString1", "도박"); - dataObj.put("intrcpString2", "광고"); - dataObj.put("intrcpString3", "술"); - dataObj.put("intrcpString4", ""); - dataObj.put("intrcpString5", ""); - dataObj.put("intrcpString6", ""); - dataObj.put("intrcpString7", ""); - dataObj.put("intrcpString8", ""); - dataObj.put("intrcpString9", ""); - dataObj.put("intrcpString10", ""); - dataObj.put("condition", "OR"); - dataObj.put("intrcpReason", "도박"); - dataObj.put("memo", "가나다라"); - dataObj.put("intrcpYn", "차단"); - - result.setData(dataObj); - - return result; - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 메시지 차단 신규 등록 - * @param paramMap - * @return - */ - public ApiResponseMessage msgInsertIntrcp(Map paramMap) { - ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); - return result; - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 메시지 차단 수정 - * @param paramMap - * @return - */ - public ApiResponseMessage msgUpdateIntrcp(Map paramMap) { - ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); - return result; - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 메시지 차단 삭제 - * @param paramMap - * @return - */ - public ApiResponseMessage msgDeleteIntrcp(Map paramMap) { - ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); - return result; - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 차단 내역 목록 조회 - * @param paramMap - * @return - */ - public ApiResponseMessage allIntrcpList(Map paramMap) { - ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); - Map dataObj = new HashMap<>(); - List> dataList = new ArrayList<>(); - Map data = new HashMap<>(); - data.put("totalCnt","999"); - data.put("currentPage","1"); - dataObj.put("paging", data); - - for(int i=0; i<10; i++) { - data = new HashMap<>(); - data.put("no", ""+(i+1)); - data.put("intrcpType", "발신번호차단"); - data.put("sendId", "Abcd"); - data.put("sendNum", "021540000"); - data.put("custNm", "가나다"); - data.put("custId", "Uplus01"); - data.put("bRegNo", "123-11-12345"); - data.put("recvNum", "01022223333"); - data.put("intrcpReason", "도착"); - data.put("sendDt", "2-03-22"); - - dataList.add(data); - } - dataObj.put("list", dataList); - result.setData(dataObj); - - return result; - } - -} +package kr.co.uplus.ez.api.riskMgt; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.springframework.stereotype.Service; + +import kr.co.uplus.ez.common.data.ApiResponseCode; +import kr.co.uplus.ez.common.data.ApiResponseMessage; + +@Service +public class RiskMgtService { + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 발신번호 차단 목록 조회 + * @param paramMap + * @return + */ + public ApiResponseMessage sendNumIntrcpList(Map paramMap) { + ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); + Map dataObj = new HashMap<>(); + List> dataList = new ArrayList<>(); + Map data = new HashMap<>(); + data.put("totalCnt","999"); + data.put("currentPage","1"); + dataObj.put("paging", data); + + for(int i=0; i<10; i++) { + data = new HashMap<>(); + data.put("no", ""+(i+1)); + data.put("sendNum", "0212345678"); + data.put("intrcpYn", "미차단"); + data.put("sendType", "문자"); + data.put("lastUpdateDt", "2022-03-10"); + data.put("intrcpReason", "도박"); + data.put("register", "kkkkkkf"); + + dataList.add(data); + } + dataObj.put("list", dataList); + result.setData(dataObj); + + return result; + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 발신번호 차단 상세 정보 조회 + * @param paramMap + * @return + */ + public ApiResponseMessage sendNumIntrcpDetail(Map paramMap) { + ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); + Map dataObj = new HashMap<>(); + dataObj.put("sendNum", "0212345678"); + dataObj.put("sendType", "공용"); + dataObj.put("intrcpReason", "도박"); + dataObj.put("memo", "고객사 요청"); + dataObj.put("intrcpYn", "차단"); + + result.setData(dataObj); + + return result; + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 발신번호 차단 신규 등록 + * @param paramMap + * @return + */ + public ApiResponseMessage sendNumInsertIntrcp(Map paramMap) { + ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); + return result; + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 발신번호 차단 수정 + * @param paramMap + * @return + */ + public ApiResponseMessage sendNumUpdateIntrcp(Map paramMap) { + ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); + return result; + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 발신번호 차단 삭제 + * @param paramMap + * @return + */ + public ApiResponseMessage sendNumDeleteIntrcp(Map paramMap) { + ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); + return result; + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 080수신번호 차단 목록 조회 + * @param paramMap + * @return + */ + public ApiResponseMessage zezNumIntrcpList(Map paramMap) { + ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); + Map dataObj = new HashMap<>(); + List> dataList = new ArrayList<>(); + Map data = new HashMap<>(); + data.put("totalCnt","999"); + data.put("currentPage","1"); + dataObj.put("paging", data); + + for(int i=0; i<10; i++) { + data = new HashMap<>(); + data.put("no", ""+(i+1)); + data.put("custNm", "가나다"); + data.put("bRegNo", "123-11-12345"); + data.put("authCd", "12345"); + data.put("recvNum", "01012345678"); + data.put("regDt", "2022-03-10"); + data.put("regType", "자동등록"); + + dataList.add(data); + } + dataObj.put("list", dataList); + result.setData(dataObj); + + return result; + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 메시지 차단 목록 조회 + * @param paramMap + * @return + */ + public ApiResponseMessage msgIntrcpList(Map paramMap) { + ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); + Map dataObj = new HashMap<>(); + List> dataList = new ArrayList<>(); + Map data = new HashMap<>(); + data.put("totalCnt","999"); + data.put("currentPage","1"); + dataObj.put("paging", data); + + for(int i=0; i<10; i++) { + data = new HashMap<>(); + data.put("no", ""+(i+1)); + data.put("intrcpMsg", "도박"); + data.put("intrcpYn", "차단"); + data.put("lastUpdateDt", "2022-03-10"); + data.put("intrcpReason", "도박"); + data.put("register", "Abcefu"); + dataList.add(data); + } + dataObj.put("list", dataList); + result.setData(dataObj); + + return result; + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 메시지 차단 상세 정보 조회 + * @param paramMap + * @return + */ + public ApiResponseMessage msgIntrcpDetail(Map paramMap) { + ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); + Map dataObj = new HashMap<>(); + + dataObj.put("intrcpMsgId", "testMsgId"); + dataObj.put("intrcpString1", "도박"); + dataObj.put("intrcpString2", "광고"); + dataObj.put("intrcpString3", "술"); + dataObj.put("intrcpString4", ""); + dataObj.put("intrcpString5", ""); + dataObj.put("intrcpString6", ""); + dataObj.put("intrcpString7", ""); + dataObj.put("intrcpString8", ""); + dataObj.put("intrcpString9", ""); + dataObj.put("intrcpString10", ""); + dataObj.put("condition", "OR"); + dataObj.put("intrcpReason", "도박"); + dataObj.put("memo", "가나다라"); + dataObj.put("intrcpYn", "차단"); + + result.setData(dataObj); + + return result; + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 메시지 차단 신규 등록 + * @param paramMap + * @return + */ + public ApiResponseMessage msgInsertIntrcp(Map paramMap) { + ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); + return result; + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 메시지 차단 수정 + * @param paramMap + * @return + */ + public ApiResponseMessage msgUpdateIntrcp(Map paramMap) { + ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); + return result; + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 메시지 차단 삭제 + * @param paramMap + * @return + */ + public ApiResponseMessage msgDeleteIntrcp(Map paramMap) { + ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); + return result; + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 차단 내역 목록 조회 + * @param paramMap + * @return + */ + public ApiResponseMessage allIntrcpList(Map paramMap) { + ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); + Map dataObj = new HashMap<>(); + List> dataList = new ArrayList<>(); + Map data = new HashMap<>(); + data.put("totalCnt","999"); + data.put("currentPage","1"); + dataObj.put("paging", data); + + for(int i=0; i<10; i++) { + data = new HashMap<>(); + data.put("no", ""+(i+1)); + data.put("intrcpType", "발신번호차단"); + data.put("sendId", "Abcd"); + data.put("sendNum", "021540000"); + data.put("custNm", "가나다"); + data.put("custId", "Uplus01"); + data.put("bRegNo", "123-11-12345"); + data.put("recvNum", "01022223333"); + data.put("intrcpReason", "도착"); + data.put("sendDt", "2-03-22"); + + dataList.add(data); + } + dataObj.put("list", dataList); + result.setData(dataObj); + + return result; + } + +} diff --git a/src/main/java/kr/co/uplus/ez/api/riskMgt/RistMgtController.java b/src/main/java/kr/co/uplus/ez/api/riskMgt/RistMgtController.java index fa16381..9dcc1e5 100644 --- a/src/main/java/kr/co/uplus/ez/api/riskMgt/RistMgtController.java +++ b/src/main/java/kr/co/uplus/ez/api/riskMgt/RistMgtController.java @@ -1,193 +1,193 @@ -/** - * date : 2022. 4. 25. - * auth : ckr - * desc : 리스크 관리 - */ -package kr.co.uplus.ez.api.riskMgt; - -import java.util.Map; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; - -import kr.co.uplus.ez.common.data.ApiResponseMessage; - -@RestController -@RequestMapping(value = "api/v1/bo/riskMgt") -public class RistMgtController { - - @Autowired - RiskMgtService riskService; - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 발신번호 차단 목록 조회 - * @param paramMap - * @return - * @throws Exception - */ - @RequestMapping(value = "/sendNum/intrcpList" , method = {RequestMethod.POST}) - @ResponseBody - public ApiResponseMessage sendNumIntrcpList(@RequestBody Map paramMap) throws Exception{ - return riskService.sendNumIntrcpList(paramMap); - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 발신번호 차단 상세 정보 조회 - * @param paramMap - * @return - * @throws Exception - */ - @RequestMapping(value = "/sendNum/intrcpDetail" , method = {RequestMethod.POST}) - @ResponseBody - public ApiResponseMessage sendNumIntrcpDetail(@RequestBody Map paramMap) throws Exception{ - return riskService.sendNumIntrcpDetail(paramMap); - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 발신번호 차단 신규 등록 - * @param paramMap - * @return - * @throws Exception - */ - @RequestMapping(value = "/sendNum/insertIntrcp" , method = {RequestMethod.POST}) - @ResponseBody - public ApiResponseMessage sendNumInsertIntrcp(@RequestBody Map paramMap) throws Exception{ - return riskService.sendNumInsertIntrcp(paramMap); - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 발신번호 차단 수정 - * @param paramMap - * @return - * @throws Exception - */ - @RequestMapping(value = "/sendNum/updateIntrcp" , method = {RequestMethod.POST}) - @ResponseBody - public ApiResponseMessage sendNumUpdateIntrcp(@RequestBody Map paramMap) throws Exception{ - return riskService.sendNumUpdateIntrcp(paramMap); - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 발신번호 차단 삭제 - * @param paramMap - * @return - * @throws Exception - */ - @RequestMapping(value = "/sendNum/deleteIntrcp" , method = {RequestMethod.POST}) - @ResponseBody - public ApiResponseMessage sendNumDeleteIntrcp(@RequestBody Map paramMap) throws Exception{ - return riskService.sendNumDeleteIntrcp(paramMap); - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 080수신번호 차단 목록 조회 - * @param paramMap - * @return - * @throws Exception - */ - @RequestMapping(value = "/zezNum/intrcpList" , method = {RequestMethod.POST}) - @ResponseBody - public ApiResponseMessage zezNumIntrcpList(@RequestBody Map paramMap) throws Exception{ - return riskService.zezNumIntrcpList(paramMap); - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 메시지 차단 목록 조회 - * @param paramMap - * @return - * @throws Exception - */ - @RequestMapping(value = "/msg/intrcpList" , method = {RequestMethod.POST}) - @ResponseBody - public ApiResponseMessage msgIntrcpList(@RequestBody Map paramMap) throws Exception{ - return riskService.msgIntrcpList(paramMap); - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 메시지 차단 상세 정보 조회 - * @param paramMap - * @return - * @throws Exception - */ - @RequestMapping(value = "/msg/intrcpDetail" , method = {RequestMethod.POST}) - @ResponseBody - public ApiResponseMessage msgIntrcpDetail(@RequestBody Map paramMap) throws Exception{ - return riskService.msgIntrcpDetail(paramMap); - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 메시지 차단 신규 등록 - * @param paramMap - * @return - * @throws Exception - */ - @RequestMapping(value = "/msg/insertIntrcp" , method = {RequestMethod.POST}) - @ResponseBody - public ApiResponseMessage msgInsertIntrcp(@RequestBody Map paramMap) throws Exception{ - return riskService.msgInsertIntrcp(paramMap); - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 메시지 차단 수정 - * @param paramMap - * @return - * @throws Exception - */ - @RequestMapping(value = "/msg/updateIntrcp" , method = {RequestMethod.POST}) - @ResponseBody - public ApiResponseMessage msgUpdateIntrcp(@RequestBody Map paramMap) throws Exception{ - return riskService.msgUpdateIntrcp(paramMap); - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 메시지 차단 삭제 - * @param paramMap - * @return - * @throws Exception - */ - @RequestMapping(value = "/msg/deleteIntrcp" , method = {RequestMethod.POST}) - @ResponseBody - public ApiResponseMessage msgDeleteIntrcp(@RequestBody Map paramMap) throws Exception{ - return riskService.msgDeleteIntrcp(paramMap); - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 차단 내역 목록 조회 - * @param paramMap - * @return - * @throws Exception - */ - @RequestMapping(value = "/all/intrcpList" , method = {RequestMethod.POST}) - @ResponseBody - public ApiResponseMessage allIntrcpList(@RequestBody Map paramMap) throws Exception{ - return riskService.allIntrcpList(paramMap); - } -} +/** + * date : 2022. 4. 25. + * auth : ckr + * desc : 리스크 관리 + */ +package kr.co.uplus.ez.api.riskMgt; + +import java.util.Map; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +import kr.co.uplus.ez.common.data.ApiResponseMessage; + +@RestController +@RequestMapping(value = "api/v1/bo/riskMgt") +public class RistMgtController { + + @Autowired + RiskMgtService riskService; + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 발신번호 차단 목록 조회 + * @param paramMap + * @return + * @throws Exception + */ + @RequestMapping(value = "/sendNum/intrcpList" , method = {RequestMethod.POST}) + @ResponseBody + public ApiResponseMessage sendNumIntrcpList(@RequestBody Map paramMap) throws Exception{ + return riskService.sendNumIntrcpList(paramMap); + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 발신번호 차단 상세 정보 조회 + * @param paramMap + * @return + * @throws Exception + */ + @RequestMapping(value = "/sendNum/intrcpDetail" , method = {RequestMethod.POST}) + @ResponseBody + public ApiResponseMessage sendNumIntrcpDetail(@RequestBody Map paramMap) throws Exception{ + return riskService.sendNumIntrcpDetail(paramMap); + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 발신번호 차단 신규 등록 + * @param paramMap + * @return + * @throws Exception + */ + @RequestMapping(value = "/sendNum/insertIntrcp" , method = {RequestMethod.POST}) + @ResponseBody + public ApiResponseMessage sendNumInsertIntrcp(@RequestBody Map paramMap) throws Exception{ + return riskService.sendNumInsertIntrcp(paramMap); + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 발신번호 차단 수정 + * @param paramMap + * @return + * @throws Exception + */ + @RequestMapping(value = "/sendNum/updateIntrcp" , method = {RequestMethod.POST}) + @ResponseBody + public ApiResponseMessage sendNumUpdateIntrcp(@RequestBody Map paramMap) throws Exception{ + return riskService.sendNumUpdateIntrcp(paramMap); + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 발신번호 차단 삭제 + * @param paramMap + * @return + * @throws Exception + */ + @RequestMapping(value = "/sendNum/deleteIntrcp" , method = {RequestMethod.POST}) + @ResponseBody + public ApiResponseMessage sendNumDeleteIntrcp(@RequestBody Map paramMap) throws Exception{ + return riskService.sendNumDeleteIntrcp(paramMap); + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 080수신번호 차단 목록 조회 + * @param paramMap + * @return + * @throws Exception + */ + @RequestMapping(value = "/zezNum/intrcpList" , method = {RequestMethod.POST}) + @ResponseBody + public ApiResponseMessage zezNumIntrcpList(@RequestBody Map paramMap) throws Exception{ + return riskService.zezNumIntrcpList(paramMap); + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 메시지 차단 목록 조회 + * @param paramMap + * @return + * @throws Exception + */ + @RequestMapping(value = "/msg/intrcpList" , method = {RequestMethod.POST}) + @ResponseBody + public ApiResponseMessage msgIntrcpList(@RequestBody Map paramMap) throws Exception{ + return riskService.msgIntrcpList(paramMap); + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 메시지 차단 상세 정보 조회 + * @param paramMap + * @return + * @throws Exception + */ + @RequestMapping(value = "/msg/intrcpDetail" , method = {RequestMethod.POST}) + @ResponseBody + public ApiResponseMessage msgIntrcpDetail(@RequestBody Map paramMap) throws Exception{ + return riskService.msgIntrcpDetail(paramMap); + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 메시지 차단 신규 등록 + * @param paramMap + * @return + * @throws Exception + */ + @RequestMapping(value = "/msg/insertIntrcp" , method = {RequestMethod.POST}) + @ResponseBody + public ApiResponseMessage msgInsertIntrcp(@RequestBody Map paramMap) throws Exception{ + return riskService.msgInsertIntrcp(paramMap); + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 메시지 차단 수정 + * @param paramMap + * @return + * @throws Exception + */ + @RequestMapping(value = "/msg/updateIntrcp" , method = {RequestMethod.POST}) + @ResponseBody + public ApiResponseMessage msgUpdateIntrcp(@RequestBody Map paramMap) throws Exception{ + return riskService.msgUpdateIntrcp(paramMap); + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 메시지 차단 삭제 + * @param paramMap + * @return + * @throws Exception + */ + @RequestMapping(value = "/msg/deleteIntrcp" , method = {RequestMethod.POST}) + @ResponseBody + public ApiResponseMessage msgDeleteIntrcp(@RequestBody Map paramMap) throws Exception{ + return riskService.msgDeleteIntrcp(paramMap); + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 차단 내역 목록 조회 + * @param paramMap + * @return + * @throws Exception + */ + @RequestMapping(value = "/all/intrcpList" , method = {RequestMethod.POST}) + @ResponseBody + public ApiResponseMessage allIntrcpList(@RequestBody Map paramMap) throws Exception{ + return riskService.allIntrcpList(paramMap); + } +} diff --git a/src/main/java/kr/co/uplus/ez/api/sample/Sample.java b/src/main/java/kr/co/uplus/ez/api/sample/Sample.java index 7547222..ad99d57 100644 --- a/src/main/java/kr/co/uplus/ez/api/sample/Sample.java +++ b/src/main/java/kr/co/uplus/ez/api/sample/Sample.java @@ -1,14 +1,14 @@ -package kr.co.uplus.ez.api.sample; - -import java.io.Serializable; - -import lombok.Data; - -@Data -public class Sample implements Serializable { - - private static final long serialVersionUID = 6443429970712121140L; - - private Long addrId; - -} +package kr.co.uplus.ez.api.sample; + +import java.io.Serializable; + +import lombok.Data; + +@Data +public class Sample implements Serializable { + + private static final long serialVersionUID = 6443429970712121140L; + + private String email; + +} diff --git a/src/main/java/kr/co/uplus/ez/api/sample/SampleController.java b/src/main/java/kr/co/uplus/ez/api/sample/SampleController.java index 10f3809..e876e50 100644 --- a/src/main/java/kr/co/uplus/ez/api/sample/SampleController.java +++ b/src/main/java/kr/co/uplus/ez/api/sample/SampleController.java @@ -1,31 +1,31 @@ -package kr.co.uplus.ez.api.sample; - -import java.util.List; - -import javax.servlet.http.HttpServletResponse; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RestController; - -import io.swagger.annotations.ApiOperation; -import io.swagger.annotations.ApiParam; -import io.swagger.annotations.ApiResponse; -import io.swagger.annotations.ApiResponses; - -@RestController -public class SampleController { - - @Autowired - private SampleService service; - - @ApiOperation(value = "sample", notes = "샘플 get api입니다.") - @ApiResponses({ - @ApiResponse(code = HttpServletResponse.SC_OK, message = "sample") - }) - @RequestMapping(value = "/sample/list", method = {RequestMethod.GET}) - public List getSample(@ApiParam(value = "testId입니다", required = true) Long testId) { - return service.getSample(); - } -} +package kr.co.uplus.ez.api.sample; + +import java.util.List; + +import javax.servlet.http.HttpServletResponse; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import io.swagger.annotations.ApiResponse; +import io.swagger.annotations.ApiResponses; + +@RestController +public class SampleController { + + @Autowired + private SampleService service; + + @ApiOperation(value = "sample", notes = "샘플 get api입니다.") + @ApiResponses({ + @ApiResponse(code = HttpServletResponse.SC_OK, message = "sample") + }) + @RequestMapping(value = "/sample/list", method = {RequestMethod.GET}) + public List getSample(@ApiParam(value = "testId입니다", required = true) Long testId) { + return service.getSample(); + } +} diff --git a/src/main/java/kr/co/uplus/ez/api/sample/SampleMapper.java b/src/main/java/kr/co/uplus/ez/api/sample/SampleMapper.java index e86fe3a..dfedb96 100644 --- a/src/main/java/kr/co/uplus/ez/api/sample/SampleMapper.java +++ b/src/main/java/kr/co/uplus/ez/api/sample/SampleMapper.java @@ -1,11 +1,11 @@ -package kr.co.uplus.ez.api.sample; - -import java.util.List; - -import org.apache.ibatis.annotations.Mapper; - -@Mapper -public interface SampleMapper { - - public List selectSample(Sample param); -} +package kr.co.uplus.ez.api.sample; + +import java.util.List; + +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface SampleMapper { + + public List selectSample(Sample param); +} diff --git a/src/main/java/kr/co/uplus/ez/api/sample/SampleService.java b/src/main/java/kr/co/uplus/ez/api/sample/SampleService.java index 070e1b0..2cafbb7 100644 --- a/src/main/java/kr/co/uplus/ez/api/sample/SampleService.java +++ b/src/main/java/kr/co/uplus/ez/api/sample/SampleService.java @@ -1,17 +1,25 @@ -package kr.co.uplus.ez.api.sample; - -import java.util.List; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -@Service -public class SampleService { - - @Autowired - private SampleMapper mapper; - - public List getSample() { - return mapper.selectSample(new Sample()); - } -} +package kr.co.uplus.ez.api.sample; + +import java.util.List; + +import org.mybatis.spring.SqlSessionTemplate; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Service; + +@Service +public class SampleService { + + @Autowired + @Qualifier("sqlSessionTemplateDb1") + private SqlSessionTemplate sqlSessionMaster; + + @Autowired + @Qualifier("sqlSessionTemplateDb2") + private SqlSessionTemplate sqlSessionSlave; + + public List getSample() { + SampleMapper mapper = sqlSessionSlave.getMapper(SampleMapper.class); + return mapper.selectSample(new Sample()); + } +} diff --git a/src/main/java/kr/co/uplus/ez/api/sendNumMgt/SendNumMgtController.java b/src/main/java/kr/co/uplus/ez/api/sendNumMgt/SendNumMgtController.java index df44fb4..766ca96 100644 --- a/src/main/java/kr/co/uplus/ez/api/sendNumMgt/SendNumMgtController.java +++ b/src/main/java/kr/co/uplus/ez/api/sendNumMgt/SendNumMgtController.java @@ -1,142 +1,142 @@ -/** - * date : 2022. 4. 25. - * auth : ckr - * desc : 발신번호관리 - */ -package kr.co.uplus.ez.api.sendNumMgt; - -import java.util.Map; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; - -import kr.co.uplus.ez.common.data.ApiResponseMessage; - -@RestController -@RequestMapping(value = "api/v1/bo/sendNumMgt") -public class SendNumMgtController { - - @Autowired - SendNumMgtService sendNumService; - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 발신 프로필 목록 조회 - * @param paramMap - * @throws Exception - */ - @RequestMapping(value = "/profileList" , method = {RequestMethod.POST}) - @ResponseBody - public ApiResponseMessage profileList(@RequestBody Map paramMap) throws Exception{ - return sendNumService.profileList(paramMap); - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 문자 발신 번호 목록 조회 - * @param paramMap - * @throws Exception - */ - @RequestMapping(value = "/numberList" , method = {RequestMethod.POST}) - @ResponseBody - public ApiResponseMessage numberList(@RequestBody Map paramMap) throws Exception{ - return sendNumService.numberList(paramMap); - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 문자 발신 번호 삭제 - * @param paramMap - * @throws Exception - */ - @RequestMapping(value = "/deleteNumber" , method = {RequestMethod.POST}) - @ResponseBody - public ApiResponseMessage deleteNumber(@RequestBody Map paramMap) throws Exception{ - return sendNumService.deleteNumber(paramMap); - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 문자 발신 번호 등록 - * @param paramMap - * @throws Exception - */ - @RequestMapping(value = "/insertNumber" , method = {RequestMethod.POST}) - @ResponseBody - public ApiResponseMessage insertNumber(@RequestBody Map paramMap) throws Exception{ - return sendNumService.insertNumber(paramMap); - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 문자 발신 번호 정보 상세 조회 - * @param paramMap - * @throws Exception - */ - @RequestMapping(value = "/numberDetail" , method = {RequestMethod.POST}) - @ResponseBody - public ApiResponseMessage numberDetail(@RequestBody Map paramMap) throws Exception{ - return sendNumService.numberDetail(paramMap); - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 관리자ID 목록 조회 - * @param paramMap - * @throws Exception - */ - @RequestMapping(value = "/adminList" , method = {RequestMethod.POST}) - @ResponseBody - public ApiResponseMessage adminList(@RequestBody Map paramMap) throws Exception{ - return sendNumService.adminList(paramMap); - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 발신번호 승인 목록 조회 - * @param paramMap - * @throws Exception - */ - @RequestMapping(value = "/apprList" , method = {RequestMethod.POST}) - @ResponseBody - public ApiResponseMessage apprList(@RequestBody Map paramMap) throws Exception{ - return sendNumService.apprList(paramMap); - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 발신번호 승인 상세 정보 조회 - * @param paramMap - * @throws Exception - */ - @RequestMapping(value = "/apprDetail" , method = {RequestMethod.POST}) - @ResponseBody - public ApiResponseMessage apprDetail(@RequestBody Map paramMap) throws Exception{ - return sendNumService.apprDetail(paramMap); - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 발송내역 목록 조회 - * @param paramMap - * @throws Exception - */ - @RequestMapping(value = "/insertAppr" , method = {RequestMethod.POST}) - @ResponseBody - public ApiResponseMessage insertAppr(@RequestBody Map paramMap) throws Exception{ - return sendNumService.insertAppr(paramMap); - } -} +/** + * date : 2022. 4. 25. + * auth : ckr + * desc : 발신번호관리 + */ +package kr.co.uplus.ez.api.sendNumMgt; + +import java.util.Map; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +import kr.co.uplus.ez.common.data.ApiResponseMessage; + +@RestController +@RequestMapping(value = "api/v1/bo/sendNumMgt") +public class SendNumMgtController { + + @Autowired + SendNumMgtService sendNumService; + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 발신 프로필 목록 조회 + * @param paramMap + * @throws Exception + */ + @RequestMapping(value = "/profileList" , method = {RequestMethod.POST}) + @ResponseBody + public ApiResponseMessage profileList(@RequestBody Map paramMap) throws Exception{ + return sendNumService.profileList(paramMap); + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 문자 발신 번호 목록 조회 + * @param paramMap + * @throws Exception + */ + @RequestMapping(value = "/numberList" , method = {RequestMethod.POST}) + @ResponseBody + public ApiResponseMessage numberList(@RequestBody Map paramMap) throws Exception{ + return sendNumService.numberList(paramMap); + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 문자 발신 번호 삭제 + * @param paramMap + * @throws Exception + */ + @RequestMapping(value = "/deleteNumber" , method = {RequestMethod.POST}) + @ResponseBody + public ApiResponseMessage deleteNumber(@RequestBody Map paramMap) throws Exception{ + return sendNumService.deleteNumber(paramMap); + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 문자 발신 번호 등록 + * @param paramMap + * @throws Exception + */ + @RequestMapping(value = "/insertNumber" , method = {RequestMethod.POST}) + @ResponseBody + public ApiResponseMessage insertNumber(@RequestBody Map paramMap) throws Exception{ + return sendNumService.insertNumber(paramMap); + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 문자 발신 번호 정보 상세 조회 + * @param paramMap + * @throws Exception + */ + @RequestMapping(value = "/numberDetail" , method = {RequestMethod.POST}) + @ResponseBody + public ApiResponseMessage numberDetail(@RequestBody Map paramMap) throws Exception{ + return sendNumService.numberDetail(paramMap); + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 관리자ID 목록 조회 + * @param paramMap + * @throws Exception + */ + @RequestMapping(value = "/adminList" , method = {RequestMethod.POST}) + @ResponseBody + public ApiResponseMessage adminList(@RequestBody Map paramMap) throws Exception{ + return sendNumService.adminList(paramMap); + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 발신번호 승인 목록 조회 + * @param paramMap + * @throws Exception + */ + @RequestMapping(value = "/apprList" , method = {RequestMethod.POST}) + @ResponseBody + public ApiResponseMessage apprList(@RequestBody Map paramMap) throws Exception{ + return sendNumService.apprList(paramMap); + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 발신번호 승인 상세 정보 조회 + * @param paramMap + * @throws Exception + */ + @RequestMapping(value = "/apprDetail" , method = {RequestMethod.POST}) + @ResponseBody + public ApiResponseMessage apprDetail(@RequestBody Map paramMap) throws Exception{ + return sendNumService.apprDetail(paramMap); + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 발송내역 목록 조회 + * @param paramMap + * @throws Exception + */ + @RequestMapping(value = "/insertAppr" , method = {RequestMethod.POST}) + @ResponseBody + public ApiResponseMessage insertAppr(@RequestBody Map paramMap) throws Exception{ + return sendNumService.insertAppr(paramMap); + } +} diff --git a/src/main/java/kr/co/uplus/ez/api/sendNumMgt/SendNumMgtMapper.java b/src/main/java/kr/co/uplus/ez/api/sendNumMgt/SendNumMgtMapper.java index 74376b9..152dbe5 100644 --- a/src/main/java/kr/co/uplus/ez/api/sendNumMgt/SendNumMgtMapper.java +++ b/src/main/java/kr/co/uplus/ez/api/sendNumMgt/SendNumMgtMapper.java @@ -1,8 +1,8 @@ -package kr.co.uplus.ez.api.sendNumMgt; - -import org.apache.ibatis.annotations.Mapper; - -@Mapper -public class SendNumMgtMapper { - -} +package kr.co.uplus.ez.api.sendNumMgt; + +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public class SendNumMgtMapper { + +} diff --git a/src/main/java/kr/co/uplus/ez/api/sendNumMgt/SendNumMgtService.java b/src/main/java/kr/co/uplus/ez/api/sendNumMgt/SendNumMgtService.java index c9f2535..0e886a8 100644 --- a/src/main/java/kr/co/uplus/ez/api/sendNumMgt/SendNumMgtService.java +++ b/src/main/java/kr/co/uplus/ez/api/sendNumMgt/SendNumMgtService.java @@ -1,267 +1,267 @@ -package kr.co.uplus.ez.api.sendNumMgt; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.springframework.stereotype.Service; - -import kr.co.uplus.ez.common.data.ApiResponseCode; -import kr.co.uplus.ez.common.data.ApiResponseMessage; - -@Service -public class SendNumMgtService { - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 발신 프로필 목록 조회 - * @param paramMap - * @return - */ - public ApiResponseMessage profileList(Map paramMap) { - ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); - Map dataObj = new HashMap<>(); - List> dataList = new ArrayList<>(); - Map data = new HashMap<>(); - data.put("totalCnt","999"); - data.put("currentPage","1"); - dataObj.put("paging", data); - - for(int i=0; i<10; i++) { - data = new HashMap<>(); - data.put("no", ""+(i+1)); - data.put("custNm", "유플러스"); - data.put("bRegNo", "229-81-39938"); - data.put("sendProfile", "@유플러스"); - data.put("sendProfileKey", "Ea98cv472cff7f5bdbc90"); - data.put("stat", "사용"); - data.put("regDt", "2022-03-10"); - dataList.add(data); - } - dataObj.put("list", dataList); - result.setData(dataObj); - - return result; - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 문자 발신 번호 목록 조회 - * @param paramMap - * @return - */ - public ApiResponseMessage numberList(Map paramMap) { - ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); - Map dataObj = new HashMap<>(); - List> dataList = new ArrayList<>(); - Map data = new HashMap<>(); - data.put("totalCnt","999"); - data.put("currentPage","1"); - dataObj.put("paging", data); - - for(int i=0; i<10; i++) { - data = new HashMap<>(); - data.put("no", ""+(i+1)); - data.put("custNm", "유플러스"); - data.put("adminId", "Uplus01"); - data.put("register", "Uplus01"); - data.put("bRegNo", "229-81-39938"); - data.put("sendNum", "010-1234-1234"); - data.put("apprStat", "승인완료"); - data.put("regMethod", "본인인등"); - data.put("regDt", "2022-03-10"); - data.put("regNo", "12345"); - dataList.add(data); - } - dataObj.put("list", dataList); - result.setData(dataObj); - - return result; - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 문자 발신 번호 삭제 - * @param paramMap - * @return - */ - public ApiResponseMessage deleteNumber(Map paramMap) { - ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); - return result; - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 문자 발신 번호 등록 - * @param paramMap - * @return - */ - public ApiResponseMessage insertNumber(Map paramMap) { - ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); - return result; - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 문자 발신 번호 정보 상세 조회 - * @param paramMap - * @return - */ - public ApiResponseMessage numberDetail(Map paramMap) { - ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); - Map dataObj = new HashMap<>(); - List> dataList = new ArrayList<>(); - Map data = new HashMap<>(); - dataObj.put("adminId", "Uplus01"); - dataObj.put("custNm", "유플러스"); - dataObj.put("bRegNo", "229-81-39938"); - dataObj.put("authSendNumYn", "Y"); - dataObj.put("authBsnsYn", "Y"); - - for(int i=0; i<10; i++) { - data = new HashMap<>(); - data.put("sendNm", "테스트"+(i+1)); - data.put("sendNum", "02-555-5555"); - dataList.add(data); - } - dataObj.put("list", dataList); - result.setData(dataObj); - - return result; - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 관리자ID 목록 조회 - * @param paramMap - * @return - */ - public ApiResponseMessage adminList(Map paramMap) { - ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); - Map dataObj = new HashMap<>(); - List> dataList = new ArrayList<>(); - Map data = new HashMap<>(); - - data = new HashMap<>(); - data.put("adminId", "Test"); - data.put("bRegNo", "229-81-39938"); - dataList.add(data); - - data = new HashMap<>(); - data.put("adminId", "Test01"); - data.put("bRegNo", "229-81-55555"); - dataList.add(data); - - data = new HashMap<>(); - data.put("adminId", "Test02"); - data.put("bRegNo", "229-81-44444"); - dataList.add(data); - - dataObj.put("list", dataList); - result.setData(dataObj); - return result; - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 발신번호 승인 목록 조회 - * @param paramMap - * @return - */ - public ApiResponseMessage apprList(Map paramMap) { - ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); - Map dataObj = new HashMap<>(); - List> dataList = new ArrayList<>(); - Map data = new HashMap<>(); - data.put("totalCnt","999"); - data.put("currentPage","1"); - dataObj.put("paging", data); - - for(int i=0; i<10; i++) { - data = new HashMap<>(); - data.put("no", ""+(i+1)); - data.put("reqApprDt", "2022-03-03"); - data.put("adminId", "Uplus01"); - data.put("register", "Uplus01"); - data.put("bRegNo", "229-81-39938"); - data.put("reqCnt", "3"); - data.put("apprCnt", "2"); - data.put("returnCnt", "1"); - data.put("apprStat", "처리완료"); - data.put("apprDt", "2022-03-03"); - - dataList.add(data); - } - dataObj.put("list", dataList); - result.setData(dataObj); - - return result; - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 발신번호 승인 상세 정보 조회 - * @param paramMap - * @return - */ - public ApiResponseMessage apprDetail(Map paramMap) { - ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); - Map dataObj = new HashMap<>(); - List> dataList = new ArrayList<>(); - Map data = new HashMap<>(); - dataObj.put("reqApprDt", "2022-03-03"); - dataObj.put("apprDt", "2022-03-03"); - dataObj.put("adminId", "Uplus01"); - dataObj.put("register", "Uplus01"); - dataObj.put("bRegNo", "229-81-39938"); - dataObj.put("returnReason", "반려내용 - 사용거부 번호"); - dataObj.put("authSendNumNms", "통신서비스 가입증명원.jpg"); - dataObj.put("authBsnsNms", "인감증명서.jpg,사업자등록증.jpg"); - - data = new HashMap<>(); - data.put("no", "1"); - data.put("sendNum", "02-1234-5678"); - data.put("apprStat", "반려"); - dataList.add(data); - - data = new HashMap<>(); - data.put("no", "2"); - data.put("sendNum", "070-1234-5678"); - data.put("apprStat", "승인"); - dataList.add(data); - - data = new HashMap<>(); - data.put("no", "3"); - data.put("sendNum", "1588-1677"); - data.put("apprStat", "승인"); - dataList.add(data); - - dataObj.put("list", dataList); - - result.setData(dataObj); - - return result; - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 발송내역 목록 조회 - * @param paramMap - * @return - */ - public ApiResponseMessage insertAppr(Map paramMap) { - ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); - return result; - } - -} +package kr.co.uplus.ez.api.sendNumMgt; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.springframework.stereotype.Service; + +import kr.co.uplus.ez.common.data.ApiResponseCode; +import kr.co.uplus.ez.common.data.ApiResponseMessage; + +@Service +public class SendNumMgtService { + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 발신 프로필 목록 조회 + * @param paramMap + * @return + */ + public ApiResponseMessage profileList(Map paramMap) { + ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); + Map dataObj = new HashMap<>(); + List> dataList = new ArrayList<>(); + Map data = new HashMap<>(); + data.put("totalCnt","999"); + data.put("currentPage","1"); + dataObj.put("paging", data); + + for(int i=0; i<10; i++) { + data = new HashMap<>(); + data.put("no", ""+(i+1)); + data.put("custNm", "유플러스"); + data.put("bRegNo", "229-81-39938"); + data.put("sendProfile", "@유플러스"); + data.put("sendProfileKey", "Ea98cv472cff7f5bdbc90"); + data.put("stat", "사용"); + data.put("regDt", "2022-03-10"); + dataList.add(data); + } + dataObj.put("list", dataList); + result.setData(dataObj); + + return result; + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 문자 발신 번호 목록 조회 + * @param paramMap + * @return + */ + public ApiResponseMessage numberList(Map paramMap) { + ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); + Map dataObj = new HashMap<>(); + List> dataList = new ArrayList<>(); + Map data = new HashMap<>(); + data.put("totalCnt","999"); + data.put("currentPage","1"); + dataObj.put("paging", data); + + for(int i=0; i<10; i++) { + data = new HashMap<>(); + data.put("no", ""+(i+1)); + data.put("custNm", "유플러스"); + data.put("adminId", "Uplus01"); + data.put("register", "Uplus01"); + data.put("bRegNo", "229-81-39938"); + data.put("sendNum", "010-1234-1234"); + data.put("apprStat", "승인완료"); + data.put("regMethod", "본인인등"); + data.put("regDt", "2022-03-10"); + data.put("regNo", "12345"); + dataList.add(data); + } + dataObj.put("list", dataList); + result.setData(dataObj); + + return result; + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 문자 발신 번호 삭제 + * @param paramMap + * @return + */ + public ApiResponseMessage deleteNumber(Map paramMap) { + ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); + return result; + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 문자 발신 번호 등록 + * @param paramMap + * @return + */ + public ApiResponseMessage insertNumber(Map paramMap) { + ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); + return result; + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 문자 발신 번호 정보 상세 조회 + * @param paramMap + * @return + */ + public ApiResponseMessage numberDetail(Map paramMap) { + ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); + Map dataObj = new HashMap<>(); + List> dataList = new ArrayList<>(); + Map data = new HashMap<>(); + dataObj.put("adminId", "Uplus01"); + dataObj.put("custNm", "유플러스"); + dataObj.put("bRegNo", "229-81-39938"); + dataObj.put("authSendNumYn", "Y"); + dataObj.put("authBsnsYn", "Y"); + + for(int i=0; i<10; i++) { + data = new HashMap<>(); + data.put("sendNm", "테스트"+(i+1)); + data.put("sendNum", "02-555-5555"); + dataList.add(data); + } + dataObj.put("list", dataList); + result.setData(dataObj); + + return result; + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 관리자ID 목록 조회 + * @param paramMap + * @return + */ + public ApiResponseMessage adminList(Map paramMap) { + ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); + Map dataObj = new HashMap<>(); + List> dataList = new ArrayList<>(); + Map data = new HashMap<>(); + + data = new HashMap<>(); + data.put("adminId", "Test"); + data.put("bRegNo", "229-81-39938"); + dataList.add(data); + + data = new HashMap<>(); + data.put("adminId", "Test01"); + data.put("bRegNo", "229-81-55555"); + dataList.add(data); + + data = new HashMap<>(); + data.put("adminId", "Test02"); + data.put("bRegNo", "229-81-44444"); + dataList.add(data); + + dataObj.put("list", dataList); + result.setData(dataObj); + return result; + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 발신번호 승인 목록 조회 + * @param paramMap + * @return + */ + public ApiResponseMessage apprList(Map paramMap) { + ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); + Map dataObj = new HashMap<>(); + List> dataList = new ArrayList<>(); + Map data = new HashMap<>(); + data.put("totalCnt","999"); + data.put("currentPage","1"); + dataObj.put("paging", data); + + for(int i=0; i<10; i++) { + data = new HashMap<>(); + data.put("no", ""+(i+1)); + data.put("reqApprDt", "2022-03-03"); + data.put("adminId", "Uplus01"); + data.put("register", "Uplus01"); + data.put("bRegNo", "229-81-39938"); + data.put("reqCnt", "3"); + data.put("apprCnt", "2"); + data.put("returnCnt", "1"); + data.put("apprStat", "처리완료"); + data.put("apprDt", "2022-03-03"); + + dataList.add(data); + } + dataObj.put("list", dataList); + result.setData(dataObj); + + return result; + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 발신번호 승인 상세 정보 조회 + * @param paramMap + * @return + */ + public ApiResponseMessage apprDetail(Map paramMap) { + ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); + Map dataObj = new HashMap<>(); + List> dataList = new ArrayList<>(); + Map data = new HashMap<>(); + dataObj.put("reqApprDt", "2022-03-03"); + dataObj.put("apprDt", "2022-03-03"); + dataObj.put("adminId", "Uplus01"); + dataObj.put("register", "Uplus01"); + dataObj.put("bRegNo", "229-81-39938"); + dataObj.put("returnReason", "반려내용 - 사용거부 번호"); + dataObj.put("authSendNumNms", "통신서비스 가입증명원.jpg"); + dataObj.put("authBsnsNms", "인감증명서.jpg,사업자등록증.jpg"); + + data = new HashMap<>(); + data.put("no", "1"); + data.put("sendNum", "02-1234-5678"); + data.put("apprStat", "반려"); + dataList.add(data); + + data = new HashMap<>(); + data.put("no", "2"); + data.put("sendNum", "070-1234-5678"); + data.put("apprStat", "승인"); + dataList.add(data); + + data = new HashMap<>(); + data.put("no", "3"); + data.put("sendNum", "1588-1677"); + data.put("apprStat", "승인"); + dataList.add(data); + + dataObj.put("list", dataList); + + result.setData(dataObj); + + return result; + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 발송내역 목록 조회 + * @param paramMap + * @return + */ + public ApiResponseMessage insertAppr(Map paramMap) { + ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); + return result; + } + +} diff --git a/src/main/java/kr/co/uplus/ez/api/servMgt/ServMgtController.java b/src/main/java/kr/co/uplus/ez/api/servMgt/ServMgtController.java index d0ac16a..2697930 100644 --- a/src/main/java/kr/co/uplus/ez/api/servMgt/ServMgtController.java +++ b/src/main/java/kr/co/uplus/ez/api/servMgt/ServMgtController.java @@ -1,40 +1,39 @@ -/** - * date : 2022. 4. 25. - * auth : ckr - * desc : 서비스 관리 - */ -package kr.co.uplus.ez.api.servMgt; - -import java.util.Map; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; - -import kr.co.uplus.ez.api.login.LoginService2; -import kr.co.uplus.ez.common.data.ApiResponseMessage; - - -@RestController -@RequestMapping(value = "api/v1/bo/servMgt") -public class ServMgtController { - @Autowired - ServMgtService ServService; - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 080수신거부 목록 조회 - * @param paramMap - * @return - * @throws Exception - */ - @RequestMapping(value = "/rejectRecvList" , method = {RequestMethod.POST}) - @ResponseBody - public ApiResponseMessage rejectRecvList(@RequestBody Map paramMap) throws Exception{ - return ServMgtService.rejectRecvList(paramMap); - } -} +/** + * date : 2022. 4. 25. + * auth : ckr + * desc : 서비스 관리 + */ +package kr.co.uplus.ez.api.servMgt; + +import java.util.Map; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +import kr.co.uplus.ez.common.data.ApiResponseMessage; + + +@RestController +@RequestMapping(value = "api/v1/bo/servMgt") +public class ServMgtController { + @Autowired + ServMgtService ServService; + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 080수신거부 목록 조회 + * @param paramMap + * @return + * @throws Exception + */ + @RequestMapping(value = "/rejectRecvList" , method = {RequestMethod.POST}) + @ResponseBody + public ApiResponseMessage rejectRecvList(@RequestBody Map paramMap) throws Exception{ + return ServMgtService.rejectRecvList(paramMap); + } +} diff --git a/src/main/java/kr/co/uplus/ez/api/servMgt/ServMgtMapper.java b/src/main/java/kr/co/uplus/ez/api/servMgt/ServMgtMapper.java index d40ea06..5b34d8d 100644 --- a/src/main/java/kr/co/uplus/ez/api/servMgt/ServMgtMapper.java +++ b/src/main/java/kr/co/uplus/ez/api/servMgt/ServMgtMapper.java @@ -1,8 +1,8 @@ -package kr.co.uplus.ez.api.servMgt; - -import org.apache.ibatis.annotations.Mapper; - -@Mapper -public class ServMgtMapper { - -} +package kr.co.uplus.ez.api.servMgt; + +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public class ServMgtMapper { + +} diff --git a/src/main/java/kr/co/uplus/ez/api/servMgt/ServMgtService.java b/src/main/java/kr/co/uplus/ez/api/servMgt/ServMgtService.java index 6969b85..60d385a 100644 --- a/src/main/java/kr/co/uplus/ez/api/servMgt/ServMgtService.java +++ b/src/main/java/kr/co/uplus/ez/api/servMgt/ServMgtService.java @@ -1,51 +1,51 @@ -package kr.co.uplus.ez.api.servMgt; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.springframework.stereotype.Service; - -import kr.co.uplus.ez.common.data.ApiResponseCode; -import kr.co.uplus.ez.common.data.ApiResponseMessage; - -@Service -public class ServMgtService { - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 080수신거부 목록 조회 - * @param paramMap - * @return - */ - public static ApiResponseMessage rejectRecvList(Map paramMap) { - ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); - Map dataObj = new HashMap<>(); - List> dataList = new ArrayList<>(); - Map data = new HashMap<>(); - - data.put("totalCnt", "999"); - data.put("currentPage", "1"); - dataObj.put("paging", data); - - for(int i=1; i<10; i++) { - data = new HashMap<>(); - data.put("no", ""+i); - data.put("custNm", "유플러스"); - data.put("bRegNo", "229-81-38889"); - data.put("adminId", "Uplus01"); - data.put("authCd", "12345"); - data.put("useYn", "사용"); - data.put("regDt", "2022-03-10"); - data.put("chgDt", "2022-03-10"); - - dataList.add(data); - } - dataObj.put("list", dataList); - result.setData(dataObj); - return result; - } - -} +package kr.co.uplus.ez.api.servMgt; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.springframework.stereotype.Service; + +import kr.co.uplus.ez.common.data.ApiResponseCode; +import kr.co.uplus.ez.common.data.ApiResponseMessage; + +@Service +public class ServMgtService { + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 080수신거부 목록 조회 + * @param paramMap + * @return + */ + public static ApiResponseMessage rejectRecvList(Map paramMap) { + ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); + Map dataObj = new HashMap<>(); + List> dataList = new ArrayList<>(); + Map data = new HashMap<>(); + + data.put("totalCnt", "999"); + data.put("currentPage", "1"); + dataObj.put("paging", data); + + for(int i=1; i<10; i++) { + data = new HashMap<>(); + data.put("no", ""+i); + data.put("custNm", "유플러스"); + data.put("bRegNo", "229-81-38889"); + data.put("adminId", "Uplus01"); + data.put("authCd", "12345"); + data.put("useYn", "사용"); + data.put("regDt", "2022-03-10"); + data.put("chgDt", "2022-03-10"); + + dataList.add(data); + } + dataObj.put("list", dataList); + result.setData(dataObj); + return result; + } + +} diff --git a/src/main/java/kr/co/uplus/ez/api/stats/StatsController.java b/src/main/java/kr/co/uplus/ez/api/stats/StatsController.java index 496ffa4..d624c33 100644 --- a/src/main/java/kr/co/uplus/ez/api/stats/StatsController.java +++ b/src/main/java/kr/co/uplus/ez/api/stats/StatsController.java @@ -1,130 +1,130 @@ -/** - * date : 2022. 4. 25. - * auth : ckr - * desc : 발송 통계 - */ -package kr.co.uplus.ez.api.stats; - -import java.util.Map; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; - -import kr.co.uplus.ez.common.data.ApiResponseMessage; - -@RestController -@RequestMapping(value = "api/v1/bo/stats") -public class StatsController { - - @Autowired - StatsService statsService; - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 월별 통계 목록 조회 - * @param paramMap - * @throws Exception - */ - @RequestMapping(value = "/monthList" , method = {RequestMethod.POST}) - @ResponseBody - public ApiResponseMessage monthList(@RequestBody Map paramMap) throws Exception{ - return statsService.monthList(paramMap); - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 월별 통계 목록 엑셀 다운로드 - * @param paramMap - * @throws Exception - */ - @RequestMapping(value = "/monthListExcel" , method = {RequestMethod.POST}) - @ResponseBody - public ApiResponseMessage monthListExcel(@RequestBody Map paramMap) throws Exception{ - return statsService.monthListExcel(paramMap); - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 일별 통계 목록 조회 - * @param paramMap - * @throws Exception - */ - @RequestMapping(value = "/dayList" , method = {RequestMethod.POST}) - @ResponseBody - public ApiResponseMessage dayList(@RequestBody Map paramMap) throws Exception{ - return statsService.dayList(paramMap); - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 일별 통계 목록 엑셀 다운로드 - * @param paramMap - * @throws Exception - */ - @RequestMapping(value = "/dayListExcel" , method = {RequestMethod.POST}) - @ResponseBody - public ApiResponseMessage dayListExcel(@RequestBody Map paramMap) throws Exception{ - return statsService.dayListExcel(paramMap); - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 사업자 월별 통계 목록 조회 - * @param paramMap - * @throws Exception - */ - @RequestMapping(value = "/bsnmMonthList" , method = {RequestMethod.POST}) - @ResponseBody - public ApiResponseMessage bsnmMonthList(@RequestBody Map paramMap) throws Exception{ - return statsService.bsnmMonthList(paramMap); - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 사업자 월별 통계 목록 엑셀 다운로드 - * @param paramMap - * @throws Exception - */ - @RequestMapping(value = "/bsnmMonthListExcel" , method = {RequestMethod.POST}) - @ResponseBody - public ApiResponseMessage bsnmMonthListExcel(@RequestBody Map paramMap) throws Exception{ - return statsService.bsnmMonthListExcel(paramMap); - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 사업자 일별 통계 목록 조회 - * @param paramMap - * @throws Exception - */ - @RequestMapping(value = "/bsnmDayList" , method = {RequestMethod.POST}) - @ResponseBody - public ApiResponseMessage bsnmDayList(@RequestBody Map paramMap) throws Exception{ - return statsService.bsnmDayList(paramMap); - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 사업자 일별 통계 목록 엑셀 다운로드 - * @param paramMap - * @throws Exception - */ - @RequestMapping(value = "/bsnmDayListExcel" , method = {RequestMethod.POST}) - @ResponseBody - public ApiResponseMessage bsnmDayListExcel(@RequestBody Map paramMap) throws Exception{ - return statsService.bsnmDayListExcel(paramMap); - } - -} +/** + * date : 2022. 4. 25. + * auth : ckr + * desc : 발송 통계 + */ +package kr.co.uplus.ez.api.stats; + +import java.util.Map; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +import kr.co.uplus.ez.common.data.ApiResponseMessage; + +@RestController +@RequestMapping(value = "api/v1/bo/stats") +public class StatsController { + + @Autowired + StatsService statsService; + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 월별 통계 목록 조회 + * @param paramMap + * @throws Exception + */ + @RequestMapping(value = "/monthList" , method = {RequestMethod.POST}) + @ResponseBody + public ApiResponseMessage monthList(@RequestBody Map paramMap) throws Exception{ + return statsService.monthList(paramMap); + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 월별 통계 목록 엑셀 다운로드 + * @param paramMap + * @throws Exception + */ + @RequestMapping(value = "/monthListExcel" , method = {RequestMethod.POST}) + @ResponseBody + public ApiResponseMessage monthListExcel(@RequestBody Map paramMap) throws Exception{ + return statsService.monthListExcel(paramMap); + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 일별 통계 목록 조회 + * @param paramMap + * @throws Exception + */ + @RequestMapping(value = "/dayList" , method = {RequestMethod.POST}) + @ResponseBody + public ApiResponseMessage dayList(@RequestBody Map paramMap) throws Exception{ + return statsService.dayList(paramMap); + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 일별 통계 목록 엑셀 다운로드 + * @param paramMap + * @throws Exception + */ + @RequestMapping(value = "/dayListExcel" , method = {RequestMethod.POST}) + @ResponseBody + public ApiResponseMessage dayListExcel(@RequestBody Map paramMap) throws Exception{ + return statsService.dayListExcel(paramMap); + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 사업자 월별 통계 목록 조회 + * @param paramMap + * @throws Exception + */ + @RequestMapping(value = "/bsnmMonthList" , method = {RequestMethod.POST}) + @ResponseBody + public ApiResponseMessage bsnmMonthList(@RequestBody Map paramMap) throws Exception{ + return statsService.bsnmMonthList(paramMap); + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 사업자 월별 통계 목록 엑셀 다운로드 + * @param paramMap + * @throws Exception + */ + @RequestMapping(value = "/bsnmMonthListExcel" , method = {RequestMethod.POST}) + @ResponseBody + public ApiResponseMessage bsnmMonthListExcel(@RequestBody Map paramMap) throws Exception{ + return statsService.bsnmMonthListExcel(paramMap); + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 사업자 일별 통계 목록 조회 + * @param paramMap + * @throws Exception + */ + @RequestMapping(value = "/bsnmDayList" , method = {RequestMethod.POST}) + @ResponseBody + public ApiResponseMessage bsnmDayList(@RequestBody Map paramMap) throws Exception{ + return statsService.bsnmDayList(paramMap); + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 사업자 일별 통계 목록 엑셀 다운로드 + * @param paramMap + * @throws Exception + */ + @RequestMapping(value = "/bsnmDayListExcel" , method = {RequestMethod.POST}) + @ResponseBody + public ApiResponseMessage bsnmDayListExcel(@RequestBody Map paramMap) throws Exception{ + return statsService.bsnmDayListExcel(paramMap); + } + +} diff --git a/src/main/java/kr/co/uplus/ez/api/stats/StatsMapper.java b/src/main/java/kr/co/uplus/ez/api/stats/StatsMapper.java index a1d9ed3..2386b76 100644 --- a/src/main/java/kr/co/uplus/ez/api/stats/StatsMapper.java +++ b/src/main/java/kr/co/uplus/ez/api/stats/StatsMapper.java @@ -1,8 +1,8 @@ -package kr.co.uplus.ez.api.stats; - -import org.apache.ibatis.annotations.Mapper; - -@Mapper -public class StatsMapper { - -} +package kr.co.uplus.ez.api.stats; + +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public class StatsMapper { + +} diff --git a/src/main/java/kr/co/uplus/ez/api/stats/StatsService.java b/src/main/java/kr/co/uplus/ez/api/stats/StatsService.java index 2f3c4b7..6f359cb 100644 --- a/src/main/java/kr/co/uplus/ez/api/stats/StatsService.java +++ b/src/main/java/kr/co/uplus/ez/api/stats/StatsService.java @@ -1,304 +1,304 @@ -package kr.co.uplus.ez.api.stats; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.springframework.stereotype.Service; - -import kr.co.uplus.ez.common.data.ApiResponseCode; -import kr.co.uplus.ez.common.data.ApiResponseMessage; - -@Service -public class StatsService { - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 월별 통계 목록 조회 - * @param paramMap - * @return - */ - public ApiResponseMessage monthList(Map paramMap) { - ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); - Map dataObj = new HashMap<>(); - List> dataList = new ArrayList<>(); - Map data = new HashMap<>(); - - for(int i=1; i<=4; i++) { - data = new HashMap<>(); - data.put("date", "2022-0"+i); - data.put("allSendCnt", "40000000"); - data.put("allSuccesCnt", "40000000(100%)"); - data.put("smsSendCnt", "10000000"); - data.put("smsSuccesCnt", "10000000(100%)"); - data.put("lmsSendCnt", "10000000"); - data.put("lmsSuccesCnt", "10000000(100%)"); - data.put("mmsSendCnt", "10000000"); - data.put("mmsSuccesCnt", "10000000(100%)"); - data.put("notiTalkSendCnt", "10000000"); - data.put("notiTalkSuccesCnt", "10000000(100%)"); - - dataList.add(data); - } - dataObj.put("list", dataList); - result.setData(dataObj); - - return result; - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 월별 통계 목록 엑셀 다운로드 - * @param paramMap - * @return - */ - public ApiResponseMessage monthListExcel(Map paramMap) { - ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); - Map dataObj = new HashMap<>(); - List> dataList = new ArrayList<>(); - Map data = new HashMap<>(); - - for(int i=1; i<=4; i++) { - data = new HashMap<>(); - data.put("date", "2022-0"+i); - data.put("allSendCnt", "40000000"); - data.put("allSuccesCnt", "40000000(100%)"); - data.put("smsSendCnt", "10000000"); - data.put("smsSuccesCnt", "10000000(100%)"); - data.put("lmsSendCnt", "10000000"); - data.put("lmsSuccesCnt", "10000000(100%)"); - data.put("mmsSendCnt", "10000000"); - data.put("mmsSuccesCnt", "10000000(100%)"); - data.put("notiTalkSendCnt", "10000000"); - data.put("notiTalkSuccesCnt", "10000000(100%)"); - - dataList.add(data); - } - dataObj.put("list", dataList); - result.setData(dataObj); - - return result; - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 일별 통계 목록 조회 - * @param paramMap - * @return - */ - public ApiResponseMessage dayList(Map paramMap) { - ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); - Map dataObj = new HashMap<>(); - List> dataList = new ArrayList<>(); - Map data = new HashMap<>(); - - for(int i=1; i<=4; i++) { - data = new HashMap<>(); - data.put("date", "2022-03-0"+i); - data.put("allSendCnt", "40000000"); - data.put("allSuccesCnt", "40000000(100%)"); - data.put("smsSendCnt", "10000000"); - data.put("smsSuccesCnt", "10000000(100%)"); - data.put("lmsSendCnt", "10000000"); - data.put("lmsSuccesCnt", "10000000(100%)"); - data.put("mmsSendCnt", "10000000"); - data.put("mmsSuccesCnt", "10000000(100%)"); - data.put("notiTalkSendCnt", "10000000"); - data.put("notiTalkSuccesCnt", "10000000(100%)"); - - dataList.add(data); - } - dataObj.put("list", dataList); - result.setData(dataObj); - - return result; - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 일별 통계 목록 엑셀 다운로드 - * @param paramMap - * @return - */ - public ApiResponseMessage dayListExcel(Map paramMap) { - ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); - Map dataObj = new HashMap<>(); - List> dataList = new ArrayList<>(); - Map data = new HashMap<>(); - - for(int i=1; i<=9; i++) { - data = new HashMap<>(); - data.put("date", "2022-03-0"+i); - data.put("allSendCnt", "40000000"); - data.put("allSuccesCnt", "40000000(100%)"); - data.put("smsSendCnt", "10000000"); - data.put("smsSuccesCnt", "10000000(100%)"); - data.put("lmsSendCnt", "10000000"); - data.put("lmsSuccesCnt", "10000000(100%)"); - data.put("mmsSendCnt", "10000000"); - data.put("mmsSuccesCnt", "10000000(100%)"); - data.put("notiTalkSendCnt", "10000000"); - data.put("notiTalkSuccesCnt", "10000000(100%)"); - - dataList.add(data); - } - dataObj.put("list", dataList); - result.setData(dataObj); - - return result; - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 사업자 월별 통계 목록 조회 - * @param paramMap - * @return - */ - public ApiResponseMessage bsnmMonthList(Map paramMap) { - ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); - Map dataObj = new HashMap<>(); - List> dataList = new ArrayList<>(); - Map data = new HashMap<>(); - - for(int i=1; i<=4; i++) { - data = new HashMap<>(); - data.put("date", "2022-0"+i); - data.put("custNm", "유플러스"); - data.put("bRegNo", "사업자번호"); - data.put("allSendCnt", "40000000"); - data.put("allSuccesCnt", "40000000(100%)"); - data.put("smsSendCnt", "10000000"); - data.put("smsSuccesCnt", "10000000(100%)"); - data.put("lmsSendCnt", "10000000"); - data.put("lmsSuccesCnt", "10000000(100%)"); - data.put("mmsSendCnt", "10000000"); - data.put("mmsSuccesCnt", "10000000(100%)"); - data.put("notiTalkSendCnt", "10000000"); - data.put("notiTalkSuccesCnt", "10000000(100%)"); - - dataList.add(data); - } - dataObj.put("list", dataList); - result.setData(dataObj); - - return result; - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 사업자 월별 통계 목록 엑셀 다운로드 - * @param paramMap - * @return - */ - public ApiResponseMessage bsnmMonthListExcel(Map paramMap) { - ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); - Map dataObj = new HashMap<>(); - List> dataList = new ArrayList<>(); - Map data = new HashMap<>(); - - for(int i=1; i<=4; i++) { - data = new HashMap<>(); - data.put("date", "2022-0"+i); - data.put("custNm", "유플러스"); - data.put("bRegNo", "사업자번호"); - data.put("allSendCnt", "40000000"); - data.put("allSuccesCnt", "40000000(100%)"); - data.put("smsSendCnt", "10000000"); - data.put("smsSuccesCnt", "10000000(100%)"); - data.put("lmsSendCnt", "10000000"); - data.put("lmsSuccesCnt", "10000000(100%)"); - data.put("mmsSendCnt", "10000000"); - data.put("mmsSuccesCnt", "10000000(100%)"); - data.put("notiTalkSendCnt", "10000000"); - data.put("notiTalkSuccesCnt", "10000000(100%)"); - - dataList.add(data); - } - dataObj.put("list", dataList); - result.setData(dataObj); - - return result; - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 사업자 일별 통계 목록 조회 - * @param paramMap - * @return - */ - public ApiResponseMessage bsnmDayList(Map paramMap) { - ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); - Map dataObj = new HashMap<>(); - List> dataList = new ArrayList<>(); - Map data = new HashMap<>(); - - for(int i=1; i<=9; i++) { - data = new HashMap<>(); - data.put("date", "2022-03-0"+i); - data.put("custNm", "유플러스"); - data.put("bRegNo", "사업자번호"); - data.put("allSendCnt", "40000000"); - data.put("allSuccesCnt", "40000000(100%)"); - data.put("smsSendCnt", "10000000"); - data.put("smsSuccesCnt", "10000000(100%)"); - data.put("lmsSendCnt", "10000000"); - data.put("lmsSuccesCnt", "10000000(100%)"); - data.put("mmsSendCnt", "10000000"); - data.put("mmsSuccesCnt", "10000000(100%)"); - data.put("notiTalkSendCnt", "10000000"); - data.put("notiTalkSuccesCnt", "10000000(100%)"); - - dataList.add(data); - } - dataObj.put("list", dataList); - result.setData(dataObj); - - return result; - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 사업자 일별 통계 목록 엑셀 다운로드 - * @param paramMap - * @return - */ - public ApiResponseMessage bsnmDayListExcel(Map paramMap) { - ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); - Map dataObj = new HashMap<>(); - List> dataList = new ArrayList<>(); - Map data = new HashMap<>(); - - for(int i=1; i<=9; i++) { - data = new HashMap<>(); - data.put("date", "2022-03-0"+i); - data.put("custNm", "유플러스"); - data.put("bRegNo", "사업자번호"); - data.put("allSendCnt", "40000000"); - data.put("allSuccesCnt", "40000000(100%)"); - data.put("smsSendCnt", "10000000"); - data.put("smsSuccesCnt", "10000000(100%)"); - data.put("lmsSendCnt", "10000000"); - data.put("lmsSuccesCnt", "10000000(100%)"); - data.put("mmsSendCnt", "10000000"); - data.put("mmsSuccesCnt", "10000000(100%)"); - data.put("notiTalkSendCnt", "10000000"); - data.put("notiTalkSuccesCnt", "10000000(100%)"); - - dataList.add(data); - } - dataObj.put("list", dataList); - result.setData(dataObj); - - return result; - } - -} +package kr.co.uplus.ez.api.stats; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.springframework.stereotype.Service; + +import kr.co.uplus.ez.common.data.ApiResponseCode; +import kr.co.uplus.ez.common.data.ApiResponseMessage; + +@Service +public class StatsService { + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 월별 통계 목록 조회 + * @param paramMap + * @return + */ + public ApiResponseMessage monthList(Map paramMap) { + ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); + Map dataObj = new HashMap<>(); + List> dataList = new ArrayList<>(); + Map data = new HashMap<>(); + + for(int i=1; i<=4; i++) { + data = new HashMap<>(); + data.put("date", "2022-0"+i); + data.put("allSendCnt", "40000000"); + data.put("allSuccesCnt", "40000000(100%)"); + data.put("smsSendCnt", "10000000"); + data.put("smsSuccesCnt", "10000000(100%)"); + data.put("lmsSendCnt", "10000000"); + data.put("lmsSuccesCnt", "10000000(100%)"); + data.put("mmsSendCnt", "10000000"); + data.put("mmsSuccesCnt", "10000000(100%)"); + data.put("notiTalkSendCnt", "10000000"); + data.put("notiTalkSuccesCnt", "10000000(100%)"); + + dataList.add(data); + } + dataObj.put("list", dataList); + result.setData(dataObj); + + return result; + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 월별 통계 목록 엑셀 다운로드 + * @param paramMap + * @return + */ + public ApiResponseMessage monthListExcel(Map paramMap) { + ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); + Map dataObj = new HashMap<>(); + List> dataList = new ArrayList<>(); + Map data = new HashMap<>(); + + for(int i=1; i<=4; i++) { + data = new HashMap<>(); + data.put("date", "2022-0"+i); + data.put("allSendCnt", "40000000"); + data.put("allSuccesCnt", "40000000(100%)"); + data.put("smsSendCnt", "10000000"); + data.put("smsSuccesCnt", "10000000(100%)"); + data.put("lmsSendCnt", "10000000"); + data.put("lmsSuccesCnt", "10000000(100%)"); + data.put("mmsSendCnt", "10000000"); + data.put("mmsSuccesCnt", "10000000(100%)"); + data.put("notiTalkSendCnt", "10000000"); + data.put("notiTalkSuccesCnt", "10000000(100%)"); + + dataList.add(data); + } + dataObj.put("list", dataList); + result.setData(dataObj); + + return result; + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 일별 통계 목록 조회 + * @param paramMap + * @return + */ + public ApiResponseMessage dayList(Map paramMap) { + ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); + Map dataObj = new HashMap<>(); + List> dataList = new ArrayList<>(); + Map data = new HashMap<>(); + + for(int i=1; i<=4; i++) { + data = new HashMap<>(); + data.put("date", "2022-03-0"+i); + data.put("allSendCnt", "40000000"); + data.put("allSuccesCnt", "40000000(100%)"); + data.put("smsSendCnt", "10000000"); + data.put("smsSuccesCnt", "10000000(100%)"); + data.put("lmsSendCnt", "10000000"); + data.put("lmsSuccesCnt", "10000000(100%)"); + data.put("mmsSendCnt", "10000000"); + data.put("mmsSuccesCnt", "10000000(100%)"); + data.put("notiTalkSendCnt", "10000000"); + data.put("notiTalkSuccesCnt", "10000000(100%)"); + + dataList.add(data); + } + dataObj.put("list", dataList); + result.setData(dataObj); + + return result; + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 일별 통계 목록 엑셀 다운로드 + * @param paramMap + * @return + */ + public ApiResponseMessage dayListExcel(Map paramMap) { + ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); + Map dataObj = new HashMap<>(); + List> dataList = new ArrayList<>(); + Map data = new HashMap<>(); + + for(int i=1; i<=9; i++) { + data = new HashMap<>(); + data.put("date", "2022-03-0"+i); + data.put("allSendCnt", "40000000"); + data.put("allSuccesCnt", "40000000(100%)"); + data.put("smsSendCnt", "10000000"); + data.put("smsSuccesCnt", "10000000(100%)"); + data.put("lmsSendCnt", "10000000"); + data.put("lmsSuccesCnt", "10000000(100%)"); + data.put("mmsSendCnt", "10000000"); + data.put("mmsSuccesCnt", "10000000(100%)"); + data.put("notiTalkSendCnt", "10000000"); + data.put("notiTalkSuccesCnt", "10000000(100%)"); + + dataList.add(data); + } + dataObj.put("list", dataList); + result.setData(dataObj); + + return result; + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 사업자 월별 통계 목록 조회 + * @param paramMap + * @return + */ + public ApiResponseMessage bsnmMonthList(Map paramMap) { + ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); + Map dataObj = new HashMap<>(); + List> dataList = new ArrayList<>(); + Map data = new HashMap<>(); + + for(int i=1; i<=4; i++) { + data = new HashMap<>(); + data.put("date", "2022-0"+i); + data.put("custNm", "유플러스"); + data.put("bRegNo", "사업자번호"); + data.put("allSendCnt", "40000000"); + data.put("allSuccesCnt", "40000000(100%)"); + data.put("smsSendCnt", "10000000"); + data.put("smsSuccesCnt", "10000000(100%)"); + data.put("lmsSendCnt", "10000000"); + data.put("lmsSuccesCnt", "10000000(100%)"); + data.put("mmsSendCnt", "10000000"); + data.put("mmsSuccesCnt", "10000000(100%)"); + data.put("notiTalkSendCnt", "10000000"); + data.put("notiTalkSuccesCnt", "10000000(100%)"); + + dataList.add(data); + } + dataObj.put("list", dataList); + result.setData(dataObj); + + return result; + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 사업자 월별 통계 목록 엑셀 다운로드 + * @param paramMap + * @return + */ + public ApiResponseMessage bsnmMonthListExcel(Map paramMap) { + ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); + Map dataObj = new HashMap<>(); + List> dataList = new ArrayList<>(); + Map data = new HashMap<>(); + + for(int i=1; i<=4; i++) { + data = new HashMap<>(); + data.put("date", "2022-0"+i); + data.put("custNm", "유플러스"); + data.put("bRegNo", "사업자번호"); + data.put("allSendCnt", "40000000"); + data.put("allSuccesCnt", "40000000(100%)"); + data.put("smsSendCnt", "10000000"); + data.put("smsSuccesCnt", "10000000(100%)"); + data.put("lmsSendCnt", "10000000"); + data.put("lmsSuccesCnt", "10000000(100%)"); + data.put("mmsSendCnt", "10000000"); + data.put("mmsSuccesCnt", "10000000(100%)"); + data.put("notiTalkSendCnt", "10000000"); + data.put("notiTalkSuccesCnt", "10000000(100%)"); + + dataList.add(data); + } + dataObj.put("list", dataList); + result.setData(dataObj); + + return result; + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 사업자 일별 통계 목록 조회 + * @param paramMap + * @return + */ + public ApiResponseMessage bsnmDayList(Map paramMap) { + ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); + Map dataObj = new HashMap<>(); + List> dataList = new ArrayList<>(); + Map data = new HashMap<>(); + + for(int i=1; i<=9; i++) { + data = new HashMap<>(); + data.put("date", "2022-03-0"+i); + data.put("custNm", "유플러스"); + data.put("bRegNo", "사업자번호"); + data.put("allSendCnt", "40000000"); + data.put("allSuccesCnt", "40000000(100%)"); + data.put("smsSendCnt", "10000000"); + data.put("smsSuccesCnt", "10000000(100%)"); + data.put("lmsSendCnt", "10000000"); + data.put("lmsSuccesCnt", "10000000(100%)"); + data.put("mmsSendCnt", "10000000"); + data.put("mmsSuccesCnt", "10000000(100%)"); + data.put("notiTalkSendCnt", "10000000"); + data.put("notiTalkSuccesCnt", "10000000(100%)"); + + dataList.add(data); + } + dataObj.put("list", dataList); + result.setData(dataObj); + + return result; + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 사업자 일별 통계 목록 엑셀 다운로드 + * @param paramMap + * @return + */ + public ApiResponseMessage bsnmDayListExcel(Map paramMap) { + ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); + Map dataObj = new HashMap<>(); + List> dataList = new ArrayList<>(); + Map data = new HashMap<>(); + + for(int i=1; i<=9; i++) { + data = new HashMap<>(); + data.put("date", "2022-03-0"+i); + data.put("custNm", "유플러스"); + data.put("bRegNo", "사업자번호"); + data.put("allSendCnt", "40000000"); + data.put("allSuccesCnt", "40000000(100%)"); + data.put("smsSendCnt", "10000000"); + data.put("smsSuccesCnt", "10000000(100%)"); + data.put("lmsSendCnt", "10000000"); + data.put("lmsSuccesCnt", "10000000(100%)"); + data.put("mmsSendCnt", "10000000"); + data.put("mmsSuccesCnt", "10000000(100%)"); + data.put("notiTalkSendCnt", "10000000"); + data.put("notiTalkSuccesCnt", "10000000(100%)"); + + dataList.add(data); + } + dataObj.put("list", dataList); + result.setData(dataObj); + + return result; + } + +} diff --git a/src/main/java/kr/co/uplus/ez/api/sysMgt/SysMgtController.java b/src/main/java/kr/co/uplus/ez/api/sysMgt/SysMgtController.java index 48f7cb1..dfc8105 100644 --- a/src/main/java/kr/co/uplus/ez/api/sysMgt/SysMgtController.java +++ b/src/main/java/kr/co/uplus/ez/api/sysMgt/SysMgtController.java @@ -1,182 +1,320 @@ -/** - * date : 2022. 4. 25. - * auth : ckr - * desc : 시스템관리 - */ -package kr.co.uplus.ez.api.sysMgt; - -import java.util.Map; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; - -import kr.co.uplus.ez.common.data.ApiResponseMessage; - - -@RestController -@RequestMapping(value = "api/v1/bo/sysMgt") -public class SysMgtController { - - @Autowired - SysMgtService sysService; - - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 관리자 목록 조회 - * @param paramMap - * @return - * @throws Exception - */ - @RequestMapping(value = "/adminList" , method = {RequestMethod.POST}) - @ResponseBody - public ApiResponseMessage adminList(@RequestBody Map paramMap) throws Exception{ - return sysService.adminList(paramMap); - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 마당ID 조회 - * @param paramMap - * @return - * @throws Exception - */ - @RequestMapping(value = "/searchMadangId" , method = {RequestMethod.POST}) - @ResponseBody - public ApiResponseMessage searchMadangId(@RequestBody Map paramMap) throws Exception{ - return sysService.searchMadangId(paramMap); - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 관리자 등록 - * @param paramMap - * @return - * @throws Exception - */ - @RequestMapping(value = "/insertAdmin" , method = {RequestMethod.POST}) - @ResponseBody - public ApiResponseMessage insertAdmin(@RequestBody Map paramMap) throws Exception{ - return sysService.insertAdmin(paramMap); - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 관리자 수정 - * @param paramMap - * @return - * @throws Exception - */ - @RequestMapping(value = "/updateAdmin" , method = {RequestMethod.POST}) - @ResponseBody - public ApiResponseMessage updateAdmin(@RequestBody Map paramMap) throws Exception{ - return sysService.updateAdmin(paramMap); - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 관리자 삭제 - * @param paramMap - * @return - * @throws Exception - */ - @RequestMapping(value = "/deleteAdmin" , method = {RequestMethod.POST}) - @ResponseBody - public ApiResponseMessage deleteAdmin(@RequestBody Map paramMap) throws Exception{ - return sysService.deleteAdmin(paramMap); - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 관리자 정보 상세 조회 - * @param paramMap - * @return - * @throws Exception - */ - @RequestMapping(value = "/adminDetail" , method = {RequestMethod.POST}) - @ResponseBody - public ApiResponseMessage adminDetail(@RequestBody Map paramMap) throws Exception{ - return sysService.adminDetail(paramMap); - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 권한 목록 조회 - * @param paramMap - * @return - * @throws Exception - */ - @RequestMapping(value = "/authList" , method = {RequestMethod.POST}) - @ResponseBody - public ApiResponseMessage authList(@RequestBody Map paramMap) throws Exception{ - return sysService.authList(paramMap); - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 권한 삭제 - * @param paramMap - * @return - * @throws Exception - */ - @RequestMapping(value = "/deleteAuth" , method = {RequestMethod.POST}) - @ResponseBody - public ApiResponseMessage deleteAuth(@RequestBody Map paramMap) throws Exception{ - return sysService.deleteAuth(paramMap); - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 권한 상세 조회 - * @param paramMap - * @return - * @throws Exception - */ - @RequestMapping(value = "/authDetail" , method = {RequestMethod.POST}) - @ResponseBody - public ApiResponseMessage authDetail(@RequestBody Map paramMap) throws Exception{ - return sysService.authDetail(paramMap); - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 권한 추가 - * @param paramMap - * @return - * @throws Exception - */ - @RequestMapping(value = "/insertAuth" , method = {RequestMethod.POST}) - @ResponseBody - public ApiResponseMessage insertAuth(@RequestBody Map paramMap) throws Exception{ - return sysService.insertAuth(paramMap); - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 권한 수정 - * @param paramMap - * @return - * @throws Exception - */ - @RequestMapping(value = "/updateAuth" , method = {RequestMethod.POST}) - @ResponseBody - public ApiResponseMessage updateAuth(@RequestBody Map paramMap) throws Exception{ - return sysService.updateAuth(paramMap); - } - -} +/** + * date : 2022. 4. 25. + * auth : ckr + * desc : 시스템관리 + */ +package kr.co.uplus.ez.api.sysMgt; + +import java.util.List; +import java.util.Map; + +import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; +import org.springframework.validation.FieldError; +import org.springframework.validation.ObjectError; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiResponse; +import io.swagger.annotations.ApiResponses; +import kr.co.uplus.ez.api.sysMgt.dto.AdminDetailReqDto; +import kr.co.uplus.ez.api.sysMgt.dto.AdminDetailResDto; +import kr.co.uplus.ez.api.sysMgt.dto.AdminListReqDto; +import kr.co.uplus.ez.api.sysMgt.dto.AdminListResDto; +import kr.co.uplus.ez.api.sysMgt.dto.DeleteAdminReqDto; +import kr.co.uplus.ez.api.sysMgt.dto.DeleteAdminResDto; +import kr.co.uplus.ez.api.sysMgt.dto.InsertAdminReqDto; +import kr.co.uplus.ez.api.sysMgt.dto.InsertAdminResDto; +import kr.co.uplus.ez.api.sysMgt.dto.SearchMadangIdReqDto; +import kr.co.uplus.ez.api.sysMgt.dto.SearchMadangIdResDto; +import kr.co.uplus.ez.api.sysMgt.dto.UpdateAdminReqDto; +import kr.co.uplus.ez.api.sysMgt.dto.UpdateAdminResDto; +import kr.co.uplus.ez.common.data.ApiResponseCode; +import kr.co.uplus.ez.common.data.ApiResponseMessage; + + +/** + * 시스템 관리 Controller. + * + * @author rejoice + * + */ +@RestController +@RequestMapping(value = "api/v1/bo/sysMgt") +public class SysMgtController { + + private static final Logger logger = LoggerFactory.getLogger(SysMgtController.class); + + @Autowired + SysMgtService sysService; + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : HUBEZ_BO_API_4001 - 관리자 목록 조회. + * @param adminListReqDto + * @return AdminListResDto + */ + @ApiOperation(value = "adminList", notes = "관리자 목록 조회") + @ApiResponses({ + @ApiResponse(code = HttpServletResponse.SC_OK, message = "SUCESS") + }) + @RequestMapping(value = "adminList" , method = {RequestMethod.POST}) + @ResponseBody + public AdminListResDto adminList(@RequestBody @Valid AdminListReqDto adminListReqDto, BindingResult bindingResult){ + + if(bindingResult.hasErrors()) { + StringBuffer sb = new StringBuffer(); + List objectErrors = bindingResult.getAllErrors(); + + objectErrors.forEach(objectError -> { + FieldError fieldError = (FieldError) objectError; + String field = fieldError.getField(); + String message = fieldError.getDefaultMessage(); + sb.append("field : " + field + "\n"); + sb.append("message : " + message + "\n"); + }); + logger.debug("adminList parm Error : {}", sb.toString()); + return new AdminListResDto(ApiResponseCode.CM_PARAMETER_ERROR); + } + + + return sysService.adminList(adminListReqDto); + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : HUBEZ_BO_API_4001 - 마당ID 조회. + * + * @return SearchMadangIdResDto + */ + @ApiOperation(value = "madangId", notes = "마당ID 조회") + @ApiResponses({ + @ApiResponse(code = HttpServletResponse.SC_OK, message = "SUCESS") + }) + @RequestMapping(value = "madangId" , method = {RequestMethod.POST}) + @ResponseBody + public SearchMadangIdResDto searchMadangId(@RequestBody @Valid SearchMadangIdReqDto searchMadangIdReqDto){ + return sysService.searchMadangId(searchMadangIdReqDto); + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : HUBEZ_BO_API_4003 - 관리자 등록. + * @param insertAdminReqDto + * @return InsertAdminResDto + */ + @ApiOperation(value = "insertAdmin", notes = "관리자 등록") + @ApiResponses({ + @ApiResponse(code = HttpServletResponse.SC_OK, message = "SUCESS") + }) + @RequestMapping(value = "insertAdmin" , method = {RequestMethod.POST}) + @ResponseBody + public InsertAdminResDto insertAdmin(@RequestBody @Valid InsertAdminReqDto insertAdminReqDto, BindingResult bindingResult){ + + if(bindingResult.hasErrors()) { + StringBuffer sb = new StringBuffer(); + List objectErrors = bindingResult.getAllErrors(); + + objectErrors.forEach(objectError -> { + FieldError fieldError = (FieldError) objectError; + String field = fieldError.getField(); + String message = fieldError.getDefaultMessage(); + sb.append("field : " + field + "\n"); + sb.append("message : " + message + "\n"); + }); + logger.debug("insertAdmin parm Error : {}", sb.toString()); + return new InsertAdminResDto(ApiResponseCode.CM_PARAMETER_ERROR); + } + + return sysService.insertAdmin(insertAdminReqDto); + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : HUBEZ_BO_API_4004 - 관리자 수정. + * @param updateAdminReqDto + * @return UpdateAdminResDto + * @ + */ + @ApiOperation(value = "updateAdmin", notes = "관리자 수정") + @ApiResponses({ + @ApiResponse(code = HttpServletResponse.SC_OK, message = "SUCESS") + }) + @RequestMapping(value = "updateAdmin" , method = {RequestMethod.POST}) + @ResponseBody + public UpdateAdminResDto updateAdmin(@RequestBody @Valid UpdateAdminReqDto updateAdminReqDto, BindingResult bindingResult) { + + if(bindingResult.hasErrors()) { + StringBuffer sb = new StringBuffer(); + List objectErrors = bindingResult.getAllErrors(); + + objectErrors.forEach(objectError -> { + FieldError fieldError = (FieldError) objectError; + String field = fieldError.getField(); + String message = fieldError.getDefaultMessage(); + sb.append("field : " + field + "\n"); + sb.append("message : " + message + "\n"); + }); + logger.debug("Error : {}", sb.toString()); + return new UpdateAdminResDto(ApiResponseCode.CM_PARAMETER_ERROR); + } + + return sysService.updateAdmin(updateAdminReqDto); + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : HUBEZ_BO_API_4005 - 관리자 삭제. + * @param deleteAdminReqDto + * @return DeleteAdminResDto + * @ + */ + @ApiOperation(value = "deleteAdmin", notes = "관리자 삭제") + @ApiResponses({ + @ApiResponse(code = HttpServletResponse.SC_OK, message = "SUCESS") + }) + @RequestMapping(value = "deleteAdmin" , method = {RequestMethod.POST}) + @ResponseBody + public DeleteAdminResDto deleteAdmin(@RequestBody @Valid DeleteAdminReqDto deleteAdminReqDto, BindingResult bindingResult) { + + if(bindingResult.hasErrors()) { + StringBuffer sb = new StringBuffer(); + List objectErrors = bindingResult.getAllErrors(); + + objectErrors.forEach(objectError -> { + FieldError fieldError = (FieldError) objectError; + String field = fieldError.getField(); + String message = fieldError.getDefaultMessage(); + sb.append("field : " + field + "\n"); + sb.append("message : " + message + "\n"); + }); + logger.debug("deleteAdmin parm Error : {}", sb.toString()); + return new DeleteAdminResDto(ApiResponseCode.CM_PARAMETER_ERROR); + } + + return sysService.deleteAdmin(deleteAdminReqDto); + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : HUBEZ_BO_API_4006 - 관리자 정보 상세 조회. + * @param adminDetailReqDto + * @return AdminDetailResDto + * @ + */ + @ApiOperation(value = "adminDetail", notes = "관리자 정보 상세 조회") + @ApiResponses({ + @ApiResponse(code = HttpServletResponse.SC_OK, message = "SUCESS") + }) + @RequestMapping(value = "adminDetail" , method = {RequestMethod.POST}) + @ResponseBody + public AdminDetailResDto adminDetail(@RequestBody @Valid AdminDetailReqDto adminDetailReqDto, BindingResult bindingResult) { + + if(bindingResult.hasErrors()) { + StringBuffer sb = new StringBuffer(); + List objectErrors = bindingResult.getAllErrors(); + + objectErrors.forEach(objectError -> { + FieldError fieldError = (FieldError) objectError; + String field = fieldError.getField(); + String message = fieldError.getDefaultMessage(); + sb.append("field : " + field + "\n"); + sb.append("message : " + message + "\n"); + }); + logger.debug("adminDetail parm Error : {}", sb.toString()); + return new AdminDetailResDto(ApiResponseCode.CM_PARAMETER_ERROR); + } + + return sysService.adminDetail(adminDetailReqDto); + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 권한 목록 조회 + * @param paramMap + * @return + * @ + */ + @ApiOperation(value = "authList", notes = "권한 목록 조회") + @ApiResponses({ + @ApiResponse(code = HttpServletResponse.SC_OK, message = "SUCESS") + }) + @RequestMapping(value = "authList" , method = {RequestMethod.POST}) + @ResponseBody + public ApiResponseMessage authList(@RequestBody Map paramMap) { + return sysService.authList(paramMap); + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 권한 삭제 + * @param paramMap + * @return + * @ + */ + @RequestMapping(value = "/deleteAuth" , method = {RequestMethod.POST}) + @ResponseBody + public ApiResponseMessage deleteAuth(@RequestBody Map paramMap) { + return sysService.deleteAuth(paramMap); + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 권한 상세 조회 + * @param paramMap + * @return + * @ + */ + @RequestMapping(value = "/authDetail" , method = {RequestMethod.POST}) + @ResponseBody + public ApiResponseMessage authDetail(@RequestBody Map paramMap) { + return sysService.authDetail(paramMap); + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 권한 추가 + * @param paramMap + * @return + * @ + */ + @RequestMapping(value = "/insertAuth" , method = {RequestMethod.POST}) + @ResponseBody + public ApiResponseMessage insertAuth(@RequestBody Map paramMap) { + return sysService.insertAuth(paramMap); + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 권한 수정 + * @param paramMap + * @return + * @ + */ + @RequestMapping(value = "/updateAuth" , method = {RequestMethod.POST}) + @ResponseBody + public ApiResponseMessage updateAuth(@RequestBody Map paramMap) { + return sysService.updateAuth(paramMap); + } + +} diff --git a/src/main/java/kr/co/uplus/ez/api/sysMgt/SysMgtMapper.java b/src/main/java/kr/co/uplus/ez/api/sysMgt/SysMgtMapper.java index fb68bca..a3d5a52 100644 --- a/src/main/java/kr/co/uplus/ez/api/sysMgt/SysMgtMapper.java +++ b/src/main/java/kr/co/uplus/ez/api/sysMgt/SysMgtMapper.java @@ -1,8 +1,38 @@ -package kr.co.uplus.ez.api.sysMgt; - -import org.apache.ibatis.annotations.Mapper; - -@Mapper -public class SysMgtMapper { - -} +package kr.co.uplus.ez.api.sysMgt; + +import java.util.List; + +import org.apache.ibatis.annotations.Mapper; + +import kr.co.uplus.ez.api.sysMgt.dto.AdminDetail; +import kr.co.uplus.ez.api.sysMgt.dto.AdminDetailReqDto; +import kr.co.uplus.ez.api.sysMgt.dto.AdminInfo; +import kr.co.uplus.ez.api.sysMgt.dto.AdminListReqDto; +import kr.co.uplus.ez.api.sysMgt.dto.DeleteAdmin; +import kr.co.uplus.ez.api.sysMgt.dto.InsertAdminReqDto; +import kr.co.uplus.ez.api.sysMgt.dto.SearchMadangId; +import kr.co.uplus.ez.api.sysMgt.dto.SearchMadangIdReqDto; +import kr.co.uplus.ez.api.sysMgt.dto.UpdateAdminReqDto; + +@Mapper +public interface SysMgtMapper { + + int selectAdmUserTotalCnt(AdminListReqDto adminListReqDto); + + List selectAdminList(AdminListReqDto adminListReqDto); + + void insertAdmUser(InsertAdminReqDto insertAdminReqDto); + + int updateAdmUser(UpdateAdminReqDto updateAdminReqDto); + + void insertMdAcc(InsertAdminReqDto insertAdminReqDto); + + int updateMdAcc(UpdateAdminReqDto updateAdminReqDto); + + AdminDetail selectAdminDetail(AdminDetailReqDto adminDetailReqDto); + + SearchMadangId selectSearchMadangId(SearchMadangIdReqDto searchMadangId); + + int deleteAdminList(List deleteAdmins); + +} diff --git a/src/main/java/kr/co/uplus/ez/api/sysMgt/SysMgtService.java b/src/main/java/kr/co/uplus/ez/api/sysMgt/SysMgtService.java index 7afad9c..1851446 100644 --- a/src/main/java/kr/co/uplus/ez/api/sysMgt/SysMgtService.java +++ b/src/main/java/kr/co/uplus/ez/api/sysMgt/SysMgtService.java @@ -1,250 +1,320 @@ -package kr.co.uplus.ez.api.sysMgt; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.springframework.stereotype.Service; - -import kr.co.uplus.ez.common.data.ApiResponseCode; -import kr.co.uplus.ez.common.data.ApiResponseMessage; - -@Service -public class SysMgtService { - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 관리자 목록 조회 - * @param paramMap - * @return - */ - public ApiResponseMessage adminList(Map paramMap) { - ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); - Map dataObj = new HashMap<>(); - List> dataList = new ArrayList<>(); - Map data = new HashMap<>(); - - data.put("totalCnt", "990"); - data.put("currentPage", "1"); - dataObj.put("paging", data); - - for(int i=1; i<=10; i++) { - data = new HashMap<>(); - data.put("no", ""+i); - data.put("auth", "대리점"); - data.put("name", "유플러스"); - data.put("adminId", "Uplus0"+i); - data.put("adminStat", "사용"); - data.put("regDt", "2022-03-10"); - dataList.add(data); - } - dataObj.put("list", dataList); - - result.setData(dataObj); - - return result; - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 마당ID 조회 - * @param paramMap - * @return - */ - public ApiResponseMessage searchMadangId(Map paramMap) { - ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); - Map data = new HashMap<>(); - - data.put("madangId", "uplus01"); - data.put("name", "홍길동"); - data.put("mdn", "010123455555"); - data.put("email", "abc@abc.com"); - data.put("code", "1234"); - result.setData(data); - - return result; - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 관리자 등록 - * @param paramMap - * @return - */ - public ApiResponseMessage insertAdmin(Map paramMap) { - ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); - return result; - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 관리자 수정 - * @param paramMap - * @return - */ - public ApiResponseMessage updateAdmin(Map paramMap) { - ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); - return result; - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 관리자 삭제 - * @param paramMap - * @return - */ - public ApiResponseMessage deleteAdmin(Map paramMap) { - ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); - return result; - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 관리자 정보 상세 조회 - * @param paramMap - * @return - */ - public ApiResponseMessage adminDetail(Map paramMap) { - ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); - Map data = new HashMap<>(); - - data.put("madangId", "uplus01"); - data.put("name", "홍길동"); - data.put("mdn", "010123455555"); - data.put("email", "abc@abc.com"); - data.put("code", "1234"); - result.setData(data); - - return result; - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 권한 목록 조회 - * @param paramMap - * @return - */ - public ApiResponseMessage authList(Map paramMap) { - ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); - Map dataObj = new HashMap<>(); - List> dataList = new ArrayList<>(); - Map data = new HashMap<>(); - - - data = new HashMap<>(); - data.put("no", "1"); - data.put("authCd", "Admin_01"); - data.put("authNm", "슈퍼관리자"); - data.put("authStat", "사용"); - data.put("regDt", "2022-03-10"); - dataList.add(data); - - data = new HashMap<>(); - data.put("no", "2"); - data.put("authCd", "Admin_02"); - data.put("authNm", "대리점"); - data.put("authStat", "사용"); - data.put("regDt", "2022-03-10"); - dataList.add(data); - - data = new HashMap<>(); - data.put("no", "3"); - data.put("authCd", "Admin_03"); - data.put("authNm", "고객센터"); - data.put("authStat", "사용"); - data.put("regDt", "2022-03-10"); - dataList.add(data); - - data = new HashMap<>(); - data.put("no", "4"); - data.put("authCd", "Admin_04"); - data.put("authNm", "운영자"); - data.put("authStat", "정지"); - data.put("regDt", "2022-03-10"); - dataList.add(data); - - dataObj.put("list", dataList); - - result.setData(dataObj); - - return result; - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 권한 삭제 - * @param paramMap - * @return - */ - public ApiResponseMessage deleteAuth(Map paramMap) { - ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); - return result; - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 권한 상세 조회 - * @param paramMap - * @return - */ - public ApiResponseMessage authDetail(Map paramMap) { - ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); - Map dataObj = new HashMap<>(); - List> dataList = new ArrayList<>(); - Map data; - - dataObj.put("authNm", "운영자"); - dataObj.put("authCd", "Admin_02"); - dataObj.put("authDesc", "운영자 권한"); - dataObj.put("authStat", "Y"); - - for(int i=1; i<=10; i++) { - data = new HashMap<>(); - data.put("upperMenuNo", "1"); - data.put("name", "청약고객관리"+i); - data.put("order", ""+i); - data.put("useYn", "Y"); - data.put("menuLv", "1"); - dataList.add(data); - } - dataObj.put("list", dataList); - result.setData(dataObj); - - return result; - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 권한 추가 - * @param paramMap - * @return - */ - public ApiResponseMessage insertAuth(Map paramMap) { - ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); - return result; - } - - /** - * date : 2022. 4. 25. - * auth : ckr - * desc : 권한 수정 - * @param paramMap - * @return - */ - public ApiResponseMessage updateAuth(Map paramMap) { - ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); - return result; - } - -} +package kr.co.uplus.ez.api.sysMgt; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.commons.lang3.StringUtils; +import org.mybatis.spring.SqlSessionTemplate; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Service; +import org.springframework.validation.BindingResult; +import org.springframework.validation.FieldError; +import org.springframework.validation.ObjectError; + +import kr.co.uplus.ez.api.sysMgt.dto.AdminDetail; +import kr.co.uplus.ez.api.sysMgt.dto.AdminDetailReqDto; +import kr.co.uplus.ez.api.sysMgt.dto.AdminDetailResDto; +import kr.co.uplus.ez.api.sysMgt.dto.AdminInfo; +import kr.co.uplus.ez.api.sysMgt.dto.AdminListReqDto; +import kr.co.uplus.ez.api.sysMgt.dto.AdminListRes; +import kr.co.uplus.ez.api.sysMgt.dto.AdminListResDto; +import kr.co.uplus.ez.api.sysMgt.dto.DeleteAdminReqDto; +import kr.co.uplus.ez.api.sysMgt.dto.DeleteAdminResDto; +import kr.co.uplus.ez.api.sysMgt.dto.InsertAdminReqDto; +import kr.co.uplus.ez.api.sysMgt.dto.InsertAdminResDto; +import kr.co.uplus.ez.api.sysMgt.dto.SearchMadangId; +import kr.co.uplus.ez.api.sysMgt.dto.SearchMadangIdReqDto; +import kr.co.uplus.ez.api.sysMgt.dto.SearchMadangIdResDto; +import kr.co.uplus.ez.api.sysMgt.dto.UpdateAdminReqDto; +import kr.co.uplus.ez.api.sysMgt.dto.UpdateAdminResDto; +import kr.co.uplus.ez.common.data.ApiResponseCode; +import kr.co.uplus.ez.common.data.ApiResponseMessage; +import kr.co.uplus.ez.common.data.Paging; +import kr.co.uplus.ez.common.utils.EncryptionUtil; + +@Service +public class SysMgtService { + + private static final Logger logger = LoggerFactory.getLogger(SysMgtService.class); + + @Autowired + @Qualifier("sqlSessionTemplateDb1") + private SqlSessionTemplate sqlSessionMaster; + + @Autowired + @Qualifier("sqlSessionTemplateDb2") + private SqlSessionTemplate sqlSessionSlave; + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 관리자 목록 조회 + * @param adminListReqDto + * @return AdminListResDto + */ + public AdminListResDto adminList(AdminListReqDto adminListReqDto) { + + SysMgtMapper sysMgtMapper = sqlSessionSlave.getMapper(SysMgtMapper.class); + + String nowPage = String.valueOf(adminListReqDto.getPage()); + int totalCnt = sysMgtMapper.selectAdmUserTotalCnt(adminListReqDto); + + + if(totalCnt == 0) { + Paging paging = new Paging(); + paging.setPage(nowPage); + paging.setTotalCnt(String.valueOf(totalCnt)); + AdminListRes adminListRes = new AdminListRes(); + adminListRes.setList(new ArrayList<>()); + adminListRes.setPaging(paging); + return new AdminListResDto(ApiResponseCode.CM_NOT_FOUND, adminListRes); + } + + int page = adminListReqDto.getPage(); + int pagePerRows = adminListReqDto.getPagePerRows(); + page = (page -1) * pagePerRows; + adminListReqDto.setPage(page); + + List adminInfos = sysMgtMapper.selectAdminList(adminListReqDto); + + Paging paging = new Paging(); + paging.setPage(nowPage); + paging.setTotalCnt(String.valueOf(totalCnt)); + + AdminListRes adminListRes = new AdminListRes(); + adminListRes.setList(adminInfos); + adminListRes.setPaging(paging); + + return new AdminListResDto(ApiResponseCode.SUCCESS, adminListRes); + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 마당ID 조회 + * @return SearchMadangIdResDto + */ + public SearchMadangIdResDto searchMadangId(SearchMadangIdReqDto searchMadangIdReqDto) { + SysMgtMapper sysMgtMapper = sqlSessionSlave.getMapper(SysMgtMapper.class); + + SearchMadangId MadangId = sysMgtMapper.selectSearchMadangId(searchMadangIdReqDto); + + return new SearchMadangIdResDto(ApiResponseCode.SUCCESS, MadangId); + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 관리자 등록 + * @param insertAdminReqDto + * @return InsertAdminResDto + */ + public InsertAdminResDto insertAdmin(InsertAdminReqDto insertAdminReqDto) { + + SysMgtMapper sysMgtMapper = sqlSessionMaster.getMapper(SysMgtMapper.class); + + String encPw = EncryptionUtil.getCustomSHA512(insertAdminReqDto.getMadangId(), insertAdminReqDto.getAdminPw()); + insertAdminReqDto.setAdminPw(encPw); + + try { + sysMgtMapper.insertAdmUser(insertAdminReqDto); + } catch (Exception e) { + return new InsertAdminResDto(ApiResponseCode.CM_DB_QUERY_ERR); + } + + return new InsertAdminResDto(ApiResponseCode.SUCCESS); + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 관리자 수정 + * @param updateAdminReqDto + * @return UpdateAdminResDto + */ + public UpdateAdminResDto updateAdmin(UpdateAdminReqDto updateAdminReqDto) { + SysMgtMapper sysMgtMapper = sqlSessionMaster.getMapper(SysMgtMapper.class); + + if(StringUtils.isNotBlank(updateAdminReqDto.getAdminPw())) { + String encPw = EncryptionUtil.getCustomSHA512(updateAdminReqDto.getAdminId(), updateAdminReqDto.getAdminPw()); + updateAdminReqDto.setAdminPw(encPw); + } + + try { + sysMgtMapper.updateAdmUser(updateAdminReqDto); + } catch (Exception e) { + return new UpdateAdminResDto(ApiResponseCode.CM_DB_QUERY_ERR); + } + + return new UpdateAdminResDto(ApiResponseCode.SUCCESS); + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 관리자 삭제 + * @param deleteAdminReqDto + * @return DeleteAdminResDto + */ + public DeleteAdminResDto deleteAdmin(DeleteAdminReqDto deleteAdminReqDto) { + + SysMgtMapper sysMgtMapper = sqlSessionMaster.getMapper(SysMgtMapper.class); + + try { + int result = sysMgtMapper.deleteAdminList(deleteAdminReqDto.getList()); + + if(result < 1 ) { + return new DeleteAdminResDto(ApiResponseCode.CM_NOT_FOUND); + } + + } catch (Exception e) { + return new DeleteAdminResDto(ApiResponseCode.CM_DB_QUERY_ERR); + } + + DeleteAdminResDto result = new DeleteAdminResDto(ApiResponseCode.SUCCESS); + return result; + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 관리자 정보 상세 조회 + * @param paramMap + * @return + */ + public AdminDetailResDto adminDetail(AdminDetailReqDto adminDetailReqDto) { + SysMgtMapper sysMgtMapper = sqlSessionSlave.getMapper(SysMgtMapper.class); + + AdminDetail adminDetail = sysMgtMapper.selectAdminDetail(adminDetailReqDto); + + return new AdminDetailResDto(ApiResponseCode.SUCCESS, adminDetail); + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 권한 목록 조회 + * @param paramMap + * @return + */ + public ApiResponseMessage authList(Map paramMap) { + ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); + Map dataObj = new HashMap<>(); + List> dataList = new ArrayList<>(); + Map data = new HashMap<>(); + + + data = new HashMap<>(); + data.put("no", "1"); + data.put("authCd", "Admin_01"); + data.put("authNm", "슈퍼관리자"); + data.put("authStat", "사용"); + data.put("regDt", "2022-03-10"); + dataList.add(data); + + data = new HashMap<>(); + data.put("no", "2"); + data.put("authCd", "Admin_02"); + data.put("authNm", "대리점"); + data.put("authStat", "사용"); + data.put("regDt", "2022-03-10"); + dataList.add(data); + + data = new HashMap<>(); + data.put("no", "3"); + data.put("authCd", "Admin_03"); + data.put("authNm", "고객센터"); + data.put("authStat", "사용"); + data.put("regDt", "2022-03-10"); + dataList.add(data); + + data = new HashMap<>(); + data.put("no", "4"); + data.put("authCd", "Admin_04"); + data.put("authNm", "운영자"); + data.put("authStat", "정지"); + data.put("regDt", "2022-03-10"); + dataList.add(data); + + dataObj.put("list", dataList); + + result.setData(dataObj); + + return result; + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 권한 삭제 + * @param paramMap + * @return + */ + public ApiResponseMessage deleteAuth(Map paramMap) { + ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); + return result; + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 권한 상세 조회 + * @param paramMap + * @return + */ + public ApiResponseMessage authDetail(Map paramMap) { + ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); + Map dataObj = new HashMap<>(); + List> dataList = new ArrayList<>(); + Map data; + + dataObj.put("authNm", "운영자"); + dataObj.put("authCd", "Admin_02"); + dataObj.put("authDesc", "운영자 권한"); + dataObj.put("authStat", "Y"); + + for(int i=1; i<=10; i++) { + data = new HashMap<>(); + data.put("upperMenuNo", "1"); + data.put("name", "청약고객관리"+i); + data.put("order", ""+i); + data.put("useYn", "Y"); + data.put("menuLv", "1"); + dataList.add(data); + } + dataObj.put("list", dataList); + result.setData(dataObj); + + return result; + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 권한 추가 + * @param paramMap + * @return + */ + public ApiResponseMessage insertAuth(Map paramMap) { + ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); + return result; + } + + /** + * date : 2022. 4. 25. + * auth : ckr + * desc : 권한 수정 + * @param paramMap + * @return + */ + public ApiResponseMessage updateAuth(Map paramMap) { + ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); + return result; + } + +} diff --git a/src/main/java/kr/co/uplus/ez/api/sysMgt/dto/AdminDetail.java b/src/main/java/kr/co/uplus/ez/api/sysMgt/dto/AdminDetail.java new file mode 100644 index 0000000..ba5e43e --- /dev/null +++ b/src/main/java/kr/co/uplus/ez/api/sysMgt/dto/AdminDetail.java @@ -0,0 +1,27 @@ +package kr.co.uplus.ez.api.sysMgt.dto; + +import java.io.Serializable; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@SuppressWarnings("serial") +@Data +public class AdminDetail implements Serializable { + + @ApiModelProperty(example = "리스트번호", name = "리스트번호", dataType = "String") + private String adminId; + @ApiModelProperty(example = "관리자/유치채널 이름(대리점명)", name = "관리자/유치채널 이름(대리점명)", dataType = "String") + private String name; + @ApiModelProperty(example = "휴대폰번호", name = "휴대폰번호", dataType = "String") + private String mdn; + @ApiModelProperty(example = "이메일", name = "이메일", dataType = "String") + private String email; + @ApiModelProperty(example = "관리자/유치채널 권한", name = "관리자/유치채널 권한", dataType = "String") + private String auth; + @ApiModelProperty(example = "상태", name = "상태", dataType = "String") + private String stat; + @ApiModelProperty(example = "코드", name = "코드", notes = "Y:사용/ N:정지", dataType = "String") + private String code; + +} \ No newline at end of file diff --git a/src/main/java/kr/co/uplus/ez/api/sysMgt/dto/AdminDetailReqDto.java b/src/main/java/kr/co/uplus/ez/api/sysMgt/dto/AdminDetailReqDto.java new file mode 100644 index 0000000..61d3250 --- /dev/null +++ b/src/main/java/kr/co/uplus/ez/api/sysMgt/dto/AdminDetailReqDto.java @@ -0,0 +1,15 @@ +package kr.co.uplus.ez.api.sysMgt.dto; + +import java.io.Serializable; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@SuppressWarnings("serial") +@Data +public class AdminDetailReqDto implements Serializable { + + @ApiModelProperty(example = "관리자/유치채널 Id", name = "관리자/유치채널 Id", dataType = "String") + private String adminId; + +} \ No newline at end of file diff --git a/src/main/java/kr/co/uplus/ez/api/sysMgt/dto/AdminDetailResDto.java b/src/main/java/kr/co/uplus/ez/api/sysMgt/dto/AdminDetailResDto.java new file mode 100644 index 0000000..0bb4ccf --- /dev/null +++ b/src/main/java/kr/co/uplus/ez/api/sysMgt/dto/AdminDetailResDto.java @@ -0,0 +1,31 @@ +package kr.co.uplus.ez.api.sysMgt.dto; + +import java.io.Serializable; + +import kr.co.uplus.ez.common.data.ApiResponseCode; +import kr.co.uplus.ez.common.data.ResponseMessage; +import lombok.Data; + +@SuppressWarnings("serial") +@Data +public class AdminDetailResDto extends ResponseMessage implements Serializable{ + + // 데이터. + private AdminDetail data; + + public AdminDetailResDto() { + this.retCode = ApiResponseCode.SUCCESS.getResultCode(); + this.retMsg = ApiResponseCode.SUCCESS.getResultMsg(); + } + + public AdminDetailResDto(ApiResponseCode returnStr) { + this.retCode = returnStr.getResultCode(); + this.retMsg = returnStr.getResultMsg(); + } + + public AdminDetailResDto(ApiResponseCode returnStr, AdminDetail data) { + this.retCode = returnStr.getResultCode(); + this.retMsg = returnStr.getResultMsg(); + this.data = data; + } +} \ No newline at end of file diff --git a/src/main/java/kr/co/uplus/ez/api/sysMgt/dto/AdminInfo.java b/src/main/java/kr/co/uplus/ez/api/sysMgt/dto/AdminInfo.java new file mode 100644 index 0000000..9bd0f4d --- /dev/null +++ b/src/main/java/kr/co/uplus/ez/api/sysMgt/dto/AdminInfo.java @@ -0,0 +1,25 @@ +package kr.co.uplus.ez.api.sysMgt.dto; + +import java.io.Serializable; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@SuppressWarnings("serial") +@Data +public class AdminInfo implements Serializable { + + @ApiModelProperty(example = "리스트번호", name = "리스트번호", dataType = "String") + private String no; + @ApiModelProperty(example = "관리자/유치채널 권한", name = "관리자/유치채널 권한", dataType = "String") + private String auth; + @ApiModelProperty(example = "관리자/유치채널 이름(대리점명)", name = "관리자/유치채널 이름(대리점명)", dataType = "String") + private String name; + @ApiModelProperty(example = "관리자/유치채널 ID", name = "관리자/유치채널 ID", dataType = "String") + private String adminId; + @ApiModelProperty(example = "관리자/유치채널 상태", name = "관리자/유치채널 상태", notes = "01:사용/ 02:중지", dataType = "String") + private String adminStat; + @ApiModelProperty(example = "등록일", name = "등록일", notes = "YYYY-MM-DD", dataType = "String") + private String regDt; + +} \ No newline at end of file diff --git a/src/main/java/kr/co/uplus/ez/api/sysMgt/dto/AdminListReqDto.java b/src/main/java/kr/co/uplus/ez/api/sysMgt/dto/AdminListReqDto.java new file mode 100644 index 0000000..6fbaa16 --- /dev/null +++ b/src/main/java/kr/co/uplus/ez/api/sysMgt/dto/AdminListReqDto.java @@ -0,0 +1,31 @@ +package kr.co.uplus.ez.api.sysMgt.dto; + +import java.io.Serializable; + +import javax.validation.constraints.NotNull; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@SuppressWarnings("serial") +@Data +public class AdminListReqDto implements Serializable { + + @ApiModelProperty(example = "권한", name = "권한", dataType = "String") + private String searchType1; + @ApiModelProperty(example = "상태", name = "상태", notes = "항목 : 전체(Default)/사용/중지", dataType = "String") + private String searchType2; + @ApiModelProperty(example = "검색어(입력)", name = "검색어(입력)", notes = "관리자ID/ 유치채널ID", dataType = "String") + private String searchText1; + @ApiModelProperty(example = "이름(대리점명)", name = "이름(대리점명)", dataType = "String") + private String searchText2; + + @NotNull + @ApiModelProperty(example = "페이지당 조회할 목록 수",notes = "페이지당 조회할 목록 수", name = "페이지당 조회할 목록 수", dataType = "int") + private int pagePerRows; + + @NotNull + @ApiModelProperty(example = "현재 페이지", name = "현재 페이지", dataType = "int") + private int page; + +} \ No newline at end of file diff --git a/src/main/java/kr/co/uplus/ez/api/sysMgt/dto/AdminListRes.java b/src/main/java/kr/co/uplus/ez/api/sysMgt/dto/AdminListRes.java new file mode 100644 index 0000000..03f8d94 --- /dev/null +++ b/src/main/java/kr/co/uplus/ez/api/sysMgt/dto/AdminListRes.java @@ -0,0 +1,15 @@ +package kr.co.uplus.ez.api.sysMgt.dto; + +import java.io.Serializable; +import java.util.List; + +import kr.co.uplus.ez.common.data.Paging; +import lombok.Data; + +@SuppressWarnings("serial") +@Data +public class AdminListRes implements Serializable{ + + private Paging paging; + private List list; +} diff --git a/src/main/java/kr/co/uplus/ez/api/sysMgt/dto/AdminListResDto.java b/src/main/java/kr/co/uplus/ez/api/sysMgt/dto/AdminListResDto.java new file mode 100644 index 0000000..1677511 --- /dev/null +++ b/src/main/java/kr/co/uplus/ez/api/sysMgt/dto/AdminListResDto.java @@ -0,0 +1,31 @@ +package kr.co.uplus.ez.api.sysMgt.dto; + +import java.io.Serializable; + +import kr.co.uplus.ez.common.data.ApiResponseCode; +import kr.co.uplus.ez.common.data.ResponseMessage; +import lombok.Data; + +@SuppressWarnings("serial") +@Data +public class AdminListResDto extends ResponseMessage implements Serializable{ + + // 데이터. + private AdminListRes data; + + public AdminListResDto() { + this.retCode = ApiResponseCode.SUCCESS.getResultCode(); + this.retMsg = ApiResponseCode.SUCCESS.getResultMsg(); + } + + public AdminListResDto(ApiResponseCode returnStr) { + this.retCode = returnStr.getResultCode(); + this.retMsg = returnStr.getResultMsg(); + } + + public AdminListResDto(ApiResponseCode returnStr, AdminListRes data) { + this.retCode = returnStr.getResultCode(); + this.retMsg = returnStr.getResultMsg(); + this.data = data; + } +} \ No newline at end of file diff --git a/src/main/java/kr/co/uplus/ez/api/sysMgt/dto/DeleteAdmin.java b/src/main/java/kr/co/uplus/ez/api/sysMgt/dto/DeleteAdmin.java new file mode 100644 index 0000000..63e852e --- /dev/null +++ b/src/main/java/kr/co/uplus/ez/api/sysMgt/dto/DeleteAdmin.java @@ -0,0 +1,18 @@ +package kr.co.uplus.ez.api.sysMgt.dto; + +import java.io.Serializable; + +import javax.validation.constraints.NotNull; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@SuppressWarnings("serial") +@Data +public class DeleteAdmin implements Serializable { + + @NotNull + @ApiModelProperty(example = "관리자/유치채널 ID", name = "관리자/유치채널 ID", dataType = "String") + private String adminId; + +} \ No newline at end of file diff --git a/src/main/java/kr/co/uplus/ez/api/sysMgt/dto/DeleteAdminReqDto.java b/src/main/java/kr/co/uplus/ez/api/sysMgt/dto/DeleteAdminReqDto.java new file mode 100644 index 0000000..0b04c8f --- /dev/null +++ b/src/main/java/kr/co/uplus/ez/api/sysMgt/dto/DeleteAdminReqDto.java @@ -0,0 +1,15 @@ +package kr.co.uplus.ez.api.sysMgt.dto; + +import java.io.Serializable; +import java.util.List; + +import lombok.Data; + +@SuppressWarnings("serial") +@Data +public class DeleteAdminReqDto implements Serializable { + + // 삭제 대상 List. + private List list; + +} \ No newline at end of file diff --git a/src/main/java/kr/co/uplus/ez/api/sysMgt/dto/DeleteAdminResDto.java b/src/main/java/kr/co/uplus/ez/api/sysMgt/dto/DeleteAdminResDto.java new file mode 100644 index 0000000..1fa6f37 --- /dev/null +++ b/src/main/java/kr/co/uplus/ez/api/sysMgt/dto/DeleteAdminResDto.java @@ -0,0 +1,31 @@ +package kr.co.uplus.ez.api.sysMgt.dto; + +import java.io.Serializable; + +import kr.co.uplus.ez.common.data.ApiResponseCode; +import kr.co.uplus.ez.common.data.ResponseMessage; +import lombok.Data; + +@SuppressWarnings("serial") +@Data +public class DeleteAdminResDto extends ResponseMessage implements Serializable{ + + // 데이터. + private Object data; + + public DeleteAdminResDto() { + this.retCode = ApiResponseCode.SUCCESS.getResultCode(); + this.retMsg = ApiResponseCode.SUCCESS.getResultMsg(); + } + + public DeleteAdminResDto(ApiResponseCode returnStr) { + this.retCode = returnStr.getResultCode(); + this.retMsg = returnStr.getResultMsg(); + } + + public DeleteAdminResDto(ApiResponseCode returnStr, Object data) { + this.retCode = returnStr.getResultCode(); + this.retMsg = returnStr.getResultMsg(); + this.data = data; + } +} \ No newline at end of file diff --git a/src/main/java/kr/co/uplus/ez/api/sysMgt/dto/InsertAdminReqDto.java b/src/main/java/kr/co/uplus/ez/api/sysMgt/dto/InsertAdminReqDto.java new file mode 100644 index 0000000..2e5041a --- /dev/null +++ b/src/main/java/kr/co/uplus/ez/api/sysMgt/dto/InsertAdminReqDto.java @@ -0,0 +1,44 @@ +package kr.co.uplus.ez.api.sysMgt.dto; + +import java.io.Serializable; + +import javax.validation.constraints.NotNull; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@SuppressWarnings("serial") +@Data +public class InsertAdminReqDto implements Serializable { + + @NotNull + @ApiModelProperty(example = "마당ID", name = "마당ID", dataType = "String") + private String madangId; + + @NotNull + @ApiModelProperty(example = "비밀번호", name = "비밀번호", notes = "관리자일때 비밀번호 필수", dataType = "String") + private String adminPw; + + @NotNull + @ApiModelProperty(example = "이름/ 이름(대리점명)", name = "이름/ 이름(대리점명)", dataType = "String") + private String name; + + @NotNull + @ApiModelProperty(example = "휴대폰번호", name = "휴대폰번호", dataType = "String") + private String mdn; + + @NotNull + @ApiModelProperty(example = "Email", name = "Email", dataType = "String") + private String email; + + @NotNull + @ApiModelProperty(example = "권한", name = "권한", dataType = "String") + private String auth; + + @NotNull + @ApiModelProperty(example = "상태", name = "상태", notes = "Y(사용)/N(정지)", dataType = "String") + private String stat; + @ApiModelProperty(example = "유치 채널 코드", name = "코드", dataType = "String") + private String code; + +} \ No newline at end of file diff --git a/src/main/java/kr/co/uplus/ez/api/sysMgt/dto/InsertAdminResDto.java b/src/main/java/kr/co/uplus/ez/api/sysMgt/dto/InsertAdminResDto.java new file mode 100644 index 0000000..1464599 --- /dev/null +++ b/src/main/java/kr/co/uplus/ez/api/sysMgt/dto/InsertAdminResDto.java @@ -0,0 +1,33 @@ +package kr.co.uplus.ez.api.sysMgt.dto; + +import java.io.Serializable; + +import kr.co.uplus.ez.common.data.ApiResponseCode; +import kr.co.uplus.ez.common.data.ResponseMessage; +import lombok.Data; + +@SuppressWarnings("serial") +@Data +public class InsertAdminResDto extends ResponseMessage implements Serializable { + + // 데이터. + private Object data; + + public InsertAdminResDto() { + this.retCode = ApiResponseCode.SUCCESS.getResultCode(); + this.retMsg = ApiResponseCode.SUCCESS.getResultMsg(); + } + + public InsertAdminResDto(ApiResponseCode returnStr) { + this.retCode = returnStr.getResultCode(); + this.retMsg = returnStr.getResultMsg(); + } + + public InsertAdminResDto(ApiResponseCode returnStr, Object data) { + this.retCode = returnStr.getResultCode(); + this.retMsg = returnStr.getResultMsg(); + this.data = data; + } + + +} \ No newline at end of file diff --git a/src/main/java/kr/co/uplus/ez/api/sysMgt/dto/SearchMadangId.java b/src/main/java/kr/co/uplus/ez/api/sysMgt/dto/SearchMadangId.java new file mode 100644 index 0000000..018695c --- /dev/null +++ b/src/main/java/kr/co/uplus/ez/api/sysMgt/dto/SearchMadangId.java @@ -0,0 +1,23 @@ +package kr.co.uplus.ez.api.sysMgt.dto; + +import java.io.Serializable; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@SuppressWarnings("serial") +@Data +public class SearchMadangId implements Serializable { + + @ApiModelProperty(example = "마당ID", name = "마당ID", dataType = "String") + private String madangId; + @ApiModelProperty(example = "관리자/유치채널 이름(대리점명)", name = "관리자/유치채널 이름(대리점명)", dataType = "String") + private String name; + @ApiModelProperty(example = "휴대폰번호", name = "휴대폰번호", dataType = "String") + private String mdn; + @ApiModelProperty(example = "이메일", name = "이메일", dataType = "String") + private String email; + @ApiModelProperty(example = "코드", name = "코드", dataType = "String") + private String code; + +} \ No newline at end of file diff --git a/src/main/java/kr/co/uplus/ez/api/sysMgt/dto/SearchMadangIdReqDto.java b/src/main/java/kr/co/uplus/ez/api/sysMgt/dto/SearchMadangIdReqDto.java new file mode 100644 index 0000000..a83aa21 --- /dev/null +++ b/src/main/java/kr/co/uplus/ez/api/sysMgt/dto/SearchMadangIdReqDto.java @@ -0,0 +1,14 @@ +package kr.co.uplus.ez.api.sysMgt.dto; + +import java.io.Serializable; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@SuppressWarnings("serial") +@Data +public class SearchMadangIdReqDto implements Serializable{ + + @ApiModelProperty(example = "마당ID", name = "마당ID", dataType = "String") + private String madangId; +} diff --git a/src/main/java/kr/co/uplus/ez/api/sysMgt/dto/SearchMadangIdResDto.java b/src/main/java/kr/co/uplus/ez/api/sysMgt/dto/SearchMadangIdResDto.java new file mode 100644 index 0000000..4e5d0d4 --- /dev/null +++ b/src/main/java/kr/co/uplus/ez/api/sysMgt/dto/SearchMadangIdResDto.java @@ -0,0 +1,31 @@ +package kr.co.uplus.ez.api.sysMgt.dto; + +import java.io.Serializable; + +import kr.co.uplus.ez.common.data.ApiResponseCode; +import kr.co.uplus.ez.common.data.ResponseMessage; +import lombok.Data; + +@SuppressWarnings("serial") +@Data +public class SearchMadangIdResDto extends ResponseMessage implements Serializable{ + + // 데이터. + private SearchMadangId data; + + public SearchMadangIdResDto() { + this.retCode = ApiResponseCode.SUCCESS.getResultCode(); + this.retMsg = ApiResponseCode.SUCCESS.getResultMsg(); + } + + public SearchMadangIdResDto(ApiResponseCode returnStr) { + this.retCode = returnStr.getResultCode(); + this.retMsg = returnStr.getResultMsg(); + } + + public SearchMadangIdResDto(ApiResponseCode returnStr, SearchMadangId data) { + this.retCode = returnStr.getResultCode(); + this.retMsg = returnStr.getResultMsg(); + this.data = data; + } +} \ No newline at end of file diff --git a/src/main/java/kr/co/uplus/ez/api/sysMgt/dto/UpdateAdminReqDto.java b/src/main/java/kr/co/uplus/ez/api/sysMgt/dto/UpdateAdminReqDto.java new file mode 100644 index 0000000..f2ef6a8 --- /dev/null +++ b/src/main/java/kr/co/uplus/ez/api/sysMgt/dto/UpdateAdminReqDto.java @@ -0,0 +1,27 @@ +package kr.co.uplus.ez.api.sysMgt.dto; + +import java.io.Serializable; + +import javax.validation.constraints.NotNull; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@SuppressWarnings("serial") +@Data +public class UpdateAdminReqDto implements Serializable { + + @NotNull + @ApiModelProperty(example = "관리자/유치채널 Id", name = "관리자/유치채널 Id", dataType = "String") + private String adminId; + + @ApiModelProperty(example = "비밀번호", name = "비밀번호", notes = "관리자일때 비밀번호 필수", dataType = "String") + private String adminPw; + + @ApiModelProperty(example = "권한", name = "권한", dataType = "String") + private String auth; + + @ApiModelProperty(example = "상태", name = "상태", notes = "Y(사용)/N(정지)", dataType = "String") + private String stat; + +} \ No newline at end of file diff --git a/src/main/java/kr/co/uplus/ez/api/sysMgt/dto/UpdateAdminResDto.java b/src/main/java/kr/co/uplus/ez/api/sysMgt/dto/UpdateAdminResDto.java new file mode 100644 index 0000000..32081a9 --- /dev/null +++ b/src/main/java/kr/co/uplus/ez/api/sysMgt/dto/UpdateAdminResDto.java @@ -0,0 +1,31 @@ +package kr.co.uplus.ez.api.sysMgt.dto; + +import java.io.Serializable; + +import kr.co.uplus.ez.common.data.ApiResponseCode; +import kr.co.uplus.ez.common.data.ResponseMessage; +import lombok.Data; + +@SuppressWarnings("serial") +@Data +public class UpdateAdminResDto extends ResponseMessage implements Serializable{ + + // 데이터. + private Object data; + + public UpdateAdminResDto() { + this.retCode = ApiResponseCode.SUCCESS.getResultCode(); + this.retMsg = ApiResponseCode.SUCCESS.getResultMsg(); + } + + public UpdateAdminResDto(ApiResponseCode returnStr) { + this.retCode = returnStr.getResultCode(); + this.retMsg = returnStr.getResultMsg(); + } + + public UpdateAdminResDto(ApiResponseCode returnStr, Object data) { + this.retCode = returnStr.getResultCode(); + this.retMsg = returnStr.getResultMsg(); + this.data = data; + } +} \ No newline at end of file diff --git a/src/main/java/kr/co/uplus/ez/api/user/UserService.java b/src/main/java/kr/co/uplus/ez/api/user/UserService.java deleted file mode 100644 index 26b1487..0000000 --- a/src/main/java/kr/co/uplus/ez/api/user/UserService.java +++ /dev/null @@ -1,130 +0,0 @@ -package kr.co.uplus.ez.api.user; -//package kr.co.uplus.hub.api.user; -// -//import java.util.List; -// -//import org.springframework.beans.factory.annotation.Autowired; -//import org.springframework.security.crypto.password.PasswordEncoder; -//import org.springframework.stereotype.Service; -//import org.springframework.transaction.annotation.Transactional; -// -//import com.lguplus.rcs.webtpl.api.sys.log.work.Work; -//import com.lguplus.rcs.webtpl.api.sys.log.work.WorkService; -// -//import kr.co.uplus.hub.common.auth.UserPassword; -//import kr.co.uplus.hub.common.consts.ResultCode; -//import kr.co.uplus.hub.common.utils.SpringUtils; -// -//@Service -//@Transactional -//public class UserService { -// -// @Autowired -// private UserDao dao; -// -// @Autowired -// private WorkService workService; -// @Autowired -// private PasswordEncoder pwdEncoder; -// -// public int selectUserListCnt(User user) { -// System.out.println("user --> "+user.toString()); -// return dao.selectUserListCnt(user); -// } -// -// public List selectUserList(User user) { -// return dao.selectUserList(user); -// } -// -// public User getUser(User user) { -// List userList = selectUserList(user); -// if (userList.size() > 0) { -// return userList.get(0); -// } -// return null; -// } -// -// public Integer insertUser(User user, Work work) { -// int success = dao.insertUser(user); -// if (success > 0) { -// success = dao.insertUserRole(user); -// } -// if(SpringUtils.getCurrentUser() != null) { -// if (success > 0) { -// workService.insertUserCreateWorkLog(work); -// } -// } -// return success; -// } -// -// public Integer updateUser(User user, Work work) { -// int success = dao.updateUser(user); -// if (success > 0) { -// success = dao.updateUserRole(user); -// } -// if (success > 0) { -// workService.insertUserUpdateWorkLog(work); -// } -// return success; -// } -// -// public Integer deleteUser(List users) { -// return dao.deleteUser(users); -// } -// -// public User selectUser(String userId) { -// User user = new User(); -// user.setUserId(userId); -// return getUser(user); -// } -// -// public String selectUserPwd(String userId) { -// return dao.selectUserPwd(userId); -// } -// -// public List selectLastPwds(String userId) { -// return dao.selectLastPwds(userId); -// } -// -// public Integer updateUserPwd(UserPassword pass) { -// dao.updateUserPwd(pass); -// return dao.insertUserPwdHist(pass); -// } -// -// public User isInvldUserId(User user) { -// return dao.isInvldUserId(user); -// } -// -// public ResultCode changePassword(UserPassword pass) { -// String userId = pass.getUserId(); -// String dbPwd = selectUserPwd(userId); -// -// if (pass.getCurPwd() != null && !pwdEncoder.matches(pass.getCurPwd(), dbPwd)) { -// return ResultCode.CE_WRONG_PWD; -// } -// -// String newPwd = pass.getNewPwd(); -// List lastPwds = selectLastPwds(userId); -// lastPwds.add(dbPwd); -// boolean reuse = lastPwds.stream().anyMatch(s -> pwdEncoder.matches(newPwd, s)); -// -// if (reuse) { -// return ResultCode.CE_USED_PWD; -// } -// -// UserPassword encPass = new UserPassword(); -// encPass.setUserId(userId); -// encPass.setCurPwd(dbPwd); -// encPass.setNewPwd(pwdEncoder.encode(newPwd)); -// encPass.setRegUserId(userId); -// updateUserPwd(encPass); -// -// return ResultCode.SUCCESS; -// -// } -// -// public boolean aleadyExistId(User user) { -// return dao.aleadyExistId(user) > 0; -// } -// -//} diff --git a/src/main/java/kr/co/uplus/ez/common/auth/AccessMapping.java b/src/main/java/kr/co/uplus/ez/common/auth/AccessMapping.java deleted file mode 100644 index d852801..0000000 --- a/src/main/java/kr/co/uplus/ez/common/auth/AccessMapping.java +++ /dev/null @@ -1,35 +0,0 @@ -package kr.co.uplus.ez.common.auth; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -/** - * 권한에 따른 URI 접근제어용 어노테이션. - * menu()는 클래스 레벨 또는 메서드 레벨 중 하나에선 반드시 설정해야 한다. - */ -@Target({ElementType.METHOD, ElementType.TYPE}) -@Retention(RetentionPolicy.RUNTIME) -public @interface AccessMapping { - /** - * 대상 API URI가 소속된 메뉴 URI. - * RCS_MENU 테이블의 URL 컬럼 값으로 설정해야 한다. - * 클래스 레벨에 설정하면 모든 메서드에 대해 접근권한을 검사한다. - * 메서드 레벨 설정이 클래스 레벨 설정보다 우선한다(덮어쓴다). - */ - String menu() default ""; - - /** - * 편집 허용여부를 체크해야 하는 URI면 true, 아니면 false. - * 메서드 레벨 설정 전용. - */ - boolean edit() default false; - - /** - * true면 접근권한을 검사하지 않음. - * 클래스 레벨 설정을 메서드 레벨 설정에서 무효화하기 위해 사용한다. - * 메서드 레벨 설정 전용. - */ - boolean skip() default false; -} diff --git a/src/main/java/kr/co/uplus/ez/common/auth/AuthController.java b/src/main/java/kr/co/uplus/ez/common/auth/AuthController.java deleted file mode 100644 index 0ac6872..0000000 --- a/src/main/java/kr/co/uplus/ez/common/auth/AuthController.java +++ /dev/null @@ -1,260 +0,0 @@ -package kr.co.uplus.ez.common.auth; - -import java.util.HashMap; -import java.util.Map; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.security.authentication.AuthenticationManager; -import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; -import org.springframework.security.core.Authentication; -import org.springframework.security.core.AuthenticationException; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.security.web.authentication.logout.SecurityContextLogoutHandler; -import org.springframework.security.web.savedrequest.HttpSessionRequestCache; -import org.springframework.security.web.savedrequest.RequestCache; -import org.springframework.security.web.savedrequest.SavedRequest; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; - -import kr.co.uplus.ez.common.auth.jwt.JwtService; -import kr.co.uplus.ez.common.auth.jwt.PublicToken; -import kr.co.uplus.ez.common.consts.Const; -import kr.co.uplus.ez.common.data.ApiResponseCode; -import kr.co.uplus.ez.common.data.ApiResponseMessage; -import kr.co.uplus.ez.common.data.RestResult; -import kr.co.uplus.ez.config.SecurityConfig; - -@RestController -public class AuthController { - private static final Logger logger = LoggerFactory.getLogger(AuthController.class); - - @Autowired - private AuthenticationManager authManager; - @Autowired - private LoginSuccessHandler loginSuccessHandler; - @Autowired - private LoginFailureHandler loginFailureHandler; - @Autowired - private LoginService loginSvc; - @Autowired - private JwtService jwtSvc; - - - /** - * date : 2022. 5. 3. - * auth : ckr - * desc : 로그인 - * @param user - * @param request - * @param response - * @return - * @throws Exception - */ - @PostMapping("/api/v1/bo/login/login") - public ApiResponseMessage login(@RequestBody LoginDto loginInfo) throws Exception { - ApiResponseCode rCode = loginSvc.firstLoginChk(loginInfo); - - if(rCode.equals(ApiResponseCode.SUCCESS)) { - Map dataObj = new HashMap<>(); - dataObj.put("nextUrl", "/"); - ApiResponseMessage result = new ApiResponseMessage(rCode); - result.setData(dataObj); - return result; - }else { - return new ApiResponseMessage(rCode); - } - /* - UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(user.getUsername(), user.getPassword()); - Authentication authentication = null; - - try { - authentication = authManager.authenticate(token); - } - catch (AuthenticationException e) { - request.setAttribute(SecurityConfig.LOGIN_ID_PARAM, user.getOprtrId()); - ApiResponseCode resultCode = loginFailureHandler.process(request, response, e); - return new ApiResponseMessage(resultCode); - } - - ApiResponseCode rcode = loginSuccessHandler.process(request, response, authentication); - request.setAttribute(SecurityConfig.AUTH_USER, authentication); - //jwtSvc.generatePrivateToken(response, authentication); - - String nextUrl = getReturnUrl(request, response); - logger.debug("login SUCCESS - nextUrl = [{}]", nextUrl); - Map dataObj = new HashMap<>(); - dataObj.put("nextUrl", "/"); - dataObj.put("firstAuthToken", token); - Authentication authentication2 = SecurityContextHolder.getContext().getAuthentication(); - ApiResponseMessage result = new ApiResponseMessage(rcode); - result.setData(dataObj); - return result; - */ - - } - - - @PostMapping("/openapi/token") - public RestResult publicToken(AuthUser user) throws Exception { - UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(user.getUsername(), user.getPassword()); - Authentication authentication = null; - - try { - authentication = authManager.authenticate(token); - } - catch (AuthenticationException e) { - return new RestResult(false); - } - - PublicToken pubToken = jwtSvc.generatePublicToken(authentication); - return new RestResult().setData(pubToken); - } - - @PostMapping("/openapi/refresh") - public RestResult accessToken(String refreshToken) throws Exception { - try { - String accessToken = jwtSvc.accessToken(refreshToken); - PublicToken pubToken = new PublicToken(); - pubToken.setAccessToken(accessToken); - return new RestResult().setData(pubToken); - } - catch (Exception e) { - return new RestResult(false); - } - } - - - /** - * 로그인 전에 요청했던 URL 반환 - */ - private String getReturnUrl(HttpServletRequest request, HttpServletResponse response) { - RequestCache requestCache = new HttpSessionRequestCache(); - SavedRequest savedRequest = requestCache.getRequest(request, response); - if (savedRequest == null) { - AuthUser user = (AuthUser) request.getAttribute(Const.KEY_LOAD_USER); - /* ckr - if (user != null) { - if ("Y".equals(user.getRcsYn())) { - return SecurityConfig.LOGIN_SUCC_URL; - } else { - return SecurityConfig.NO_RCS_AUTH_LOGIN_SUCC_URL; - } - }*/ - - return SecurityConfig.LOGIN_SUCC_URL; - } - return savedRequest.getRedirectUrl(); - } - - /* ckr - 삭제예정 - @GetMapping("/api/auth/logout") - public RestResult logout(HttpServletRequest request, HttpServletResponse response) { - Authentication auth = SecurityContextHolder.getContext().getAuthentication(); - if (auth != null){ - new SecurityContextLogoutHandler().logout(request, response, auth); - } - - jwtSvc.destroyPrivateToken(request, response); - return new RestResult(); - }*/ - - @PostMapping("api/v1/bo/login/logout") - @ResponseBody - public ApiResponseMessage logout(@RequestBody Map paramMap, HttpServletRequest request, HttpServletResponse response) throws Exception{ - Authentication auth = SecurityContextHolder.getContext().getAuthentication(); - if (auth != null){ - new SecurityContextLogoutHandler().logout(request, response, auth); - } - - jwtSvc.destroyPrivateToken(request, response); - return new ApiResponseMessage(); - } - - - /** - * date : 2022. 5. 17. - * auth : ckr - * desc : HUBEZ_BO_API_2002 - 인증번호 요청 - * @param reqAuthNumDto - * @return - * @throws Exception - */ - @PostMapping("api/v1/bo/login/authNum") - @ResponseBody - public ApiResponseMessage authNum(@RequestBody ReqAuthNumDto reqAuthNumDto) throws Exception{ - ApiResponseCode rcode = loginSvc.sendAuthNum(reqAuthNumDto); - return new ApiResponseMessage(rcode); - } - - /** - * date : 2022. 5. 17. - * auth : ckr - * desc : HUBEZ_BO_API_2003 - 인증번호 확인 - * 2차인증번호 인증 Spring security - * @param authNumDto - * @return - */ - @PostMapping("/api/v1/bo/login/confirmNum") - @ResponseBody - public ApiResponseMessage confirmNum(@RequestBody ChkAuthNumDto authNumDto, HttpServletRequest request, HttpServletResponse response) { - AuthUser user = new AuthUser(); - user.setOprtrId(authNumDto.getOprtrId()); - user.setInputPwd(authNumDto.getOprtrPw()); - - // 시큐리티 인증 - UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(user.getUsername(), user.getPassword()); - Authentication authentication = null; - - try { - authentication = authManager.authenticate(token); - } - catch (AuthenticationException e) { - request.setAttribute(SecurityConfig.LOGIN_ID_PARAM, user.getOprtrId()); - ApiResponseCode resultCode = loginFailureHandler.process(request, response, e); - return new ApiResponseMessage(resultCode); - } - - ApiResponseCode rCode = loginSvc.confirmNum(authNumDto); - - if(rCode.equals(ApiResponseCode.SUCCESS)) { - - // 2차인증후 시큐리티 성공핸들러 - rCode = loginSuccessHandler.process(request, response, authentication); - - // 토큰 생성 - jwtSvc.generatePrivateToken(response, authentication); - - String nextUrl = getReturnUrl(request, response); - logger.debug("login SUCCESS - nextUrl = [{}]", nextUrl); - Map dataObj = new HashMap<>(); - dataObj.put("nextUrl", "/"); - ApiResponseMessage result = new ApiResponseMessage(rCode); - result.setData(dataObj); - return result; - }else { - ApiResponseMessage result = new ApiResponseMessage(rCode); - return result; - } - - } - - - - /* ckr 불명확 - @GetMapping("/api/public/auth/phone") - public RestResult phone(SmsAuthNum authNum) { - String phone = loginSvc.getAuthPhone(authNum); - return new RestResult() - .setData(phone); - } - */ - -} diff --git a/src/main/java/kr/co/uplus/ez/common/auth/AuthNumDto.java b/src/main/java/kr/co/uplus/ez/common/auth/AuthNumDto.java deleted file mode 100644 index 31c2424..0000000 --- a/src/main/java/kr/co/uplus/ez/common/auth/AuthNumDto.java +++ /dev/null @@ -1,16 +0,0 @@ -package kr.co.uplus.ez.common.auth; - -import org.springframework.security.core.Authentication; - -import lombok.Data; - -// 인증문자 Dto -@Data -public class AuthNumDto { - - public String oprtrId; // 어드민 사용자 ID - public String hpNo; // 휴대폰 번호 - public String chrVal; // 인증 문자 - public Boolean isLogin; // 1차 로그인 여부 - -} diff --git a/src/main/java/kr/co/uplus/ez/common/auth/AuthUser.java b/src/main/java/kr/co/uplus/ez/common/auth/AuthUser.java deleted file mode 100644 index 6ff3fd3..0000000 --- a/src/main/java/kr/co/uplus/ez/common/auth/AuthUser.java +++ /dev/null @@ -1,286 +0,0 @@ -package kr.co.uplus.ez.common.auth; - -import java.util.Collection; - -import org.apache.commons.lang3.StringUtils; -import org.springframework.security.core.GrantedAuthority; -import org.springframework.security.core.userdetails.UserDetails; - -import kr.co.uplus.ez.common.consts.UserStatus; -import kr.co.uplus.ez.common.data.SearchInfo; -import kr.co.uplus.ez.common.utils.EncryptionUtil; -import lombok.Setter; -import lombok.ToString; - -@ToString -@Setter -public class AuthUser extends SearchInfo implements UserDetails { - private static final long serialVersionUID = -2568297930450189586L; - - private String oprtrId; - private String oprtrNm; - //private UserStatus sttusCd; - private String sttusCd; - private String pwd; - private String email; - private String hpNo; - private String autCd; - private int authchrFailCnt; - private String rFrshTkn; - private String rFrshTknDt; - private String lastLoginDt; - private int loginFailCnt; - private String pwdChgDt; - private String regId; - private String regDt; - private String chgId; - private String chgDt; - private String inputPwd; - - private Collection authorities; - - - public String getOprtrId() { - return oprtrId; - } - private String corpId; // temp data - - public String getCorpId() { - return corpId; - } - - public String getUsername() { - String uname = ""; - if (corpId != null && !"".equals(corpId)) { - uname += corpId + "."; - } - uname += oprtrId; - return uname; - } - - public Collection getAuthorities() { - return authorities; - } - - /* ckr - public UserStatus getSttusCd() { - return sttusCd; - } - */ - public String getSttusCd() { - return sttusCd; - } - -// public void setPwd(String pwd) { -// this.pwd = EncryptionUtil.getCustomSHA512(this.oprtrId, pwd); -// } - public void setInputPwd(String inputPwd) { - this.pwd = EncryptionUtil.getCustomSHA512(this.oprtrId, inputPwd); - } - - public String getInputPwd() { - return inputPwd; - } - - public String getPwd() { - return pwd; - } - - public String getEmail() { - return email; - } - - public String getHpNo() { - return hpNo; - } - - public String getAutCd() { - return autCd; - } - - public int getAuthchrFailCnt() { - return authchrFailCnt; - } - - public String getRfreshTkn() { - return rFrshTkn; - } - - public String getRfreshTknDt() { - return rFrshTknDt; - } - - public String getLastLoginDt() { - return lastLoginDt; - } - - public int getLoginFailCnt() { - return loginFailCnt; - } - - public String getPwdChgDt() { - return pwdChgDt; - } - - public String getRegId() { - return regId; - } - - public String getRegDt() { - return regDt; - } - - public String getChgId() { - return chgId; - } - - public String getChgDt() { - return chgDt; - } - - public boolean isAccountNonExpired() { - return true; - } - - /* ckr - public boolean isAccountNonLocked() { - return sttusCd != UserStatus.LOCK; - } - */ - public boolean isAccountNonLocked() { - return sttusCd.equals("01"); - } - - public boolean isCredentialsNonExpired() { - return true; - } - - /* ckr - public boolean isEnabled() { - return sttusCd == UserStatus.USE; - } - */ - public boolean isEnabled() { - return sttusCd.equals("01"); - } - - public String getPassword() { - //return "{noop}"+pwd; - return pwd; - } - - /* - private String userId; - private String userPwd; - private UserStatus status; - private Collection authorities; - - private String userNm; - private String pwdChgDt; - private int loginFailCnt; - private String phone; - private SmsAuthNum sms; - - private String rcsYn; - public String getRcsYn() { - if (StringUtils.isEmpty(rcsYn)) { - return "N"; - } - return rcsYn; - } - - private String corpId; // temp data - public String getCorpId() { - return corpId; - } - - public String getUsername() { - String uname = ""; - if (corpId != null && !"".equals(corpId)) { - uname += corpId + "."; - } - uname += userId; - return uname; - } - - public String getPassword() { - return userPwd; - } - - public Collection getAuthorities() { - return authorities; - } - - public boolean isAccountNonExpired() { - return true; - } - - public boolean isAccountNonLocked() { - return status != UserStatus.LOCK; - } - - public boolean isCredentialsNonExpired() { -// if (StringUtils.isEmpty(pwdChgDt)) -// return true; -// -// DateTime last = DateUtils.str2dateYMDHMS(pwdChgDt); -// DateTime now = DateTime.now(); -// int days = DateUtils.diffDays(last, now); -// -// return days < Const.PWD_EXPIRE_DAYS; - return true; - } - - public boolean isEnabled() { - return status == UserStatus.USE; - } - - public String getUserId() { - return userId; - } - - public String getUserPwd() { - return userPwd; - } - - public UserStatus getStatus() { - return status; - } - - public String getUserNm() { - return userNm; - } - - public String getPwdChgDt() { - return pwdChgDt; - } - - public int getLoginFailCnt() { - return loginFailCnt; - } - - public String getPhone() { - return phone; - } - - public SmsAuthNum getSms() { - return sms; - } - - @Override - public String toString() { - StringBuilder builder = new StringBuilder(); - builder.append("AuthUser [userId="); - builder.append(userId); - builder.append(", status="); - builder.append(status); - builder.append(", authorities="); - builder.append(authorities); - builder.append(", userNm="); - builder.append(userNm); - builder.append("]"); - return builder.toString(); - } - - */ -} diff --git a/src/main/java/kr/co/uplus/ez/common/auth/AuthUserDao.java b/src/main/java/kr/co/uplus/ez/common/auth/AuthUserDao.java deleted file mode 100644 index af66750..0000000 --- a/src/main/java/kr/co/uplus/ez/common/auth/AuthUserDao.java +++ /dev/null @@ -1,32 +0,0 @@ -package kr.co.uplus.ez.common.auth; - -import java.util.List; - -import org.apache.ibatis.annotations.Mapper; - -@Mapper -public interface AuthUserDao { - - //public AuthUser getByUsername(String username); - public AuthUser getByUsername(String username); - - public String[] getRoles(String username); - public int increaseFailCount(String username); - - public int increaseAuthFailCnt(String userId); - public int setUserStatus(AuthUser user); - public void setLoginInfo(String userId); - //public int addSmsAuthNum(SmsAuthNum num); - public int addAuthNum(AuthNum authNum); - - public AuthUser getUser(String userId); - - //public SmsAuthNum getSmsAuthNum(String userId); - public AuthNum getAuthNum(AuthNum authNum); - //public int setSmsAuthNum(SmsAuthNum sms); - public int setAuthUserInfo(AuthNum authNum); - public int setAuthNum(AuthNum authNum); - public List getSmsAuthNumByNum(String issNum); - public String getSmsAuthPhone(SmsAuthNum num); - -} diff --git a/src/main/java/kr/co/uplus/ez/common/auth/ChkAuthNumDto.java b/src/main/java/kr/co/uplus/ez/common/auth/ChkAuthNumDto.java deleted file mode 100644 index 7656c23..0000000 --- a/src/main/java/kr/co/uplus/ez/common/auth/ChkAuthNumDto.java +++ /dev/null @@ -1,15 +0,0 @@ -package kr.co.uplus.ez.common.auth; - -import lombok.Data; - -// 인증문자 확인 Dto -@Data -public class ChkAuthNumDto { - - public String oprtrId; // 어드민 사용자 ID - public String oprtrPw; // 어드민 사용자 PW - public String hpNo; // 휴대폰 번호 - public String chrVal; // 인증 번호 - public Boolean isLogin; // 1차 로그인 여부 - -} diff --git a/src/main/java/kr/co/uplus/ez/common/auth/LoginDto.java b/src/main/java/kr/co/uplus/ez/common/auth/LoginDto.java deleted file mode 100644 index fc214c0..0000000 --- a/src/main/java/kr/co/uplus/ez/common/auth/LoginDto.java +++ /dev/null @@ -1,15 +0,0 @@ -package kr.co.uplus.ez.common.auth; - -import org.springframework.security.core.Authentication; - -import lombok.Data; - -// login -@Data -public class LoginDto { - - private String oprtrId; // 어드민 사용자 ID - private String oprtrPw; // 어드민 사용자 Pw - - -} diff --git a/src/main/java/kr/co/uplus/ez/common/auth/LoginService.java b/src/main/java/kr/co/uplus/ez/common/auth/LoginService.java deleted file mode 100644 index bae40ed..0000000 --- a/src/main/java/kr/co/uplus/ez/common/auth/LoginService.java +++ /dev/null @@ -1,215 +0,0 @@ -package kr.co.uplus.ez.common.auth; - -import org.joda.time.DateTime; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import kr.co.uplus.ez.common.consts.ConfigProps; -import kr.co.uplus.ez.common.consts.Const; -import kr.co.uplus.ez.common.consts.ResultCode; -import kr.co.uplus.ez.common.data.ApiResponseCode; -import kr.co.uplus.ez.common.utils.DateUtils; -import kr.co.uplus.ez.common.utils.EncryptionUtil; -import kr.co.uplus.ez.common.utils.TextUtils; - -@Service -public class LoginService { - - @SuppressWarnings("unused") - private final Logger logger = LoggerFactory.getLogger(getClass()); - - private static final int AUTHCHR_FAIL_CNT = 5; // 인증 실패 카운트 - private static final String CODE_VALUE_02 = "02"; // 코드값 02 - private static final String AUTH_TP_CD = "01"; // 어드민 로그인 - private static final String AUTH_STTUS_CD_01 = "01"; // 인증대기 - private static final String AUTH_STTUS_CD_02 = "02"; // 인증완료 - - @Autowired - private AuthUserDao dao; - @Autowired - private ConfigProps cprops; -// @Autowired -// private SmsService smsSvc; -// @Autowired -// private UserService userSvc; - - - // 1차 로그인 인증 - public ApiResponseCode firstLoginChk(LoginDto loginInfo) { - String userId = loginInfo.getOprtrId(); - AuthUser user = getUser(userId); - - if(user == null) { - // 사용자 여부 - return ApiResponseCode.CE_ID_NOT_FOUND; - } - - if(user.getLoginFailCnt() >= Const.MAX_LOGIN_FAIL) { - // 5회 로그인 실패 체크 - return ApiResponseCode.CE_TO_LOCK; - } - - if(user.getSttusCd().equals(CODE_VALUE_02)) { - // 사용자 상태 체크 - return ApiResponseCode.SS_NOT_USE; - } - - // 비밀번호 체크 - String userPw = loginInfo.getOprtrPw(); - String encPwd = EncryptionUtil.getCustomSHA512(userId, userPw); - if(!user.getPwd().equals(encPwd)) { - // 로그인 실패 카운트 증가 - dao.increaseFailCount(userId); - return ApiResponseCode.CE_ID_PWD; - }else { - // 로그인 실패카운트 초기화 - setLoginInfo(user.getOprtrId()); - } - - return ApiResponseCode.SUCCESS; - } - - public void setLoginInfo(String userId) { - dao.setLoginInfo(userId); - } - - public int increaseFailCount(String userId) { - dao.increaseFailCount(userId); - AuthUser user = dao.getByUsername(userId); - return user.getLoginFailCnt(); - } - - public void setUserStatus(String userId, String status) { - AuthUser user = new AuthUser(); - user.setOprtrId(userId); - user.setSttusCd(status); - dao.setUserStatus(user); - } - - public AuthUser getUser(String userId) { - return dao.getUser(userId); - } - - // 인증번호 요청 - public ApiResponseCode sendAuthNum(ReqAuthNumDto reqAuthNumDto) { - // 1차 로그인 체크 - if(reqAuthNumDto.getIsLogin() != null && reqAuthNumDto.getIsLogin()) { - // return 1차로그인 인증 실패 코드 - } - - - String userId = reqAuthNumDto.getOprtrId(); // 인증 받고자 하는 userId - AuthUser user = getUser(userId); - - // 인증 요청 계정의 정보 체크(ID, HP) - if (user != null) { - if(!user.getOprtrId().equals(userId)) { - return ApiResponseCode.CE_ID_HP; - } - if(!user.getHpNo().equals(reqAuthNumDto.getHpNo())) { - return ApiResponseCode.CE_ID_HP; - } - }else { - return ApiResponseCode.CE_ID_NOT_FOUND; - } - - // 2차 인증 실패 카운트 체크 - int autchrFailCnt = user.getAuthchrFailCnt(); - if (autchrFailCnt >= Const.MAX_AUTHNUM_FAIL) { - return ApiResponseCode.CE_AUTHNUM_LOCK; - } - - String authNum = TextUtils.randNumStr(6); - - // 발행한 인증번호 DB에 저장 - AuthNum anum = new AuthNum(); - anum.setAuthTpCd(AUTH_TP_CD); - anum.setSttusCd(AUTH_STTUS_CD_01); - anum.setHpNo(user.getHpNo()); - anum.setChrVal(authNum); - anum.setRegId(user.getOprtrId()); - dao.addAuthNum(anum); - - return ApiResponseCode.SUCCESS; - - } - - - // 인증 번호 확인 - public ApiResponseCode confirmNum(ChkAuthNumDto authNumDto) { - - AuthNum anum = new AuthNum(); - anum.setOprtrId(authNumDto.getOprtrId()); - anum.setAuthTpCd(AUTH_TP_CD); - anum.setSttusCd(AUTH_STTUS_CD_01); // 사용중 - anum.setHpNo(authNumDto.getHpNo()); - anum.setChrVal(authNumDto.getChrVal()); - - AuthNum curr = dao.getAuthNum(anum); - - if (curr == null) { - return ApiResponseCode.CE_WRONG_AUTHNUM; - } - - if (curr.getAuthchrFailCnt() > Const.MAX_AUTHNUM_FAIL) { - return ApiResponseCode.CE_AUTHNUM_LOCK; - } - - - if (!curr.getChrVal().equals(authNumDto.getChrVal())) { - // 실패 카운트 증가 - String oprtrId = curr.getOprtrId(); - dao.increaseAuthFailCnt(oprtrId); - - return ApiResponseCode.CE_WRONG_AUTHNUM; - } - - // 인증 성공 시 - resetAuthFailCnt(curr); - return ApiResponseCode.SUCCESS; - } - - - // 로그인 성공시 초기화, 인증번호 상태 변경 - private void resetAuthFailCnt(AuthNum curr) { - // 어드민 사용자 - AuthNum authNum = new AuthNum(); - authNum.setOprtrId(curr.getOprtrId()); - authNum.setAuthchrFailCnt(0); - dao.setAuthUserInfo(authNum); - - // 인증요청 - authNum = new AuthNum(); - authNum.setSeqNo(curr.getSeqNo()); - authNum.setSttusCd(AUTH_STTUS_CD_02); - dao.setAuthNum(authNum); - } - -// public ResultCode resetPassword(UserPassword pass) { -// String userId = pass.getUserId(); -// -// List nums = dao.getSmsAuthNumByNum(pass.getToken()); -// if (nums.size() == 0) { -// return ResultCode.CE_WRONG_AUTHNUM; -// } -// else if (nums.size() > 1) { -// SmsAuthNum anum = nums.stream() -// .filter(s -> s.getUserId().equals(userId)) -// .findFirst().orElse(null); -// if (anum == null) { -// return ResultCode.CE_WRONG_AUTHNUM; -// } -// } -// -// return userSvc.changePassword(pass); -// } - - /* ckr 불명확 - public String getAuthPhone(SmsAuthNum anum) { - return dao.getSmsAuthPhone(anum); - } - */ -} diff --git a/src/main/java/kr/co/uplus/ez/common/auth/ReqAuthNumDto.java b/src/main/java/kr/co/uplus/ez/common/auth/ReqAuthNumDto.java deleted file mode 100644 index c7c8806..0000000 --- a/src/main/java/kr/co/uplus/ez/common/auth/ReqAuthNumDto.java +++ /dev/null @@ -1,13 +0,0 @@ -package kr.co.uplus.ez.common.auth; - -import lombok.Data; - -// 인증문자 요청 Dto -@Data -public class ReqAuthNumDto { - - public String oprtrId; // 어드민 사용자 ID - public String hpNo; // 휴대폰 번호 - public Boolean isLogin; // 1차 로그인 여부 - -} diff --git a/src/main/java/kr/co/uplus/ez/common/auth/jwt/JwtExceptionFilter.java b/src/main/java/kr/co/uplus/ez/common/auth/jwt/JwtExceptionFilter.java deleted file mode 100644 index 6e3bd3d..0000000 --- a/src/main/java/kr/co/uplus/ez/common/auth/jwt/JwtExceptionFilter.java +++ /dev/null @@ -1,41 +0,0 @@ -package kr.co.uplus.ez.common.auth.jwt; - -import java.io.IOException; - -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.springframework.web.filter.OncePerRequestFilter; - -import io.jsonwebtoken.ExpiredJwtException; -import io.jsonwebtoken.JwtException; -import kr.co.uplus.ez.common.consts.Const; -import kr.co.uplus.ez.common.utils.WebUtils; -import kr.co.uplus.ez.config.SecurityConfig; - -public class JwtExceptionFilter extends OncePerRequestFilter { - - @Override - public void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { - try { - filterChain.doFilter(request, response); - } - catch (JwtException e) { - if (WebUtils.isJwtTokenExist(request) && WebUtils.isMatchedUriPattern(request, SecurityConfig.REST_API_URLS)) { - if (e instanceof ExpiredJwtException) - WebUtils.responseJson(response, Const.SESSION_EXPIRED); - else - WebUtils.responseJson(response, HttpServletResponse.SC_UNAUTHORIZED); - } - else { - throw e; - } - } - catch (Exception e) { - throw e; - } - } - -} diff --git a/src/main/java/kr/co/uplus/ez/common/auth/jwt/PublicToken.java b/src/main/java/kr/co/uplus/ez/common/auth/jwt/PublicToken.java deleted file mode 100644 index 050ff09..0000000 --- a/src/main/java/kr/co/uplus/ez/common/auth/jwt/PublicToken.java +++ /dev/null @@ -1,13 +0,0 @@ -package kr.co.uplus.ez.common.auth.jwt; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -@Data -@NoArgsConstructor -@AllArgsConstructor -public class PublicToken { - private String accessToken; - private String refreshToken; -} diff --git a/src/main/java/kr/co/uplus/ez/common/components/WebClientRequestService.java b/src/main/java/kr/co/uplus/ez/common/components/WebClientRequestService.java index 88d173d..78ced5f 100644 --- a/src/main/java/kr/co/uplus/ez/common/components/WebClientRequestService.java +++ b/src/main/java/kr/co/uplus/ez/common/components/WebClientRequestService.java @@ -1,33 +1,56 @@ -package kr.co.uplus.ez.common.components; - -import java.util.Date; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.web.reactive.function.client.WebClient; - -@Service -public class WebClientRequestService { - - private static final Logger log = LoggerFactory.getLogger(WebClientRequestService.class); - - @Autowired - private WebClient webClient; - - public Object callBySyncGet(String uri) { - Date startTime = new Date(); - Object result = webClient.get().uri(uri).retrieve().bodyToMono(Object.class).block(); - log.debug("callBySyncGet duration Time : {}", (new Date().getTime() - startTime.getTime()) / 1000f); - return result; - } - - public Object callBySyncPost(String uri, Object param) { - Date startTime = new Date(); - Object result = webClient.post().uri(uri).bodyValue(param).retrieve().bodyToMono(Object.class).block(); - log.debug("callBySyncPost duration Time : {}", (new Date().getTime() - startTime.getTime()) / 1000f); - return result; - } - -} +package kr.co.uplus.ez.common.components; + +import java.util.Date; +import java.util.function.Consumer; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpHeaders; +import org.springframework.stereotype.Service; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.web.reactive.function.client.WebClient; + +@Service +public class WebClientRequestService { + + private static final Logger log = LoggerFactory.getLogger(WebClientRequestService.class); + + @Autowired + private WebClient webClient; + + public Object callBySyncGet(String uri) { + Date startTime = new Date(); + Object result = webClient.get().uri(uri).retrieve().bodyToMono(Object.class).block(); + log.debug("callBySyncGet duration Time : {}", (new Date().getTime() - startTime.getTime()) / 1000f); + return result; + } + + public Object callBySyncPost(String uri, Object param) { + Date startTime = new Date(); + Object result = webClient.post().uri(uri).bodyValue(param).retrieve().bodyToMono(Object.class).block(); + log.debug("callBySyncPost duration Time : {}", (new Date().getTime() - startTime.getTime()) / 1000f); + return result; + } + + public Object callBySyncPut(String uri, Object param) { + Date startTime = new Date(); + Object result = webClient.put().uri(uri).bodyValue(param).retrieve().bodyToMono(Object.class).block(); + log.debug("callBySyncPut duration Time : {}", (new Date().getTime() - startTime.getTime()) / 1000f); + return result; + } + + + /** + * 헤더 추가. + * + * @param headerMap + * @return Consumer + */ + @SuppressWarnings({ "unchecked", "rawtypes" }) + public Consumer setHttpHeader(LinkedMultiValueMap headerMap){ + Consumer consumer = it -> it.addAll(headerMap); + webClient.get().headers(consumer); + return consumer; + } +} diff --git a/src/main/java/kr/co/uplus/ez/common/consts/Const.java b/src/main/java/kr/co/uplus/ez/common/consts/Const.java deleted file mode 100644 index 0f61ee5..0000000 --- a/src/main/java/kr/co/uplus/ez/common/consts/Const.java +++ /dev/null @@ -1,27 +0,0 @@ -package kr.co.uplus.ez.common.consts; - -import java.util.Arrays; -import java.util.List; - -public class Const { - // - public static final String KEY_MDC_LOG = "logKey"; - public static final String KEY_LOG_OBJ = "logObj"; - public static final String KEY_LOAD_USER = "loadUser"; // UserDetailsService에서 로딩하는 사용자정보 - public static final String KEY_TOKEN_EXIST = "jwtTokenExist"; - - // - public static final String TLO_LOGGER = "tloLogger"; - public static final List NOT_LOG_PARAMS = Arrays.asList("userPwd", "curPwd", "newPwd", "cfmPwd"); - - // - public static final int SESSION_EXPIRED = 418; - - // 정책 - public static final int PWD_EXPIRE_DAYS = 90; // 비밀번호 만료기간 (일) - public static final int MAX_LOGIN_FAIL = 5; // 5회 로그인 실패하면 계정 잠김 - public static final int AUTHNUM_EXPIRE_MINS = 3; // 인증번호 만료기간 (분) - public static final int MAX_AUTHNUM_FAIL = 5; // 5회 인증번호 검증 실패하면 발행 잠김 - public static final int AUTHNUM_LOCK_EXPIRE_MINS = 30; // 인증번호발행 잠김 만료기간 (분) - -} diff --git a/src/main/java/kr/co/uplus/ez/common/consts/ResultCode.java b/src/main/java/kr/co/uplus/ez/common/consts/ResultCode.java deleted file mode 100644 index d1aab0a..0000000 --- a/src/main/java/kr/co/uplus/ez/common/consts/ResultCode.java +++ /dev/null @@ -1,65 +0,0 @@ -package kr.co.uplus.ez.common.consts; - -import java.util.HashMap; -import java.util.Map; - -public enum ResultCode { - SUCCESS ("20000000", "성공") - , SS_NOT_USE ("20000101", "중지 계정") - , SS_LOCK ("20000102", "잠김 계정") -// , SS_PWD_EXPIRE ("20000103", "비밀번호 만료") -// , SS_INIT_PWD ("20000104", "최초 비밀번호 변경 필요") - , SS_XLS_LIMIT ("20000206", "최대 엑셀 rows 초과") - , SS_DUP_USER_ID ("20000207", "사용자ID 중복") - , SS_INVLD_USER_ID ("20000208", "사용 할 수 없는 사용자ID(RCS_INVLD_USER.USER_ID)") - , SS_INVLD_ROLE ("20000209", "권한이 없는 사용자ID") - , SS_NOT_FOUND ("20000404", "없는 페이지") - , CE_PARAM ("30000101", "입력 파라미터 오류") - , CE_WRONG_AUTHNUM ("30000102", "인증번호 불일치") - , CE_AUTHNUM_EXPIRE ("30000103", "인증번호 만료") - , CE_AUTHNUM_LOCK ("30000104", "인증번호 발행 잠김") - , CE_ID_PWD ("30000201", "ID/PWD 불일치") - , CE_TO_LOCK ("30000202", "ID/PWD 불일치 횟수초과로 계정 잠김") - , CE_ID_NOT_FOUND ("30000203", "존재하지 않는 사용자ID") - , CE_WRONG_PWD ("30000301", "비밀번호 불일치") - , CE_USED_PWD ("30000302", "기존 비밀번호") - , SE_DB ("50000000", "DB 연동 오류") - , SE_DOWNLOAD ("50000101", "파일 다운로드 오류") - , SE_UPLOAD ("50000102", "파일 업로드 오류") - , SE_SMS_NUM ("50000201", "인증번호 발송 실패") - , SE_REDIS ("50000200", "REDIS 연동 오류") - , SE_INTERNAL ("50000500", "Internal Error") - , SE_UNKNOWN ("59999999", "알 수 없는 에러") - , API_KEY_NOT_FOUND ("60000001", "API Key 없음") - , API_KEY_PATT_INVLD ("60000002", "유효하지 않는 API Key 형식 오류") - , API_KEY_INVLD ("60000101", "유효하지 않는 API Key (RBC)") - , API_RBC_TOKEN_FAIL ("60000102", "RBC 토큰 발행 실패") - , API_RBC_CONN_FAIL ("60000103", "RBC 연결 실패") - , API_RBC_SYNC_FAIL ("60000104", "RBC 연동 실패") - , API_RBC_URL_INVLD ("60000105", "RBC URL 확인요망") - , API_RSLT_SYNC_FAIL ("60000201", "RBC 데이터 동기화 실패") - ; - - private String value; - private String desc; - private ResultCode(String value, String desc) { - this.value = value; - this.desc = desc; - } - public String getValue() { - return value; - } - public String getDesc() { - return desc; - } - - private static final Map lookup = new HashMap(); - static { - for (ResultCode e : ResultCode.values()) { - lookup.put(e.getValue(), e); - } - } - public static ResultCode find(String value) { - return lookup.get(value); - } -} \ No newline at end of file diff --git a/src/main/java/kr/co/uplus/ez/common/data/ApiResponseCode.java b/src/main/java/kr/co/uplus/ez/common/data/ApiResponseCode.java index 4043867..9507759 100644 --- a/src/main/java/kr/co/uplus/ez/common/data/ApiResponseCode.java +++ b/src/main/java/kr/co/uplus/ez/common/data/ApiResponseCode.java @@ -1,115 +1,74 @@ -package kr.co.uplus.ez.common.data; - -public enum ApiResponseCode { - - RESULT_CODE("resultCode") - , RESULT_MSG("resultMsg") - , SUCCESS("0000", "Success") - , URI_NOT_EXIST("100", "Invalid access path.") // 404 에러 처리 - , METHOD_NOT_ALLOWED("101", "This is the wrong approach.") // 요청 method 오류 (405) - , UNSUPPORTED_CONTENT_TYPE("102", "Content-Type error.") // 요청 Content-Type 오류 - , UNSUPPORTED_CONTENT_LENGTH("103", "Content-Length error.") // 요청 Content-Length 오류 - , UNSUPPORTED_ACCEPT("104", "ACCEPT error.") // 요청 Accept 오류 - , UNSUPPORTED_CACHE_CONTROL("105", "Cache-Control error.") // 요청 Cache-Control 오류 - , UNSUPPORTED_ACCEPT_ENCODING("106", "Accept-Encoding error.") // 요청 Accept-Encoding 오류 - , UNSUPPORTED_TIMESTAMP("107", "Timestamp error.") // 요청 Timestamp 오류 - , UNSUPPORTED_TUID("108", "TUID error.") // 요청 TUID 오류 - , UNSUPPORTED_APPLICATIONID("109", "ApplicationId error.") // 요청 ApplicationId 오류 - , INVALID_HEADER_VALUE("110", "Not Json header type.") - , TOKEN_NOT_EXIST("200", "Missing Token.") // 토큰 누락 - , TOKEN_INVALID("201", "Invalid Token.") // 유효하지 않은 Token(기간 만료) - , TOKEN_NOT_AVAILABLE("202", "Unusable Token.") // token 사용 불가(token-매핑 정보 오류) - , REQ_MSG_INVALID("300", "This is a protocol format error.") - , REQ_MANDATORY_PARAM_NOT_EXIST("301", "Required parameter error.") - , NO_DATA_FOUND("302", "There are no search results.") - , DECRYPTION_ERR("303", "Decryption error.") - , REQ_MDN_INVALID("304", "Mismatched MDN.") - , NOT_EQUAL_CTRL_CNT("305", "Not equal control count.") - , NOT_EQUAL_GEO_CNT("306", "Not equal geo count.") - , NOT_EQUAL_DATE_TYPE("307", "Not equal Date type.") - , DB_QUERY_ERR("400", "An error occurred while processing data.") - , DB_DUPLICATE_KEY_ERR("401", "Duplicate Key.") // key값 중복 - , SYS_ERR("500", "An undefined error has occurred.") - //BIZ연동 - , BIZ_OK("OK", "SUCCESS") - , BIZ_FAIL("FAIL", "예기치 못한 오류가 발생하였습니다. 재 시도 해 주시기 바랍니다.") - , BIZ_NOT_FOUNT("404", "Not Found") // 요청한 리소스가 없는 경우 반환 - , BIZ_REQUEST_ENTITY_TOO_LARGE("413", "Request Entity Too Large") // 요청 데이터가 너무 큰 경우 반환 - , BIZ_SYS_ERR("500", "Internal server error") // 처리중 시스템 오류 발생 - // admin result code - , CE_AUTH_TOKEN_EXPIRE ("4001", "인증토큰 만료") - , CE_REFRESH_AUTH_TOKEN_EXPIRE ("4002", "Refresh 토큰 만료") - , CE_ID_NOT_FOUND ("4003", "사용자 정보가 없습니다.") - , CE_ID_PWD ("4004", "ID/PWD 불일치") - , CE_TO_LOCK ("4005", "ID/PWD 불일치 횟수초과") - , SS_NOT_USE ("4001", "사용자 상태 오류") - , CE_ID_HP ("4006", "ID/HP 불일치") - , CE_AUTHNUM_EXPIRE ("4007", "인증시간 초과") - , CE_WRONG_AUTHNUM ("4007", "인증번호 오류") - , CE_AUTHNUM_LOCK ("4007", "인증번호 불일치 횟수초과") -// , SS_LOCK ("20000102", "잠김 계정") -// , SS_PWD_EXPIRE ("20000103", "비밀번호 만료") -// , SS_INIT_PWD ("20000104", "최초 비밀번호 변경 필요") -// , SS_XLS_LIMIT ("20000206", "최대 엑셀 rows 초과") -// , SS_DUP_USER_ID ("20000207", "사용자ID 중복") -// , SS_INVLD_USER_ID ("20000208", "사용 할 수 없는 사용자ID(RCS_INVLD_USER.USER_ID)") -// , SS_INVLD_ROLE ("20000209", "권한이 없는 사용자ID") -// , SS_NOT_FOUND ("20000404", "없는 페이지") -// , CE_PARAM ("30000101", "입력 파라미터 오류") -// , CE_AUTHNUM_LOCK ("30000104", "인증번호 발행 잠김") -// , CE_WRONG_PWD ("30000301", "비밀번호 불일치") -// , CE_USED_PWD ("30000302", "기존 비밀번호") -// , SE_DB ("50000000", "DB 연동 오류") -// , SE_DOWNLOAD ("50000101", "파일 다운로드 오류") -// , SE_UPLOAD ("50000102", "파일 업로드 오류") -// , SE_SMS_NUM ("50000201", "인증번호 발송 실패") -// , SE_REDIS ("50000200", "REDIS 연동 오류") - , SE_INTERNAL ("50000500", "Internal Error") - , SE_UNKNOWN ("59999999", "알 수 없는 에러") -// , API_KEY_NOT_FOUND ("60000001", "API Key 없음") -// , API_KEY_PATT_INVLD ("60000002", "유효하지 않는 API Key 형식 오류") -// , API_KEY_INVLD ("60000101", "유효하지 않는 API Key (RBC)") -// , API_RBC_TOKEN_FAIL ("60000102", "RBC 토큰 발행 실패") -// , API_RBC_CONN_FAIL ("60000103", "RBC 연결 실패") -// , API_RBC_SYNC_FAIL ("60000104", "RBC 연동 실패") -// , API_RBC_URL_INVLD ("60000105", "RBC URL 확인요망") -// , API_RSLT_SYNC_FAIL ("60000201", "RBC 데이터 동기화 실패") - ; - - private String resultCode; - private String resultMsg; - - - public String getResultCode() { - return resultCode; - } - - public void setResultCode(String resultCode) { - this.resultCode = resultCode; - } - - public String getResultMsg() { - return resultMsg; - } - - public void setResultMsg(String resultMsg) { - this.resultMsg = resultMsg; - } - - private ApiResponseCode(String resultCode) { - this.resultCode = resultCode; - } - - private ApiResponseCode(String resultCode, String resultMsg) { - this.resultCode = resultCode; - this.resultMsg = resultMsg; - } - - public static boolean has(String key) { - ApiResponseCode[] codes = values(); - for (ApiResponseCode code : codes) - if (code.name().equals(key)) - return true; - return false; - } -} +package kr.co.uplus.ez.common.data; + +public enum ApiResponseCode { + + RESULT_CODE("resultCode") + , RESULT_MSG("resultMsg") + , SUCCESS("0000", "성공") + + // 공통 + , CM_UNISSUED_APPLICATIONID("1001", "미발급된 ApplicationID") + , CM_PARAMETER_ERROR("1002", "파라미터 오류") + , CM_MISSING_REQUIRED("1003", "필수값 누락") + , CM_NOT_FOUND("1004", "조회 결과 없음") + , CM_DB_QUERY_ERR("1009", "데이터를 처리하는 동안 오류가 발생했습니다") + + // 어드민. + , CE_AUTH_TOKEN_EXPIRE ("4001", "인증토큰 만료") + , CE_REFRESH_AUTH_TOKEN_EXPIRE ("4002", "Refresh 토큰 만료") + , CE_ID_NOT_FOUND ("4003", "사용자 정보가 없습니다.") + , CE_ID_PWD ("4004", "ID/PWD 불일치") + , CE_TO_LOCK ("4005", "ID/PWD 불일치 횟수초과") + , CE_PWD_EXPIRE ("4006", "비밀번호 변경 기간 초과") + , SS_NOT_USE ("4007", "사용자 상태 오류") + , CE_ID_HP ("4008", "ID/HP 불일치") + , CE_AUTHNUM_EXPIRE ("4009", "인증시간 초과") + , CE_WRONG_AUTHNUM ("4010", "인증번호 오류") + , CE_AUTHNUM_LOCK ("4011", "인증번호 불일치 횟수초과") + , CE_TOKEN_ISSUANCE_FAILED("4012", "Access 토큰 발급 실패") + , CE_FAILED_TO_CHANGE_USER("4013", "사용자정보 변경 실패") + , CE_FAILED_TO_SEND_SMS("4014", "문자발송 실패") + , CE_FAILED_TO_SEND_EMAIL("4015", "메일발송 실패") + , CE_FAILED_TO_PW_CHANGE("4016", "비밀번호변경 실패") + + // 시스템 + , SE_UNKNOWN ("9999", "알 수 없는 에러") + ; + + private String resultCode; + private String resultMsg; + + + public String getResultCode() { + return resultCode; + } + + public void setResultCode(String resultCode) { + this.resultCode = resultCode; + } + + public String getResultMsg() { + return resultMsg; + } + + public void setResultMsg(String resultMsg) { + this.resultMsg = resultMsg; + } + + private ApiResponseCode(String resultCode) { + this.resultCode = resultCode; + } + + private ApiResponseCode(String resultCode, String resultMsg) { + this.resultCode = resultCode; + this.resultMsg = resultMsg; + } + + public static boolean has(String key) { + ApiResponseCode[] codes = values(); + for (ApiResponseCode code : codes) + if (code.name().equals(key)) + return true; + return false; + } +} diff --git a/src/main/java/kr/co/uplus/ez/common/data/ApiResponseMessage.java b/src/main/java/kr/co/uplus/ez/common/data/ApiResponseMessage.java index 35af0e1..422c432 100644 --- a/src/main/java/kr/co/uplus/ez/common/data/ApiResponseMessage.java +++ b/src/main/java/kr/co/uplus/ez/common/data/ApiResponseMessage.java @@ -1,32 +1,31 @@ -package kr.co.uplus.ez.common.data; - -import com.fasterxml.jackson.annotation.JsonInclude; - -import lombok.Data; - -@Data -@JsonInclude(JsonInclude.Include.NON_NULL) -public class ApiResponseMessage { - - private String retCode; - private String retMsg; - protected T data; - - - public ApiResponseMessage() { - this.retCode = ApiResponseCode.SUCCESS.getResultCode(); - this.retMsg = ApiResponseCode.SUCCESS.getResultMsg(); - } - - public ApiResponseMessage(ApiResponseCode returnStr) { - this.retCode = returnStr.getResultCode(); - this.retMsg = returnStr.getResultMsg(); - } - - public ApiResponseMessage(String code, String msg) { - this.retCode = code; - this.retMsg = msg; - } - - +package kr.co.uplus.ez.common.data; + +import com.fasterxml.jackson.annotation.JsonInclude; + +import lombok.Data; + +@Data +@JsonInclude(JsonInclude.Include.NON_NULL) +public class ApiResponseMessage { + + private String retCode; + private String retMsg; + protected T data; + + + public ApiResponseMessage() { + this.retCode = ApiResponseCode.SUCCESS.getResultCode(); + this.retMsg = ApiResponseCode.SUCCESS.getResultMsg(); + } + + public ApiResponseMessage(ApiResponseCode returnStr) { + this.retCode = returnStr.getResultCode(); + this.retMsg = returnStr.getResultMsg(); + } + + public ApiResponseMessage(String code, String msg) { + this.retCode = code; + this.retMsg = msg; + } + } \ No newline at end of file diff --git a/src/main/java/kr/co/uplus/ez/common/consts/ConfigProps.java b/src/main/java/kr/co/uplus/ez/common/data/ConfigProps.java similarity index 55% rename from src/main/java/kr/co/uplus/ez/common/consts/ConfigProps.java rename to src/main/java/kr/co/uplus/ez/common/data/ConfigProps.java index 6c00c1c..c85c81e 100644 --- a/src/main/java/kr/co/uplus/ez/common/consts/ConfigProps.java +++ b/src/main/java/kr/co/uplus/ez/common/data/ConfigProps.java @@ -1,4 +1,4 @@ -package kr.co.uplus.ez.common.consts; +package kr.co.uplus.ez.common.data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; @@ -9,15 +9,7 @@ import lombok.Data; @ConfigurationProperties("app.props") @Data public class ConfigProps { - - private String smsAuthnumMsg; - private String smsCallback; + private String[] xssExcludes; - private Log log; - - @Data - public static class Log { - private String tloRoot; - private String tloMdcKey; - } + } diff --git a/src/main/java/kr/co/uplus/ez/common/data/Const.java b/src/main/java/kr/co/uplus/ez/common/data/Const.java index 81e1b9b..5a03df3 100644 --- a/src/main/java/kr/co/uplus/ez/common/data/Const.java +++ b/src/main/java/kr/co/uplus/ez/common/data/Const.java @@ -1,21 +1,39 @@ -package kr.co.uplus.ez.common.data; - -public class Const { - - private static final String COMM_YES = "Y"; - - // paging - private static final String TOTAL_CNT = "totalCnt"; - private static final String CURRENT_PAGE = "currentPage"; - - public static String getCommYes() { - return COMM_YES; - } - - public static String getTotalCnt() { - return TOTAL_CNT; - } - public static String getCurrentPage() { - return CURRENT_PAGE; - } -} +package kr.co.uplus.ez.common.data; + +import java.util.Arrays; +import java.util.List; + +public class Const { + + public static final String COMM_YES = "Y"; + + public static final String CODE_VALUE_02 = "02"; // 코드값 02 + public static final String AUTH_TP_CD = "01"; // 어드민 로그인 + public static final String AUTH_STTUS_CD_01 = "01"; // 인증대기 + public static final String AUTH_STTUS_CD_02 = "02"; // 인증완료 + + // paging + public static final String TOTAL_CNT = "totalCnt"; + public static final String CURRENT_PAGE = "currentPage"; + + // + public static final String KEY_MDC_LOG = "logKey"; + public static final String KEY_LOG_OBJ = "logObj"; + public static final String KEY_LOAD_USER = "loadUser"; // UserDetailsService에서 로딩하는 사용자정보 + public static final String KEY_TOKEN_EXIST = "jwtTokenExist"; + + // + public static final String TLO_LOGGER = "tloLogger"; + public static final List NOT_LOG_PARAMS = Arrays.asList("userPwd", "curPwd", "newPwd", "cfmPwd"); + + // + public static final int SESSION_EXPIRED = 418; + + // 정책 + public static final int PWD_EXPIRE_DAYS = 90; // 비밀번호 만료기간 (일) + public static final int MAX_LOGIN_FAIL = 5; // 5회 로그인 실패하면 계정 잠김 + public static final int AUTHNUM_EXPIRE_MINS = 3; // 인증번호 만료기간 (분) + public static final int MAX_AUTHNUM_FAIL = 5; // 5회 인증번호 검증 실패하면 발행 잠김 + public static final int AUTHNUM_LOCK_EXPIRE_MINS = 30; // 인증번호발행 잠김 만료기간 (분) + +} diff --git a/src/main/java/kr/co/uplus/ez/common/data/IResult.java b/src/main/java/kr/co/uplus/ez/common/data/IResult.java deleted file mode 100644 index bc0af90..0000000 --- a/src/main/java/kr/co/uplus/ez/common/data/IResult.java +++ /dev/null @@ -1,8 +0,0 @@ -package kr.co.uplus.ez.common.data; - -public interface IResult { - public boolean isSuccess() ; - public S getCode(); - public String getMessage(); - public T getData(); -} diff --git a/src/main/java/kr/co/uplus/ez/common/data/PageScope.java b/src/main/java/kr/co/uplus/ez/common/data/PageScope.java deleted file mode 100644 index 2cb04ef..0000000 --- a/src/main/java/kr/co/uplus/ez/common/data/PageScope.java +++ /dev/null @@ -1,38 +0,0 @@ -package kr.co.uplus.ez.common.data; - -public class PageScope extends Pagination { - - private int num; // rownum - private int perPage = 1; - private int offset = 0; - private int endOffset = 1; - - public int getNum() { - return num; - } - public void setNum(int num) { - this.num = num; - } - public int getPerPage() { - return perPage; - } - public void setPerPage(int perPage) { - this.perPage = perPage; - } - - public Integer getEndOffset() { - setEndOffset(getOffset() + getPerPage()); - return endOffset; - } - public void setEndOffset(Integer endOffset) { - this.endOffset = endOffset; - } - public Integer getOffset() { - int sPage = (this.page - 1 < 0 ? 0 : this.page - 1); - offset = (sPage * this.perPage); - return offset; - } - public void setOffset(Integer offset) { - this.offset = offset; - } -} diff --git a/src/main/java/kr/co/uplus/ez/common/data/Pagination.java b/src/main/java/kr/co/uplus/ez/common/data/Pagination.java deleted file mode 100644 index 28eb679..0000000 --- a/src/main/java/kr/co/uplus/ez/common/data/Pagination.java +++ /dev/null @@ -1,20 +0,0 @@ -package kr.co.uplus.ez.common.data; - -public class Pagination { - - protected int page; - protected int totalCount; - - public int getPage() { - return page; - } - public void setPage(int page) { - this.page = page; - } - public int getTotalCount() { - return totalCount; - } - public void setTotalCount(int totalCount) { - this.totalCount = totalCount; - } -} diff --git a/src/main/java/kr/co/uplus/ez/common/data/Paging.java b/src/main/java/kr/co/uplus/ez/common/data/Paging.java new file mode 100644 index 0000000..b0ac5e3 --- /dev/null +++ b/src/main/java/kr/co/uplus/ez/common/data/Paging.java @@ -0,0 +1,17 @@ +package kr.co.uplus.ez.common.data; + +import java.io.Serializable; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@SuppressWarnings("serial") +@Data +public class Paging implements Serializable{ + + @ApiModelProperty(example = "전체 갯수", name = "전체 갯수", dataType = "String") + private String totalCnt; + @ApiModelProperty(example = "현재 페이지", name = "현재 페이지", dataType = "String") + private String page; + +} diff --git a/src/main/java/kr/co/uplus/ez/common/data/ResponseMessage.java b/src/main/java/kr/co/uplus/ez/common/data/ResponseMessage.java new file mode 100644 index 0000000..9f58221 --- /dev/null +++ b/src/main/java/kr/co/uplus/ez/common/data/ResponseMessage.java @@ -0,0 +1,16 @@ +package kr.co.uplus.ez.common.data; + +import java.io.Serializable; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@SuppressWarnings("serial") +@Data +public class ResponseMessage implements Serializable{ + + @ApiModelProperty(example = "응답코드") + protected String retCode; + @ApiModelProperty(example = "응답메시지") + protected String retMsg; +} \ No newline at end of file diff --git a/src/main/java/kr/co/uplus/ez/common/data/RestResult.java b/src/main/java/kr/co/uplus/ez/common/data/RestResult.java deleted file mode 100644 index 37738fd..0000000 --- a/src/main/java/kr/co/uplus/ez/common/data/RestResult.java +++ /dev/null @@ -1,59 +0,0 @@ -package kr.co.uplus.ez.common.data; - -import kr.co.uplus.ez.common.consts.ResultCode; - -public class RestResult implements IResult { - protected boolean success = true; - protected ResultCode code; - protected String message; - protected T data; - - public RestResult() { - } - public RestResult(boolean success) { - this.success = success; - } - public boolean isSuccess() { - return success; - } - public RestResult setSuccess(boolean success) { - this.success = success; - return this; - } - public ResultCode getCode() { - return code; - } - public RestResult setCode(ResultCode code) { - this.code = code; - return this; - } - public String getMessage() { - return message; - } - public RestResult setMessage(String message) { - this.message = message; - return this; - } - public T getData() { - return data; - } - public RestResult setData(T data) { - this.data = data; - return this; - } - @Override - public String toString() { - StringBuilder builder = new StringBuilder(); - builder.append("RestResult [success="); - builder.append(success); - builder.append(", code="); - builder.append(code); - builder.append(", message="); - builder.append(message); - builder.append(", data="); - builder.append(data); - builder.append("]"); - return builder.toString(); - } - -} diff --git a/src/main/java/kr/co/uplus/ez/common/data/Result.java b/src/main/java/kr/co/uplus/ez/common/data/Result.java deleted file mode 100644 index e4e80e7..0000000 --- a/src/main/java/kr/co/uplus/ez/common/data/Result.java +++ /dev/null @@ -1,62 +0,0 @@ -package kr.co.uplus.ez.common.data; - -public class Result implements IResult { - protected boolean success = true; - protected boolean result = true; - protected String code; - protected String message; - protected T data; - - public Result() { - } - public Result(boolean success) { - this.success = success; - } - public boolean isSuccess() { - return success; - } - public boolean isResult() { - return result; - } - public Result setSuccess(boolean success) { - this.success = success; - this.result = success; - return this; - } - public String getCode() { - return code; - } - public Result setCode(String code) { - this.code = code; - return this; - } - public String getMessage() { - return message; - } - public Result setMessage(String message) { - this.message = message; - return this; - } - public T getData() { - return data; - } - public Result setData(T data) { - this.data = data; - return this; - } - @Override - public String toString() { - StringBuilder builder = new StringBuilder(); - builder.append("Result [success="); - builder.append(success); - builder.append(", code="); - builder.append(code); - builder.append(", message="); - builder.append(message); - builder.append(", data="); - builder.append(data); - builder.append("]"); - return builder.toString(); - } - -} diff --git a/src/main/java/kr/co/uplus/ez/common/data/SearchInfo.java b/src/main/java/kr/co/uplus/ez/common/data/SearchInfo.java deleted file mode 100644 index 172dc35..0000000 --- a/src/main/java/kr/co/uplus/ez/common/data/SearchInfo.java +++ /dev/null @@ -1,27 +0,0 @@ -package kr.co.uplus.ez.common.data; - -public class SearchInfo extends PageScope { - - private String sort; - private String searchType; - private String searchText; - - public String getSearchType() { - return searchType; - } - public void setSearchType(String searchType) { - this.searchType = searchType; - } - public String getSearchText() { - return searchText; - } - public void setSearchText(String searchText) { - this.searchText = searchText; - } - public String getSort() { - return sort; - } - public void setSort(String sort) { - this.sort = sort; - } -} diff --git a/src/main/java/kr/co/uplus/ez/common/consts/UserStatus.java b/src/main/java/kr/co/uplus/ez/common/data/UserStatus.java similarity index 93% rename from src/main/java/kr/co/uplus/ez/common/consts/UserStatus.java rename to src/main/java/kr/co/uplus/ez/common/data/UserStatus.java index 6395da7..3346ec0 100644 --- a/src/main/java/kr/co/uplus/ez/common/consts/UserStatus.java +++ b/src/main/java/kr/co/uplus/ez/common/data/UserStatus.java @@ -1,4 +1,4 @@ -package kr.co.uplus.ez.common.consts; +package kr.co.uplus.ez.common.data; import java.util.HashMap; import java.util.Map; diff --git a/src/main/java/kr/co/uplus/ez/common/auth/jwt/JwtAuthCookieFilter.java b/src/main/java/kr/co/uplus/ez/common/jwt/JwtAuthCookieFilter.java similarity index 66% rename from src/main/java/kr/co/uplus/ez/common/auth/jwt/JwtAuthCookieFilter.java rename to src/main/java/kr/co/uplus/ez/common/jwt/JwtAuthCookieFilter.java index dd3f23a..194af5e 100644 --- a/src/main/java/kr/co/uplus/ez/common/auth/jwt/JwtAuthCookieFilter.java +++ b/src/main/java/kr/co/uplus/ez/common/jwt/JwtAuthCookieFilter.java @@ -1,4 +1,4 @@ -package kr.co.uplus.ez.common.auth.jwt; +package kr.co.uplus.ez.common.jwt; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; @@ -13,12 +13,12 @@ import io.jsonwebtoken.JwtException; public class JwtAuthCookieFilter extends JwtAuthFilter { @Autowired private JwtService jwtSvc; - - + + public JwtAuthCookieFilter(JwtProperties jwtProps) { super(jwtProps); } - + @Override public String getToken(HttpServletRequest request) { String payload = null, signature = null; @@ -42,9 +42,32 @@ public class JwtAuthCookieFilter extends JwtAuthFilter { return token; } + @Override + public String getRefreshToken(HttpServletRequest request) { + String payload = null, signature = null; + Cookie[] cookies = request.getCookies(); + if (cookies != null) { + for (Cookie cookie : cookies) { + // 1. 쿠키에서 jwt 토큰 header.paload 부분 읽기 + if (jwtProps.getPart3().equals(cookie.getName())) { + payload = cookie.getValue(); + } + // 2. 쿠키에서 jwt 토큰 signature 부분 읽기 + else if (jwtProps.getPart4().equals(cookie.getName())) { + signature = cookie.getValue(); + } + } + } + if (cookies == null || payload == null || signature == null) { + return null; + } + String token = payload + "." + signature; + return token; + } + @Override public void onValidateSuccess(HttpServletRequest request, HttpServletResponse response, Claims claims) { - // 토큰 업데이트 - Sliding Sessions + // 토큰 업데이트 - Sliding Sessions jwtSvc.updatePrivateToken(response, claims); } @@ -54,5 +77,5 @@ public class JwtAuthCookieFilter extends JwtAuthFilter { jwtSvc.destroyPrivateToken(request, response); } } - + } \ No newline at end of file diff --git a/src/main/java/kr/co/uplus/ez/common/auth/jwt/JwtAuthFilter.java b/src/main/java/kr/co/uplus/ez/common/jwt/JwtAuthFilter.java similarity index 70% rename from src/main/java/kr/co/uplus/ez/common/auth/jwt/JwtAuthFilter.java rename to src/main/java/kr/co/uplus/ez/common/jwt/JwtAuthFilter.java index 0b1d305..0d336ae 100644 --- a/src/main/java/kr/co/uplus/ez/common/auth/jwt/JwtAuthFilter.java +++ b/src/main/java/kr/co/uplus/ez/common/jwt/JwtAuthFilter.java @@ -1,7 +1,6 @@ -package kr.co.uplus.ez.common.auth.jwt; +package kr.co.uplus.ez.common.jwt; import static kr.co.uplus.ez.config.SecurityConfig.LOGIN_API_URL; -import static kr.co.uplus.ez.config.SecurityConfig.PUBLIC_API_URL; import java.io.IOException; import java.util.Map; @@ -16,10 +15,11 @@ import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.web.filter.OncePerRequestFilter; import io.jsonwebtoken.Claims; +import io.jsonwebtoken.ExpiredJwtException; import io.jsonwebtoken.JwtException; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.impl.TextCodec; -import kr.co.uplus.ez.common.consts.Const; +import kr.co.uplus.ez.common.data.Const; import kr.co.uplus.ez.common.utils.WebUtils; public abstract class JwtAuthFilter extends OncePerRequestFilter { @@ -32,6 +32,7 @@ public abstract class JwtAuthFilter extends OncePerRequestFilter { } public abstract String getToken(HttpServletRequest request); + public abstract String getRefreshToken(HttpServletRequest request); public abstract void onValidateSuccess(HttpServletRequest request, HttpServletResponse response, Claims claims); public abstract void onValidateException(HttpServletRequest request, HttpServletResponse response, JwtException exception); @@ -46,7 +47,7 @@ public abstract class JwtAuthFilter extends OncePerRequestFilter { // 쿠키에서 토큰 추출 (client - server token) String token = getToken(request); - + String log = request.getRequestURL().toString(); if(token == null) { chain.doFilter(request, response); // go to the next filter in the filter chain return; @@ -62,7 +63,7 @@ public abstract class JwtAuthFilter extends OncePerRequestFilter { .parseClaimsJws(token) .getBody(); - String subject = claims.getSubject(); + String subject = claims.getSubject(); if(subject != null) { onValidateSuccess(request, response, claims); @@ -75,9 +76,35 @@ public abstract class JwtAuthFilter extends OncePerRequestFilter { // 6. 사용자 인증 처리 (Now, user is authenticated) SecurityContextHolder.getContext().setAuthentication(auth); } - } - catch(JwtException e) { - onValidateException(request, response, e); + }catch(JwtException e) { + if (e instanceof ExpiredJwtException) { + String reToken = getRefreshToken(request); + try { + // 4. 토큰 검증 + claims = Jwts.parser() + .setSigningKey(TextCodec.BASE64.decode(jwtProps.getKeyString())) + .parseClaimsJws(reToken) + .getBody(); + + String subject = claims.getSubject(); + if(subject != null) { + onValidateSuccess(request, response, claims); + return; + }else { + throw new JwtException(null); + } + }catch(JwtException e1) { + // 쿠키 삭제 + onValidateException(request, response, e1); + } + } + else { + WebUtils.responseJson(response, HttpServletResponse.SC_UNAUTHORIZED); + onValidateException(request, response, e); + } + //onValidateException(request, response, e); + //throw e; + }catch (Exception e) { throw e; } diff --git a/src/main/java/kr/co/uplus/ez/common/auth/jwt/JwtAuthHeaderFilter.java b/src/main/java/kr/co/uplus/ez/common/jwt/JwtAuthHeaderFilter.java similarity index 87% rename from src/main/java/kr/co/uplus/ez/common/auth/jwt/JwtAuthHeaderFilter.java rename to src/main/java/kr/co/uplus/ez/common/jwt/JwtAuthHeaderFilter.java index 8c4e498..96c8619 100644 --- a/src/main/java/kr/co/uplus/ez/common/auth/jwt/JwtAuthHeaderFilter.java +++ b/src/main/java/kr/co/uplus/ez/common/jwt/JwtAuthHeaderFilter.java @@ -1,4 +1,4 @@ -package kr.co.uplus.ez.common.auth.jwt; +package kr.co.uplus.ez.common.jwt; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -7,21 +7,22 @@ import io.jsonwebtoken.Claims; import io.jsonwebtoken.JwtException; public class JwtAuthHeaderFilter extends JwtAuthFilter { - + public JwtAuthHeaderFilter(JwtProperties jwtProps) { super(jwtProps); } - + + @Override public String getToken(HttpServletRequest request) { // 1. access token이 저장된 헤더 읽기 String header = request.getHeader(jwtProps.getHeader()); - + // 2. 헤더 값 검사 if(header == null || !header.startsWith(jwtProps.getPrefix())) { return null; } - + // 3. Authorization 헤더에서 토큰 추출 return header.replace(jwtProps.getPrefix(), ""); } @@ -34,4 +35,10 @@ public class JwtAuthHeaderFilter extends JwtAuthFilter { public void onValidateException(HttpServletRequest request, HttpServletResponse response, JwtException exception) { } + + @Override + public String getRefreshToken(HttpServletRequest request) { + return ""; + } + } \ No newline at end of file diff --git a/src/main/java/kr/co/uplus/ez/common/auth/jwt/JwtData.java b/src/main/java/kr/co/uplus/ez/common/jwt/JwtData.java similarity index 65% rename from src/main/java/kr/co/uplus/ez/common/auth/jwt/JwtData.java rename to src/main/java/kr/co/uplus/ez/common/jwt/JwtData.java index 486fc19..48ac084 100644 --- a/src/main/java/kr/co/uplus/ez/common/auth/jwt/JwtData.java +++ b/src/main/java/kr/co/uplus/ez/common/jwt/JwtData.java @@ -1,4 +1,4 @@ -package kr.co.uplus.ez.common.auth.jwt; +package kr.co.uplus.ez.common.jwt; import lombok.Data; diff --git a/src/main/java/kr/co/uplus/ez/common/auth/jwt/JwtProperties.java b/src/main/java/kr/co/uplus/ez/common/jwt/JwtProperties.java similarity index 86% rename from src/main/java/kr/co/uplus/ez/common/auth/jwt/JwtProperties.java rename to src/main/java/kr/co/uplus/ez/common/jwt/JwtProperties.java index 5b55e10..30b1b9a 100644 --- a/src/main/java/kr/co/uplus/ez/common/auth/jwt/JwtProperties.java +++ b/src/main/java/kr/co/uplus/ez/common/jwt/JwtProperties.java @@ -1,4 +1,4 @@ -package kr.co.uplus.ez.common.auth.jwt; +package kr.co.uplus.ez.common.jwt; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; @@ -14,6 +14,8 @@ public class JwtProperties { private int privateTokenExpiration; // seconds private String part1; private String part2; + private String part3; + private String part4; private int accessTokenExpiration; // seconds private int refreshTokenExpiration; // seconds diff --git a/src/main/java/kr/co/uplus/ez/common/auth/jwt/JwtService.java b/src/main/java/kr/co/uplus/ez/common/jwt/JwtService.java similarity index 60% rename from src/main/java/kr/co/uplus/ez/common/auth/jwt/JwtService.java rename to src/main/java/kr/co/uplus/ez/common/jwt/JwtService.java index fae6642..4c52334 100644 --- a/src/main/java/kr/co/uplus/ez/common/auth/jwt/JwtService.java +++ b/src/main/java/kr/co/uplus/ez/common/jwt/JwtService.java @@ -1,4 +1,4 @@ -package kr.co.uplus.ez.common.auth.jwt; +package kr.co.uplus.ez.common.jwt; import java.util.Date; import java.util.Map; @@ -8,7 +8,9 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.joda.time.DateTime; +import org.mybatis.spring.SqlSessionTemplate; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.security.core.Authentication; import org.springframework.stereotype.Service; @@ -17,13 +19,23 @@ import io.jsonwebtoken.JwtException; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; import io.jsonwebtoken.impl.TextCodec; -import kr.co.uplus.ez.common.auth.AuthUser; +import kr.co.uplus.ez.api.login.LoginMapper; +import kr.co.uplus.ez.api.login.dto.AuthUser; @Service public class JwtService { + @Autowired private JwtProperties jwtProps; + @Autowired + @Qualifier("sqlSessionTemplateDb1") + private SqlSessionTemplate sqlSessionMaster; + + @Autowired + @Qualifier("sqlSessionTemplateDb2") + private SqlSessionTemplate sqlSessionSlave; + public void generatePrivateToken(HttpServletResponse response, Authentication auth) { Claims claims = coreClaims(auth, jwtProps.getPrivateTokenExpiration()); @@ -37,6 +49,52 @@ public class JwtService { setTokenToCookie(response, token); } + public void generateReSetToken(HttpServletResponse response, Authentication auth, boolean tokenFlag) { + if(tokenFlag) { + // AccessToken + Claims accessClaims = coreClaims(auth, jwtProps.getAccessTokenExpiration()); + + // 필요하면 다른 정보 추가 + JwtData data = new JwtData(); + data.setInfo("추가 claim 정보"); + accessClaims.put("data", data); + + String accessToken = generateToken(accessClaims); + // 쿠키에 토큰 추가 - 보안 강화 + setTokenToCookie(response, accessToken); + + } + } + + public void generatePrivateToken(HttpServletResponse response, Authentication auth, boolean tokenFlag) { + if(tokenFlag) { + // AccessToken + Claims accessClaims = coreClaims(auth, jwtProps.getAccessTokenExpiration()); + Claims refreshClaims = coreClaims(auth, jwtProps.getRefreshTokenExpiration()); + + // 필요하면 다른 정보 추가 + JwtData data = new JwtData(); + data.setInfo("추가 claim 정보"); + accessClaims.put("data", data); + refreshClaims.put("data", data); + + + String accessToken = generateToken(accessClaims); + String refreshToken = generateToken(refreshClaims); + // 쿠키에 토큰 추가 - 보안 강화 + setTokenToCookie(response, accessToken); + setRefreshTokenToCookie(response, refreshToken); + + // RefreshToken 저장. + LoginMapper loginMapper = sqlSessionMaster.getMapper(LoginMapper.class); + AuthUser authUser = new AuthUser(); + authUser.setOprtrId(auth.getName()); + authUser.setRFrshTkn(refreshToken); + authUser.setRefreshTokenExpiration(jwtProps.getRefreshTokenExpiration()); + loginMapper.updateAdmUser(authUser); + } + } + private Claims coreClaims(Authentication auth, int expire) { String subject = auth.getName(); DateTime now = DateTime.now(); @@ -79,6 +137,23 @@ public class JwtService { response.addCookie(part2); } + private void setRefreshTokenToCookie(HttpServletResponse response, String refreshToken) { + int idx = refreshToken.lastIndexOf("."); + String payload = refreshToken.substring(0, idx); + String signature = refreshToken.substring(idx+1); + + // header.paload 부분만 일반 쿠키에 저장 - JS로 읽기 가능 + Cookie part3 = new Cookie(jwtProps.getPart3(), payload); + part3.setPath("/"); + response.addCookie(part3); + + // signature 부분만 httpOnly 쿠키에 저장 - JS로 읽기 불가능 + Cookie part4 = new Cookie(jwtProps.getPart4(), signature); + part4.setHttpOnly(true); + part4.setPath("/"); + response.addCookie(part4); + } + public void destroyPrivateToken(HttpServletRequest request, HttpServletResponse response) { Cookie[] cookies = request.getCookies(); if (cookies != null) { @@ -93,7 +168,8 @@ public class JwtService { public void updatePrivateToken(HttpServletResponse response, Claims claims) { DateTime now = DateTime.now(); - Date expiration = now.plusSeconds(jwtProps.getPrivateTokenExpiration()).toDate(); + //Date expiration = now.plusSeconds(jwtProps.getPrivateTokenExpiration()).toDate(); + Date expiration = now.plusSeconds(jwtProps.getAccessTokenExpiration()).toDate(); claims.setIssuedAt(now.toDate()).setExpiration(expiration); String token = generateToken(claims); @@ -114,11 +190,11 @@ public class JwtService { return generateToken(claims); } - public PublicToken generatePublicToken(Authentication auth) { - String access = accessToken(auth); - String refresh = refreshToken(auth); - return new PublicToken(access, refresh); - } +// public PublicToken generatePublicToken(Authentication auth) { +// String access = accessToken(auth); +// String refresh = refreshToken(auth); +// return new PublicToken(access, refresh); +// } public String accessToken(Authentication auth) { Claims claims = coreClaims(auth, jwtProps.getAccessTokenExpiration()); @@ -165,5 +241,4 @@ public class JwtService { throw e; } } - } diff --git a/src/main/java/kr/co/uplus/ez/common/auth/jwt/JwtUser.java b/src/main/java/kr/co/uplus/ez/common/jwt/JwtUser.java similarity index 56% rename from src/main/java/kr/co/uplus/ez/common/auth/jwt/JwtUser.java rename to src/main/java/kr/co/uplus/ez/common/jwt/JwtUser.java index 8d35cde..4fa3334 100644 --- a/src/main/java/kr/co/uplus/ez/common/auth/jwt/JwtUser.java +++ b/src/main/java/kr/co/uplus/ez/common/jwt/JwtUser.java @@ -1,4 +1,4 @@ -package kr.co.uplus.ez.common.auth.jwt; +package kr.co.uplus.ez.common.jwt; import java.util.Collection; import java.util.List; @@ -10,43 +10,19 @@ import org.springframework.security.core.authority.SimpleGrantedAuthority; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import kr.co.uplus.ez.common.auth.AuthUser; +import kr.co.uplus.ez.api.login.dto.AuthUser; @JsonIgnoreProperties({ "status", "userPwd", "pwdChgDt", "loginFailCnt", "phone", "sms", "username", "password", "enabled", "accountNonExpired", "accountNonLocked", "credentialsNonExpired" }) public class JwtUser extends AuthUser { private static final long serialVersionUID = -1233591656437541107L; - - /* ckr - public static JwtUser createJwtUser(AuthUser user) { - JwtUser u = new JwtUser(); - u.setCorpId(user.getCorpId()); - u.setUserId(user.getUserId()); - u.setUserNm(user.getUserNm()); - u.setAuthorities(user.getAuthorities()); - return u; - } - - public static JwtUser createAuthUser(Map principal) { - JwtUser u = new JwtUser(); - if (principal.get("corpId") != null) { - u.setCorpId((String) principal.get("corpId")); - } - u.setUserId((String) principal.get("userId")); - u.setUserNm((String) principal.get("userNm")); - @SuppressWarnings({ "unchecked", "rawtypes" }) - Collection authorities = ((List) principal.get("authorities")).stream() - .map(o -> new SimpleGrantedAuthority((String) o.get("authority"))).collect(Collectors.toList()); - u.setAuthorities(authorities); - return u; - } - */ public static JwtUser createJwtUser(AuthUser user) { JwtUser u = new JwtUser(); u.setCorpId(user.getCorpId()); u.setOprtrId(user.getOprtrId()); u.setOprtrNm(user.getUsername()); + u.setHpNo(user.getHpNo()); u.setAuthorities(user.getAuthorities()); return u; } @@ -56,8 +32,8 @@ public class JwtUser extends AuthUser { if (principal.get("corpId") != null) { u.setCorpId((String) principal.get("corpId")); } - u.setOprtrId((String) principal.get("userId")); - u.setOprtrNm((String) principal.get("userNm")); + u.setOprtrId((String) principal.get("oprtrId")); + u.setOprtrNm((String) principal.get("oprtrId")); @SuppressWarnings({ "unchecked", "rawtypes" }) Collection authorities = ((List) principal.get("authorities")).stream() .map(o -> new SimpleGrantedAuthority((String) o.get("authority"))).collect(Collectors.toList()); diff --git a/src/main/java/kr/co/uplus/ez/common/jwt/PublicToken.java b/src/main/java/kr/co/uplus/ez/common/jwt/PublicToken.java new file mode 100644 index 0000000..7d5a785 --- /dev/null +++ b/src/main/java/kr/co/uplus/ez/common/jwt/PublicToken.java @@ -0,0 +1,13 @@ +//package kr.co.uplus.ez.common.jwt; +// +//import lombok.AllArgsConstructor; +//import lombok.Data; +//import lombok.NoArgsConstructor; +// +//@Data +//@NoArgsConstructor +//@AllArgsConstructor +//public class PublicToken { +// private String accessToken; +// private String refreshToken; +//} diff --git a/src/main/java/kr/co/uplus/ez/common/security/XssFilter.java b/src/main/java/kr/co/uplus/ez/common/security/XssFilter.java index 68fb3ea..568f54d 100644 --- a/src/main/java/kr/co/uplus/ez/common/security/XssFilter.java +++ b/src/main/java/kr/co/uplus/ez/common/security/XssFilter.java @@ -12,7 +12,7 @@ import javax.servlet.http.HttpServletRequestWrapper; import org.springframework.web.filter.GenericFilterBean; -import kr.co.uplus.ez.common.consts.ConfigProps; +import kr.co.uplus.ez.common.data.ConfigProps; import kr.co.uplus.ez.common.utils.WebUtils; diff --git a/src/main/java/kr/co/uplus/ez/common/utils/EncryptionUtil.java b/src/main/java/kr/co/uplus/ez/common/utils/EncryptionUtil.java index 82a138c..d01d2ad 100644 --- a/src/main/java/kr/co/uplus/ez/common/utils/EncryptionUtil.java +++ b/src/main/java/kr/co/uplus/ez/common/utils/EncryptionUtil.java @@ -1,397 +1,397 @@ -package kr.co.uplus.ez.common.utils; - -import java.io.File; -import java.io.UnsupportedEncodingException; -import java.math.BigInteger; -import java.nio.charset.StandardCharsets; -import java.security.InvalidKeyException; -import java.security.MessageDigest; -import java.security.NoSuchAlgorithmException; -import java.util.Arrays; - -import javax.crypto.Cipher; -import javax.crypto.Mac; -import javax.crypto.spec.SecretKeySpec; - -import org.apache.commons.codec.DecoderException; -import org.apache.commons.codec.binary.Base64; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import lombok.extern.slf4j.Slf4j; - -@Slf4j -public class EncryptionUtil { - - // 파일구분자 - static final char FILE_SEPARATOR = File.separatorChar; - - static final int BUFFER_SIZE = 1024; - - /** - * 비밀번호를 암호화하는 기능(복호화가 되면 안되므로 SHA-256 인코딩 방식 적용) - * - * @param password 암호화될 패스워드 - * @param id salt로 사용될 사용자 ID 지정 - * @return - * @throws Exception - */ - public static String encryptPassword(String password, String id) throws Exception { - - if (password == null) - return ""; - if (id == null) - return ""; - - byte[] hashValue = null; - - MessageDigest md = MessageDigest.getInstance("SHA-256"); - - md.reset(); - md.update(id.getBytes()); - - hashValue = md.digest(password.getBytes()); - - return new String(Base64.encodeBase64(hashValue)); - } - - /** - * 비밀번호를 암호화하는 기능(복호화가 되면 안되므로 SHA-256 인코딩 방식 적용) - * - * @param data 암호화할 비밀번호 - * @param salt Salt - * @return 암호화된 비밀번호 - * @throws Exception - */ - public static String encryptPassword(String data, byte[] salt) throws Exception { - - if (data == null) { - return ""; - } - - byte[] hashValue = null; // 해쉬값 - - MessageDigest md = MessageDigest.getInstance("SHA-256"); - - md.reset(); - md.update(salt); - - hashValue = md.digest(data.getBytes()); - - return new String(Base64.encodeBase64(hashValue)); - } - - /** - * 비밀번호를 암호화된 패스워드 검증(salt가 사용된 경우만 적용). - * - * @param data 원 패스워드 - * @param encoded 해쉬처리된 패스워드(Base64 인코딩) - * @return - * @throws Exception - */ - public static boolean checkPassword(String data, String encoded, byte[] salt) throws Exception { - byte[] hashValue = null; // 해쉬값 - - MessageDigest md = MessageDigest.getInstance("SHA-256"); - - md.reset(); - md.update(salt); - hashValue = md.digest(data.getBytes()); - - return MessageDigest.isEqual(hashValue, Base64.decodeBase64(encoded.getBytes())); - } - - public static boolean checkPassword(String data, String encoded, String id) throws Exception { - byte[] hashValue = null; // 해쉬값 - - MessageDigest md = MessageDigest.getInstance("SHA-256"); - - md.reset(); - md.update(id.getBytes()); - hashValue = md.digest(data.getBytes()); - - return MessageDigest.isEqual(hashValue, Base64.decodeBase64(encoded.getBytes())); - } - - /** - * SHA1. - * - * @param message - * @return - * @throws Exception - * @throws NoSuchAlgorithmException - * @throws InvalidKeyException - */ - public static String getSHA1Encrypt(String message) - throws Exception, NoSuchAlgorithmException, InvalidKeyException { - StringBuffer hexString = new StringBuffer(); - - MessageDigest md = MessageDigest.getInstance("SHA-1"); - - byte[] hash = md.digest(message.getBytes("UTF-8")); - - for (int i = 0; i < hash.length; i++) { - String hex = Integer.toHexString(0xFF & hash[i]); - - if (hex.length() == 1) { - hexString.append('0'); - } - hexString.append(hex); - } - - return hexString.toString(); - } - - /** - * SHA256. - * - * @param message - * @return - * @throws Exception - * @throws NoSuchAlgorithmException - * @throws InvalidKeyException - */ - public static String getSHA256Encrypt(String message) - throws Exception, NoSuchAlgorithmException, InvalidKeyException { - StringBuffer hexString = new StringBuffer(); - - MessageDigest md = MessageDigest.getInstance("SHA-256"); - - byte[] hash = md.digest(message.getBytes("UTF-8")); - - for (int i = 0; i < hash.length; i++) { - String hex = Integer.toHexString(0xFF & hash[i]); - - if (hex.length() == 1) { - hexString.append('0'); - } - hexString.append(hex); - } - - return hexString.toString(); - } - - /** - * SHA1 - * - * @param message - * @return - * @throws Exception - * @throws NoSuchAlgorithmException - * @throws InvalidKeyException - */ - public static byte[] getSHA1EncryptByte(String message) - throws Exception, NoSuchAlgorithmException, InvalidKeyException { - MessageDigest digest = MessageDigest.getInstance("SHA-1"); - digest.update(message.getBytes()); - return digest.digest(); - } - - /** - * HmacSHA256 값 비교 로직. - * - * @param message - * @param reqHashData - * @return - * @throws NoSuchAlgorithmException - * @throws InvalidKeyException - * @throws DecoderException - */ - public static boolean isHashCompare(String message, String reqHashData) - throws NoSuchAlgorithmException, InvalidKeyException, DecoderException { - String key = System.getProperty("hmac.key"); - boolean isHashCompare = true; - - byte[] keyBytes = key.getBytes(StandardCharsets.UTF_8); - SecretKeySpec secretKeySpec = new SecretKeySpec(keyBytes, "HmacSHA256"); - - Mac mac = Mac.getInstance("HmacSHA256"); - mac.init(secretKeySpec); - byte[] macBytes = mac.doFinal(message.getBytes()); - - byte[] ba = new byte[reqHashData.length() / 2]; - for (int i = 0; i < ba.length; i++) { - ba[i] = ((byte) Integer.parseInt(reqHashData.substring(2 * i, 2 * i + 2), 16)); - } - - if (!MessageDigest.isEqual(macBytes, ba)) { - isHashCompare = false; - } - - return isHashCompare; - } - - public byte[] aesEncryptEcb(String sKey, String sText) { - byte[] key = null; - byte[] text = null; - byte[] encrypted = null; - final int AES_KEY_SIZE_128 = 128; - - try { - // UTF-8 - key = sKey.getBytes("UTF-8"); - - // Key size (128bit, 16byte) - key = Arrays.copyOf(key, AES_KEY_SIZE_128 / 8); - - // UTF-8 - text = sText.getBytes("UTF-8"); - - // AES/EBC/PKCS5Padding - Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); - cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(key, "AES")); - encrypted = cipher.doFinal(text); - } catch (Exception e) { - encrypted = null; - log.error("aesEncryptEcb exception. : {}", e.getMessage()); - } - - return encrypted; - } - - /* - * AES128 Decrypt - */ - public byte[] aesDecryptEcb(String sKey, byte[] encrypted) throws UnsupportedEncodingException { - byte[] key = null; - byte[] decrypted = null; - final int AES_KEY_SIZE_128 = 128; - - try { - // UTF-8 - key = sKey.getBytes("UTF-8"); - - // Key size 128 (128bit, 16byte) - key = Arrays.copyOf(key, AES_KEY_SIZE_128 / 8); - - // AES/EBC/PKCS5Padding - Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); - cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(key, "AES")); - decrypted = cipher.doFinal(encrypted); - } catch (Exception e) { - decrypted = null; - log.error("aesDecryptEcb exception. : {}", e.getMessage()); - } - return decrypted; - } - - /* - * AES256 Encrypt - */ - public byte[] aes256EncryptEcb(String sKey, String sText) { - byte[] key = null; - byte[] text = null; - byte[] encrypted = null; - final int AES_KEY_SIZE_256 = 256; - - try { - // UTF-8 - key = sKey.getBytes("UTF-8"); - - // Key size (256bit, 16byte) - key = Arrays.copyOf(key, AES_KEY_SIZE_256 / 8); - - // UTF-8 - text = sText.getBytes("UTF-8"); - - // AES/EBC/PKCS5Padding - Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); - cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(key, "AES")); - encrypted = cipher.doFinal(text); - } catch (Exception e) { - encrypted = null; - log.error("aes256EncryptEcb exception. : {}", e.getMessage()); - } - - return encrypted; - } - - /* - * AES256 Decrypt - */ - public byte[] aes256DecryptEcb(String sKey, byte[] encrypted) throws UnsupportedEncodingException { - byte[] key = null; - byte[] decrypted = null; - final int AES_KEY_SIZE_256 = 256; - - try { - // UTF-8 - key = sKey.getBytes("UTF-8"); - - // Key size (256bit, 16byte) - key = Arrays.copyOf(key, AES_KEY_SIZE_256 / 8); - - // AES/EBC/PKCS5Padding - Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); - cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(key, "AES")); - decrypted = cipher.doFinal(encrypted); - } catch (Exception e) { - decrypted = null; - log.error("aes256DecryptEcb exception. : {}", e.getMessage()); - } - - return decrypted; - } - - public String toHexString(byte[] b) { - StringBuffer sb = new StringBuffer(); - - for (int i = 0; i < b.length; i++) { - sb.append(String.format("%02X", b[i])); - } - - return sb.toString(); - } - - public byte[] toHexString2(String test) { - int len = test.length(); - byte[] data = new byte[len / 2]; - - for (int i = 0; i < len; i += 2) { - data[i / 2] = (byte) ((Character.digit(test.charAt(i), 16) << 4) + Character.digit(test.charAt(i + 1), 16)); - } - - return data; - - } - - // 128 크기 sha-512 - public static String getCustomSHA512(String key1, String key2){ - - String result = null; - if(key1 == null) { - key1 = ""; - } - - if(key2 == null) { - key2 = ""; - } - - try { - MessageDigest md = MessageDigest.getInstance("SHA-512"); - md.reset(); - md.update(key1.getBytes("utf8")); - md.update(key2.getBytes("utf8")); - result = String.format("%0128x", new BigInteger(1, md.digest())); - - - } catch (Exception e) { - e.printStackTrace(); - } - - return result; - - } - - public static void main(String[] args) throws Exception { - String userId = "jambler01"; - String userPwd = "1234qwer"; - String encPwd = ""; - - encPwd = getCustomSHA512(userId, userPwd); - System.out.println("[user Id Password]:[" + userId+" , "+userPwd + "]"); - System.out.println("[Encript Password]:[" + encPwd + "]"); - //System.out.println("[Password chk Result]:[" + checkPassword(userPwd, encPwd, userId) + "]"); - } - -} +package kr.co.uplus.ez.common.utils; + +import java.io.File; +import java.io.UnsupportedEncodingException; +import java.math.BigInteger; +import java.nio.charset.StandardCharsets; +import java.security.InvalidKeyException; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.util.Arrays; + +import javax.crypto.Cipher; +import javax.crypto.Mac; +import javax.crypto.spec.SecretKeySpec; + +import org.apache.commons.codec.DecoderException; +import org.apache.commons.codec.binary.Base64; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import lombok.extern.slf4j.Slf4j; + +@Slf4j +public class EncryptionUtil { + + // 파일구분자 + static final char FILE_SEPARATOR = File.separatorChar; + + static final int BUFFER_SIZE = 1024; + + /** + * 비밀번호를 암호화하는 기능(복호화가 되면 안되므로 SHA-256 인코딩 방식 적용) + * + * @param password 암호화될 패스워드 + * @param id salt로 사용될 사용자 ID 지정 + * @return + * @throws Exception + */ + public static String encryptPassword(String password, String id) throws Exception { + + if (password == null) + return ""; + if (id == null) + return ""; + + byte[] hashValue = null; + + MessageDigest md = MessageDigest.getInstance("SHA-256"); + + md.reset(); + md.update(id.getBytes()); + + hashValue = md.digest(password.getBytes()); + + return new String(Base64.encodeBase64(hashValue)); + } + + /** + * 비밀번호를 암호화하는 기능(복호화가 되면 안되므로 SHA-256 인코딩 방식 적용) + * + * @param data 암호화할 비밀번호 + * @param salt Salt + * @return 암호화된 비밀번호 + * @throws Exception + */ + public static String encryptPassword(String data, byte[] salt) throws Exception { + + if (data == null) { + return ""; + } + + byte[] hashValue = null; // 해쉬값 + + MessageDigest md = MessageDigest.getInstance("SHA-256"); + + md.reset(); + md.update(salt); + + hashValue = md.digest(data.getBytes()); + + return new String(Base64.encodeBase64(hashValue)); + } + + /** + * 비밀번호를 암호화된 패스워드 검증(salt가 사용된 경우만 적용). + * + * @param data 원 패스워드 + * @param encoded 해쉬처리된 패스워드(Base64 인코딩) + * @return + * @throws Exception + */ + public static boolean checkPassword(String data, String encoded, byte[] salt) throws Exception { + byte[] hashValue = null; // 해쉬값 + + MessageDigest md = MessageDigest.getInstance("SHA-256"); + + md.reset(); + md.update(salt); + hashValue = md.digest(data.getBytes()); + + return MessageDigest.isEqual(hashValue, Base64.decodeBase64(encoded.getBytes())); + } + + public static boolean checkPassword(String data, String encoded, String id) throws Exception { + byte[] hashValue = null; // 해쉬값 + + MessageDigest md = MessageDigest.getInstance("SHA-256"); + + md.reset(); + md.update(id.getBytes()); + hashValue = md.digest(data.getBytes()); + + return MessageDigest.isEqual(hashValue, Base64.decodeBase64(encoded.getBytes())); + } + + /** + * SHA1. + * + * @param message + * @return + * @throws Exception + * @throws NoSuchAlgorithmException + * @throws InvalidKeyException + */ + public static String getSHA1Encrypt(String message) + throws Exception, NoSuchAlgorithmException, InvalidKeyException { + StringBuffer hexString = new StringBuffer(); + + MessageDigest md = MessageDigest.getInstance("SHA-1"); + + byte[] hash = md.digest(message.getBytes("UTF-8")); + + for (int i = 0; i < hash.length; i++) { + String hex = Integer.toHexString(0xFF & hash[i]); + + if (hex.length() == 1) { + hexString.append('0'); + } + hexString.append(hex); + } + + return hexString.toString(); + } + + /** + * SHA256. + * + * @param message + * @return + * @throws Exception + * @throws NoSuchAlgorithmException + * @throws InvalidKeyException + */ + public static String getSHA256Encrypt(String message) + throws Exception, NoSuchAlgorithmException, InvalidKeyException { + StringBuffer hexString = new StringBuffer(); + + MessageDigest md = MessageDigest.getInstance("SHA-256"); + + byte[] hash = md.digest(message.getBytes("UTF-8")); + + for (int i = 0; i < hash.length; i++) { + String hex = Integer.toHexString(0xFF & hash[i]); + + if (hex.length() == 1) { + hexString.append('0'); + } + hexString.append(hex); + } + + return hexString.toString(); + } + + /** + * SHA1 + * + * @param message + * @return + * @throws Exception + * @throws NoSuchAlgorithmException + * @throws InvalidKeyException + */ + public static byte[] getSHA1EncryptByte(String message) + throws Exception, NoSuchAlgorithmException, InvalidKeyException { + MessageDigest digest = MessageDigest.getInstance("SHA-1"); + digest.update(message.getBytes()); + return digest.digest(); + } + + /** + * HmacSHA256 값 비교 로직. + * + * @param message + * @param reqHashData + * @return + * @throws NoSuchAlgorithmException + * @throws InvalidKeyException + * @throws DecoderException + */ + public static boolean isHashCompare(String message, String reqHashData) + throws NoSuchAlgorithmException, InvalidKeyException, DecoderException { + String key = System.getProperty("hmac.key"); + boolean isHashCompare = true; + + byte[] keyBytes = key.getBytes(StandardCharsets.UTF_8); + SecretKeySpec secretKeySpec = new SecretKeySpec(keyBytes, "HmacSHA256"); + + Mac mac = Mac.getInstance("HmacSHA256"); + mac.init(secretKeySpec); + byte[] macBytes = mac.doFinal(message.getBytes()); + + byte[] ba = new byte[reqHashData.length() / 2]; + for (int i = 0; i < ba.length; i++) { + ba[i] = ((byte) Integer.parseInt(reqHashData.substring(2 * i, 2 * i + 2), 16)); + } + + if (!MessageDigest.isEqual(macBytes, ba)) { + isHashCompare = false; + } + + return isHashCompare; + } + + public byte[] aesEncryptEcb(String sKey, String sText) { + byte[] key = null; + byte[] text = null; + byte[] encrypted = null; + final int AES_KEY_SIZE_128 = 128; + + try { + // UTF-8 + key = sKey.getBytes("UTF-8"); + + // Key size (128bit, 16byte) + key = Arrays.copyOf(key, AES_KEY_SIZE_128 / 8); + + // UTF-8 + text = sText.getBytes("UTF-8"); + + // AES/EBC/PKCS5Padding + Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); + cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(key, "AES")); + encrypted = cipher.doFinal(text); + } catch (Exception e) { + encrypted = null; + log.error("aesEncryptEcb exception. : {}", e.getMessage()); + } + + return encrypted; + } + + /* + * AES128 Decrypt + */ + public byte[] aesDecryptEcb(String sKey, byte[] encrypted) throws UnsupportedEncodingException { + byte[] key = null; + byte[] decrypted = null; + final int AES_KEY_SIZE_128 = 128; + + try { + // UTF-8 + key = sKey.getBytes("UTF-8"); + + // Key size 128 (128bit, 16byte) + key = Arrays.copyOf(key, AES_KEY_SIZE_128 / 8); + + // AES/EBC/PKCS5Padding + Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); + cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(key, "AES")); + decrypted = cipher.doFinal(encrypted); + } catch (Exception e) { + decrypted = null; + log.error("aesDecryptEcb exception. : {}", e.getMessage()); + } + return decrypted; + } + + /* + * AES256 Encrypt + */ + public byte[] aes256EncryptEcb(String sKey, String sText) { + byte[] key = null; + byte[] text = null; + byte[] encrypted = null; + final int AES_KEY_SIZE_256 = 256; + + try { + // UTF-8 + key = sKey.getBytes("UTF-8"); + + // Key size (256bit, 16byte) + key = Arrays.copyOf(key, AES_KEY_SIZE_256 / 8); + + // UTF-8 + text = sText.getBytes("UTF-8"); + + // AES/EBC/PKCS5Padding + Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); + cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(key, "AES")); + encrypted = cipher.doFinal(text); + } catch (Exception e) { + encrypted = null; + log.error("aes256EncryptEcb exception. : {}", e.getMessage()); + } + + return encrypted; + } + + /* + * AES256 Decrypt + */ + public byte[] aes256DecryptEcb(String sKey, byte[] encrypted) throws UnsupportedEncodingException { + byte[] key = null; + byte[] decrypted = null; + final int AES_KEY_SIZE_256 = 256; + + try { + // UTF-8 + key = sKey.getBytes("UTF-8"); + + // Key size (256bit, 16byte) + key = Arrays.copyOf(key, AES_KEY_SIZE_256 / 8); + + // AES/EBC/PKCS5Padding + Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); + cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(key, "AES")); + decrypted = cipher.doFinal(encrypted); + } catch (Exception e) { + decrypted = null; + log.error("aes256DecryptEcb exception. : {}", e.getMessage()); + } + + return decrypted; + } + + public String toHexString(byte[] b) { + StringBuffer sb = new StringBuffer(); + + for (int i = 0; i < b.length; i++) { + sb.append(String.format("%02X", b[i])); + } + + return sb.toString(); + } + + public byte[] toHexString2(String test) { + int len = test.length(); + byte[] data = new byte[len / 2]; + + for (int i = 0; i < len; i += 2) { + data[i / 2] = (byte) ((Character.digit(test.charAt(i), 16) << 4) + Character.digit(test.charAt(i + 1), 16)); + } + + return data; + + } + + // 128 크기 sha-512 + public static String getCustomSHA512(String key1, String key2){ + + String result = null; + if(key1 == null) { + key1 = ""; + } + + if(key2 == null) { + key2 = ""; + } + + try { + MessageDigest md = MessageDigest.getInstance("SHA-512"); + md.reset(); + md.update(key1.getBytes("utf8")); + md.update(key2.getBytes("utf8")); + result = String.format("%0128x", new BigInteger(1, md.digest())); + + + } catch (Exception e) { + e.printStackTrace(); + } + + return result; + + } + + public static void main(String[] args) throws Exception { + String userId = "jambler02"; + String userPwd = "1234qwer"; + String encPwd = ""; + + encPwd = getCustomSHA512(userId, userPwd); + System.out.println("[user Id Password]:[" + userId+" , "+userPwd + "]"); + System.out.println("[Encript Password]:[" + encPwd + "]"); + //System.out.println("[Password chk Result]:[" + checkPassword(userPwd, encPwd, userId) + "]"); + } + +} diff --git a/src/main/java/kr/co/uplus/ez/common/utils/SpringUtils.java b/src/main/java/kr/co/uplus/ez/common/utils/SpringUtils.java index 6f62cc0..31d3763 100644 --- a/src/main/java/kr/co/uplus/ez/common/utils/SpringUtils.java +++ b/src/main/java/kr/co/uplus/ez/common/utils/SpringUtils.java @@ -24,7 +24,7 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; -import kr.co.uplus.ez.common.auth.AuthUser; +import kr.co.uplus.ez.api.login.dto.AuthUser; public class SpringUtils { diff --git a/src/main/java/kr/co/uplus/ez/common/utils/WebUtils.java b/src/main/java/kr/co/uplus/ez/common/utils/WebUtils.java index d0c251a..8e721f3 100644 --- a/src/main/java/kr/co/uplus/ez/common/utils/WebUtils.java +++ b/src/main/java/kr/co/uplus/ez/common/utils/WebUtils.java @@ -10,7 +10,7 @@ import javax.servlet.http.HttpSession; import org.springframework.util.AntPathMatcher; -import kr.co.uplus.ez.common.consts.Const; +import kr.co.uplus.ez.common.data.Const; public class WebUtils { diff --git a/src/main/java/kr/co/uplus/ez/common/xss/EscapeCharacter.java b/src/main/java/kr/co/uplus/ez/common/xss/EscapeCharacter.java index cade1da..d6ddb0f 100644 --- a/src/main/java/kr/co/uplus/ez/common/xss/EscapeCharacter.java +++ b/src/main/java/kr/co/uplus/ez/common/xss/EscapeCharacter.java @@ -1,10 +1,10 @@ -package kr.co.uplus.ez.common.xss; - -import lombok.Data; - -@Data -public class EscapeCharacter { - private String target; - private String trans; - private String unescapeYn; -} +package kr.co.uplus.ez.common.xss; + +import lombok.Data; + +@Data +public class EscapeCharacter { + private String target; + private String trans; + private String unescapeYn; +} diff --git a/src/main/java/kr/co/uplus/ez/common/xss/XssPreventFactory.java b/src/main/java/kr/co/uplus/ez/common/xss/XssPreventFactory.java index 6a365c5..db665b7 100644 --- a/src/main/java/kr/co/uplus/ez/common/xss/XssPreventFactory.java +++ b/src/main/java/kr/co/uplus/ez/common/xss/XssPreventFactory.java @@ -1,39 +1,39 @@ -package kr.co.uplus.ez.common.xss; - -import java.io.FileNotFoundException; -import java.io.IOException; -import java.util.Properties; - -import org.springframework.beans.factory.config.YamlPropertiesFactoryBean; -import org.springframework.core.env.PropertiesPropertySource; -import org.springframework.core.env.PropertySource; -import org.springframework.core.io.support.EncodedResource; -import org.springframework.core.io.support.PropertySourceFactory; - -public class XssPreventFactory implements PropertySourceFactory { - - @Override - public PropertySource createPropertySource(String name, EncodedResource encodedResource) throws IOException { - YamlPropertiesFactoryBean factory = new YamlPropertiesFactoryBean(); - factory.setResources(encodedResource.getResource()); - Properties properties = factory.getObject(); - return new PropertiesPropertySource(encodedResource.getResource().getFilename(), properties); - } - - @SuppressWarnings("unused") - private Properties loadYamlIntoProperties(EncodedResource resource) throws FileNotFoundException { - try { - YamlPropertiesFactoryBean factory = new YamlPropertiesFactoryBean(); - factory.setResources(resource.getResource()); - factory.afterPropertiesSet(); - return factory.getObject(); - } catch (IllegalStateException e) { - // for ignoreResourceNotFound - Throwable cause = e.getCause(); - if (cause instanceof FileNotFoundException) - throw (FileNotFoundException) e.getCause(); - throw e; - } - } - -} +package kr.co.uplus.ez.common.xss; + +import java.io.FileNotFoundException; +import java.io.IOException; +import java.util.Properties; + +import org.springframework.beans.factory.config.YamlPropertiesFactoryBean; +import org.springframework.core.env.PropertiesPropertySource; +import org.springframework.core.env.PropertySource; +import org.springframework.core.io.support.EncodedResource; +import org.springframework.core.io.support.PropertySourceFactory; + +public class XssPreventFactory implements PropertySourceFactory { + + @Override + public PropertySource createPropertySource(String name, EncodedResource encodedResource) throws IOException { + YamlPropertiesFactoryBean factory = new YamlPropertiesFactoryBean(); + factory.setResources(encodedResource.getResource()); + Properties properties = factory.getObject(); + return new PropertiesPropertySource(encodedResource.getResource().getFilename(), properties); + } + + @SuppressWarnings("unused") + private Properties loadYamlIntoProperties(EncodedResource resource) throws FileNotFoundException { + try { + YamlPropertiesFactoryBean factory = new YamlPropertiesFactoryBean(); + factory.setResources(resource.getResource()); + factory.afterPropertiesSet(); + return factory.getObject(); + } catch (IllegalStateException e) { + // for ignoreResourceNotFound + Throwable cause = e.getCause(); + if (cause instanceof FileNotFoundException) + throw (FileNotFoundException) e.getCause(); + throw e; + } + } + +} diff --git a/src/main/java/kr/co/uplus/ez/common/xss/XssPreventer.java b/src/main/java/kr/co/uplus/ez/common/xss/XssPreventer.java index c8acd5f..038cac3 100644 --- a/src/main/java/kr/co/uplus/ez/common/xss/XssPreventer.java +++ b/src/main/java/kr/co/uplus/ez/common/xss/XssPreventer.java @@ -1,176 +1,176 @@ -package kr.co.uplus.ez.common.xss; - -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import org.apache.commons.collections4.CollectionUtils; -import org.apache.commons.lang3.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.PropertySource; - -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; - -import kr.co.uplus.ez.common.data.Const; -import lombok.Data; - -@Data -@Configuration -@ConfigurationProperties(prefix = "xssconfig") -@PropertySource(value = "classpath:xss-prevent.yml", factory = XssPreventFactory.class) -public class XssPreventer { - - private static final Logger log = LoggerFactory.getLogger(XssPreventer.class); - - public static String ESCAPE_TYPE_ALLOW = "allow"; - public static String ESCAPE_TYPE_EXCEPT = "except"; - public static String ESCAPE_TYPE; // allow, except - public static List EXCLUDE_URLS; - public static List ESCAPE_CHARACTERS; - public static List ALLOW_ELEMENTS; - public static List EXCEPT_ELEMENTS; - - @SuppressWarnings("static-access") - public void setEscapeType(String escapeType) { - this.ESCAPE_TYPE = escapeType; - } - - @SuppressWarnings("static-access") - public void setExcludeUrls(List excludeUrls) { - this.EXCLUDE_URLS = excludeUrls; - } - - @SuppressWarnings("static-access") - public void setEscapeCharacters(List escapeCharacters) { - this.ESCAPE_CHARACTERS = escapeCharacters; - } - - @SuppressWarnings("static-access") - public void setAllowElements(String allowElements) { - if (StringUtils.isNotBlank(allowElements)) { - this.ALLOW_ELEMENTS = Arrays.asList(StringUtils.split(allowElements, ",")); - } - } - - @SuppressWarnings("static-access") - public void setExceptElements(List exceptElements) { - this.EXCEPT_ELEMENTS = exceptElements; - } - - public static String escape(String value) { - // allow - escape-characters 를 모두 적용 후 allow-elements 만 <, > 치환 - if (StringUtils.equals(ESCAPE_TYPE, ESCAPE_TYPE_ALLOW)) { - if (!CollectionUtils.isEmpty(ESCAPE_CHARACTERS)) { - for (EscapeCharacter e : ESCAPE_CHARACTERS) { - value = value.replaceAll(StringUtils.trim(e.getTarget()), StringUtils.trim(e.getTrans())); - } - // 허용태그 치환 - value = replaceAllowElem(value); - } - // except - escape-characters 를 적용하지 않고 except-elements 에 해당되면 공백문자로 치환 - } else if (StringUtils.equals(ESCAPE_TYPE, ESCAPE_TYPE_EXCEPT)) { - value = replaceExceptElem(value); - } - return value; - } - - public static String replaceExceptElem(String value) { - if (StringUtils.isNotBlank(value)) { - Pattern p; - Matcher m; - String targetString = ""; - String matchString = ""; - String replaceString = ""; - - for (EscapeCharacter e : EXCEPT_ELEMENTS) { - targetString = e.getTarget(); - replaceString = e.getTrans(); - p = Pattern.compile(targetString); - m = p.matcher(value); - while (m.find()) { - matchString = m.group(0); - value = value.replace(matchString, replaceString); - } - } - } - return value; - } - - public static String replaceAllowElem(String value) { - if (StringUtils.isNotBlank(value)) { - Pattern p; - Matcher m; - String matchString = ""; - String replaceString = ""; - - // 영문, 숫자를 제외한 태그 허용 - /* - * p = Pattern.compile("<[\\W]*>"); m = p.matcher(value); while(m.find()) - * { matchString = m.group(0); replaceString = matchString.replaceFirst("<", - * "<"); value = value.replace(matchString, replaceString); - * - * matchString = replaceString; replaceString = replaceLast(matchString, ">", - * ">"); value = value.replace(matchString, replaceString); } - */ - - // 허용 태그에 등록된있으면 허용 - for (String s : ALLOW_ELEMENTS) { - s = StringUtils.trim(s); - p = Pattern.compile("<\\/?(?i)" + s + "(>|\\s+((?!>).)*?>)"); - m = p.matcher(value); - while (m.find()) { - matchString = m.group(0); - replaceString = matchString.replaceFirst("<", "<"); - value = value.replace(matchString, replaceString); - - matchString = replaceString; - replaceString = replaceLast(matchString, ">", ">"); - value = value.replace(matchString, replaceString); - } - } - } - return value; - } - - public static String unescape(String value) { - if (!CollectionUtils.isEmpty(ESCAPE_CHARACTERS)) { - for (EscapeCharacter e : ESCAPE_CHARACTERS) { - if (StringUtils.isNotBlank(e.getTrans()) && StringUtils.equals(Const.getCommYes(), e.getUnescapeYn())) { - value = value.replaceAll(e.getTrans(), e.getTarget()); - } - } - } - return value; - } - - @SuppressWarnings("unchecked") - public static Map unescapeMap(Map params) { - Map rtn = new HashMap(); - - try { - Gson gson = new GsonBuilder().disableHtmlEscaping().create(); - String jsonString = gson.toJson(params); - - String paramStr = unescape(jsonString); - rtn = gson.fromJson(paramStr, HashMap.class); - } catch (Exception e) { - log.error("XssPreventer.unescapeMap Error : {}, params : {}", e, params); - rtn = new HashMap(params); - } - - return rtn; - } - - private static String replaceLast(String string, String toReplace, String replacement) { - String s = string.replaceFirst("(?s)(.*)" + toReplace, "$1" + replacement); - return s; - } - -} +package kr.co.uplus.ez.common.xss; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.PropertySource; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; + +import kr.co.uplus.ez.common.data.Const; +import lombok.Data; + +@Data +@Configuration +@ConfigurationProperties(prefix = "xssconfig") +@PropertySource(value = "classpath:xss-prevent.yml", factory = XssPreventFactory.class) +public class XssPreventer { + + private static final Logger log = LoggerFactory.getLogger(XssPreventer.class); + + public static String ESCAPE_TYPE_ALLOW = "allow"; + public static String ESCAPE_TYPE_EXCEPT = "except"; + public static String ESCAPE_TYPE; // allow, except + public static List EXCLUDE_URLS; + public static List ESCAPE_CHARACTERS; + public static List ALLOW_ELEMENTS; + public static List EXCEPT_ELEMENTS; + + @SuppressWarnings("static-access") + public void setEscapeType(String escapeType) { + this.ESCAPE_TYPE = escapeType; + } + + @SuppressWarnings("static-access") + public void setExcludeUrls(List excludeUrls) { + this.EXCLUDE_URLS = excludeUrls; + } + + @SuppressWarnings("static-access") + public void setEscapeCharacters(List escapeCharacters) { + this.ESCAPE_CHARACTERS = escapeCharacters; + } + + @SuppressWarnings("static-access") + public void setAllowElements(String allowElements) { + if (StringUtils.isNotBlank(allowElements)) { + this.ALLOW_ELEMENTS = Arrays.asList(StringUtils.split(allowElements, ",")); + } + } + + @SuppressWarnings("static-access") + public void setExceptElements(List exceptElements) { + this.EXCEPT_ELEMENTS = exceptElements; + } + + public static String escape(String value) { + // allow - escape-characters 를 모두 적용 후 allow-elements 만 <, > 치환 + if (StringUtils.equals(ESCAPE_TYPE, ESCAPE_TYPE_ALLOW)) { + if (!CollectionUtils.isEmpty(ESCAPE_CHARACTERS)) { + for (EscapeCharacter e : ESCAPE_CHARACTERS) { + value = value.replaceAll(StringUtils.trim(e.getTarget()), StringUtils.trim(e.getTrans())); + } + // 허용태그 치환 + value = replaceAllowElem(value); + } + // except - escape-characters 를 적용하지 않고 except-elements 에 해당되면 공백문자로 치환 + } else if (StringUtils.equals(ESCAPE_TYPE, ESCAPE_TYPE_EXCEPT)) { + value = replaceExceptElem(value); + } + return value; + } + + public static String replaceExceptElem(String value) { + if (StringUtils.isNotBlank(value)) { + Pattern p; + Matcher m; + String targetString = ""; + String matchString = ""; + String replaceString = ""; + + for (EscapeCharacter e : EXCEPT_ELEMENTS) { + targetString = e.getTarget(); + replaceString = e.getTrans(); + p = Pattern.compile(targetString); + m = p.matcher(value); + while (m.find()) { + matchString = m.group(0); + value = value.replace(matchString, replaceString); + } + } + } + return value; + } + + public static String replaceAllowElem(String value) { + if (StringUtils.isNotBlank(value)) { + Pattern p; + Matcher m; + String matchString = ""; + String replaceString = ""; + + // 영문, 숫자를 제외한 태그 허용 + /* + * p = Pattern.compile("<[\\W]*>"); m = p.matcher(value); while(m.find()) + * { matchString = m.group(0); replaceString = matchString.replaceFirst("<", + * "<"); value = value.replace(matchString, replaceString); + * + * matchString = replaceString; replaceString = replaceLast(matchString, ">", + * ">"); value = value.replace(matchString, replaceString); } + */ + + // 허용 태그에 등록된있으면 허용 + for (String s : ALLOW_ELEMENTS) { + s = StringUtils.trim(s); + p = Pattern.compile("<\\/?(?i)" + s + "(>|\\s+((?!>).)*?>)"); + m = p.matcher(value); + while (m.find()) { + matchString = m.group(0); + replaceString = matchString.replaceFirst("<", "<"); + value = value.replace(matchString, replaceString); + + matchString = replaceString; + replaceString = replaceLast(matchString, ">", ">"); + value = value.replace(matchString, replaceString); + } + } + } + return value; + } + + public static String unescape(String value) { + if (!CollectionUtils.isEmpty(ESCAPE_CHARACTERS)) { + for (EscapeCharacter e : ESCAPE_CHARACTERS) { + if (StringUtils.isNotBlank(e.getTrans()) && StringUtils.equals(Const.COMM_YES, e.getUnescapeYn())) { + value = value.replaceAll(e.getTrans(), e.getTarget()); + } + } + } + return value; + } + + @SuppressWarnings("unchecked") + public static Map unescapeMap(Map params) { + Map rtn = new HashMap(); + + try { + Gson gson = new GsonBuilder().disableHtmlEscaping().create(); + String jsonString = gson.toJson(params); + + String paramStr = unescape(jsonString); + rtn = gson.fromJson(paramStr, HashMap.class); + } catch (Exception e) { + log.error("XssPreventer.unescapeMap Error : {}, params : {}", e, params); + rtn = new HashMap(params); + } + + return rtn; + } + + private static String replaceLast(String string, String toReplace, String replacement) { + String s = string.replaceFirst("(?s)(.*)" + toReplace, "$1" + replacement); + return s; + } + +} diff --git a/src/main/java/kr/co/uplus/ez/config/CommonCacheConfig.java b/src/main/java/kr/co/uplus/ez/config/CommonCacheConfig.java index e471f55..0e32f4a 100644 --- a/src/main/java/kr/co/uplus/ez/config/CommonCacheConfig.java +++ b/src/main/java/kr/co/uplus/ez/config/CommonCacheConfig.java @@ -1,24 +1,24 @@ -package kr.co.uplus.ez.config; - - -import java.util.Arrays; - -import org.springframework.cache.CacheManager; -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.cache.concurrent.ConcurrentMapCache; -import org.springframework.cache.support.SimpleCacheManager; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -@Configuration -@EnableCaching -public class CommonCacheConfig { - - @Bean - public CacheManager cacheManager() { - SimpleCacheManager simpleCacheManager = new SimpleCacheManager(); - simpleCacheManager.setCaches(Arrays.asList(new ConcurrentMapCache("sample"))); - return simpleCacheManager; - } - +package kr.co.uplus.ez.config; + + +import java.util.Arrays; + +import org.springframework.cache.CacheManager; +import org.springframework.cache.annotation.EnableCaching; +import org.springframework.cache.concurrent.ConcurrentMapCache; +import org.springframework.cache.support.SimpleCacheManager; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +@EnableCaching +public class CommonCacheConfig { + + @Bean + public CacheManager cacheManager() { + SimpleCacheManager simpleCacheManager = new SimpleCacheManager(); + simpleCacheManager.setCaches(Arrays.asList(new ConcurrentMapCache("sample"))); + return simpleCacheManager; + } + } \ No newline at end of file diff --git a/src/main/java/kr/co/uplus/ez/config/JasyptConfig.java b/src/main/java/kr/co/uplus/ez/config/JasyptConfig.java index e3bcb7c..7941902 100644 --- a/src/main/java/kr/co/uplus/ez/config/JasyptConfig.java +++ b/src/main/java/kr/co/uplus/ez/config/JasyptConfig.java @@ -1,48 +1,48 @@ -package kr.co.uplus.ez.config; - -import org.jasypt.encryption.StringEncryptor; -import org.jasypt.encryption.pbe.PooledPBEStringEncryptor; -import org.jasypt.encryption.pbe.config.SimpleStringPBEConfig; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -@Configuration -public class JasyptConfig { - - // EncKeyForUplus - @Value("${app.props.encKey:RW5jS2V5Rm9yVXBsdXM=}") - String encKey; - - @Bean("jasyptStringEncryptor") - public StringEncryptor stringEncryptor() { - PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor(); - SimpleStringPBEConfig config = new SimpleStringPBEConfig(); - config.setPassword(encKey); - config.setAlgorithm("PBEWithMD5AndDES"); - config.setKeyObtentionIterations("1000"); - config.setPoolSize("1"); - config.setProviderName("SunJCE"); - config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator"); - config.setStringOutputType("base64"); - encryptor.setConfig(config); - return encryptor; - } - - public static void main(String[] args) { - PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor(); - - SimpleStringPBEConfig config = new SimpleStringPBEConfig(); - config.setPassword("RW5jS2V5Rm9yVXBsdXM="); - config.setAlgorithm("PBEWithMD5AndDES"); - config.setKeyObtentionIterations("1000"); - config.setPoolSize("1"); - config.setProviderName("SunJCE"); - config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator"); - config.setStringOutputType("base64"); - encryptor.setConfig(config); - - // 테스트 -// System.out.println(encryptor.encrypt("sample")); - } +package kr.co.uplus.ez.config; + +import org.jasypt.encryption.StringEncryptor; +import org.jasypt.encryption.pbe.PooledPBEStringEncryptor; +import org.jasypt.encryption.pbe.config.SimpleStringPBEConfig; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class JasyptConfig { + + // EncKeyForUplus + @Value("${app.props.encKey:RW5jS2V5Rm9yVXBsdXM=}") + String encKey; + + @Bean("jasyptStringEncryptor") + public StringEncryptor stringEncryptor() { + PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor(); + SimpleStringPBEConfig config = new SimpleStringPBEConfig(); + config.setPassword(encKey); + config.setAlgorithm("PBEWithMD5AndDES"); + config.setKeyObtentionIterations("1000"); + config.setPoolSize("1"); + config.setProviderName("SunJCE"); + config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator"); + config.setStringOutputType("base64"); + encryptor.setConfig(config); + return encryptor; + } + + public static void main(String[] args) { + PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor(); + + SimpleStringPBEConfig config = new SimpleStringPBEConfig(); + config.setPassword("RW5jS2V5Rm9yVXBsdXM="); + config.setAlgorithm("PBEWithMD5AndDES"); + config.setKeyObtentionIterations("1000"); + config.setPoolSize("1"); + config.setProviderName("SunJCE"); + config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator"); + config.setStringOutputType("base64"); + encryptor.setConfig(config); + + // 테스트 +// System.out.println(encryptor.encrypt("sample")); + } } \ No newline at end of file diff --git a/src/main/java/kr/co/uplus/ez/config/MixedAuthenticationEntryPoint.java b/src/main/java/kr/co/uplus/ez/config/MixedAuthenticationEntryPoint.java index 5c9b688..57577ec 100644 --- a/src/main/java/kr/co/uplus/ez/config/MixedAuthenticationEntryPoint.java +++ b/src/main/java/kr/co/uplus/ez/config/MixedAuthenticationEntryPoint.java @@ -9,7 +9,7 @@ import javax.servlet.http.HttpServletResponse; import org.springframework.security.core.AuthenticationException; import org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint; -import kr.co.uplus.ez.common.consts.Const; +import kr.co.uplus.ez.common.data.Const; import kr.co.uplus.ez.common.utils.WebUtils; /** diff --git a/src/main/java/kr/co/uplus/ez/config/MultiDatasourceConfig.java b/src/main/java/kr/co/uplus/ez/config/MultiDatasourceConfig.java new file mode 100644 index 0000000..540ec6a --- /dev/null +++ b/src/main/java/kr/co/uplus/ez/config/MultiDatasourceConfig.java @@ -0,0 +1,105 @@ +package kr.co.uplus.ez.config; + +import javax.sql.DataSource; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.boot.autoconfigure.SpringBootVFS; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.boot.jdbc.DataSourceBuilder; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.core.io.Resource; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.core.io.support.ResourcePatternResolver; +import org.springframework.jdbc.datasource.DataSourceTransactionManager; +import org.springframework.transaction.PlatformTransactionManager; + +import com.zaxxer.hikari.HikariDataSource; + +@Configuration +public class MultiDatasourceConfig { + + @Value("${mybatis.mapper-locations}") + private String mapperLocations; + + @Value("${mybatis.config-location}") + private String configPath; + + // DB1 Configuration Start + @Bean + @Qualifier("dataSourceDb1") + @ConfigurationProperties(prefix = "spring.datasource-db1") + public DataSource dataSourceDb1() { + return DataSourceBuilder.create().type(HikariDataSource.class).build(); + } + + @Bean + @Primary + public SqlSessionFactory db1SessionFactory() throws Exception { + ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); + Resource mybatisConfig = resolver.getResource(configPath); + Resource[] resource = resolver.getResources(mapperLocations); + + SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean(); + factoryBean.setDataSource(dataSourceDb1()); + factoryBean.setVfs(SpringBootVFS.class); + factoryBean.setConfigLocation(mybatisConfig); + factoryBean.setMapperLocations(resource); + return factoryBean.getObject(); + } + + @Bean + public PlatformTransactionManager db1TransactionManager() { + return new DataSourceTransactionManager(dataSourceDb1()); + } + + @Bean + @Qualifier("sqlSessionTemplateDb1") + public SqlSessionTemplate sqlSessionTemplate() throws Exception { + SqlSessionTemplate template = new SqlSessionTemplate(db1SessionFactory()); + return template; + } + // DB1 Configuration End + + + // DB2 Configuration Start + @Bean + @Qualifier("dataSourceDb2") + @ConfigurationProperties(prefix = "spring.datasource-db2") + public DataSource dataSourceDb2() { + return DataSourceBuilder.create().type(HikariDataSource.class).build(); + } + + @Bean + public SqlSessionFactory db2SessionFactory() throws Exception { + ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); + Resource mybatisConfig = resolver.getResource(configPath); + Resource[] resource = resolver.getResources(mapperLocations); + + SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean(); + factoryBean.setDataSource(dataSourceDb2()); + factoryBean.setVfs(SpringBootVFS.class); + factoryBean.setConfigLocation(mybatisConfig); + factoryBean.setMapperLocations(resource); + return factoryBean.getObject(); + } + + @Bean + public PlatformTransactionManager db2TransactionManager() { + return new DataSourceTransactionManager(dataSourceDb2()); + } + + @Bean + @Qualifier("sqlSessionTemplateDb2") + public SqlSessionTemplate sqlSessionTemplateDb2() throws Exception { + SqlSessionTemplate template = new SqlSessionTemplate(db2SessionFactory()); + return template; + } + // DB2 Configuration End + +} diff --git a/src/main/java/kr/co/uplus/ez/config/SchedulingConfig.java b/src/main/java/kr/co/uplus/ez/config/SchedulingConfig.java index 0dd9ec3..a9c3092 100644 --- a/src/main/java/kr/co/uplus/ez/config/SchedulingConfig.java +++ b/src/main/java/kr/co/uplus/ez/config/SchedulingConfig.java @@ -1,19 +1,19 @@ -package kr.co.uplus.ez.config; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.scheduling.annotation.EnableScheduling; -import org.springframework.scheduling.concurrent.ScheduledExecutorFactoryBean; - -@Configuration -@EnableScheduling -public class SchedulingConfig { - - @Bean - public ScheduledExecutorFactoryBean scheduledExecutorService() { - ScheduledExecutorFactoryBean bean = new ScheduledExecutorFactoryBean(); - bean.setPoolSize(5); - return bean; - } - -} +package kr.co.uplus.ez.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.scheduling.concurrent.ScheduledExecutorFactoryBean; + +@Configuration +@EnableScheduling +public class SchedulingConfig { + + @Bean + public ScheduledExecutorFactoryBean scheduledExecutorService() { + ScheduledExecutorFactoryBean bean = new ScheduledExecutorFactoryBean(); + bean.setPoolSize(5); + return bean; + } + +} diff --git a/src/main/java/kr/co/uplus/ez/config/SecurityConfig.java b/src/main/java/kr/co/uplus/ez/config/SecurityConfig.java index 06385b1..0942c8a 100644 --- a/src/main/java/kr/co/uplus/ez/config/SecurityConfig.java +++ b/src/main/java/kr/co/uplus/ez/config/SecurityConfig.java @@ -18,35 +18,48 @@ import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; import org.springframework.web.cors.CorsUtils; -import kr.co.uplus.ez.common.auth.LoginFailureHandler; -import kr.co.uplus.ez.common.auth.LoginSuccessHandler; -import kr.co.uplus.ez.common.auth.jwt.JwtAuthCookieFilter; -import kr.co.uplus.ez.common.auth.jwt.JwtAuthHeaderFilter; -import kr.co.uplus.ez.common.auth.jwt.JwtExceptionFilter; -import kr.co.uplus.ez.common.auth.jwt.JwtProperties; -import kr.co.uplus.ez.common.consts.ConfigProps; +import kr.co.uplus.ez.api.login.LoginFailureHandler; +import kr.co.uplus.ez.api.login.LoginSuccessHandler; +import kr.co.uplus.ez.common.data.ConfigProps; +import kr.co.uplus.ez.common.jwt.JwtAuthCookieFilter; +import kr.co.uplus.ez.common.jwt.JwtAuthHeaderFilter; +//import kr.co.uplus.ez.common.jwt.JwtExceptionFilter; +import kr.co.uplus.ez.common.jwt.JwtProperties; import kr.co.uplus.ez.common.security.VueStaticFilter; import kr.co.uplus.ez.common.security.XssFilter; @Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { - private static final String LOGIN_FORM_URL = "/login"; - //public static final String LOGIN_API_URL = "/api/auth/login"; + + private static final String LOGIN_FORM_URL = "/login/**"; public static final String LOGIN_API_URL = "/api/v1/bo/login/*"; public static final String LOGIN_FAIL_URL = "/login?error=true"; public static final String LOGIN_SUCC_URL = "/"; - public static final String NO_RCS_AUTH_LOGIN_SUCC_URL = "/view/mgt/brand"; private static final String API_URL = "/api/**"; - //public static final String PUBLIC_API_URL = "/api/public/**"; // 내부에서 인증없이 호출하는 API public static final String PUBLIC_API_URL = "/api/v1/bo/**"; // 내부에서 인증없이 호출하는 API - private static final String OPEN_API_URL = "/openapi/**"; // 외부에서 호출하는 API - public static final String[] REST_API_URLS = {API_URL, OPEN_API_URL}; + public static final String[] REST_API_URLS = {API_URL}; + + private static final String[] PERMIT_URL_ARRAY = { + "/login", + "/api/v1/bo/login/*", + "/v2/api-docs", + "/swagger-resources", + "/swagger-resources/**", + "/configuration/ui", + "/configuration/security", + "/swagger-ui.html", + "/webjars/**", + "/v3/api-docs/**", + "/swagger-ui/**", + "/" + }; + public static final String LOGIN_ID_PARAM = "userId"; @SuppressWarnings("unused") private static final String LOGIN_PWD_PARAM = "userPwd"; - + public static final String AUTH_USER = "authUser"; @Autowired @@ -59,7 +72,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override public void configure(WebSecurity web) throws Exception { web.ignoring() - .antMatchers("/static/**"); + .antMatchers("/static/**", "/assets/**"); } @Bean @@ -72,8 +85,6 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter { http .addFilterBefore(new VueStaticFilter(), UsernamePasswordAuthenticationFilter.class) // Vue에서 호출시 화면관련 URL은 / forward .addFilterBefore(new XssFilter(cprops), UsernamePasswordAuthenticationFilter.class) - //.addFilterBefore(new LogFilter(cprops), UsernamePasswordAuthenticationFilter.class) - .addFilterBefore(new JwtExceptionFilter(), UsernamePasswordAuthenticationFilter.class) .addFilterBefore(jwtAuthFilter(), UsernamePasswordAuthenticationFilter.class) .addFilterBefore(new JwtAuthHeaderFilter(jwtProps), UsernamePasswordAuthenticationFilter.class); @@ -88,14 +99,14 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter { .headers().frameOptions().disable() .and() .exceptionHandling() - .authenticationEntryPoint(new MixedAuthenticationEntryPoint(LOGIN_FORM_URL, REST_API_URLS)) + .authenticationEntryPoint(new MixedAuthenticationEntryPoint(LOGIN_FORM_URL, PUBLIC_API_URL)) .and() .authorizeRequests() .requestMatchers(CorsUtils::isPreFlightRequest).permitAll() // CORS preflight 요청은 인증처리를 하지 않도록 설정 - .antMatchers("/", PUBLIC_API_URL, OPEN_API_URL, LOGIN_FORM_URL, LOGIN_API_URL, "/swagger-ui.html", "/swagger-ui/**", "/api-docs", "/api-docs/**").permitAll() - //.antMatchers("/", PUBLIC_API_URL, OPEN_API_URL, LOGIN_FORM_URL, LOGIN_API_URL).permitAll() + .antMatchers(PERMIT_URL_ARRAY).permitAll() .antMatchers(API_URL).authenticated() .anyRequest().authenticated(); + } @Override @@ -105,14 +116,6 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter { @Bean public PasswordEncoder passwordEncoder() { - /*String encodingId = "bcrypt"; - Map encoders = new HashMap<>(); - encoders.put(encodingId, new BCryptPasswordEncoder()); - Pbkdf2PasswordEncoder Pbkdf2 = new Pbkdf2PasswordEncoder(); - Pbkdf2.setAlgorithm(Pbkdf2PasswordEncoder.SecretKeyFactoryAlgorithm.PBKDF2WithHmacSHA512); - encoders.put("pbkdf2", Pbkdf2); - return new DelegatingPasswordEncoder(encodingId, encoders); - */ return PasswordEncoderFactories.createDelegatingPasswordEncoder(); } diff --git a/src/main/java/kr/co/uplus/ez/config/SwaggerConfig.java b/src/main/java/kr/co/uplus/ez/config/SwaggerConfig.java index 7a1d752..c2b4ed7 100644 --- a/src/main/java/kr/co/uplus/ez/config/SwaggerConfig.java +++ b/src/main/java/kr/co/uplus/ez/config/SwaggerConfig.java @@ -1,43 +1,42 @@ -package kr.co.uplus.ez.config; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; -import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport; - -import springfox.documentation.builders.ApiInfoBuilder; -import springfox.documentation.builders.PathSelectors; -import springfox.documentation.builders.RequestHandlerSelectors; -import springfox.documentation.service.ApiInfo; -import springfox.documentation.spi.DocumentationType; -import springfox.documentation.spring.web.plugins.Docket; -import springfox.documentation.swagger2.annotations.EnableSwagger2; - -@Configuration -@EnableSwagger2 -public class SwaggerConfig extends WebMvcConfigurationSupport { - - private static final String API_TITLE = "HubEasy Admin"; - private static final String API_DESC = "허브이지 어드민에서 사용되는 API 문서입니다."; - private static final String API_VER = "1.0"; - - @Override - protected void addResourceHandlers(ResourceHandlerRegistry registry) { - registry.addResourceHandler("/swagger-ui/**") - .addResourceLocations("classpath:/META-INF/resources/webjars/springfox-swagger-ui/"); - registry.addResourceHandler("/webjars/**") - .addResourceLocations("classpath:/META-INF/resources/webjars/springfox-swagger-ui/"); - } - - @Bean - public Docket api() { - return new Docket(DocumentationType.OAS_30).useDefaultResponseMessages(false).select() - .apis(RequestHandlerSelectors.basePackage("kr.co.uplus.ez.api")).paths(PathSelectors.any()).build() - .apiInfo(apiInfo()); - } - - private ApiInfo apiInfo() { - return new ApiInfoBuilder().title(API_TITLE).description(API_DESC).version(API_VER).build(); - } -} +package kr.co.uplus.ez.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport; + +import springfox.documentation.builders.ApiInfoBuilder; +import springfox.documentation.builders.PathSelectors; +import springfox.documentation.builders.RequestHandlerSelectors; +import springfox.documentation.service.ApiInfo; +import springfox.documentation.spi.DocumentationType; +import springfox.documentation.spring.web.plugins.Docket; +import springfox.documentation.swagger2.annotations.EnableSwagger2; + +@Configuration +@EnableSwagger2 +public class SwaggerConfig extends WebMvcConfigurationSupport { + + private static final String API_TITLE = "HubEasy Admin"; + private static final String API_DESC = "허브이지 어드민에서 사용되는 API 문서입니다."; + private static final String API_VER = "1.0"; + + @Override + protected void addResourceHandlers(ResourceHandlerRegistry registry) { + registry.addResourceHandler("/swagger-ui/**") + .addResourceLocations("classpath:/META-INF/resources/webjars/springfox-swagger-ui/"); + registry.addResourceHandler("/webjars/**") + .addResourceLocations("classpath:/META-INF/resources/webjars/springfox-swagger-ui/"); + } + + @Bean + public Docket api() { + return new Docket(DocumentationType.OAS_30).useDefaultResponseMessages(false).select() + .apis(RequestHandlerSelectors.basePackage("kr.co.uplus.ez.api")).paths(PathSelectors.any()).build() + .apiInfo(apiInfo()); + } + + private ApiInfo apiInfo() { + return new ApiInfoBuilder().title(API_TITLE).description(API_DESC).version(API_VER).build(); + } +} diff --git a/src/main/java/kr/co/uplus/ez/config/WebClientConfig.java b/src/main/java/kr/co/uplus/ez/config/WebClientConfig.java index 1f59127..115022b 100644 --- a/src/main/java/kr/co/uplus/ez/config/WebClientConfig.java +++ b/src/main/java/kr/co/uplus/ez/config/WebClientConfig.java @@ -1,36 +1,36 @@ -package kr.co.uplus.ez.config; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.http.HttpHeaders; -import org.springframework.http.MediaType; -import org.springframework.http.client.reactive.ClientHttpConnector; -import org.springframework.http.client.reactive.ReactorClientHttpConnector; -import org.springframework.web.reactive.function.client.ExchangeStrategies; -import org.springframework.web.reactive.function.client.WebClient; - -import io.netty.channel.ChannelOption; -import io.netty.handler.timeout.ReadTimeoutHandler; -import io.netty.handler.timeout.WriteTimeoutHandler; -import reactor.netty.http.client.HttpClient; - -@Configuration -public class WebClientConfig { - - @Bean - public WebClient webClient() { - - HttpClient httpClient = HttpClient.create().option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 10000).doOnConnected( - conn -> conn.addHandlerLast(new ReadTimeoutHandler(10)).addHandlerLast(new WriteTimeoutHandler(10))); // 10sec - - ClientHttpConnector connector = new ReactorClientHttpConnector(httpClient); - - ExchangeStrategies exchangeStrategies = ExchangeStrategies.builder() - .codecs(configurer -> configurer.defaultCodecs().maxInMemorySize(10 * 1024 * 1024)).build(); // 10MB - - WebClient webClient = WebClient.builder().clientConnector(connector).exchangeStrategies(exchangeStrategies) - .defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE).build(); - - return webClient; - } -} +package kr.co.uplus.ez.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; +import org.springframework.http.client.reactive.ClientHttpConnector; +import org.springframework.http.client.reactive.ReactorClientHttpConnector; +import org.springframework.web.reactive.function.client.ExchangeStrategies; +import org.springframework.web.reactive.function.client.WebClient; + +import io.netty.channel.ChannelOption; +import io.netty.handler.timeout.ReadTimeoutHandler; +import io.netty.handler.timeout.WriteTimeoutHandler; +import reactor.netty.http.client.HttpClient; + +@Configuration +public class WebClientConfig { + + @Bean + public WebClient webClient() { + + HttpClient httpClient = HttpClient.create().option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 10000).doOnConnected( + conn -> conn.addHandlerLast(new ReadTimeoutHandler(10)).addHandlerLast(new WriteTimeoutHandler(10))); // 10sec + + ClientHttpConnector connector = new ReactorClientHttpConnector(httpClient); + + ExchangeStrategies exchangeStrategies = ExchangeStrategies.builder() + .codecs(configurer -> configurer.defaultCodecs().maxInMemorySize(10 * 1024 * 1024)).build(); // 10MB + + WebClient webClient = WebClient.builder().clientConnector(connector).exchangeStrategies(exchangeStrategies) + .defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE).build(); + + return webClient; + } +} diff --git a/src/main/java/kr/co/uplus/ez/config/filter/WebFilterConfig.java b/src/main/java/kr/co/uplus/ez/config/filter/WebFilterConfig.java index edfc67d..8e59628 100644 --- a/src/main/java/kr/co/uplus/ez/config/filter/WebFilterConfig.java +++ b/src/main/java/kr/co/uplus/ez/config/filter/WebFilterConfig.java @@ -1,19 +1,19 @@ -package kr.co.uplus.ez.config.filter; - -import org.springframework.boot.web.servlet.FilterRegistrationBean; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -@Configuration -public class WebFilterConfig { - - @Bean - public FilterRegistrationBean getFilterRegistrationBean() throws Exception{ - FilterRegistrationBean registrationBean = new FilterRegistrationBean<>(); - registrationBean.setFilter(new XssPreventFilter()); - registrationBean.setOrder(1); - registrationBean.addUrlPatterns("/*"); - return registrationBean; - } - -} +package kr.co.uplus.ez.config.filter; + +import org.springframework.boot.web.servlet.FilterRegistrationBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class WebFilterConfig { + + @Bean + public FilterRegistrationBean getFilterRegistrationBean() throws Exception{ + FilterRegistrationBean registrationBean = new FilterRegistrationBean<>(); + registrationBean.setFilter(new XssPreventFilter()); + registrationBean.setOrder(1); + registrationBean.addUrlPatterns("/*"); + return registrationBean; + } + +} diff --git a/src/main/java/kr/co/uplus/ez/config/filter/XssPreventFilter.java b/src/main/java/kr/co/uplus/ez/config/filter/XssPreventFilter.java index e3e8734..e7fe208 100644 --- a/src/main/java/kr/co/uplus/ez/config/filter/XssPreventFilter.java +++ b/src/main/java/kr/co/uplus/ez/config/filter/XssPreventFilter.java @@ -1,41 +1,41 @@ -package kr.co.uplus.ez.config.filter; - -import java.io.IOException; - -import javax.servlet.FilterChain; -import javax.servlet.FilterConfig; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; - -import org.springframework.util.AntPathMatcher; - -import kr.co.uplus.ez.common.xss.XssPreventer; -import lguplus.security.vulner.FilterServlet; - -public class XssPreventFilter extends FilterServlet { - - public FilterConfig filterConfig; - - public void init(FilterConfig filterConfig) throws ServletException { - this.filterConfig = filterConfig; - } - - public void destroy() { - this.filterConfig = null; - } - - @Override - public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) - throws ServletException, IOException { - String path = ((HttpServletRequest) request).getServletPath(); - if(!XssPreventer.EXCLUDE_URLS.stream() - .anyMatch(e -> new AntPathMatcher().match(e, path))) { - chain.doFilter(new XssPreventWrapper((HttpServletRequest) request), response); - } else { - chain.doFilter(request, response); - } - } - -} +package kr.co.uplus.ez.config.filter; + +import java.io.IOException; + +import javax.servlet.FilterChain; +import javax.servlet.FilterConfig; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletRequest; + +import org.springframework.util.AntPathMatcher; + +import kr.co.uplus.ez.common.xss.XssPreventer; +import lguplus.security.vulner.FilterServlet; + +public class XssPreventFilter extends FilterServlet { + + public FilterConfig filterConfig; + + public void init(FilterConfig filterConfig) throws ServletException { + this.filterConfig = filterConfig; + } + + public void destroy() { + this.filterConfig = null; + } + + @Override + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) + throws ServletException, IOException { + String path = ((HttpServletRequest) request).getServletPath(); + if(!XssPreventer.EXCLUDE_URLS.stream() + .anyMatch(e -> new AntPathMatcher().match(e, path))) { + chain.doFilter(new XssPreventWrapper((HttpServletRequest) request), response); + } else { + chain.doFilter(request, response); + } + } + +} diff --git a/src/main/java/kr/co/uplus/ez/config/filter/XssPreventWrapper.java b/src/main/java/kr/co/uplus/ez/config/filter/XssPreventWrapper.java index ddb31f9..a82988c 100644 --- a/src/main/java/kr/co/uplus/ez/config/filter/XssPreventWrapper.java +++ b/src/main/java/kr/co/uplus/ez/config/filter/XssPreventWrapper.java @@ -1,102 +1,102 @@ -package kr.co.uplus.ez.config.filter; - -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.nio.charset.StandardCharsets; - -import javax.servlet.ReadListener; -import javax.servlet.ServletInputStream; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletRequestWrapper; - -import org.apache.poi.util.IOUtils; - -import kr.co.uplus.ez.common.xss.XssPreventer; - -public final class XssPreventWrapper extends HttpServletRequestWrapper { - - private byte[] bytes; - private String requestBody; - - public XssPreventWrapper(HttpServletRequest servletRequest) throws IOException { - super(servletRequest); - - InputStream in = super.getInputStream(); - bytes = IOUtils.toByteArray(in); - requestBody = XssPreventer.escape(new String(bytes)); - } - - @Override - public ServletInputStream getInputStream() throws IOException { - ByteArrayInputStream bis = new ByteArrayInputStream(this.requestBody.getBytes(StandardCharsets.UTF_8)); - ServletInputStream sis = new ServletImpl(bis); - return sis; - } - - public String getRequestBody() { - return this.requestBody; - } - - public String[] getParameterValues(String parameter) { - - String[] values = super.getParameterValues(parameter); - if (values == null) { - return null; - } - int count = values.length; - String[] encodedValues = new String[count]; - for (int i = 0; i < count; i++) { - encodedValues[i] = XssPreventer.escape(values[i]); - } - return encodedValues; - } - - public String getParameter(String parameter) { - String value = super.getParameter(parameter); - if (value == null) { - return null; - } - return XssPreventer.escape(value); - } - - public String getHeader(String name) { - String value = super.getHeader(name); - if (value == null) - return null; - return XssPreventer.escape(value); - } - - class ServletImpl extends ServletInputStream { - private InputStream is; - - public ServletImpl(InputStream bis){ - is = bis; - } - - @Override - public boolean isFinished() { - return false; - } - - @Override - public boolean isReady() { - return false; - } - - @Override - public void setReadListener(ReadListener listener) { - } - - @Override - public int read() throws IOException { - return is.read(); - } - - @Override - public int read(byte[] b) throws IOException { - return is.read(b); - } - } - -} +package kr.co.uplus.ez.config.filter; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.nio.charset.StandardCharsets; + +import javax.servlet.ReadListener; +import javax.servlet.ServletInputStream; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletRequestWrapper; + +import org.apache.poi.util.IOUtils; + +import kr.co.uplus.ez.common.xss.XssPreventer; + +public final class XssPreventWrapper extends HttpServletRequestWrapper { + + private byte[] bytes; + private String requestBody; + + public XssPreventWrapper(HttpServletRequest servletRequest) throws IOException { + super(servletRequest); + + InputStream in = super.getInputStream(); + bytes = IOUtils.toByteArray(in); + requestBody = XssPreventer.escape(new String(bytes)); + } + + @Override + public ServletInputStream getInputStream() throws IOException { + ByteArrayInputStream bis = new ByteArrayInputStream(this.requestBody.getBytes(StandardCharsets.UTF_8)); + ServletInputStream sis = new ServletImpl(bis); + return sis; + } + + public String getRequestBody() { + return this.requestBody; + } + + public String[] getParameterValues(String parameter) { + + String[] values = super.getParameterValues(parameter); + if (values == null) { + return null; + } + int count = values.length; + String[] encodedValues = new String[count]; + for (int i = 0; i < count; i++) { + encodedValues[i] = XssPreventer.escape(values[i]); + } + return encodedValues; + } + + public String getParameter(String parameter) { + String value = super.getParameter(parameter); + if (value == null) { + return null; + } + return XssPreventer.escape(value); + } + + public String getHeader(String name) { + String value = super.getHeader(name); + if (value == null) + return null; + return XssPreventer.escape(value); + } + + class ServletImpl extends ServletInputStream { + private InputStream is; + + public ServletImpl(InputStream bis){ + is = bis; + } + + @Override + public boolean isFinished() { + return false; + } + + @Override + public boolean isReady() { + return false; + } + + @Override + public void setReadListener(ReadListener listener) { + } + + @Override + public int read() throws IOException { + return is.read(); + } + + @Override + public int read(byte[] b) throws IOException { + return is.read(b); + } + } + +} diff --git a/src/main/java/kr/co/uplus/ez/view/sample/MainViewController.java b/src/main/java/kr/co/uplus/ez/view/sample/MainViewController.java index 6394485..61997c0 100644 --- a/src/main/java/kr/co/uplus/ez/view/sample/MainViewController.java +++ b/src/main/java/kr/co/uplus/ez/view/sample/MainViewController.java @@ -1,197 +1,197 @@ -package kr.co.uplus.ez.view.sample; - -import java.io.IOException; -import java.io.InputStream; -import java.util.HashMap; - -import org.apache.poi.xssf.usermodel.XSSFCell; -import org.apache.poi.xssf.usermodel.XSSFRow; -import org.apache.poi.xssf.usermodel.XSSFSheet; -import org.apache.poi.xssf.usermodel.XSSFWorkbook; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.multipart.MultipartFile; -import org.springframework.web.multipart.MultipartHttpServletRequest; - -import kr.co.uplus.ez.common.data.ApiResponseCode; -import kr.co.uplus.ez.common.data.ApiResponseMessage; - -@Controller -public class MainViewController { - private final Logger logger = LoggerFactory.getLogger(getClass()); - // WEB 없이 구성될 경우 필요 - // Vue일 경우 index로 전달 - @GetMapping("/") - public String home() { - return "index"; - } - - // Vue일 경우 index로 전달 - @RequestMapping(value = "/{path:[^\\.]*}") - public String redirect() { - return "forward:/"; - } - - /* - * 엑셀 업로드 - * poi 4.1 사용 테스트 x - * */ - @PostMapping("/insertFileXcel") - @ResponseBody - public ApiResponseMessage insertFileXcel(MultipartHttpServletRequest multipartRequest){ - - MultipartFile file = multipartRequest.getFile("file"); - String colName = multipartRequest.getParameter("colName"); - ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); - - try { - int rowindex=0; - int columnindex=0; - - InputStream in = file.getInputStream(); - @SuppressWarnings("resource") - XSSFWorkbook workbook = new XSSFWorkbook(in); - XSSFSheet sheet=workbook.getSheetAt(0); - - int rows=sheet.getPhysicalNumberOfRows(); - - if(rows > 10000 || rows < 1) { - // 엑셀 로우 건수가 10000건이 넘으면 false 반환 - result.setData(false); - }else { - HashMap xcelData = new HashMap(); - for(rowindex=0;rowindex insertFileXcel(MultipartHttpServletRequest multipartRequest){ - - MultipartFile file = multipartRequest.getFile("file"); - String colName = multipartRequest.getParameter("colName"); - Result> result = new Result<>(); - - try { - int rowindex=0; - int columnindex=0; - - InputStream in = file.getInputStream(); - @SuppressWarnings("resource") - XSSFWorkbook workbook = new XSSFWorkbook(in); - XSSFSheet sheet=workbook.getSheetAt(0); - - int rows=sheet.getPhysicalNumberOfRows(); - // 엑셀 갯수 - if(rows > 100 || rows < 1) { - result.setSuccess(false); - }else { - HashMap xcelData = new HashMap(); - for(rowindex=0;rowindex insertFileXcel(MultipartHttpServletRequest multipartRequest){ + + MultipartFile file = multipartRequest.getFile("file"); + String colName = multipartRequest.getParameter("colName"); + ApiResponseMessage result = new ApiResponseMessage(ApiResponseCode.SUCCESS); + + try { + int rowindex=0; + int columnindex=0; + + InputStream in = file.getInputStream(); + @SuppressWarnings("resource") + XSSFWorkbook workbook = new XSSFWorkbook(in); + XSSFSheet sheet=workbook.getSheetAt(0); + + int rows=sheet.getPhysicalNumberOfRows(); + + if(rows > 10000 || rows < 1) { + // 엑셀 로우 건수가 10000건이 넘으면 false 반환 + result.setData(false); + }else { + HashMap xcelData = new HashMap(); + for(rowindex=0;rowindex insertFileXcel(MultipartHttpServletRequest multipartRequest){ + + MultipartFile file = multipartRequest.getFile("file"); + String colName = multipartRequest.getParameter("colName"); + Result> result = new Result<>(); + + try { + int rowindex=0; + int columnindex=0; + + InputStream in = file.getInputStream(); + @SuppressWarnings("resource") + XSSFWorkbook workbook = new XSSFWorkbook(in); + XSSFSheet sheet=workbook.getSheetAt(0); + + int rows=sheet.getPhysicalNumberOfRows(); + // 엑셀 갯수 + if(rows > 100 || rows < 1) { + result.setSuccess(false); + }else { + HashMap xcelData = new HashMap(); + for(rowindex=0;rowindex - - - - - + + + + + + \ No newline at end of file diff --git a/src/main/resources/mapper/mysql/calculate/calculate-mapper.xml b/src/main/resources/mapper/mysql/calculate/calculate-mapper.xml index c534c85..9205636 100644 --- a/src/main/resources/mapper/mysql/calculate/calculate-mapper.xml +++ b/src/main/resources/mapper/mysql/calculate/calculate-mapper.xml @@ -1,7 +1,7 @@ - - - - - - + + + + + + \ No newline at end of file diff --git a/src/main/resources/mapper/mysql/channelMgt/channelMgt-mapper.xml b/src/main/resources/mapper/mysql/channelMgt/channelMgt-mapper.xml index d0e3434..bf92550 100644 --- a/src/main/resources/mapper/mysql/channelMgt/channelMgt-mapper.xml +++ b/src/main/resources/mapper/mysql/channelMgt/channelMgt-mapper.xml @@ -1,7 +1,7 @@ - - - - - - + + + + + + \ No newline at end of file diff --git a/src/main/resources/mapper/mysql/comm/authuser-mapper.xml b/src/main/resources/mapper/mysql/comm/authuser-mapper.xml deleted file mode 100644 index 6675a96..0000000 --- a/src/main/resources/mapper/mysql/comm/authuser-mapper.xml +++ /dev/null @@ -1,187 +0,0 @@ - - - - - - - - - - - /* authuser-mapper.xml(increaseFailCount) */ - UPDATE - ${HUBEZ_ADMIN}.EZ_ADM_USER - SET - LOGIN_FAIL_CNT = IFNULL(LOGIN_FAIL_CNT, 0) + 1 - WHERE - OPRTR_ID = #{oprtrId} - - - - /* authuser-mapper.xml(increaseAuthFailCnt) */ - UPDATE - ${HUBEZ_ADMIN}.EZ_ADM_USER - SET - AUTHCHR_FAIL_CNT = IFNULL(AUTHCHR_FAIL_CNT, 0) + 1 - WHERE - OPRTR_ID = #{oprtrId} - - - - /* authuser-mapper.xml(setUserStatus) */ - UPDATE - ${HUBEZ_ADMIN}.EZ_ADM_USER - SET - STTUS_CD = #{sttusCd} - WHERE - OPRTR_ID = #{oprtrId} - - - - /* authuser-mapper.xml(setLoginInfo) */ - UPDATE - ${HUBEZ_ADMIN}.EZ_ADM_USER - SET - LAST_LOGIN_DT = DATE_FORMAT(NOW(), '%Y%m%d%H%i%s') - , LOGIN_FAIL_CNT = 0 - WHERE - OPRTR_ID = #{oprtrId} - - - - - - /* authuser-mapper.xml(addAuthNum) */ - INSERT INTO ${HUBEZ_COMMON}.EZ_AUTH_CHR - ( - AUTH_TP_CD - ,STTUS_CD - ,HP_NO - ,CHR_VAL - ,EXP_DT - ,REG_ID - ,REG_DT - ,CHG_ID - ,CHG_DT - )VALUES( - #{authTpCd} - ,#{sttusCd} - ,#{hpNo} - ,#{chrVal} - ,DATE_FORMAT(DATE_ADD(NOW(), INTERVAL 3 MINUTE), '%Y%m%d%H%i%s') - ,#{regId} - ,DATE_FORMAT(NOW(), '%Y%m%d%H%i%s') - ,#{regId} - ,DATE_FORMAT(NOW(), '%Y%m%d%H%i%s') - ) - - - - - - /* authuser-mapper.xml(setAuthUserInfo) */ - UPDATE - ${HUBEZ_ADMIN}.EZ_ADM_USER - SET - AUTHCHR_FAIL_CNT = #{authchrFailCnt} - WHERE - OPRTR_ID = #{oprtrId} - - - - /* authuser-mapper.xml(setAuthNum) */ - UPDATE - ${HUBEZ_COMMON}.EZ_AUTH_CHR - SET - STTUS_CD = #{sttusCd} - WHERE - SEQ_NO = #{seqNo} - - - - - - \ No newline at end of file diff --git a/src/main/resources/mapper/mysql/comm/comm-mapper.xml b/src/main/resources/mapper/mysql/comm/comm-mapper.xml index 54a983e..4921ebd 100644 --- a/src/main/resources/mapper/mysql/comm/comm-mapper.xml +++ b/src/main/resources/mapper/mysql/comm/comm-mapper.xml @@ -3,7 +3,7 @@ - /* comm-mapper.xml(getMenuByRole) */ SELECT MENU_NO AS menuNo @@ -33,7 +33,33 @@ ) R ON M2.MENU_NO = R.MENU_NO ) A ORDER BY - menuLvl, menuOdrg; + menuLvl, menuOdrg + + + \ No newline at end of file diff --git a/src/main/resources/mapper/mysql/custMgt/custMgt-mapper.xml b/src/main/resources/mapper/mysql/custMgt/custMgt-mapper.xml index d0e3434..24f188e 100644 --- a/src/main/resources/mapper/mysql/custMgt/custMgt-mapper.xml +++ b/src/main/resources/mapper/mysql/custMgt/custMgt-mapper.xml @@ -1,7 +1,86 @@ - - - - - - + + + + + + + + + + + + AND T1.AUT_CD = #{searchType1} + + + AND T1.STTUS_CD = #{searchType2} + + + AND T1.OPRTR_ID = #{searchText1} + + + AND UPPER(T1.OPRTR_NM) LIKE UPPER('%' + #{searchText2} + '%') + + + \ No newline at end of file diff --git a/src/main/resources/mapper/mysql/login/login-mapper.xml b/src/main/resources/mapper/mysql/login/login-mapper.xml index 66cf7ef..941c864 100644 --- a/src/main/resources/mapper/mysql/login/login-mapper.xml +++ b/src/main/resources/mapper/mysql/login/login-mapper.xml @@ -1,7 +1,217 @@ - - - - - - + + + + + + + + + /* login-mapper.xml(increaseFailCount) */ + UPDATE + ${HUBEZ_ADMIN}.EZ_ADM_USER + SET + LOGIN_FAIL_CNT = IFNULL(LOGIN_FAIL_CNT, 0) + 1 + WHERE + OPRTR_ID = #{oprtrId} + + + + /* login-mapper.xml(increaseAuthFailCnt) */ + UPDATE + ${HUBEZ_ADMIN}.EZ_ADM_USER + SET + AUTHCHR_FAIL_CNT = IFNULL(AUTHCHR_FAIL_CNT, 0) + 1 + WHERE + OPRTR_ID = #{oprtrId} + + + + /* login-mapper.xml(setUserStatus) */ + UPDATE + ${HUBEZ_ADMIN}.EZ_ADM_USER + SET + STTUS_CD = #{sttusCd} + WHERE + OPRTR_ID = #{oprtrId} + + + + /* login-mapper.xml(setLoginInfo) */ + UPDATE + ${HUBEZ_ADMIN}.EZ_ADM_USER + SET + LAST_LOGIN_DT = DATE_FORMAT(NOW(), '%Y%m%d%H%i%s') + , LOGIN_FAIL_CNT = 0 + , AUTHCHR_FAIL_CNT = 0 + WHERE + OPRTR_ID = #{oprtrId} + + + + + + /* login-mapper.xml(addAuthNum) */ + INSERT INTO ${HUBEZ_COMMON}.EZ_AUTH_CHR + ( + AUTH_TP_CD + ,STTUS_CD + ,HP_NO + ,CHR_VAL + ,EXP_DT + ,REG_ID + ,REG_DT + ,CHG_ID + ,CHG_DT + )VALUES( + #{authTpCd} + ,#{sttusCd} + ,#{hpNo} + ,#{chrVal} + ,DATE_FORMAT(DATE_ADD(NOW(), INTERVAL 3 MINUTE), '%Y%m%d%H%i%s') + ,#{regId} + ,DATE_FORMAT(NOW(), '%Y%m%d%H%i%s') + ,#{regId} + ,DATE_FORMAT(NOW(), '%Y%m%d%H%i%s') + ) + + + + + + /* login-mapper.xml(setAuthUserInfo) */ + UPDATE + ${HUBEZ_ADMIN}.EZ_ADM_USER + SET + AUTHCHR_FAIL_CNT = #{authchrFailCnt} + WHERE + OPRTR_ID = #{oprtrId} + + + + /* login-mapper.xml(setAuthNum) */ + UPDATE + ${HUBEZ_COMMON}.EZ_AUTH_CHR + SET + STTUS_CD = #{sttusCd} + WHERE + SEQ_NO = #{seqNo} + + + + /* login-mapper.xml(updateAdmUser) */ + UPDATE + ${HUBEZ_ADMIN}.EZ_ADM_USER + SET + CHG_ID = #{oprtrId} + , CHG_DT = DATE_FORMAT(NOW(), '%Y%m%d%H%i%s') + + , OPRTR_NM = #{oprtrNm} + + + , STTUS_CD = #{sttusCd} + + + , PWD = #{pwd} + + + , TMP_PWD_YN = #{tmpPwdYn} + + + , EMAIL = #{email} + + + , HP_NO = #{hpNo} + + + , AUT_CD = #{autCd} + + + , AUTHCHR_FAIL_CNT = #{authchrFailCnt} + + + , RFRSH_TKN = #{rFrshTkn} + + + , RFRSH_TKN_DT = DATE_ADD(NOW(), INTERVAL #{refreshTokenExpiration} SECOND) + + + , LAST_LOGIN_DT = NOW() + + + , LOGIN_FAIL_CNT = #{loginFailCnt} + + + , PWD_CHG_DT = NOW() + + WHERE + OPRTR_ID = #{oprtrId} + \ No newline at end of file diff --git a/src/main/resources/mapper/mysql/mntrng/mntrng-mapper.xml b/src/main/resources/mapper/mysql/mntrng/mntrng-mapper.xml index b3ef3da..547b902 100644 --- a/src/main/resources/mapper/mysql/mntrng/mntrng-mapper.xml +++ b/src/main/resources/mapper/mysql/mntrng/mntrng-mapper.xml @@ -1,7 +1,7 @@ - - - - - - + + + + + + \ No newline at end of file diff --git a/src/main/resources/mapper/mysql/riskMgt/riskMgt-mapper.xml b/src/main/resources/mapper/mysql/riskMgt/riskMgt-mapper.xml index ed39a26..808d9db 100644 --- a/src/main/resources/mapper/mysql/riskMgt/riskMgt-mapper.xml +++ b/src/main/resources/mapper/mysql/riskMgt/riskMgt-mapper.xml @@ -1,7 +1,7 @@ - - - - - - + + + + + + \ No newline at end of file diff --git a/src/main/resources/mapper/mysql/sample/sample-mapper.xml b/src/main/resources/mapper/mysql/sample/sample-mapper.xml index 23b9999..5c2414a 100644 --- a/src/main/resources/mapper/mysql/sample/sample-mapper.xml +++ b/src/main/resources/mapper/mysql/sample/sample-mapper.xml @@ -1,10 +1,10 @@ - - - - - - - + + + + + + + \ No newline at end of file diff --git a/src/main/resources/mapper/mysql/sendNumMgt/sendNumMgt-mapper.xml b/src/main/resources/mapper/mysql/sendNumMgt/sendNumMgt-mapper.xml index ed4533b..fe91078 100644 --- a/src/main/resources/mapper/mysql/sendNumMgt/sendNumMgt-mapper.xml +++ b/src/main/resources/mapper/mysql/sendNumMgt/sendNumMgt-mapper.xml @@ -1,7 +1,7 @@ - - - - - - + + + + + + \ No newline at end of file diff --git a/src/main/resources/mapper/mysql/servMgt/servMgt-mapper.xml b/src/main/resources/mapper/mysql/servMgt/servMgt-mapper.xml index b3466c6..87069d9 100644 --- a/src/main/resources/mapper/mysql/servMgt/servMgt-mapper.xml +++ b/src/main/resources/mapper/mysql/servMgt/servMgt-mapper.xml @@ -1,7 +1,7 @@ - - - - - - + + + + + + \ No newline at end of file diff --git a/src/main/resources/mapper/mysql/stats/stats-mapper.xml b/src/main/resources/mapper/mysql/stats/stats-mapper.xml index 740ee8f..9be64c0 100644 --- a/src/main/resources/mapper/mysql/stats/stats-mapper.xml +++ b/src/main/resources/mapper/mysql/stats/stats-mapper.xml @@ -1,7 +1,7 @@ - - - - - - + + + + + + \ No newline at end of file diff --git a/src/main/resources/mapper/mysql/sysMgt/sysMgt-mapper.xml b/src/main/resources/mapper/mysql/sysMgt/sysMgt-mapper.xml index 6ebcff3..b46ae36 100644 --- a/src/main/resources/mapper/mysql/sysMgt/sysMgt-mapper.xml +++ b/src/main/resources/mapper/mysql/sysMgt/sysMgt-mapper.xml @@ -1,7 +1,194 @@ - - - - - - + + + + + + + + + + + + + + + + AND T1.AUT_CD = #{searchType1} + + + AND T1.STTUS_CD = #{searchType2} + + + AND T1.OPRTR_ID = #{searchText1} + + + AND UPPER(T1.OPRTR_NM) LIKE UPPER('%' + #{searchText2} + '%') + + + + + /* sysMgt-mapper.xml(insertAdmUser) */ + INSERT INTO ${HUBEZ_ADMIN}.EZ_ADM_USER( + OPRTR_ID + , OPRTR_NM + , STTUS_CD + , PWD + , EMAIL + , HP_NO + , AUT_CD + , PWD_CHG_DT + , AUTHCHR_FAIL_CNT + , LOGIN_FAIL_CNT + , REG_ID + , REG_DT + , CHG_ID + , CHG_DT) + VALUES ( + #{madangId} + , #{name} + , #{stat} + , #{adminPw} + , #{email} + , #{mdn} + , #{auth} + , NOW() + , 0 + , 0 + , #{madangId} + , NOW() + , #{madangId} + , NOW() + ) + + + + /* sysMgt-mapper.xml(updateAdmUser) */ + UPDATE ${HUBEZ_ADMIN}.EZ_ADM_USER + SET + CHG_ID = #{adminId} + , CHG_DT = NOW() + + , PWD = #{adminPw} + , PWD_CHG_DT = NOW() + + + , AUT_CD = #{auth} + + + , STTUS_CD = #{stat} + + WHERE OPRTR_ID = #{adminId} + + + + /* sysMgt-mapper.xml(insertMdAcc) */ + INSERT INTO ${HUBEZ_IMDB}.EZ_MD_ACC( + MD_ID + , ACC_NM + , AGENCY_CD + , AGENCY_NM + , ACC_STTUS_CD + , HP_NO + , EMAIL + , REG_ID + , REG_DT + , CHG_ID + , CHG_DT) + VALUES ( + #{madangId} + , #{name} + , #{stat} + , #{adminPw} + , #{email} + , #{mdn} + , #{auth} + , NOW() + , #{madangId} + , NOW() + , #{madangId} + , NOW() + ) + + + + /* sysMgt-mapper.xml(updateMdAcc) */ + UPDATE ${HUBEZ_IMDB}.EZ_MD_ACC + SET + CHG_ID + , CHG_DT = NOW() + + , PWD = #{adminPw} + , PWD_CHG_DT = NOW() + + + , STTUS_CD = #{stat} + + WHERE MD_ID = #{adminId} + + + + /* sysMgt-mapper.xml(deleteAdminList) */ + DELETE FROM ${HUBEZ_ADMIN}.EZ_ADM_USER + + OPRTR_ID IN + + #{item.adminId} + + + + \ No newline at end of file