feat: change the project structure and add mock data function 84/94084/1
authorcyuamber <xuranyjy@chinamobile.com>
Thu, 22 Aug 2019 08:55:57 +0000 (16:55 +0800)
committercyuamber <xuranyjy@chinamobile.com>
Thu, 22 Aug 2019 08:56:09 +0000 (16:56 +0800)
Change-Id: I381845bff5eb37d1fab3eba8cf1ae7838df523b7
Issue-ID: USECASEUI-307
Signed-off-by: cyuamber <xuranyjy@chinamobile.com>
178 files changed:
usecaseui-portal/localproxy.conf.json [new file with mode: 0644]
usecaseui-portal/package-lock.json
usecaseui-portal/package.json
usecaseui-portal/proxy.conf.json [new file with mode: 0644]
usecaseui-portal/src/app/alarm/alarm.component.spec.ts [deleted file]
usecaseui-portal/src/app/app-routing.module.ts
usecaseui-portal/src/app/app.component.css
usecaseui-portal/src/app/app.component.html
usecaseui-portal/src/app/app.component.spec.ts
usecaseui-portal/src/app/app.component.ts
usecaseui-portal/src/app/app.module.ts
usecaseui-portal/src/app/ccvpn-creation/ccvpn-creation.component.html [deleted file]
usecaseui-portal/src/app/components/e2e-creation/e2e-creation.component.ts [deleted file]
usecaseui-portal/src/app/components/e2e-detail/e2e-detail.component.ts [deleted file]
usecaseui-portal/src/app/core/models/dataInterface.ts [moved from usecaseui-portal/src/app/dataInterface.ts with 100% similarity]
usecaseui-portal/src/app/core/services/homes.service.spec.ts [moved from usecaseui-portal/src/app/homes.service.spec.ts with 100% similarity]
usecaseui-portal/src/app/core/services/homes.service.ts [moved from usecaseui-portal/src/app/homes.service.ts with 83% similarity]
usecaseui-portal/src/app/core/services/managemencs.service.ts [moved from usecaseui-portal/src/app/managemencs.service.ts with 58% similarity]
usecaseui-portal/src/app/core/services/myhttp.service.ts [new file with mode: 0644]
usecaseui-portal/src/app/core/services/networkHttpservice.service.ts [moved from usecaseui-portal/src/app/networkHttpservice.service.ts with 51% similarity]
usecaseui-portal/src/app/core/services/onboard.service.ts [moved from usecaseui-portal/src/app/onboard.service.ts with 94% similarity]
usecaseui-portal/src/app/core/services/text.service.spec.ts [new file with mode: 0644]
usecaseui-portal/src/app/core/services/text.service.ts [new file with mode: 0644]
usecaseui-portal/src/app/mock/fakedata.js [new file with mode: 0644]
usecaseui-portal/src/app/mock/json/LogicalLinksData.json [moved from usecaseui-portal/src/assets/json/LogicalLinksData.json with 100% similarity]
usecaseui-portal/src/app/mock/json/alarmFormData.json [moved from usecaseui-portal/src/assets/json/alarmFormData.json with 100% similarity]
usecaseui-portal/src/app/mock/json/allotted-resources2.json [moved from usecaseui-portal/src/assets/json/allotted-resources2.json with 100% similarity]
usecaseui-portal/src/app/mock/json/createService.json [moved from usecaseui-portal/src/assets/json/createService.json with 100% similarity]
usecaseui-portal/src/app/mock/json/customers.json [moved from usecaseui-portal/src/assets/json/customers.json with 100% similarity]
usecaseui-portal/src/app/mock/json/deleteService.json [moved from usecaseui-portal/src/assets/json/deleteService.json with 100% similarity]
usecaseui-portal/src/app/mock/json/detailsData.json [moved from usecaseui-portal/src/assets/json/detailsData.json with 100% similarity]
usecaseui-portal/src/app/mock/json/e2eServiceTemplateParameters.json [moved from usecaseui-portal/src/assets/json/e2eServiceTemplateParameters.json with 100% similarity]
usecaseui-portal/src/app/mock/json/homeAllData.json [moved from usecaseui-portal/src/assets/json/homeAllData.json with 100% similarity]
usecaseui-portal/src/app/mock/json/homePerformanceChartData.json [moved from usecaseui-portal/src/assets/json/homePerformanceChartData.json with 100% similarity]
usecaseui-portal/src/app/mock/json/instanceTableData.json [moved from usecaseui-portal/src/assets/json/instanceTableData.json with 100% similarity]
usecaseui-portal/src/app/mock/json/instanceTableData2.json [moved from usecaseui-portal/src/assets/json/instanceTableData2.json with 100% similarity]
usecaseui-portal/src/app/mock/json/instanceTableData3.json [moved from usecaseui-portal/src/assets/json/instanceTableData3.json with 100% similarity]
usecaseui-portal/src/app/mock/json/instanceTableData4.json [new file with mode: 0644]
usecaseui-portal/src/app/mock/json/netWorkD3Data.json [moved from usecaseui-portal/src/assets/json/netWorkD3Data.json with 100% similarity]
usecaseui-portal/src/app/mock/json/netWorkD3Data2.json [moved from usecaseui-portal/src/assets/json/netWorkD3Data2.json with 100% similarity]
usecaseui-portal/src/app/mock/json/nsServiceTemplateParameters.json [moved from usecaseui-portal/src/assets/json/nsServiceTemplateParameters.json with 100% similarity]
usecaseui-portal/src/app/mock/json/onboardTableData.json [moved from usecaseui-portal/src/assets/json/onboardTableData.json with 100% similarity]
usecaseui-portal/src/app/mock/json/p_interfaces1.json [moved from usecaseui-portal/src/assets/json/p_interfaces1.json with 100% similarity]
usecaseui-portal/src/app/mock/json/p_interfaces2.json [moved from usecaseui-portal/src/assets/json/p_interfaces2.json with 100% similarity]
usecaseui-portal/src/app/mock/json/pnfdetail-domain.json [moved from usecaseui-portal/src/assets/json/pnfdetail-domain.json with 100% similarity]
usecaseui-portal/src/app/mock/json/progress.json [moved from usecaseui-portal/src/assets/json/progress.json with 100% similarity]
usecaseui-portal/src/app/mock/json/sdwanvpnServiceTemplateParameters.json [moved from usecaseui-portal/src/assets/json/sdwanvpnServiceTemplateParameters.json with 100% similarity]
usecaseui-portal/src/app/mock/json/serviceTemplates.json [moved from usecaseui-portal/src/assets/json/serviceTemplates.json with 100% similarity]
usecaseui-portal/src/app/mock/json/serviceTemplates2.json [moved from usecaseui-portal/src/assets/json/serviceTemplates2.json with 100% similarity]
usecaseui-portal/src/app/mock/json/serviceTypes.json [moved from usecaseui-portal/src/assets/json/serviceTypes.json with 100% similarity]
usecaseui-portal/src/app/mock/json/servicesList.json [moved from usecaseui-portal/src/assets/json/servicesList.json with 100% similarity]
usecaseui-portal/src/app/mock/json/servicesTableData.json [moved from usecaseui-portal/src/assets/json/servicesTableData.json with 100% similarity]
usecaseui-portal/src/app/mock/json/siteAddressData.json [moved from usecaseui-portal/src/assets/json/siteAddressData.json with 100% similarity]
usecaseui-portal/src/app/mock/json/siteServiceTemplateParameters.json [moved from usecaseui-portal/src/assets/json/siteServiceTemplateParameters.json with 100% similarity]
usecaseui-portal/src/app/mock/json/sotn-connectivity.json [moved from usecaseui-portal/src/assets/json/sotn-connectivity.json with 100% similarity]
usecaseui-portal/src/app/mock/json/sotn-connectivity2.json [moved from usecaseui-portal/src/assets/json/sotn-connectivity2.json with 100% similarity]
usecaseui-portal/src/app/mock/json/sotnvpnServiceTemplateParameters.json [moved from usecaseui-portal/src/assets/json/sotnvpnServiceTemplateParameters.json with 100% similarity]
usecaseui-portal/src/app/mock/json/specific_link_nfo.json [moved from usecaseui-portal/src/assets/json/specific_link _nfo.json with 100% similarity]
usecaseui-portal/src/app/mock/json/status.json [moved from usecaseui-portal/src/assets/json/status.json with 100% similarity]
usecaseui-portal/src/app/mock/json/status2.json [new file with mode: 0644]
usecaseui-portal/src/app/mock/json/url.json [moved from usecaseui-portal/src/assets/json/url.json with 100% similarity]
usecaseui-portal/src/app/mock/json/vpnbinding.json [moved from usecaseui-portal/src/assets/json/vpnbinding.json with 100% similarity]
usecaseui-portal/src/app/mock/json/xuran_test_data.json [new file with mode: 0644]
usecaseui-portal/src/app/mock/mock.js [new file with mode: 0644]
usecaseui-portal/src/app/mock/server.js [new file with mode: 0644]
usecaseui-portal/src/app/myhttp.service.ts
usecaseui-portal/src/app/shared/components/charts/bar/bar.component.html [moved from usecaseui-portal/src/app/components/charts/bar/bar.component.html with 100% similarity]
usecaseui-portal/src/app/shared/components/charts/bar/bar.component.less [moved from usecaseui-portal/src/app/components/charts/bar/bar.component.less with 100% similarity]
usecaseui-portal/src/app/shared/components/charts/bar/bar.component.spec.ts [moved from usecaseui-portal/src/app/components/charts/bar/bar.component.spec.ts with 100% similarity]
usecaseui-portal/src/app/shared/components/charts/bar/bar.component.ts [moved from usecaseui-portal/src/app/components/charts/bar/bar.component.ts with 100% similarity]
usecaseui-portal/src/app/shared/components/charts/line/line.component.html [moved from usecaseui-portal/src/app/components/charts/line/line.component.html with 100% similarity]
usecaseui-portal/src/app/shared/components/charts/line/line.component.less [moved from usecaseui-portal/src/app/components/charts/line/line.component.less with 100% similarity]
usecaseui-portal/src/app/shared/components/charts/line/line.component.spec.ts [moved from usecaseui-portal/src/app/components/charts/line/line.component.spec.ts with 100% similarity]
usecaseui-portal/src/app/shared/components/charts/line/line.component.ts [moved from usecaseui-portal/src/app/components/charts/line/line.component.ts with 100% similarity]
usecaseui-portal/src/app/shared/components/charts/pie/pie.component.html [moved from usecaseui-portal/src/app/components/charts/pie/pie.component.html with 100% similarity]
usecaseui-portal/src/app/shared/components/charts/pie/pie.component.less [moved from usecaseui-portal/src/app/components/charts/pie/pie.component.less with 100% similarity]
usecaseui-portal/src/app/shared/components/charts/pie/pie.component.spec.ts [moved from usecaseui-portal/src/app/components/charts/pie/pie.component.spec.ts with 100% similarity]
usecaseui-portal/src/app/shared/components/charts/pie/pie.component.ts [moved from usecaseui-portal/src/app/components/charts/pie/pie.component.ts with 100% similarity]
usecaseui-portal/src/app/shared/components/customer/customer.component.html [moved from usecaseui-portal/src/app/components/customer/customer.component.html with 56% similarity]
usecaseui-portal/src/app/shared/components/customer/customer.component.less [moved from usecaseui-portal/src/app/components/customer/customer.component.less with 100% similarity]
usecaseui-portal/src/app/shared/components/customer/customer.component.spec.ts [moved from usecaseui-portal/src/app/components/customer/customer.component.spec.ts with 100% similarity]
usecaseui-portal/src/app/shared/components/customer/customer.component.ts [moved from usecaseui-portal/src/app/components/customer/customer.component.ts with 81% similarity]
usecaseui-portal/src/app/shared/components/details/details.component.css [moved from usecaseui-portal/src/app/components/details/details.component.css with 84% similarity]
usecaseui-portal/src/app/shared/components/details/details.component.html [moved from usecaseui-portal/src/app/components/details/details.component.html with 100% similarity]
usecaseui-portal/src/app/shared/components/details/details.component.less [moved from usecaseui-portal/src/app/components/details/details.component.less with 85% similarity]
usecaseui-portal/src/app/shared/components/details/details.component.spec.ts [moved from usecaseui-portal/src/app/components/details/details.component.spec.ts with 100% similarity]
usecaseui-portal/src/app/shared/components/details/details.component.ts [moved from usecaseui-portal/src/app/components/details/details.component.ts with 92% similarity]
usecaseui-portal/src/app/shared/components/e2e-creation/e2e-creation.component.css [moved from usecaseui-portal/src/app/components/e2e-creation/e2e-creation.component.css with 100% similarity]
usecaseui-portal/src/app/shared/components/e2e-creation/e2e-creation.component.html [moved from usecaseui-portal/src/app/components/e2e-creation/e2e-creation.component.html with 99% similarity]
usecaseui-portal/src/app/shared/components/e2e-creation/e2e-creation.component.less [moved from usecaseui-portal/src/app/components/e2e-creation/e2e-creation.component.less with 96% similarity]
usecaseui-portal/src/app/shared/components/e2e-creation/e2e-creation.component.spec.ts [moved from usecaseui-portal/src/app/components/e2e-creation/e2e-creation.component.spec.ts with 100% similarity]
usecaseui-portal/src/app/shared/components/e2e-creation/e2e-creation.component.ts [new file with mode: 0644]
usecaseui-portal/src/app/shared/components/e2e-detail/e2e-detail.component.html [moved from usecaseui-portal/src/app/components/e2e-detail/e2e-detail.component.html with 97% similarity]
usecaseui-portal/src/app/shared/components/e2e-detail/e2e-detail.component.less [moved from usecaseui-portal/src/app/components/e2e-detail/e2e-detail.component.less with 95% similarity]
usecaseui-portal/src/app/shared/components/e2e-detail/e2e-detail.component.spec.ts [moved from usecaseui-portal/src/app/components/e2e-detail/e2e-detail.component.spec.ts with 100% similarity]
usecaseui-portal/src/app/shared/components/e2e-detail/e2e-detail.component.ts [new file with mode: 0644]
usecaseui-portal/src/app/shared/components/graphiclist/graphiclist.component.css [moved from usecaseui-portal/src/app/components/graphiclist/graphiclist.component.css with 93% similarity]
usecaseui-portal/src/app/shared/components/graphiclist/graphiclist.component.html [moved from usecaseui-portal/src/app/components/graphiclist/graphiclist.component.html with 100% similarity]
usecaseui-portal/src/app/shared/components/graphiclist/graphiclist.component.less [moved from usecaseui-portal/src/app/components/graphiclist/graphiclist.component.less with 95% similarity]
usecaseui-portal/src/app/shared/components/graphiclist/graphiclist.component.spec.ts [moved from usecaseui-portal/src/app/components/graphiclist/graphiclist.component.spec.ts with 100% similarity]
usecaseui-portal/src/app/shared/components/graphiclist/graphiclist.component.ts [moved from usecaseui-portal/src/app/components/graphiclist/graphiclist.component.ts with 97% similarity]
usecaseui-portal/src/app/shared/components/performance-details/performance-details.component.css [moved from usecaseui-portal/src/app/components/performance-details/performance-details.component.css with 84% similarity]
usecaseui-portal/src/app/shared/components/performance-details/performance-details.component.html [moved from usecaseui-portal/src/app/components/performance-details/performance-details.component.html with 100% similarity]
usecaseui-portal/src/app/shared/components/performance-details/performance-details.component.less [moved from usecaseui-portal/src/app/components/performance-details/performance-details.component.less with 85% similarity]
usecaseui-portal/src/app/shared/components/performance-details/performance-details.component.spec.ts [moved from usecaseui-portal/src/app/components/performance-details/performance-details.component.spec.ts with 100% similarity]
usecaseui-portal/src/app/shared/components/performance-details/performance-details.component.ts [moved from usecaseui-portal/src/app/components/performance-details/performance-details.component.ts with 93% similarity]
usecaseui-portal/src/app/shared/utils/utils.js [moved from usecaseui-portal/src/app/fcaps/fcaps.component.less with 100% similarity]
usecaseui-portal/src/app/test/test.component.html [new file with mode: 0644]
usecaseui-portal/src/app/test/test.component.less [new file with mode: 0644]
usecaseui-portal/src/app/test/test.component.spec.ts [new file with mode: 0644]
usecaseui-portal/src/app/test/test.component.ts [new file with mode: 0644]
usecaseui-portal/src/app/views/alarm/alarm.component.css [moved from usecaseui-portal/src/app/alarm/alarm.component.css with 87% similarity]
usecaseui-portal/src/app/views/alarm/alarm.component.html [moved from usecaseui-portal/src/app/alarm/alarm.component.html with 100% similarity]
usecaseui-portal/src/app/views/alarm/alarm.component.less [moved from usecaseui-portal/src/app/alarm/alarm.component.less with 92% similarity]
usecaseui-portal/src/app/views/alarm/alarm.component.spec.ts [new file with mode: 0644]
usecaseui-portal/src/app/views/alarm/alarm.component.ts [moved from usecaseui-portal/src/app/alarm/alarm.component.ts with 96% similarity]
usecaseui-portal/src/app/views/ccvpn-creation/ccvpn-creation.component.css [moved from usecaseui-portal/src/app/ccvpn-creation/ccvpn-creation.component.css with 97% similarity]
usecaseui-portal/src/app/views/ccvpn-creation/ccvpn-creation.component.html [new file with mode: 0644]
usecaseui-portal/src/app/views/ccvpn-creation/ccvpn-creation.component.spec.ts [moved from usecaseui-portal/src/app/ccvpn-creation/ccvpn-creation.component.spec.ts with 100% similarity]
usecaseui-portal/src/app/views/ccvpn-creation/ccvpn-creation.component.ts [moved from usecaseui-portal/src/app/ccvpn-creation/ccvpn-creation.component.ts with 98% similarity]
usecaseui-portal/src/app/views/ccvpn-detail/ccvpn-detail.component.css [moved from usecaseui-portal/src/app/ccvpn-detail/ccvpn-detail.component.css with 98% similarity]
usecaseui-portal/src/app/views/ccvpn-detail/ccvpn-detail.component.html [moved from usecaseui-portal/src/app/ccvpn-detail/ccvpn-detail.component.html with 53% similarity]
usecaseui-portal/src/app/views/ccvpn-detail/ccvpn-detail.component.spec.ts [moved from usecaseui-portal/src/app/ccvpn-detail/ccvpn-detail.component.spec.ts with 97% similarity]
usecaseui-portal/src/app/views/ccvpn-detail/ccvpn-detail.component.ts [moved from usecaseui-portal/src/app/ccvpn-detail/ccvpn-detail.component.ts with 99% similarity]
usecaseui-portal/src/app/views/ccvpn-network/ccvpn-network.component.css [moved from usecaseui-portal/src/app/ccvpn-network/ccvpn-network.component.css with 100% similarity]
usecaseui-portal/src/app/views/ccvpn-network/ccvpn-network.component.html [moved from usecaseui-portal/src/app/ccvpn-network/ccvpn-network.component.html with 100% similarity]
usecaseui-portal/src/app/views/ccvpn-network/ccvpn-network.component.spec.ts [moved from usecaseui-portal/src/app/ccvpn-network/ccvpn-network.component.spec.ts with 100% similarity]
usecaseui-portal/src/app/views/ccvpn-network/ccvpn-network.component.ts [moved from usecaseui-portal/src/app/ccvpn-network/ccvpn-network.component.ts with 99% similarity]
usecaseui-portal/src/app/views/fcaps/fcaps.component.html [moved from usecaseui-portal/src/app/fcaps/fcaps.component.html with 100% similarity]
usecaseui-portal/src/app/views/fcaps/fcaps.component.less [moved from usecaseui-portal/src/app/services/services.component.less with 100% similarity]
usecaseui-portal/src/app/views/fcaps/fcaps.component.spec.ts [moved from usecaseui-portal/src/app/fcaps/fcaps.component.spec.ts with 100% similarity]
usecaseui-portal/src/app/views/fcaps/fcaps.component.ts [moved from usecaseui-portal/src/app/fcaps/fcaps.component.ts with 100% similarity]
usecaseui-portal/src/app/views/home/home.component.css [moved from usecaseui-portal/src/app/home/home.component.css with 100% similarity]
usecaseui-portal/src/app/views/home/home.component.html [moved from usecaseui-portal/src/app/home/home.component.html with 100% similarity]
usecaseui-portal/src/app/views/home/home.component.less [moved from usecaseui-portal/src/app/home/home.component.less with 100% similarity]
usecaseui-portal/src/app/views/home/home.component.spec.ts [moved from usecaseui-portal/src/app/home/home.component.spec.ts with 81% similarity]
usecaseui-portal/src/app/views/home/home.component.ts [moved from usecaseui-portal/src/app/home/home.component.ts with 69% similarity]
usecaseui-portal/src/app/views/management/management.component.html [moved from usecaseui-portal/src/app/management/management.component.html with 70% similarity]
usecaseui-portal/src/app/views/management/management.component.less [moved from usecaseui-portal/src/app/management/management.component.less with 100% similarity]
usecaseui-portal/src/app/views/management/management.component.spec.ts [moved from usecaseui-portal/src/app/management/management.component.spec.ts with 100% similarity]
usecaseui-portal/src/app/views/management/management.component.ts [moved from usecaseui-portal/src/app/management/management.component.ts with 93% similarity]
usecaseui-portal/src/app/views/performance/performance-vm/performance-vm.component.css [moved from usecaseui-portal/src/app/performance/performance-vm/performance-vm.component.css with 100% similarity]
usecaseui-portal/src/app/views/performance/performance-vm/performance-vm.component.html [moved from usecaseui-portal/src/app/performance/performance-vm/performance-vm.component.html with 100% similarity]
usecaseui-portal/src/app/views/performance/performance-vm/performance-vm.component.less [moved from usecaseui-portal/src/app/performance/performance-vm/performance-vm.component.less with 100% similarity]
usecaseui-portal/src/app/views/performance/performance-vm/performance-vm.component.spec.ts [moved from usecaseui-portal/src/app/performance/performance-vm/performance-vm.component.spec.ts with 100% similarity]
usecaseui-portal/src/app/views/performance/performance-vm/performance-vm.component.ts [moved from usecaseui-portal/src/app/performance/performance-vm/performance-vm.component.ts with 98% similarity]
usecaseui-portal/src/app/views/performance/performance-vnf/performance-vnf.component.css [moved from usecaseui-portal/src/app/performance/performance-vnf/performance-vnf.component.css with 100% similarity]
usecaseui-portal/src/app/views/performance/performance-vnf/performance-vnf.component.html [moved from usecaseui-portal/src/app/performance/performance-vnf/performance-vnf.component.html with 68% similarity]
usecaseui-portal/src/app/views/performance/performance-vnf/performance-vnf.component.less [moved from usecaseui-portal/src/app/performance/performance-vnf/performance-vnf.component.less with 100% similarity]
usecaseui-portal/src/app/views/performance/performance-vnf/performance-vnf.component.spec.ts [moved from usecaseui-portal/src/app/performance/performance-vnf/performance-vnf.component.spec.ts with 84% similarity]
usecaseui-portal/src/app/views/performance/performance-vnf/performance-vnf.component.ts [moved from usecaseui-portal/src/app/performance/performance-vnf/performance-vnf.component.ts with 88% similarity]
usecaseui-portal/src/app/views/performance/performance.component.css [moved from usecaseui-portal/src/app/performance/performance.component.css with 100% similarity]
usecaseui-portal/src/app/views/performance/performance.component.html [moved from usecaseui-portal/src/app/performance/performance.component.html with 100% similarity]
usecaseui-portal/src/app/views/performance/performance.component.less [moved from usecaseui-portal/src/app/performance/performance.component.less with 100% similarity]
usecaseui-portal/src/app/views/performance/performance.component.spec.ts [moved from usecaseui-portal/src/app/performance/performance.component.spec.ts with 100% similarity]
usecaseui-portal/src/app/views/performance/performance.component.ts [moved from usecaseui-portal/src/app/performance/performance.component.ts with 100% similarity]
usecaseui-portal/src/app/views/services/onboard-vnf-vm/onboard-vnf-vm.component.css [moved from usecaseui-portal/src/app/services/onboard-vnf-vm/onboard-vnf-vm.component.css with 100% similarity]
usecaseui-portal/src/app/views/services/onboard-vnf-vm/onboard-vnf-vm.component.html [moved from usecaseui-portal/src/app/services/onboard-vnf-vm/onboard-vnf-vm.component.html with 100% similarity]
usecaseui-portal/src/app/views/services/onboard-vnf-vm/onboard-vnf-vm.component.less [moved from usecaseui-portal/src/app/services/onboard-vnf-vm/onboard-vnf-vm.component.less with 100% similarity]
usecaseui-portal/src/app/views/services/onboard-vnf-vm/onboard-vnf-vm.component.spec.ts [moved from usecaseui-portal/src/app/services/onboard-vnf-vm/onboard-vnf-vm.component.spec.ts with 100% similarity]
usecaseui-portal/src/app/views/services/onboard-vnf-vm/onboard-vnf-vm.component.ts [moved from usecaseui-portal/src/app/services/onboard-vnf-vm/onboard-vnf-vm.component.ts with 98% similarity]
usecaseui-portal/src/app/views/services/services-list/services-list.component.css [moved from usecaseui-portal/src/app/services/services-list/services-list.component.css with 100% similarity]
usecaseui-portal/src/app/views/services/services-list/services-list.component.html [moved from usecaseui-portal/src/app/services/services-list/services-list.component.html with 68% similarity]
usecaseui-portal/src/app/views/services/services-list/services-list.component.less [moved from usecaseui-portal/src/app/services/services-list/services-list.component.less with 67% similarity]
usecaseui-portal/src/app/views/services/services-list/services-list.component.spec.ts [moved from usecaseui-portal/src/app/services/services-list/services-list.component.spec.ts with 100% similarity]
usecaseui-portal/src/app/views/services/services-list/services-list.component.ts [moved from usecaseui-portal/src/app/services/services-list/services-list.component.ts with 96% similarity]
usecaseui-portal/src/app/views/services/services.component.html [moved from usecaseui-portal/src/app/services/services.component.html with 100% similarity]
usecaseui-portal/src/app/views/services/services.component.less [new file with mode: 0644]
usecaseui-portal/src/app/views/services/services.component.spec.ts [moved from usecaseui-portal/src/app/services/services.component.spec.ts with 100% similarity]
usecaseui-portal/src/app/views/services/services.component.ts [moved from usecaseui-portal/src/app/services/services.component.ts with 100% similarity]
usecaseui-portal/src/assets/json/allotted-resources.json [deleted file]
usecaseui-portal/src/assets/json/configuration_files/inputNamesTranslate.json [deleted file]
usecaseui-portal/src/assets/json/configuration_files/servicesCategory.json [deleted file]
usecaseui-portal/src/assets/json/configuration_files/templateCategory.json [deleted file]
usecaseui-portal/src/assets/json/instanceTableData4.json [deleted file]
usecaseui-portal/src/assets/json/status2.json [deleted file]
usecaseui-portal/src/index.html
usecaseui-portal/src/styles.less

diff --git a/usecaseui-portal/localproxy.conf.json b/usecaseui-portal/localproxy.conf.json
new file mode 100644 (file)
index 0000000..bf4dcf5
--- /dev/null
@@ -0,0 +1,11 @@
+{
+    "/api": {
+        "target": "http://localhost:3004",
+        "secure": false,
+        "logLevel": "debug",
+        "changeOrigin": true,
+        "pathRewrite": {
+            "^/api": ""
+        }
+    }
+}
\ No newline at end of file
index 582533e..e1653e5 100644 (file)
@@ -1,6 +1,6 @@
 {
   "name": "usecase-ui",
-  "version": "0.0.0",
+  "version": "1.0.0",
   "lockfileVersion": 1,
   "requires": true,
   "dependencies": {
       "integrity": "sha512-U0BCZtThq5rUfY08shHXpxe8ZhSsiYB/cJjUvAWRTs/ORrs8pbngS6xwseQws8d/vHoVrtqGD9GU9h8AmFRERQ==",
       "dev": true,
       "requires": {
-        "loader-utils": "1.1.0",
-        "source-map": "0.5.7",
-        "typescript": "2.6.2",
-        "webpack-sources": "1.3.0"
+        "loader-utils": "^1.1.0",
+        "source-map": "^0.5.6",
+        "typescript": "~2.6.2",
+        "webpack-sources": "^1.0.1"
       },
       "dependencies": {
         "typescript": {
       "integrity": "sha512-zABk/iP7YX5SVbmK4e+IX7j2d0D37MQJQiKgWdV3JzfvVJhNJzddiirtT980pIafoq+KyvTgVwXtc+vnux0oeQ==",
       "dev": true,
       "requires": {
-        "ajv": "5.5.2",
-        "chokidar": "1.7.0",
-        "rxjs": "5.5.12",
-        "source-map": "0.5.7"
+        "ajv": "~5.5.1",
+        "chokidar": "^1.7.0",
+        "rxjs": "^5.5.6",
+        "source-map": "^0.5.6"
       },
       "dependencies": {
         "ajv": {
           "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
           "dev": true,
           "requires": {
-            "co": "4.6.0",
-            "fast-deep-equal": "1.1.0",
-            "fast-json-stable-stringify": "2.0.0",
-            "json-schema-traverse": "0.3.1"
+            "co": "^4.6.0",
+            "fast-deep-equal": "^1.0.0",
+            "fast-json-stable-stringify": "^2.0.0",
+            "json-schema-traverse": "^0.3.0"
           }
         }
       }
@@ -56,8 +56,8 @@
       "integrity": "sha512-B6zZoqvHaTJy+vVdA6EtlxnCdGMa5elCa4j9lQLC3JI8DLvMXUWkCIPVbPzJ/GSRR9nsKWpvYMYaJyfBDUqfhw==",
       "dev": true,
       "requires": {
-        "@ngtools/json-schema": "1.2.0",
-        "rxjs": "5.5.12"
+        "@ngtools/json-schema": "^1.1.0",
+        "rxjs": "^5.5.6"
       }
     },
     "@angular/animations": {
@@ -65,7 +65,7 @@
       "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-5.2.11.tgz",
       "integrity": "sha512-J7wKHkFn3wV28/Y1Qm4yjGXVCwXzj1JR5DRjGDTFnxTRacUFx7Nj0ApGhN0b2+V0NOvgxQOvEW415Y22kGoblw==",
       "requires": {
-        "tslib": "1.9.3"
+        "tslib": "^1.7.1"
       }
     },
     "@angular/cdk": {
@@ -73,7 +73,7 @@
       "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-5.2.5.tgz",
       "integrity": "sha512-GN8m1d+VcCE9+Bgwv06Y8YJKyZ0i9ZIq2ZPBcJYt+KVgnVVRg4JkyUNxud07LNsvzOX22DquHqmIZiC4hAG7Ag==",
       "requires": {
-        "tslib": "1.9.3"
+        "tslib": "^1.7.1"
       }
     },
     "@angular/cli": {
         "@ngtools/webpack": "1.10.2",
         "@schematics/angular": "0.3.2",
         "@schematics/package-update": "0.3.2",
-        "ajv": "6.5.4",
-        "autoprefixer": "7.2.6",
-        "cache-loader": "1.2.2",
-        "chalk": "2.2.2",
-        "circular-dependency-plugin": "4.4.0",
-        "clean-css": "4.2.1",
-        "common-tags": "1.8.0",
-        "copy-webpack-plugin": "4.4.3",
-        "core-object": "3.1.5",
-        "denodeify": "1.2.1",
-        "ember-cli-string-utils": "1.1.0",
-        "extract-text-webpack-plugin": "3.0.2",
-        "file-loader": "1.1.11",
-        "fs-extra": "4.0.3",
-        "glob": "7.1.3",
-        "html-webpack-plugin": "2.30.1",
-        "istanbul-instrumenter-loader": "3.0.1",
-        "karma-source-map-support": "1.3.0",
-        "less": "2.7.3",
-        "less-loader": "4.1.0",
-        "license-webpack-plugin": "1.5.0",
+        "ajv": "^6.1.1",
+        "autoprefixer": "^7.2.3",
+        "cache-loader": "^1.2.0",
+        "chalk": "~2.2.0",
+        "circular-dependency-plugin": "^4.2.1",
+        "clean-css": "^4.1.11",
+        "common-tags": "^1.3.1",
+        "copy-webpack-plugin": "~4.4.1",
+        "core-object": "^3.1.0",
+        "denodeify": "^1.2.1",
+        "ember-cli-string-utils": "^1.0.0",
+        "extract-text-webpack-plugin": "^3.0.2",
+        "file-loader": "^1.1.5",
+        "fs-extra": "^4.0.0",
+        "glob": "^7.0.3",
+        "html-webpack-plugin": "^2.29.0",
+        "istanbul-instrumenter-loader": "^3.0.0",
+        "karma-source-map-support": "^1.2.0",
+        "less": "^2.7.2",
+        "less-loader": "^4.0.5",
+        "license-webpack-plugin": "^1.0.0",
         "loader-utils": "1.1.0",
-        "lodash": "4.17.11",
-        "memory-fs": "0.4.1",
-        "minimatch": "3.0.4",
-        "node-modules-path": "1.0.2",
-        "node-sass": "4.9.4",
-        "nopt": "4.0.1",
-        "opn": "5.1.0",
-        "portfinder": "1.0.18",
-        "postcss": "6.0.23",
-        "postcss-import": "11.1.0",
-        "postcss-loader": "2.1.6",
-        "postcss-url": "7.3.2",
-        "raw-loader": "0.5.1",
-        "resolve": "1.8.1",
-        "rxjs": "5.5.12",
-        "sass-loader": "6.0.7",
-        "semver": "5.6.0",
-        "silent-error": "1.1.1",
-        "source-map-support": "0.4.18",
-        "style-loader": "0.19.1",
-        "stylus": "0.54.5",
-        "stylus-loader": "3.0.2",
-        "uglifyjs-webpack-plugin": "1.3.0",
-        "url-loader": "0.6.2",
-        "webpack": "3.11.0",
-        "webpack-dev-middleware": "1.12.2",
-        "webpack-dev-server": "2.11.3",
-        "webpack-merge": "4.1.4",
-        "webpack-sources": "1.3.0",
-        "webpack-subresource-integrity": "1.2.0"
+        "lodash": "^4.11.1",
+        "memory-fs": "^0.4.1",
+        "minimatch": "^3.0.4",
+        "node-modules-path": "^1.0.0",
+        "node-sass": "^4.7.2",
+        "nopt": "^4.0.1",
+        "opn": "~5.1.0",
+        "portfinder": "~1.0.12",
+        "postcss": "^6.0.16",
+        "postcss-import": "^11.0.0",
+        "postcss-loader": "^2.0.10",
+        "postcss-url": "^7.1.2",
+        "raw-loader": "^0.5.1",
+        "resolve": "^1.1.7",
+        "rxjs": "^5.5.6",
+        "sass-loader": "^6.0.6",
+        "semver": "^5.1.0",
+        "silent-error": "^1.0.0",
+        "source-map-support": "^0.4.1",
+        "style-loader": "^0.19.1",
+        "stylus": "^0.54.5",
+        "stylus-loader": "^3.0.1",
+        "uglifyjs-webpack-plugin": "^1.1.8",
+        "url-loader": "^0.6.2",
+        "webpack": "~3.11.0",
+        "webpack-dev-middleware": "~1.12.0",
+        "webpack-dev-server": "~2.11.0",
+        "webpack-merge": "^4.1.0",
+        "webpack-sources": "^1.0.0",
+        "webpack-subresource-integrity": "^1.0.1"
       }
     },
     "@angular/common": {
       "resolved": "https://registry.npmjs.org/@angular/common/-/common-5.2.11.tgz",
       "integrity": "sha512-LniJjGAeftUJDJh+2+LEjltcGen08C/VMxQ/eUYmesytKy1sN+MWzh3GbpKfEWtWmyUsYTG9lAAJNo3L3jPwsw==",
       "requires": {
-        "tslib": "1.9.3"
+        "tslib": "^1.7.1"
       }
     },
     "@angular/compiler": {
       "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-5.2.11.tgz",
       "integrity": "sha512-ICvB1ud1mxaXUYLb8vhJqiLhGBVocAZGxoHTglv6hMkbrRYcnlB3FZJFOzBvtj+krkd1jamoYLI43UAmesqQ6Q==",
       "requires": {
-        "tslib": "1.9.3"
+        "tslib": "^1.7.1"
       }
     },
     "@angular/compiler-cli": {
       "integrity": "sha512-dwrQ0yxoCM/XzKzlm7pTsyg4/6ECjT9emZufGj8t12bLMO8NDn1IJOsqXJA1+onEgQKhlr0Ziwi+96TvDTb1Cg==",
       "dev": true,
       "requires": {
-        "chokidar": "1.7.0",
-        "minimist": "1.2.0",
-        "reflect-metadata": "0.1.12",
-        "tsickle": "0.27.5"
+        "chokidar": "^1.4.2",
+        "minimist": "^1.2.0",
+        "reflect-metadata": "^0.1.2",
+        "tsickle": "^0.27.2"
       },
       "dependencies": {
         "minimist": {
       "resolved": "https://registry.npmjs.org/@angular/core/-/core-5.2.11.tgz",
       "integrity": "sha512-h2vpvXNAdOqKzbVaZcHnHGMT5A8uDnizk6FgGq6SPyw9s3d+/VxZ9LJaPjUk3g2lICA7og1tUel+2YfF971MlQ==",
       "requires": {
-        "tslib": "1.9.3"
+        "tslib": "^1.7.1"
       }
     },
     "@angular/forms": {
       "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-5.2.11.tgz",
       "integrity": "sha512-wBllFlIubPclAFRXUc84Kc7TMeKOftzrQraVZ7ooTNeFLLa/FZLN2K8HGyRde8X/XDsMu1XAmjNfkz++spwTzA==",
       "requires": {
-        "tslib": "1.9.3"
+        "tslib": "^1.7.1"
       }
     },
     "@angular/http": {
       "resolved": "https://registry.npmjs.org/@angular/http/-/http-5.2.11.tgz",
       "integrity": "sha512-eR7wNXh1+6MpcQNb3sq4bJVX03dx50Wl3kpPG+Q7N1VSL0oPQSobaTrR17ac3oFCEfSJn6kkUCqtUXha6wcNHg==",
       "requires": {
-        "tslib": "1.9.3"
+        "tslib": "^1.7.1"
       }
     },
     "@angular/language-service": {
       "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-5.2.11.tgz",
       "integrity": "sha512-6YZ4IpBFqXx88vEzBZG2WWnaSYXbFWDgG0iT+bZPHAfwsbmqbcMcs7Ogu+XZ4VmK02dTqbrFh7U4P2W+sqrzow==",
       "requires": {
-        "tslib": "1.9.3"
+        "tslib": "^1.7.1"
       }
     },
     "@angular/platform-browser-dynamic": {
       "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-5.2.11.tgz",
       "integrity": "sha512-5kKPNULcXNwkyBjpHfF+pq+Yxi8Zl866YSOK9t8txoiQ9Ctw97kMkEJcTetk6MJgBp/NP3YyjtoTAm8oXLerug==",
       "requires": {
-        "tslib": "1.9.3"
+        "tslib": "^1.7.1"
       }
     },
     "@angular/router": {
       "resolved": "https://registry.npmjs.org/@angular/router/-/router-5.2.11.tgz",
       "integrity": "sha512-NT8xYl7Vr3qPygisek3PlXqNROEjg48GXOEsDEc7c8lDBo3EB9Tf328fWJD0GbLtXZNhmmNNxwIe+qqPFFhFAA==",
       "requires": {
-        "tslib": "1.9.3"
+        "tslib": "^1.7.1"
       }
     },
     "@ngtools/json-schema": {
       "integrity": "sha512-3u2zg2rarG3qNLSukBClGADWuq/iNn5SQtlSeAbfKzwBeyLGbF0gN1z1tVx1Bcr8YwFzR6NdRePQmJGcoqq1fg==",
       "dev": true,
       "requires": {
-        "chalk": "2.2.2",
-        "enhanced-resolve": "3.4.1",
-        "loader-utils": "1.1.0",
-        "magic-string": "0.22.5",
-        "semver": "5.6.0",
-        "source-map": "0.5.7",
-        "tree-kill": "1.2.0",
-        "webpack-sources": "1.3.0"
+        "chalk": "~2.2.0",
+        "enhanced-resolve": "^3.1.0",
+        "loader-utils": "^1.0.2",
+        "magic-string": "^0.22.3",
+        "semver": "^5.3.0",
+        "source-map": "^0.5.6",
+        "tree-kill": "^1.0.0",
+        "webpack-sources": "^1.1.0"
       }
     },
     "@ngx-translate/core": {
       "integrity": "sha512-Elrk0BA951s0ScFZU0AWrpUeJBYVR52DZ1QTIO5R0AhwEd1PW4olI8szPLGQlVW5Sd6H0FA/fyFLIvn2r9v6Rw==",
       "dev": true,
       "requires": {
-        "typescript": "2.6.2"
+        "typescript": "~2.6.2"
       },
       "dependencies": {
         "typescript": {
       "integrity": "sha512-7aVP4994Hu8vRdTTohXkfGWEwLhrdNP3EZnWyBootm5zshWqlQojUGweZe5zwewsKcixeVOiy2YtW+aI4aGSLA==",
       "dev": true,
       "requires": {
-        "rxjs": "5.5.12",
-        "semver": "5.6.0",
-        "semver-intersect": "1.4.0"
+        "rxjs": "^5.5.6",
+        "semver": "^5.3.0",
+        "semver-intersect": "^1.1.2"
+      }
+    },
+    "@sindresorhus/is": {
+      "version": "0.14.0",
+      "resolved": "https://registry.npm.taobao.org/@sindresorhus/is/download/@sindresorhus/is-0.14.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40sindresorhus%2Fis%2Fdownload%2F%40sindresorhus%2Fis-0.14.0.tgz",
+      "integrity": "sha1-n7OjzzEyMoFR81PeRjLgHlIQK+o=",
+      "dev": true
+    },
+    "@szmarczak/http-timer": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npm.taobao.org/@szmarczak/http-timer/download/@szmarczak/http-timer-1.1.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40szmarczak%2Fhttp-timer%2Fdownload%2F%40szmarczak%2Fhttp-timer-1.1.2.tgz",
+      "integrity": "sha1-sWZeLEYaLNkvTBu/UNVFTeDUtCE=",
+      "dev": true,
+      "requires": {
+        "defer-to-connect": "^1.0.1"
       }
     },
     "@types/jasmine": {
       "integrity": "sha512-1awkm/O4pQCR9hI2F80HmIOda/L+ogkSL8Arj1k00eue5VLY5ooewhSOyF/cUJE0S+/34uD5EYY3zmd6fu2OCA==",
       "dev": true,
       "requires": {
-        "@types/jasmine": "2.8.9"
+        "@types/jasmine": "*"
       }
     },
     "@types/node": {
       "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=",
       "dev": true,
       "requires": {
-        "mime-types": "2.1.21",
+        "mime-types": "~2.1.18",
         "negotiator": "0.6.1"
       }
     },
       "integrity": "sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ=",
       "dev": true,
       "requires": {
-        "acorn": "4.0.13"
+        "acorn": "^4.0.3"
       },
       "dependencies": {
         "acorn": {
       "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz",
       "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==",
       "dev": true,
+      "optional": true,
       "requires": {
-        "es6-promisify": "5.0.0"
+        "es6-promisify": "^5.0.0"
       }
     },
     "ajv": {
       "integrity": "sha512-4Wyjt8+t6YszqaXnLDfMmG/8AlO5Zbcsy3ATHncCzjW/NoPzAId8AK6749Ybjmdt+kUY1gP60fCu46oDxPv/mg==",
       "dev": true,
       "requires": {
-        "fast-deep-equal": "2.0.1",
-        "fast-json-stable-stringify": "2.0.0",
-        "json-schema-traverse": "0.4.1",
-        "uri-js": "4.2.2"
+        "fast-deep-equal": "^2.0.1",
+        "fast-json-stable-stringify": "^2.0.0",
+        "json-schema-traverse": "^0.4.1",
+        "uri-js": "^4.2.2"
       },
       "dependencies": {
         "fast-deep-equal": {
       "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
       "dev": true,
       "requires": {
-        "kind-of": "3.2.2",
-        "longest": "1.0.1",
-        "repeat-string": "1.6.1"
+        "kind-of": "^3.0.2",
+        "longest": "^1.0.1",
+        "repeat-string": "^1.5.2"
       }
     },
     "amdefine": {
       "dev": true,
       "optional": true,
       "requires": {
-        "bitsyntax": "0.0.4",
-        "bluebird": "3.5.2",
+        "bitsyntax": "~0.0.4",
+        "bluebird": "^3.4.6",
         "buffer-more-ints": "0.0.2",
-        "readable-stream": "1.1.14",
-        "safe-buffer": "5.1.2"
+        "readable-stream": "1.x >=1.1.9",
+        "safe-buffer": "^5.0.1"
       },
       "dependencies": {
         "isarray": {
           "dev": true,
           "optional": true,
           "requires": {
-            "core-util-is": "1.0.2",
-            "inherits": "2.0.3",
+            "core-util-is": "~1.0.0",
+            "inherits": "~2.0.1",
             "isarray": "0.0.1",
-            "string_decoder": "0.10.31"
+            "string_decoder": "~0.10.x"
           }
         },
         "string_decoder": {
         }
       }
     },
+    "ansi-align": {
+      "version": "3.0.0",
+      "resolved": "http://registry.npm.taobao.org/ansi-align/download/ansi-align-3.0.0.tgz",
+      "integrity": "sha1-tTazcc9ofKrvI2wY0+If43l0Z8s=",
+      "dev": true,
+      "requires": {
+        "string-width": "^3.0.0"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "4.1.0",
+          "resolved": "http://registry.npm.taobao.org/ansi-regex/download/ansi-regex-4.1.0.tgz",
+          "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=",
+          "dev": true
+        },
+        "is-fullwidth-code-point": {
+          "version": "2.0.0",
+          "resolved": "http://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz",
+          "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+          "dev": true
+        },
+        "string-width": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-3.1.0.tgz",
+          "integrity": "sha1-InZ74htirxCBV0MG9prFG2IgOWE=",
+          "dev": true,
+          "requires": {
+            "emoji-regex": "^7.0.1",
+            "is-fullwidth-code-point": "^2.0.0",
+            "strip-ansi": "^5.1.0"
+          }
+        },
+        "strip-ansi": {
+          "version": "5.2.0",
+          "resolved": "http://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz",
+          "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=",
+          "dev": true,
+          "requires": {
+            "ansi-regex": "^4.1.0"
+          }
+        }
+      }
+    },
     "ansi-html": {
       "version": "0.0.7",
       "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz",
       "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
       "dev": true,
       "requires": {
-        "color-convert": "1.9.3"
+        "color-convert": "^1.9.0"
       }
     },
     "anymatch": {
       "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==",
       "dev": true,
       "requires": {
-        "micromatch": "2.3.11",
-        "normalize-path": "2.1.1"
+        "micromatch": "^2.1.5",
+        "normalize-path": "^2.0.0"
       }
     },
     "app-root-path": {
       "integrity": "sha1-126/jKlNJ24keja61EpLdKthGZE=",
       "dev": true,
       "requires": {
-        "default-require-extensions": "1.0.0"
+        "default-require-extensions": "^1.0.0"
       }
     },
     "aproba": {
       "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz",
       "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==",
       "dev": true,
+      "optional": true,
       "requires": {
-        "delegates": "1.0.0",
-        "readable-stream": "2.3.6"
+        "delegates": "^1.0.0",
+        "readable-stream": "^2.0.6"
       }
     },
     "argparse": {
       "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
       "dev": true,
       "requires": {
-        "sprintf-js": "1.0.3"
+        "sprintf-js": "~1.0.2"
       }
     },
     "arr-diff": {
       "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
       "dev": true,
       "requires": {
-        "arr-flatten": "1.1.0"
+        "arr-flatten": "^1.0.1"
       }
     },
     "arr-flatten": {
       "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=",
       "dev": true,
       "requires": {
-        "define-properties": "1.1.3",
-        "es-abstract": "1.12.0"
+        "define-properties": "^1.1.2",
+        "es-abstract": "^1.7.0"
       }
     },
     "array-slice": {
       "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
       "dev": true,
       "requires": {
-        "array-uniq": "1.0.3"
+        "array-uniq": "^1.0.1"
       }
     },
     "array-uniq": {
       "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
       "dev": true,
       "requires": {
-        "safer-buffer": "2.1.2"
+        "safer-buffer": "~2.1.0"
       }
     },
     "asn1.js": {
       "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==",
       "dev": true,
       "requires": {
-        "bn.js": "4.11.8",
-        "inherits": "2.0.3",
-        "minimalistic-assert": "1.0.1"
+        "bn.js": "^4.0.0",
+        "inherits": "^2.0.1",
+        "minimalistic-assert": "^1.0.0"
       }
     },
     "assert": {
       "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==",
       "dev": true,
       "requires": {
-        "lodash": "4.17.11"
+        "lodash": "^4.17.10"
       }
     },
     "async-each": {
       "integrity": "sha512-Iq8TRIB+/9eQ8rbGhcP7ct5cYb/3qjNYAR2SnzLCEcwF6rvVOax8+9+fccgXk4bEhQGjOZd5TLhsksmAdsbGqQ==",
       "dev": true,
       "requires": {
-        "browserslist": "2.11.3",
-        "caniuse-lite": "1.0.30000893",
-        "normalize-range": "0.1.2",
-        "num2fraction": "1.2.2",
-        "postcss": "6.0.23",
-        "postcss-value-parser": "3.3.1"
+        "browserslist": "^2.11.3",
+        "caniuse-lite": "^1.0.30000805",
+        "normalize-range": "^0.1.2",
+        "num2fraction": "^1.2.2",
+        "postcss": "^6.0.17",
+        "postcss-value-parser": "^3.2.3"
       }
     },
     "aws-sign2": {
           "dev": true,
           "optional": true,
           "requires": {
-            "debug": "2.6.9"
+            "debug": "^2.2.0"
           }
         }
       }
       "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
       "dev": true,
       "requires": {
-        "chalk": "1.1.3",
-        "esutils": "2.0.2",
-        "js-tokens": "3.0.2"
+        "chalk": "^1.1.3",
+        "esutils": "^2.0.2",
+        "js-tokens": "^3.0.2"
       },
       "dependencies": {
         "ansi-styles": {
           "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
           "dev": true,
           "requires": {
-            "ansi-styles": "2.2.1",
-            "escape-string-regexp": "1.0.5",
-            "has-ansi": "2.0.0",
-            "strip-ansi": "3.0.1",
-            "supports-color": "2.0.0"
+            "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"
           }
         },
         "supports-color": {
       "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==",
       "dev": true,
       "requires": {
-        "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.11",
-        "source-map": "0.5.7",
-        "trim-right": "1.0.1"
+        "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-messages": {
       "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
       "dev": true,
       "requires": {
-        "babel-runtime": "6.26.0"
+        "babel-runtime": "^6.22.0"
       }
     },
     "babel-runtime": {
       "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
       "dev": true,
       "requires": {
-        "core-js": "2.5.7",
-        "regenerator-runtime": "0.11.1"
+        "core-js": "^2.4.0",
+        "regenerator-runtime": "^0.11.0"
       }
     },
     "babel-template": {
       "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
       "dev": true,
       "requires": {
-        "babel-runtime": "6.26.0",
-        "babel-traverse": "6.26.0",
-        "babel-types": "6.26.0",
-        "babylon": "6.18.0",
-        "lodash": "4.17.11"
+        "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": {
       "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
       "dev": true,
       "requires": {
-        "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.9",
-        "globals": "9.18.0",
-        "invariant": "2.2.4",
-        "lodash": "4.17.11"
+        "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": {
       "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
       "dev": true,
       "requires": {
-        "babel-runtime": "6.26.0",
-        "esutils": "2.0.2",
-        "lodash": "4.17.11",
-        "to-fast-properties": "1.0.3"
+        "babel-runtime": "^6.26.0",
+        "esutils": "^2.0.2",
+        "lodash": "^4.17.4",
+        "to-fast-properties": "^1.0.3"
       }
     },
     "babylon": {
       "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
       "dev": true,
       "requires": {
-        "cache-base": "1.0.1",
-        "class-utils": "0.3.6",
-        "component-emitter": "1.2.1",
-        "define-property": "1.0.0",
-        "isobject": "3.0.1",
-        "mixin-deep": "1.3.1",
-        "pascalcase": "0.1.1"
+        "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"
       },
       "dependencies": {
         "define-property": {
           "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
           "dev": true,
           "requires": {
-            "is-descriptor": "1.0.2"
+            "is-descriptor": "^1.0.0"
           }
         },
         "is-accessor-descriptor": {
           "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
           "dev": true,
           "requires": {
-            "kind-of": "6.0.2"
+            "kind-of": "^6.0.0"
           }
         },
         "is-data-descriptor": {
           "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
           "dev": true,
           "requires": {
-            "kind-of": "6.0.2"
+            "kind-of": "^6.0.0"
           }
         },
         "is-descriptor": {
           "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
           "dev": true,
           "requires": {
-            "is-accessor-descriptor": "1.0.0",
-            "is-data-descriptor": "1.0.0",
-            "kind-of": "6.0.2"
+            "is-accessor-descriptor": "^1.0.0",
+            "is-data-descriptor": "^1.0.0",
+            "kind-of": "^6.0.2"
           }
         },
         "isobject": {
       "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=",
       "dev": true
     },
+    "basic-auth": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npm.taobao.org/basic-auth/download/basic-auth-2.0.1.tgz",
+      "integrity": "sha1-uZgnm/R844NEtPPPkW1Gebv1Hjo=",
+      "dev": true,
+      "requires": {
+        "safe-buffer": "5.1.2"
+      }
+    },
     "batch": {
       "version": "0.6.1",
       "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz",
       "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
       "dev": true,
       "requires": {
-        "tweetnacl": "0.14.5"
+        "tweetnacl": "^0.14.3"
       }
     },
     "better-assert": {
       "dev": true,
       "optional": true,
       "requires": {
-        "readable-stream": "2.0.6"
+        "readable-stream": "~2.0.5"
       },
       "dependencies": {
         "process-nextick-args": {
           "dev": true,
           "optional": true,
           "requires": {
-            "core-util-is": "1.0.2",
-            "inherits": "2.0.3",
-            "isarray": "1.0.0",
-            "process-nextick-args": "1.0.7",
-            "string_decoder": "0.10.31",
-            "util-deprecate": "1.0.2"
+            "core-util-is": "~1.0.0",
+            "inherits": "~2.0.1",
+            "isarray": "~1.0.0",
+            "process-nextick-args": "~1.0.6",
+            "string_decoder": "~0.10.x",
+            "util-deprecate": "~1.0.1"
           }
         },
         "string_decoder": {
       "dev": true,
       "optional": true,
       "requires": {
-        "inherits": "2.0.3"
+        "inherits": "~2.0.0"
       }
     },
     "blocking-proxy": {
       "integrity": "sha1-RikF4Nz76pcPQao3Ij3anAexkSs=",
       "dev": true,
       "requires": {
-        "minimist": "1.2.0"
+        "minimist": "^1.2.0"
       },
       "dependencies": {
         "minimist": {
       "dev": true,
       "requires": {
         "bytes": "3.0.0",
-        "content-type": "1.0.4",
+        "content-type": "~1.0.4",
         "debug": "2.6.9",
-        "depd": "1.1.2",
-        "http-errors": "1.6.3",
+        "depd": "~1.1.2",
+        "http-errors": "~1.6.3",
         "iconv-lite": "0.4.23",
-        "on-finished": "2.3.0",
+        "on-finished": "~2.3.0",
         "qs": "6.5.2",
         "raw-body": "2.3.3",
-        "type-is": "1.6.16"
+        "type-is": "~1.6.16"
       },
       "dependencies": {
         "qs": {
       "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=",
       "dev": true,
       "requires": {
-        "array-flatten": "2.1.1",
-        "deep-equal": "1.0.1",
-        "dns-equal": "1.0.0",
-        "dns-txt": "2.0.2",
-        "multicast-dns": "6.2.3",
-        "multicast-dns-service-types": "1.1.0"
+        "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": {
       "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz",
       "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=",
       "dev": true,
+      "optional": true,
       "requires": {
-        "hoek": "2.16.3"
+        "hoek": "2.x.x"
+      }
+    },
+    "boxen": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npm.taobao.org/boxen/download/boxen-3.2.0.tgz",
+      "integrity": "sha1-+9/w3pNjarRFCIa2/0W5LQmPRes=",
+      "dev": true,
+      "requires": {
+        "ansi-align": "^3.0.0",
+        "camelcase": "^5.3.1",
+        "chalk": "^2.4.2",
+        "cli-boxes": "^2.2.0",
+        "string-width": "^3.0.0",
+        "term-size": "^1.2.0",
+        "type-fest": "^0.3.0",
+        "widest-line": "^2.0.0"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "4.1.0",
+          "resolved": "http://registry.npm.taobao.org/ansi-regex/download/ansi-regex-4.1.0.tgz",
+          "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=",
+          "dev": true
+        },
+        "camelcase": {
+          "version": "5.3.1",
+          "resolved": "https://registry.npm.taobao.org/camelcase/download/camelcase-5.3.1.tgz",
+          "integrity": "sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA=",
+          "dev": true
+        },
+        "chalk": {
+          "version": "2.4.2",
+          "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-2.4.2.tgz",
+          "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=",
+          "dev": true,
+          "requires": {
+            "ansi-styles": "^3.2.1",
+            "escape-string-regexp": "^1.0.5",
+            "supports-color": "^5.3.0"
+          }
+        },
+        "has-flag": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-3.0.0.tgz",
+          "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+          "dev": true
+        },
+        "is-fullwidth-code-point": {
+          "version": "2.0.0",
+          "resolved": "http://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz",
+          "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+          "dev": true
+        },
+        "string-width": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-3.1.0.tgz",
+          "integrity": "sha1-InZ74htirxCBV0MG9prFG2IgOWE=",
+          "dev": true,
+          "requires": {
+            "emoji-regex": "^7.0.1",
+            "is-fullwidth-code-point": "^2.0.0",
+            "strip-ansi": "^5.1.0"
+          }
+        },
+        "strip-ansi": {
+          "version": "5.2.0",
+          "resolved": "http://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz",
+          "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=",
+          "dev": true,
+          "requires": {
+            "ansi-regex": "^4.1.0"
+          }
+        },
+        "supports-color": {
+          "version": "5.5.0",
+          "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-5.5.0.tgz",
+          "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=",
+          "dev": true,
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        }
       }
     },
     "brace-expansion": {
       "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
       "dev": true,
       "requires": {
-        "balanced-match": "1.0.0",
+        "balanced-match": "^1.0.0",
         "concat-map": "0.0.1"
       }
     },
       "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
       "dev": true,
       "requires": {
-        "expand-range": "1.8.2",
-        "preserve": "0.2.0",
-        "repeat-element": "1.1.3"
+        "expand-range": "^1.8.1",
+        "preserve": "^0.2.0",
+        "repeat-element": "^1.1.2"
       }
     },
     "brorand": {
       "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
       "dev": true,
       "requires": {
-        "buffer-xor": "1.0.3",
-        "cipher-base": "1.0.4",
-        "create-hash": "1.2.0",
-        "evp_bytestokey": "1.0.3",
-        "inherits": "2.0.3",
-        "safe-buffer": "5.1.2"
+        "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": {
       "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==",
       "dev": true,
       "requires": {
-        "browserify-aes": "1.2.0",
-        "browserify-des": "1.0.2",
-        "evp_bytestokey": "1.0.3"
+        "browserify-aes": "^1.0.4",
+        "browserify-des": "^1.0.0",
+        "evp_bytestokey": "^1.0.0"
       }
     },
     "browserify-des": {
       "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==",
       "dev": true,
       "requires": {
-        "cipher-base": "1.0.4",
-        "des.js": "1.0.0",
-        "inherits": "2.0.3",
-        "safe-buffer": "5.1.2"
+        "cipher-base": "^1.0.1",
+        "des.js": "^1.0.0",
+        "inherits": "^2.0.1",
+        "safe-buffer": "^5.1.2"
       }
     },
     "browserify-rsa": {
       "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
       "dev": true,
       "requires": {
-        "bn.js": "4.11.8",
-        "randombytes": "2.0.6"
+        "bn.js": "^4.1.0",
+        "randombytes": "^2.0.1"
       }
     },
     "browserify-sign": {
       "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=",
       "dev": true,
       "requires": {
-        "bn.js": "4.11.8",
-        "browserify-rsa": "4.0.1",
-        "create-hash": "1.2.0",
-        "create-hmac": "1.1.7",
-        "elliptic": "6.4.1",
-        "inherits": "2.0.3",
-        "parse-asn1": "5.1.1"
+        "bn.js": "^4.1.1",
+        "browserify-rsa": "^4.0.0",
+        "create-hash": "^1.1.0",
+        "create-hmac": "^1.1.2",
+        "elliptic": "^6.0.0",
+        "inherits": "^2.0.1",
+        "parse-asn1": "^5.0.0"
       }
     },
     "browserify-zlib": {
       "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==",
       "dev": true,
       "requires": {
-        "pako": "1.0.6"
+        "pako": "~1.0.5"
       }
     },
     "browserslist": {
       "integrity": "sha512-yWu5cXT7Av6mVwzWc8lMsJMHWn4xyjSuGYi4IozbVTLUOEYPSagUB8kiMDUHA1fS3zjr8nkxkn9jdvug4BBRmA==",
       "dev": true,
       "requires": {
-        "caniuse-lite": "1.0.30000893",
-        "electron-to-chromium": "1.3.80"
+        "caniuse-lite": "^1.0.30000792",
+        "electron-to-chromium": "^1.3.30"
       }
     },
     "buffer": {
       "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=",
       "dev": true,
       "requires": {
-        "base64-js": "1.3.0",
-        "ieee754": "1.1.12",
-        "isarray": "1.0.0"
+        "base64-js": "^1.0.2",
+        "ieee754": "^1.1.4",
+        "isarray": "^1.0.0"
       }
     },
     "buffer-alloc": {
       "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==",
       "dev": true,
       "requires": {
-        "buffer-alloc-unsafe": "1.1.0",
-        "buffer-fill": "1.0.0"
+        "buffer-alloc-unsafe": "^1.1.0",
+        "buffer-fill": "^1.0.0"
       }
     },
     "buffer-alloc-unsafe": {
       "version": "0.0.2",
       "resolved": "https://registry.npmjs.org/buffer-more-ints/-/buffer-more-ints-0.0.2.tgz",
       "integrity": "sha1-JrOIXRD6E9t/wBquOquHAZngEkw=",
-      "dev": true
+      "dev": true,
+      "optional": true
     },
     "buffer-xor": {
       "version": "1.0.3",
       "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==",
       "dev": true,
       "requires": {
-        "bluebird": "3.5.2",
-        "chownr": "1.1.1",
-        "glob": "7.1.3",
-        "graceful-fs": "4.1.11",
-        "lru-cache": "4.1.3",
-        "mississippi": "2.0.0",
-        "mkdirp": "0.5.1",
-        "move-concurrently": "1.0.1",
-        "promise-inflight": "1.0.1",
-        "rimraf": "2.6.2",
-        "ssri": "5.3.0",
-        "unique-filename": "1.1.1",
-        "y18n": "4.0.0"
+        "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"
       }
     },
     "cache-base": {
       "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
       "dev": true,
       "requires": {
-        "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"
+        "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"
       },
       "dependencies": {
         "isobject": {
       "integrity": "sha512-rsGh4SIYyB9glU+d0OcHwiXHXBoUgDhHZaQ1KAbiXqfz1CDPxtTboh1gPbJ0q2qdO8a9lfcjgC5CJ2Ms32y5bw==",
       "dev": true,
       "requires": {
-        "loader-utils": "1.1.0",
-        "mkdirp": "0.5.1",
-        "neo-async": "2.6.0",
-        "schema-utils": "0.4.7"
+        "loader-utils": "^1.1.0",
+        "mkdirp": "^0.5.1",
+        "neo-async": "^2.5.0",
+        "schema-utils": "^0.4.2"
+      }
+    },
+    "cacheable-request": {
+      "version": "6.1.0",
+      "resolved": "https://registry.npm.taobao.org/cacheable-request/download/cacheable-request-6.1.0.tgz",
+      "integrity": "sha1-IP+4vRYrpL4R6VZ9gj22UQUsqRI=",
+      "dev": true,
+      "requires": {
+        "clone-response": "^1.0.2",
+        "get-stream": "^5.1.0",
+        "http-cache-semantics": "^4.0.0",
+        "keyv": "^3.0.0",
+        "lowercase-keys": "^2.0.0",
+        "normalize-url": "^4.1.0",
+        "responselike": "^1.0.2"
+      },
+      "dependencies": {
+        "get-stream": {
+          "version": "5.1.0",
+          "resolved": "https://registry.npm.taobao.org/get-stream/download/get-stream-5.1.0.tgz",
+          "integrity": "sha1-ASA83JJZf5uQkGfD5lbMH008Tck=",
+          "dev": true,
+          "requires": {
+            "pump": "^3.0.0"
+          }
+        },
+        "lowercase-keys": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npm.taobao.org/lowercase-keys/download/lowercase-keys-2.0.0.tgz",
+          "integrity": "sha1-JgPni3tLAAbLyi+8yKMgJVislHk=",
+          "dev": true
+        },
+        "pump": {
+          "version": "3.0.0",
+          "resolved": "http://registry.npm.taobao.org/pump/download/pump-3.0.0.tgz",
+          "integrity": "sha1-tKIRaBW94vTh6mAjVOjHVWUQemQ=",
+          "dev": true,
+          "requires": {
+            "end-of-stream": "^1.1.0",
+            "once": "^1.3.1"
+          }
+        }
       }
     },
     "callsite": {
       "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=",
       "dev": true,
       "requires": {
-        "no-case": "2.3.2",
-        "upper-case": "1.1.3"
+        "no-case": "^2.2.0",
+        "upper-case": "^1.1.1"
       }
     },
     "camelcase": {
       "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
       "dev": true,
       "requires": {
-        "camelcase": "2.1.1",
-        "map-obj": "1.0.1"
+        "camelcase": "^2.0.0",
+        "map-obj": "^1.0.0"
       }
     },
     "caniuse-lite": {
       "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
       "dev": true,
       "requires": {
-        "align-text": "0.1.4",
-        "lazy-cache": "1.0.4"
+        "align-text": "^0.1.3",
+        "lazy-cache": "^1.0.3"
       }
     },
     "chalk": {
       "integrity": "sha512-LvixLAQ4MYhbf7hgL4o5PeK32gJKvVzDRiSNIApDofQvyhl8adgG2lJVXn4+ekQoK7HL9RF8lqxwerpe0x2pCw==",
       "dev": true,
       "requires": {
-        "ansi-styles": "3.2.1",
-        "escape-string-regexp": "1.0.5",
-        "supports-color": "4.5.0"
+        "ansi-styles": "^3.1.0",
+        "escape-string-regexp": "^1.0.5",
+        "supports-color": "^4.0.0"
       }
     },
     "chokidar": {
       "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=",
       "dev": true,
       "requires": {
-        "anymatch": "1.3.2",
-        "async-each": "1.0.1",
-        "fsevents": "1.2.4",
-        "glob-parent": "2.0.0",
-        "inherits": "2.0.3",
-        "is-binary-path": "1.0.1",
-        "is-glob": "2.0.1",
-        "path-is-absolute": "1.0.1",
-        "readdirp": "2.2.1"
+        "anymatch": "^1.3.0",
+        "async-each": "^1.0.0",
+        "fsevents": "^1.0.0",
+        "glob-parent": "^2.0.0",
+        "inherits": "^2.0.1",
+        "is-binary-path": "^1.0.0",
+        "is-glob": "^2.0.0",
+        "path-is-absolute": "^1.0.0",
+        "readdirp": "^2.0.0"
       }
     },
     "chownr": {
       "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==",
       "dev": true
     },
+    "ci-info": {
+      "version": "2.0.0",
+      "resolved": "http://registry.npm.taobao.org/ci-info/download/ci-info-2.0.0.tgz",
+      "integrity": "sha1-Z6npZL4xpR4V5QENWObxKDQAL0Y=",
+      "dev": true
+    },
     "cipher-base": {
       "version": "1.0.4",
       "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
       "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
       "dev": true,
       "requires": {
-        "inherits": "2.0.3",
-        "safe-buffer": "5.1.2"
+        "inherits": "^2.0.1",
+        "safe-buffer": "^5.0.1"
       }
     },
     "circular-dependency-plugin": {
       "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
       "dev": true,
       "requires": {
-        "arr-union": "3.1.0",
-        "define-property": "0.2.5",
-        "isobject": "3.0.1",
-        "static-extend": "0.1.2"
+        "arr-union": "^3.1.0",
+        "define-property": "^0.2.5",
+        "isobject": "^3.0.0",
+        "static-extend": "^0.1.1"
       },
       "dependencies": {
         "define-property": {
           "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
           "dev": true,
           "requires": {
-            "is-descriptor": "0.1.6"
+            "is-descriptor": "^0.1.0"
           }
         },
         "isobject": {
       "integrity": "sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g==",
       "dev": true,
       "requires": {
-        "source-map": "0.6.1"
+        "source-map": "~0.6.0"
       },
       "dependencies": {
         "source-map": {
         }
       }
     },
+    "cli-boxes": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npm.taobao.org/cli-boxes/download/cli-boxes-2.2.0.tgz",
+      "integrity": "sha1-U47K6PnGylCOPDyVtFP+k8tMFo0=",
+      "dev": true
+    },
     "cliui": {
       "version": "3.2.0",
       "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
       "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
       "dev": true,
       "requires": {
-        "string-width": "1.0.2",
-        "strip-ansi": "3.0.1",
-        "wrap-ansi": "2.1.0"
+        "string-width": "^1.0.1",
+        "strip-ansi": "^3.0.1",
+        "wrap-ansi": "^2.0.0"
       }
     },
     "clone": {
       "integrity": "sha512-SZegPTKjCgpQH63E+eN6mVEEPdQBOUzjyJm5Pora4lrwWRFS8I0QAxV/KD6vV/i0WuijHZWQC1fMsPEdxfdVCQ==",
       "dev": true,
       "requires": {
-        "for-own": "1.0.0",
-        "is-plain-object": "2.0.4",
-        "kind-of": "6.0.2",
-        "shallow-clone": "1.0.0"
+        "for-own": "^1.0.0",
+        "is-plain-object": "^2.0.4",
+        "kind-of": "^6.0.0",
+        "shallow-clone": "^1.0.0"
       },
       "dependencies": {
         "for-own": {
           "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=",
           "dev": true,
           "requires": {
-            "for-in": "1.0.2"
+            "for-in": "^1.0.1"
           }
         },
         "kind-of": {
         }
       }
     },
+    "clone-response": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npm.taobao.org/clone-response/download/clone-response-1.0.2.tgz",
+      "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=",
+      "dev": true,
+      "requires": {
+        "mimic-response": "^1.0.0"
+      }
+    },
     "co": {
       "version": "4.6.0",
       "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
       "integrity": "sha512-oO6vCkjqsVrEsmh58oNlnJkRXuA30hF8cdNAQV9DytEalDwyOFRvHMnlKFzmOStNerOmPGZU9GAHnBo4tGvtiQ==",
       "dev": true,
       "requires": {
-        "app-root-path": "2.1.0",
-        "css-selector-tokenizer": "0.7.0",
-        "cssauron": "1.4.0",
-        "semver-dsl": "1.0.1",
-        "source-map": "0.5.7",
-        "sprintf-js": "1.1.1"
+        "app-root-path": "^2.1.0",
+        "css-selector-tokenizer": "^0.7.0",
+        "cssauron": "^1.4.0",
+        "semver-dsl": "^1.0.1",
+        "source-map": "^0.5.7",
+        "sprintf-js": "^1.1.1"
       },
       "dependencies": {
         "sprintf-js": {
       "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
       "dev": true,
       "requires": {
-        "map-visit": "1.0.0",
-        "object-visit": "1.0.1"
+        "map-visit": "^1.0.0",
+        "object-visit": "^1.0.0"
       }
     },
     "color-convert": {
       "integrity": "sha1-RYwH4J4NkA/Ci3Cj/sLazR0st/Y=",
       "dev": true,
       "requires": {
-        "lodash": "4.17.11"
+        "lodash": "^4.5.0"
       }
     },
     "combined-stream": {
       "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==",
       "dev": true,
       "requires": {
-        "delayed-stream": "1.0.0"
+        "delayed-stream": "~1.0.0"
       }
     },
     "commander": {
       "integrity": "sha512-4aE67DL33dSW9gw4CI2H/yTxqHLNcxp0yS6jB+4h+wr3e43+1z7vm0HU9qXOH8j+qjKuL8+UtkOxYQSMq60Ylw==",
       "dev": true,
       "requires": {
-        "mime-db": "1.37.0"
+        "mime-db": ">= 1.36.0 < 2"
       }
     },
     "compression": {
       "integrity": "sha512-HSjyBG5N1Nnz7tF2+O7A9XUhyjru71/fwgNb7oIsEVHR0WShfs2tIS/EySLgiTe98aOK18YDlMXpzjCXY/n9mg==",
       "dev": true,
       "requires": {
-        "accepts": "1.3.5",
+        "accepts": "~1.3.5",
         "bytes": "3.0.0",
-        "compressible": "2.0.15",
+        "compressible": "~2.0.14",
         "debug": "2.6.9",
-        "on-headers": "1.0.1",
+        "on-headers": "~1.0.1",
         "safe-buffer": "5.1.2",
-        "vary": "1.1.2"
+        "vary": "~1.1.2"
       }
     },
     "concat-map": {
       "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
       "dev": true,
       "requires": {
-        "buffer-from": "1.1.1",
-        "inherits": "2.0.3",
-        "readable-stream": "2.3.6",
-        "typedarray": "0.0.6"
+        "buffer-from": "^1.0.0",
+        "inherits": "^2.0.3",
+        "readable-stream": "^2.2.2",
+        "typedarray": "^0.0.6"
+      }
+    },
+    "configstore": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npm.taobao.org/configstore/download/configstore-4.0.0.tgz",
+      "integrity": "sha1-WTMxHpXTaH77WSxSi5ItkmLSJ+c=",
+      "dev": true,
+      "requires": {
+        "dot-prop": "^4.1.0",
+        "graceful-fs": "^4.1.2",
+        "make-dir": "^1.0.0",
+        "unique-string": "^1.0.0",
+        "write-file-atomic": "^2.0.0",
+        "xdg-basedir": "^3.0.0"
       }
     },
     "connect": {
       "requires": {
         "debug": "2.6.9",
         "finalhandler": "1.1.0",
-        "parseurl": "1.3.2",
+        "parseurl": "~1.3.2",
         "utils-merge": "1.0.1"
       },
       "dependencies": {
           "dev": true,
           "requires": {
             "debug": "2.6.9",
-            "encodeurl": "1.0.2",
-            "escape-html": "1.0.3",
-            "on-finished": "2.3.0",
-            "parseurl": "1.3.2",
-            "statuses": "1.3.1",
-            "unpipe": "1.0.0"
+            "encodeurl": "~1.0.1",
+            "escape-html": "~1.0.3",
+            "on-finished": "~2.3.0",
+            "parseurl": "~1.3.2",
+            "statuses": "~1.3.1",
+            "unpipe": "~1.0.0"
           }
         },
         "statuses": {
       "integrity": "sha1-sGhzk0vF40T+9hGhlqb6rgruAVo=",
       "dev": true
     },
+    "connect-pause": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npm.taobao.org/connect-pause/download/connect-pause-0.1.1.tgz",
+      "integrity": "sha1-smmyu4Ldsaw9tQmcD7WCq6mfs3o=",
+      "dev": true
+    },
     "console-browserify": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz",
       "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=",
       "dev": true,
       "requires": {
-        "date-now": "0.1.4"
+        "date-now": "^0.1.4"
       }
     },
     "console-control-strings": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
       "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
-      "dev": true
+      "dev": true,
+      "optional": true
     },
     "constants-browserify": {
       "version": "1.0.0",
       "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==",
       "dev": true,
       "requires": {
-        "safe-buffer": "5.1.2"
+        "safe-buffer": "~5.1.1"
       }
     },
     "cookie": {
       "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==",
       "dev": true,
       "requires": {
-        "aproba": "1.2.0",
-        "fs-write-stream-atomic": "1.0.10",
-        "iferr": "0.1.5",
-        "mkdirp": "0.5.1",
-        "rimraf": "2.6.2",
-        "run-queue": "1.0.3"
+        "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": {
       "integrity": "sha512-v4THQ24Tks2NkyOvZuFDgZVfDD9YaA9rwYLZTrWg2GHIA8lrH5DboEyeoorh5Skki+PUbgSmnsCwhMWqYrQZrA==",
       "dev": true,
       "requires": {
-        "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.3.0",
-        "serialize-javascript": "1.5.0"
+        "cacache": "^10.0.1",
+        "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"
       },
       "dependencies": {
         "is-extglob": {
           "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=",
           "dev": true,
           "requires": {
-            "is-extglob": "2.1.1"
+            "is-extglob": "^2.1.1"
           }
         }
       }
       "integrity": "sha512-sA2/4+/PZ/KV6CKgjrVrrUVBKCkdDO02CUlQ0YKTQoYUwPYNOtOAcWlbYhd5v/1JqYaA6oZ4sDlOU4ppVw6Wbg==",
       "dev": true,
       "requires": {
-        "chalk": "2.2.2"
+        "chalk": "^2.0.0"
       }
     },
     "core-util-is": {
       "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
       "dev": true
     },
+    "cors": {
+      "version": "2.8.5",
+      "resolved": "https://registry.npm.taobao.org/cors/download/cors-2.8.5.tgz",
+      "integrity": "sha1-6sEdpRWS3Ya58G9uesKTs9+HXSk=",
+      "dev": true,
+      "requires": {
+        "object-assign": "^4",
+        "vary": "^1"
+      }
+    },
     "cosmiconfig": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-4.0.0.tgz",
       "integrity": "sha512-6e5vDdrXZD+t5v0L8CrurPeybg4Fmf+FCSYxXKYVAqLUtyCSbuyqE059d0kDthTNRzKVjL7QMgNpEUlsoYH3iQ==",
       "dev": true,
       "requires": {
-        "is-directory": "0.3.1",
-        "js-yaml": "3.12.0",
-        "parse-json": "4.0.0",
-        "require-from-string": "2.0.2"
+        "is-directory": "^0.3.1",
+        "js-yaml": "^3.9.0",
+        "parse-json": "^4.0.0",
+        "require-from-string": "^2.0.1"
       },
       "dependencies": {
         "parse-json": {
           "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
           "dev": true,
           "requires": {
-            "error-ex": "1.3.2",
-            "json-parse-better-errors": "1.0.2"
+            "error-ex": "^1.3.1",
+            "json-parse-better-errors": "^1.0.1"
           }
         }
       }
       "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==",
       "dev": true,
       "requires": {
-        "bn.js": "4.11.8",
-        "elliptic": "6.4.1"
+        "bn.js": "^4.1.0",
+        "elliptic": "^6.0.0"
       }
     },
     "create-hash": {
       "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
       "dev": true,
       "requires": {
-        "cipher-base": "1.0.4",
-        "inherits": "2.0.3",
-        "md5.js": "1.3.5",
-        "ripemd160": "2.0.2",
-        "sha.js": "2.4.11"
+        "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": {
       "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
       "dev": true,
       "requires": {
-        "cipher-base": "1.0.4",
-        "create-hash": "1.2.0",
-        "inherits": "2.0.3",
-        "ripemd160": "2.0.2",
-        "safe-buffer": "5.1.2",
-        "sha.js": "2.4.11"
+        "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": {
       "dev": true,
       "optional": true,
       "requires": {
-        "lru-cache": "4.1.3",
-        "which": "1.3.1"
+        "lru-cache": "^4.0.1",
+        "which": "^1.2.9"
       }
     },
     "cryptiles": {
       "dev": true,
       "optional": true,
       "requires": {
-        "boom": "2.10.1"
+        "boom": "2.x.x"
       }
     },
     "crypto-browserify": {
       "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",
       "dev": true,
       "requires": {
-        "browserify-cipher": "1.0.1",
-        "browserify-sign": "4.0.4",
-        "create-ecdh": "4.0.3",
-        "create-hash": "1.2.0",
-        "create-hmac": "1.1.7",
-        "diffie-hellman": "5.0.3",
-        "inherits": "2.0.3",
-        "pbkdf2": "3.0.17",
-        "public-encrypt": "4.0.3",
-        "randombytes": "2.0.6",
-        "randomfill": "1.0.4"
+        "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"
       }
     },
+    "crypto-random-string": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npm.taobao.org/crypto-random-string/download/crypto-random-string-1.0.0.tgz",
+      "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=",
+      "dev": true
+    },
     "css-parse": {
       "version": "1.7.0",
       "resolved": "https://registry.npmjs.org/css-parse/-/css-parse-1.7.0.tgz",
       "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=",
       "dev": true,
       "requires": {
-        "boolbase": "1.0.0",
-        "css-what": "2.1.2",
+        "boolbase": "~1.0.0",
+        "css-what": "2.1",
         "domutils": "1.5.1",
-        "nth-check": "1.0.2"
+        "nth-check": "~1.0.1"
       }
     },
     "css-selector-tokenizer": {
       "integrity": "sha1-5piEdK6MlTR3v15+/s/OzNnPTIY=",
       "dev": true,
       "requires": {
-        "cssesc": "0.1.0",
-        "fastparse": "1.1.1",
-        "regexpu-core": "1.0.0"
+        "cssesc": "^0.1.0",
+        "fastparse": "^1.1.1",
+        "regexpu-core": "^1.0.0"
       }
     },
     "css-what": {
       "integrity": "sha1-pmAt/34EqDBtwNuaVR6S6LVmKtg=",
       "dev": true,
       "requires": {
-        "through": "2.3.8"
+        "through": "X.X.X"
       }
     },
     "cssesc": {
       "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
       "dev": true,
       "requires": {
-        "array-find-index": "1.0.2"
+        "array-find-index": "^1.0.1"
       }
     },
     "custom-event": {
       "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=",
       "dev": true,
       "requires": {
-        "es5-ext": "0.10.46"
+        "es5-ext": "^0.10.9"
       }
     },
     "d3": {
       "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
       "dev": true,
       "requires": {
-        "assert-plus": "1.0.0"
+        "assert-plus": "^1.0.0"
       },
       "dependencies": {
         "assert-plus": {
       "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
       "dev": true
     },
+    "decompress-response": {
+      "version": "3.3.0",
+      "resolved": "https://registry.npm.taobao.org/decompress-response/download/decompress-response-3.3.0.tgz",
+      "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=",
+      "dev": true,
+      "requires": {
+        "mimic-response": "^1.0.0"
+      }
+    },
     "deep-equal": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz",
       "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=",
       "dev": true
     },
+    "deep-extend": {
+      "version": "0.6.0",
+      "resolved": "http://registry.npm.taobao.org/deep-extend/download/deep-extend-0.6.0.tgz",
+      "integrity": "sha1-xPp8lUBKF6nD6Mp+FTcxK3NjMKw=",
+      "dev": true
+    },
     "deep-is": {
       "version": "0.1.3",
       "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
       "integrity": "sha1-836hXT4T/9m0N9M+GnW1+5eHTLg=",
       "dev": true,
       "requires": {
-        "strip-bom": "2.0.0"
+        "strip-bom": "^2.0.0"
       }
     },
+    "defer-to-connect": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npm.taobao.org/defer-to-connect/download/defer-to-connect-1.0.2.tgz",
+      "integrity": "sha1-S651ijFLA0rjOQK1qsJajdaoYz4=",
+      "dev": true
+    },
     "define-properties": {
       "version": "1.1.3",
       "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
       "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
       "dev": true,
       "requires": {
-        "object-keys": "1.0.12"
+        "object-keys": "^1.0.12"
       }
     },
     "define-property": {
       "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
       "dev": true,
       "requires": {
-        "is-descriptor": "1.0.2",
-        "isobject": "3.0.1"
+        "is-descriptor": "^1.0.2",
+        "isobject": "^3.0.1"
       },
       "dependencies": {
         "is-accessor-descriptor": {
           "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
           "dev": true,
           "requires": {
-            "kind-of": "6.0.2"
+            "kind-of": "^6.0.0"
           }
         },
         "is-data-descriptor": {
           "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
           "dev": true,
           "requires": {
-            "kind-of": "6.0.2"
+            "kind-of": "^6.0.0"
           }
         },
         "is-descriptor": {
           "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
           "dev": true,
           "requires": {
-            "is-accessor-descriptor": "1.0.0",
-            "is-data-descriptor": "1.0.0",
-            "kind-of": "6.0.2"
+            "is-accessor-descriptor": "^1.0.0",
+            "is-data-descriptor": "^1.0.0",
+            "kind-of": "^6.0.2"
           }
         },
         "isobject": {
       "dev": true,
       "optional": true,
       "requires": {
-        "ast-types": "0.11.6",
-        "escodegen": "1.11.0",
-        "esprima": "3.1.3"
+        "ast-types": "0.x.x",
+        "escodegen": "1.x.x",
+        "esprima": "3.x.x"
       },
       "dependencies": {
         "esprima": {
       "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=",
       "dev": true,
       "requires": {
-        "globby": "6.1.0",
-        "is-path-cwd": "1.0.0",
-        "is-path-in-cwd": "1.0.1",
-        "p-map": "1.2.0",
-        "pify": "3.0.0",
-        "rimraf": "2.6.2"
+        "globby": "^6.1.0",
+        "is-path-cwd": "^1.0.0",
+        "is-path-in-cwd": "^1.0.0",
+        "p-map": "^1.1.1",
+        "pify": "^3.0.0",
+        "rimraf": "^2.2.8"
       },
       "dependencies": {
         "globby": {
           "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=",
           "dev": true,
           "requires": {
-            "array-union": "1.0.2",
-            "glob": "7.1.3",
-            "object-assign": "4.1.1",
-            "pify": "2.3.0",
-            "pinkie-promise": "2.0.1"
+            "array-union": "^1.0.1",
+            "glob": "^7.0.3",
+            "object-assign": "^4.0.1",
+            "pify": "^2.0.0",
+            "pinkie-promise": "^2.0.0"
           },
           "dependencies": {
             "pify": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
       "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
-      "dev": true
+      "dev": true,
+      "optional": true
     },
     "denodeify": {
       "version": "1.2.1",
       "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=",
       "dev": true,
       "requires": {
-        "inherits": "2.0.3",
-        "minimalistic-assert": "1.0.1"
+        "inherits": "^2.0.1",
+        "minimalistic-assert": "^1.0.0"
       }
     },
     "destroy": {
       "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
       "dev": true,
       "requires": {
-        "repeating": "2.0.1"
+        "repeating": "^2.0.0"
       }
     },
     "detect-node": {
       "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",
       "dev": true,
       "requires": {
-        "bn.js": "4.11.8",
-        "miller-rabin": "4.0.1",
-        "randombytes": "2.0.6"
+        "bn.js": "^4.1.0",
+        "miller-rabin": "^4.0.0",
+        "randombytes": "^2.0.0"
       }
     },
     "dir-glob": {
       "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==",
       "dev": true,
       "requires": {
-        "arrify": "1.0.1",
-        "path-type": "3.0.0"
+        "arrify": "^1.0.1",
+        "path-type": "^3.0.0"
       }
     },
     "dns-equal": {
       "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==",
       "dev": true,
       "requires": {
-        "ip": "1.1.5",
-        "safe-buffer": "5.1.2"
+        "ip": "^1.1.0",
+        "safe-buffer": "^5.0.1"
       }
     },
     "dns-txt": {
       "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=",
       "dev": true,
       "requires": {
-        "buffer-indexof": "1.1.1"
+        "buffer-indexof": "^1.0.0"
       }
     },
     "dom-converter": {
       "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==",
       "dev": true,
       "requires": {
-        "utila": "0.4.0"
+        "utila": "~0.4"
       }
     },
     "dom-serialize": {
       "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=",
       "dev": true,
       "requires": {
-        "custom-event": "1.0.1",
-        "ent": "2.2.0",
-        "extend": "3.0.2",
-        "void-elements": "2.0.1"
+        "custom-event": "~1.0.0",
+        "ent": "~2.2.0",
+        "extend": "^3.0.0",
+        "void-elements": "^2.0.0"
       }
     },
     "dom-serializer": {
       "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=",
       "dev": true,
       "requires": {
-        "domelementtype": "1.1.3",
-        "entities": "1.1.2"
+        "domelementtype": "~1.1.1",
+        "entities": "~1.1.1"
       },
       "dependencies": {
         "domelementtype": {
       "integrity": "sha1-0mRvXlf2w7qxHPbLBdPArPdBJZQ=",
       "dev": true,
       "requires": {
-        "domelementtype": "1.2.1"
+        "domelementtype": "1"
       }
     },
     "domutils": {
       "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=",
       "dev": true,
       "requires": {
-        "dom-serializer": "0.1.0",
-        "domelementtype": "1.2.1"
+        "dom-serializer": "0",
+        "domelementtype": "1"
+      }
+    },
+    "dot-prop": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npm.taobao.org/dot-prop/download/dot-prop-4.2.0.tgz",
+      "integrity": "sha1-HxngwuGqDjJ5fEl5nyg3rGr2nFc=",
+      "dev": true,
+      "requires": {
+        "is-obj": "^1.0.0"
       }
     },
     "double-ended-queue": {
       "dev": true,
       "optional": true
     },
+    "duplexer3": {
+      "version": "0.1.4",
+      "resolved": "http://registry.npm.taobao.org/duplexer3/download/duplexer3-0.1.4.tgz",
+      "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=",
+      "dev": true
+    },
     "duplexify": {
       "version": "3.6.1",
       "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.1.tgz",
       "integrity": "sha512-vM58DwdnKmty+FSPzT14K9JXb90H+j5emaR4KYbr2KTIz00WHGbWOe5ghQTx233ZCLZtrGDALzKwcjEtSt35mA==",
       "dev": true,
       "requires": {
-        "end-of-stream": "1.4.1",
-        "inherits": "2.0.3",
-        "readable-stream": "2.3.6",
-        "stream-shift": "1.0.0"
+        "end-of-stream": "^1.0.0",
+        "inherits": "^2.0.1",
+        "readable-stream": "^2.0.0",
+        "stream-shift": "^1.0.0"
       }
     },
     "ecc-jsbn": {
       "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
       "dev": true,
       "requires": {
-        "jsbn": "0.1.1",
-        "safer-buffer": "2.1.2"
+        "jsbn": "~0.1.0",
+        "safer-buffer": "^2.1.0"
       }
     },
     "echarts": {
       "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==",
       "dev": true,
       "requires": {
-        "bn.js": "4.11.8",
-        "brorand": "1.1.0",
-        "hash.js": "1.1.5",
-        "hmac-drbg": "1.0.1",
-        "inherits": "2.0.3",
-        "minimalistic-assert": "1.0.1",
-        "minimalistic-crypto-utils": "1.0.1"
+        "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"
       }
     },
     "ember-cli-string-utils": {
       "integrity": "sha1-ObZ3/CgF9VFzc1N2/O8njqpEUqE=",
       "dev": true
     },
+    "emoji-regex": {
+      "version": "7.0.3",
+      "resolved": "http://registry.npm.taobao.org/emoji-regex/download/emoji-regex-7.0.3.tgz",
+      "integrity": "sha1-kzoEBShgyF6DwSJHnEdIqOTHIVY=",
+      "dev": true
+    },
     "emojis-list": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
       "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==",
       "dev": true,
       "requires": {
-        "once": "1.4.0"
+        "once": "^1.4.0"
       }
     },
     "engine.io": {
       "integrity": "sha512-D06ivJkYxyRrcEe0bTpNnBQNgP9d3xog+qZlLbui8EsMr/DouQpf5o9FzJnWYHEYE0YsFHllUv2R1dkgYZXHcA==",
       "dev": true,
       "requires": {
-        "accepts": "1.3.5",
+        "accepts": "~1.3.4",
         "base64id": "1.0.0",
         "cookie": "0.3.1",
-        "debug": "3.1.0",
-        "engine.io-parser": "2.1.2",
-        "uws": "9.14.0",
-        "ws": "3.3.3"
+        "debug": "~3.1.0",
+        "engine.io-parser": "~2.1.0",
+        "uws": "~9.14.0",
+        "ws": "~3.3.1"
       },
       "dependencies": {
         "debug": {
       "requires": {
         "component-emitter": "1.2.1",
         "component-inherit": "0.0.3",
-        "debug": "3.1.0",
-        "engine.io-parser": "2.1.2",
+        "debug": "~3.1.0",
+        "engine.io-parser": "~2.1.1",
         "has-cors": "1.1.0",
         "indexof": "0.0.1",
         "parseqs": "0.0.5",
         "parseuri": "0.0.5",
-        "ws": "3.3.3",
-        "xmlhttprequest-ssl": "1.5.5",
+        "ws": "~3.3.1",
+        "xmlhttprequest-ssl": "~1.5.4",
         "yeast": "0.1.2"
       },
       "dependencies": {
       "dev": true,
       "requires": {
         "after": "0.8.2",
-        "arraybuffer.slice": "0.0.7",
+        "arraybuffer.slice": "~0.0.7",
         "base64-arraybuffer": "0.1.5",
         "blob": "0.0.4",
-        "has-binary2": "1.0.3"
+        "has-binary2": "~1.0.2"
       }
     },
     "enhanced-resolve": {
       "integrity": "sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24=",
       "dev": true,
       "requires": {
-        "graceful-fs": "4.1.11",
-        "memory-fs": "0.4.1",
-        "object-assign": "4.1.1",
-        "tapable": "0.2.8"
+        "graceful-fs": "^4.1.2",
+        "memory-fs": "^0.4.0",
+        "object-assign": "^4.0.1",
+        "tapable": "^0.2.7"
       }
     },
     "ent": {
       "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==",
       "dev": true,
       "requires": {
-        "prr": "1.0.1"
+        "prr": "~1.0.1"
       }
     },
     "error-ex": {
       "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
       "dev": true,
       "requires": {
-        "is-arrayish": "0.2.1"
+        "is-arrayish": "^0.2.1"
+      }
+    },
+    "errorhandler": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npm.taobao.org/errorhandler/download/errorhandler-1.5.1.tgz",
+      "integrity": "sha1-ubpdF8+QdEzR6FE1em51v4BqmpE=",
+      "dev": true,
+      "requires": {
+        "accepts": "~1.3.7",
+        "escape-html": "~1.0.3"
+      },
+      "dependencies": {
+        "accepts": {
+          "version": "1.3.7",
+          "resolved": "https://registry.npm.taobao.org/accepts/download/accepts-1.3.7.tgz",
+          "integrity": "sha1-UxvHJlF6OytB+FACHGzBXqq1B80=",
+          "dev": true,
+          "requires": {
+            "mime-types": "~2.1.24",
+            "negotiator": "0.6.2"
+          }
+        },
+        "mime-db": {
+          "version": "1.40.0",
+          "resolved": "https://registry.npm.taobao.org/mime-db/download/mime-db-1.40.0.tgz",
+          "integrity": "sha1-plBX6ZjbCQ9zKmj2wnbTh9QSbDI=",
+          "dev": true
+        },
+        "mime-types": {
+          "version": "2.1.24",
+          "resolved": "https://registry.npm.taobao.org/mime-types/download/mime-types-2.1.24.tgz",
+          "integrity": "sha1-tvjQs+lR77d97eyhlM/20W9nb4E=",
+          "dev": true,
+          "requires": {
+            "mime-db": "1.40.0"
+          }
+        },
+        "negotiator": {
+          "version": "0.6.2",
+          "resolved": "https://registry.npm.taobao.org/negotiator/download/negotiator-0.6.2.tgz",
+          "integrity": "sha1-/qz3zPUlp3rpY0Q2pkiD/+yjRvs=",
+          "dev": true
+        }
       }
     },
     "es-abstract": {
       "integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==",
       "dev": true,
       "requires": {
-        "es-to-primitive": "1.2.0",
-        "function-bind": "1.1.1",
-        "has": "1.0.3",
-        "is-callable": "1.1.4",
-        "is-regex": "1.0.4"
+        "es-to-primitive": "^1.1.1",
+        "function-bind": "^1.1.1",
+        "has": "^1.0.1",
+        "is-callable": "^1.1.3",
+        "is-regex": "^1.0.4"
       }
     },
     "es-to-primitive": {
       "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==",
       "dev": true,
       "requires": {
-        "is-callable": "1.1.4",
-        "is-date-object": "1.0.1",
-        "is-symbol": "1.0.2"
+        "is-callable": "^1.1.4",
+        "is-date-object": "^1.0.1",
+        "is-symbol": "^1.0.2"
       }
     },
     "es5-ext": {
       "integrity": "sha512-24XxRvJXNFwEMpJb3nOkiRJKRoupmjYmOPVlI65Qy2SrtxwOTB+g6ODjBKOtwEHbYrhWRty9xxOWLNdClT2djw==",
       "dev": true,
       "requires": {
-        "es6-iterator": "2.0.3",
-        "es6-symbol": "3.1.1",
-        "next-tick": "1.0.0"
+        "es6-iterator": "~2.0.3",
+        "es6-symbol": "~3.1.1",
+        "next-tick": "1"
       }
     },
     "es6-iterator": {
       "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=",
       "dev": true,
       "requires": {
-        "d": "1.0.0",
-        "es5-ext": "0.10.46",
-        "es6-symbol": "3.1.1"
+        "d": "1",
+        "es5-ext": "^0.10.35",
+        "es6-symbol": "^3.1.1"
       }
     },
     "es6-map": {
       "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=",
       "dev": true,
       "requires": {
-        "d": "1.0.0",
-        "es5-ext": "0.10.46",
-        "es6-iterator": "2.0.3",
-        "es6-set": "0.1.5",
-        "es6-symbol": "3.1.1",
-        "event-emitter": "0.3.5"
+        "d": "1",
+        "es5-ext": "~0.10.14",
+        "es6-iterator": "~2.0.1",
+        "es6-set": "~0.1.5",
+        "es6-symbol": "~3.1.1",
+        "event-emitter": "~0.3.5"
       }
     },
     "es6-promise": {
       "version": "4.2.5",
       "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.5.tgz",
       "integrity": "sha512-n6wvpdE43VFtJq+lUDYDBFUwV8TZbuGXLV4D6wKafg13ldznKsyEvatubnmUe31zcvelSzOHF+XbaT+Bl9ObDg==",
-      "dev": true
+      "dev": true,
+      "optional": true
     },
     "es6-promisify": {
       "version": "5.0.0",
       "resolved": "http://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz",
       "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=",
       "dev": true,
+      "optional": true,
       "requires": {
-        "es6-promise": "4.2.5"
+        "es6-promise": "^4.0.3"
       }
     },
     "es6-set": {
       "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=",
       "dev": true,
       "requires": {
-        "d": "1.0.0",
-        "es5-ext": "0.10.46",
-        "es6-iterator": "2.0.3",
+        "d": "1",
+        "es5-ext": "~0.10.14",
+        "es6-iterator": "~2.0.1",
         "es6-symbol": "3.1.1",
-        "event-emitter": "0.3.5"
+        "event-emitter": "~0.3.5"
       }
     },
     "es6-symbol": {
       "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=",
       "dev": true,
       "requires": {
-        "d": "1.0.0",
-        "es5-ext": "0.10.46"
+        "d": "1",
+        "es5-ext": "~0.10.14"
       }
     },
     "es6-weak-map": {
       "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=",
       "dev": true,
       "requires": {
-        "d": "1.0.0",
-        "es5-ext": "0.10.46",
-        "es6-iterator": "2.0.3",
-        "es6-symbol": "3.1.1"
+        "d": "1",
+        "es5-ext": "^0.10.14",
+        "es6-iterator": "^2.0.1",
+        "es6-symbol": "^3.1.1"
       }
     },
     "escape-html": {
       "dev": true,
       "optional": true,
       "requires": {
-        "esprima": "3.1.3",
-        "estraverse": "4.2.0",
-        "esutils": "2.0.2",
-        "optionator": "0.8.2",
-        "source-map": "0.6.1"
+        "esprima": "^3.1.3",
+        "estraverse": "^4.2.0",
+        "esutils": "^2.0.2",
+        "optionator": "^0.8.1",
+        "source-map": "~0.6.1"
       },
       "dependencies": {
         "esprima": {
       "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=",
       "dev": true,
       "requires": {
-        "es6-map": "0.1.5",
-        "es6-weak-map": "2.0.2",
-        "esrecurse": "4.2.1",
-        "estraverse": "4.2.0"
+        "es6-map": "^0.1.3",
+        "es6-weak-map": "^2.0.1",
+        "esrecurse": "^4.1.0",
+        "estraverse": "^4.1.1"
       }
     },
     "esprima": {
       "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==",
       "dev": true,
       "requires": {
-        "estraverse": "4.2.0"
+        "estraverse": "^4.1.0"
       }
     },
     "estraverse": {
       "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=",
       "dev": true,
       "requires": {
-        "d": "1.0.0",
-        "es5-ext": "0.10.46"
+        "d": "1",
+        "es5-ext": "~0.10.14"
       }
     },
     "eventemitter3": {
       "integrity": "sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI=",
       "dev": true,
       "requires": {
-        "original": "1.0.2"
+        "original": ">=0.0.5"
       }
     },
     "evp_bytestokey": {
       "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
       "dev": true,
       "requires": {
-        "md5.js": "1.3.5",
-        "safe-buffer": "5.1.2"
+        "md5.js": "^1.3.4",
+        "safe-buffer": "^5.1.1"
       }
     },
     "execa": {
       "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
       "dev": true,
       "requires": {
-        "cross-spawn": "5.1.0",
-        "get-stream": "3.0.0",
-        "is-stream": "1.1.0",
-        "npm-run-path": "2.0.2",
-        "p-finally": "1.0.0",
-        "signal-exit": "3.0.2",
-        "strip-eof": "1.0.0"
+        "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"
       },
       "dependencies": {
         "cross-spawn": {
           "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
           "dev": true,
           "requires": {
-            "lru-cache": "4.1.3",
-            "shebang-command": "1.2.0",
-            "which": "1.3.1"
+            "lru-cache": "^4.0.1",
+            "shebang-command": "^1.2.0",
+            "which": "^1.2.9"
           }
         }
       }
       "integrity": "sha1-SIsdHSRRyz06axks/AMPRMWFX+o=",
       "dev": true,
       "requires": {
-        "array-slice": "0.2.3",
-        "array-unique": "0.2.1",
-        "braces": "0.1.5"
+        "array-slice": "^0.2.3",
+        "array-unique": "^0.2.1",
+        "braces": "^0.1.2"
       },
       "dependencies": {
         "braces": {
           "integrity": "sha1-wIVxEIUpHYt1/ddOqw+FlygHEeY=",
           "dev": true,
           "requires": {
-            "expand-range": "0.1.1"
+            "expand-range": "^0.1.0"
           }
         },
         "expand-range": {
           "integrity": "sha1-TLjtoJk8pW+k9B/ELzy7TMrf8EQ=",
           "dev": true,
           "requires": {
-            "is-number": "0.1.1",
-            "repeat-string": "0.2.2"
+            "is-number": "^0.1.1",
+            "repeat-string": "^0.2.2"
           }
         },
         "is-number": {
       "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
       "dev": true,
       "requires": {
-        "is-posix-bracket": "0.1.1"
+        "is-posix-bracket": "^0.1.0"
       }
     },
     "expand-range": {
       "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=",
       "dev": true,
       "requires": {
-        "fill-range": "2.2.4"
+        "fill-range": "^2.1.0"
       }
     },
     "express": {
       "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==",
       "dev": true,
       "requires": {
-        "accepts": "1.3.5",
+        "accepts": "~1.3.5",
         "array-flatten": "1.1.1",
         "body-parser": "1.18.3",
         "content-disposition": "0.5.2",
-        "content-type": "1.0.4",
+        "content-type": "~1.0.4",
         "cookie": "0.3.1",
         "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",
+        "depd": "~1.1.2",
+        "encodeurl": "~1.0.2",
+        "escape-html": "~1.0.3",
+        "etag": "~1.8.1",
         "finalhandler": "1.1.1",
         "fresh": "0.5.2",
         "merge-descriptors": "1.0.1",
-        "methods": "1.1.2",
-        "on-finished": "2.3.0",
-        "parseurl": "1.3.2",
+        "methods": "~1.1.2",
+        "on-finished": "~2.3.0",
+        "parseurl": "~1.3.2",
         "path-to-regexp": "0.1.7",
-        "proxy-addr": "2.0.4",
+        "proxy-addr": "~2.0.4",
         "qs": "6.5.2",
-        "range-parser": "1.2.0",
+        "range-parser": "~1.2.0",
         "safe-buffer": "5.1.2",
         "send": "0.16.2",
         "serve-static": "1.13.2",
         "setprototypeof": "1.1.0",
-        "statuses": "1.4.0",
-        "type-is": "1.6.16",
+        "statuses": "~1.4.0",
+        "type-is": "~1.6.16",
         "utils-merge": "1.0.1",
-        "vary": "1.1.2"
+        "vary": "~1.1.2"
       },
       "dependencies": {
         "array-flatten": {
         }
       }
     },
+    "express-urlrewrite": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npm.taobao.org/express-urlrewrite/download/express-urlrewrite-1.2.0.tgz",
+      "integrity": "sha1-jmZ7d2H/HH/9sO+gXWQDU4fII+s=",
+      "dev": true,
+      "requires": {
+        "debug": "*",
+        "path-to-regexp": "^1.0.3"
+      },
+      "dependencies": {
+        "isarray": {
+          "version": "0.0.1",
+          "resolved": "https://registry.npm.taobao.org/isarray/download/isarray-0.0.1.tgz?cache=0&sync_timestamp=1562592125418&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fisarray%2Fdownload%2Fisarray-0.0.1.tgz",
+          "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+          "dev": true
+        },
+        "path-to-regexp": {
+          "version": "1.7.0",
+          "resolved": "http://registry.npm.taobao.org/path-to-regexp/download/path-to-regexp-1.7.0.tgz",
+          "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=",
+          "dev": true,
+          "requires": {
+            "isarray": "0.0.1"
+          }
+        }
+      }
+    },
     "extend": {
       "version": "3.0.2",
       "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
       "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
       "dev": true,
       "requires": {
-        "assign-symbols": "1.0.0",
-        "is-extendable": "1.0.1"
+        "assign-symbols": "^1.0.0",
+        "is-extendable": "^1.0.1"
       },
       "dependencies": {
         "is-extendable": {
           "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
           "dev": true,
           "requires": {
-            "is-plain-object": "2.0.4"
+            "is-plain-object": "^2.0.4"
           }
         }
       }
       "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
       "dev": true,
       "requires": {
-        "is-extglob": "1.0.0"
+        "is-extglob": "^1.0.0"
       }
     },
     "extract-text-webpack-plugin": {
       "integrity": "sha512-bt/LZ4m5Rqt/Crl2HiKuAl/oqg0psx1tsTLkvWbJen1CtD+fftkZhMaQ9HOtY2gWsl2Wq+sABmMVi9z3DhKWQQ==",
       "dev": true,
       "requires": {
-        "async": "2.6.1",
-        "loader-utils": "1.1.0",
-        "schema-utils": "0.3.0",
-        "webpack-sources": "1.3.0"
+        "async": "^2.4.1",
+        "loader-utils": "^1.1.0",
+        "schema-utils": "^0.3.0",
+        "webpack-sources": "^1.0.1"
       },
       "dependencies": {
         "ajv": {
           "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
           "dev": true,
           "requires": {
-            "co": "4.6.0",
-            "fast-deep-equal": "1.1.0",
-            "fast-json-stable-stringify": "2.0.0",
-            "json-schema-traverse": "0.3.1"
+            "co": "^4.6.0",
+            "fast-deep-equal": "^1.0.0",
+            "fast-json-stable-stringify": "^2.0.0",
+            "json-schema-traverse": "^0.3.0"
           }
         },
         "schema-utils": {
           "integrity": "sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8=",
           "dev": true,
           "requires": {
-            "ajv": "5.5.2"
+            "ajv": "^5.0.0"
           }
         }
       }
       "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
       "dev": true
     },
+    "faker": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npm.taobao.org/faker/download/faker-4.1.0.tgz",
+      "integrity": "sha1-HkW7vsxndLPBlfrSg1EJxtdIzD8="
+    },
     "fast-deep-equal": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
       "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=",
       "dev": true,
       "requires": {
-        "websocket-driver": "0.7.0"
+        "websocket-driver": ">=0.5.1"
       }
     },
     "file-loader": {
       "integrity": "sha512-TGR4HU7HUsGg6GCOPJnFk06RhWgEWFLAGWiT6rcD+GRC2keU3s9RGJ+b3Z6/U73jwwNb2gKLJ7YCrp+jvU4ALg==",
       "dev": true,
       "requires": {
-        "loader-utils": "1.1.0",
-        "schema-utils": "0.4.7"
+        "loader-utils": "^1.0.2",
+        "schema-utils": "^0.4.5"
       }
     },
     "file-uri-to-path": {
       "integrity": "sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA=",
       "dev": true,
       "requires": {
-        "glob": "7.1.3",
-        "minimatch": "3.0.4"
+        "glob": "^7.0.3",
+        "minimatch": "^3.0.3"
       }
     },
     "fill-range": {
       "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==",
       "dev": true,
       "requires": {
-        "is-number": "2.1.0",
-        "isobject": "2.1.0",
-        "randomatic": "3.1.0",
-        "repeat-element": "1.1.3",
-        "repeat-string": "1.6.1"
+        "is-number": "^2.1.0",
+        "isobject": "^2.0.0",
+        "randomatic": "^3.0.0",
+        "repeat-element": "^1.1.2",
+        "repeat-string": "^1.5.2"
       }
     },
     "finalhandler": {
       "dev": true,
       "requires": {
         "debug": "2.6.9",
-        "encodeurl": "1.0.2",
-        "escape-html": "1.0.3",
-        "on-finished": "2.3.0",
-        "parseurl": "1.3.2",
-        "statuses": "1.4.0",
-        "unpipe": "1.0.0"
+        "encodeurl": "~1.0.2",
+        "escape-html": "~1.0.3",
+        "on-finished": "~2.3.0",
+        "parseurl": "~1.3.2",
+        "statuses": "~1.4.0",
+        "unpipe": "~1.0.0"
       }
     },
     "find-cache-dir": {
       "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=",
       "dev": true,
       "requires": {
-        "commondir": "1.0.1",
-        "make-dir": "1.3.0",
-        "pkg-dir": "2.0.0"
+        "commondir": "^1.0.1",
+        "make-dir": "^1.0.0",
+        "pkg-dir": "^2.0.0"
       }
     },
     "find-up": {
       "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
       "dev": true,
       "requires": {
-        "locate-path": "2.0.0"
+        "locate-path": "^2.0.0"
       }
     },
     "flush-write-stream": {
       "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==",
       "dev": true,
       "requires": {
-        "inherits": "2.0.3",
-        "readable-stream": "2.3.6"
+        "inherits": "^2.0.1",
+        "readable-stream": "^2.0.4"
       }
     },
     "follow-redirects": {
       "integrity": "sha512-Bh65EZI/RU8nx0wbYF9shkFZlqLP+6WT/5FnA3cE/djNSuKNHJEinGGZgu/cQEkeeb2GdFOgenAmn8qaqYke2w==",
       "dev": true,
       "requires": {
-        "debug": "3.1.0"
+        "debug": "=3.1.0"
       },
       "dependencies": {
         "debug": {
       "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=",
       "dev": true,
       "requires": {
-        "for-in": "1.0.2"
+        "for-in": "^1.0.1"
       }
     },
     "forever-agent": {
       "dev": true,
       "optional": true,
       "requires": {
-        "asynckit": "0.4.0",
-        "combined-stream": "1.0.7",
-        "mime-types": "2.1.21"
+        "asynckit": "^0.4.0",
+        "combined-stream": "^1.0.5",
+        "mime-types": "^2.1.12"
       }
     },
     "forwarded": {
       "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
       "dev": true,
       "requires": {
-        "map-cache": "0.2.2"
+        "map-cache": "^0.2.2"
       }
     },
     "fresh": {
       "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=",
       "dev": true,
       "requires": {
-        "inherits": "2.0.3",
-        "readable-stream": "2.3.6"
+        "inherits": "^2.0.1",
+        "readable-stream": "^2.0.0"
       }
     },
     "fs-access": {
       "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=",
       "dev": true,
       "requires": {
-        "null-check": "1.0.0"
+        "null-check": "^1.0.0"
       }
     },
     "fs-extra": {
       "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==",
       "dev": true,
       "requires": {
-        "graceful-fs": "4.1.11",
-        "jsonfile": "4.0.0",
-        "universalify": "0.1.2"
+        "graceful-fs": "^4.1.2",
+        "jsonfile": "^4.0.0",
+        "universalify": "^0.1.0"
       }
     },
     "fs-write-stream-atomic": {
       "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=",
       "dev": true,
       "requires": {
-        "graceful-fs": "4.1.11",
-        "iferr": "0.1.5",
-        "imurmurhash": "0.1.4",
-        "readable-stream": "2.3.6"
+        "graceful-fs": "^4.1.2",
+        "iferr": "^0.1.5",
+        "imurmurhash": "^0.1.4",
+        "readable-stream": "1 || 2"
       }
     },
     "fs.realpath": {
       "dev": true
     },
     "fsevents": {
-      "version": "1.2.4",
-      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz",
-      "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==",
+      "version": "1.2.9",
+      "resolved": "https://registry.npm.taobao.org/fsevents/download/fsevents-1.2.9.tgz",
+      "integrity": "sha1-P17WZYPM1vQAtaANtvfoYTY+OI8=",
       "dev": true,
       "optional": true,
       "requires": {
-        "nan": "2.11.1",
-        "node-pre-gyp": "0.10.0"
+        "nan": "^2.12.1",
+        "node-pre-gyp": "^0.12.0"
       },
       "dependencies": {
         "abbrev": {
         "ansi-regex": {
           "version": "2.1.1",
           "bundled": true,
-          "dev": true
+          "dev": true,
+          "optional": true
         },
         "aproba": {
           "version": "1.2.0",
           "optional": true
         },
         "are-we-there-yet": {
-          "version": "1.1.4",
+          "version": "1.1.5",
           "bundled": true,
           "dev": true,
           "optional": true,
           "requires": {
-            "delegates": "1.0.0",
-            "readable-stream": "2.3.6"
+            "delegates": "^1.0.0",
+            "readable-stream": "^2.0.6"
           }
         },
         "balanced-match": {
           "version": "1.0.0",
           "bundled": true,
-          "dev": true
+          "dev": true,
+          "optional": true
         },
         "brace-expansion": {
           "version": "1.1.11",
           "bundled": true,
           "dev": true,
+          "optional": true,
           "requires": {
-            "balanced-match": "1.0.0",
+            "balanced-match": "^1.0.0",
             "concat-map": "0.0.1"
           }
         },
         "chownr": {
-          "version": "1.0.1",
+          "version": "1.1.1",
           "bundled": true,
           "dev": true,
           "optional": true
         "code-point-at": {
           "version": "1.1.0",
           "bundled": true,
-          "dev": true
+          "dev": true,
+          "optional": true
         },
         "concat-map": {
           "version": "0.0.1",
           "bundled": true,
-          "dev": true
+          "dev": true,
+          "optional": true
         },
         "console-control-strings": {
           "version": "1.1.0",
           "bundled": true,
-          "dev": true
+          "dev": true,
+          "optional": true
         },
         "core-util-is": {
           "version": "1.0.2",
           "optional": true
         },
         "debug": {
-          "version": "2.6.9",
+          "version": "4.1.1",
           "bundled": true,
           "dev": true,
           "optional": true,
           "requires": {
-            "ms": "2.0.0"
+            "ms": "^2.1.1"
           }
         },
         "deep-extend": {
-          "version": "0.5.1",
+          "version": "0.6.0",
           "bundled": true,
           "dev": true,
           "optional": true
           "dev": true,
           "optional": true,
           "requires": {
-            "minipass": "2.2.4"
+            "minipass": "^2.2.1"
           }
         },
         "fs.realpath": {
           "dev": true,
           "optional": true,
           "requires": {
-            "aproba": "1.2.0",
-            "console-control-strings": "1.1.0",
-            "has-unicode": "2.0.1",
-            "object-assign": "4.1.1",
-            "signal-exit": "3.0.2",
-            "string-width": "1.0.2",
-            "strip-ansi": "3.0.1",
-            "wide-align": "1.1.2"
+            "aproba": "^1.0.3",
+            "console-control-strings": "^1.0.0",
+            "has-unicode": "^2.0.0",
+            "object-assign": "^4.1.0",
+            "signal-exit": "^3.0.0",
+            "string-width": "^1.0.1",
+            "strip-ansi": "^3.0.1",
+            "wide-align": "^1.1.0"
           }
         },
         "glob": {
-          "version": "7.1.2",
+          "version": "7.1.3",
           "bundled": true,
           "dev": true,
           "optional": true,
           "requires": {
-            "fs.realpath": "1.0.0",
-            "inflight": "1.0.6",
-            "inherits": "2.0.3",
-            "minimatch": "3.0.4",
-            "once": "1.4.0",
-            "path-is-absolute": "1.0.1"
+            "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"
           }
         },
         "has-unicode": {
           "optional": true
         },
         "iconv-lite": {
-          "version": "0.4.21",
+          "version": "0.4.24",
           "bundled": true,
           "dev": true,
           "optional": true,
           "requires": {
-            "safer-buffer": "2.1.2"
+            "safer-buffer": ">= 2.1.2 < 3"
           }
         },
         "ignore-walk": {
           "dev": true,
           "optional": true,
           "requires": {
-            "minimatch": "3.0.4"
+            "minimatch": "^3.0.4"
           }
         },
         "inflight": {
           "dev": true,
           "optional": true,
           "requires": {
-            "once": "1.4.0",
-            "wrappy": "1.0.2"
+            "once": "^1.3.0",
+            "wrappy": "1"
           }
         },
         "inherits": {
           "version": "2.0.3",
           "bundled": true,
-          "dev": true
+          "dev": true,
+          "optional": true
         },
         "ini": {
           "version": "1.3.5",
           "version": "1.0.0",
           "bundled": true,
           "dev": true,
+          "optional": true,
           "requires": {
-            "number-is-nan": "1.0.1"
+            "number-is-nan": "^1.0.0"
           }
         },
         "isarray": {
           "version": "3.0.4",
           "bundled": true,
           "dev": true,
+          "optional": true,
           "requires": {
-            "brace-expansion": "1.1.11"
+            "brace-expansion": "^1.1.7"
           }
         },
         "minimist": {
           "version": "0.0.8",
           "bundled": true,
-          "dev": true
+          "dev": true,
+          "optional": true
         },
         "minipass": {
-          "version": "2.2.4",
+          "version": "2.3.5",
           "bundled": true,
           "dev": true,
+          "optional": true,
           "requires": {
-            "safe-buffer": "5.1.1",
-            "yallist": "3.0.2"
+            "safe-buffer": "^5.1.2",
+            "yallist": "^3.0.0"
           }
         },
         "minizlib": {
-          "version": "1.1.0",
+          "version": "1.2.1",
           "bundled": true,
           "dev": true,
           "optional": true,
           "requires": {
-            "minipass": "2.2.4"
+            "minipass": "^2.2.1"
           }
         },
         "mkdirp": {
           "version": "0.5.1",
           "bundled": true,
           "dev": true,
+          "optional": true,
           "requires": {
             "minimist": "0.0.8"
           }
         },
         "ms": {
-          "version": "2.0.0",
+          "version": "2.1.1",
           "bundled": true,
           "dev": true,
           "optional": true
         },
+        "nan": {
+          "version": "2.14.0",
+          "resolved": "https://registry.npm.taobao.org/nan/download/nan-2.14.0.tgz",
+          "integrity": "sha1-eBj3IgJ7JFmobwKV1DTR/CM2xSw=",
+          "dev": true,
+          "optional": true
+        },
         "needle": {
-          "version": "2.2.0",
+          "version": "2.3.0",
           "bundled": true,
           "dev": true,
           "optional": true,
           "requires": {
-            "debug": "2.6.9",
-            "iconv-lite": "0.4.21",
-            "sax": "1.2.4"
+            "debug": "^4.1.0",
+            "iconv-lite": "^0.4.4",
+            "sax": "^1.2.4"
           }
         },
         "node-pre-gyp": {
-          "version": "0.10.0",
+          "version": "0.12.0",
           "bundled": true,
           "dev": true,
           "optional": true,
           "requires": {
-            "detect-libc": "1.0.3",
-            "mkdirp": "0.5.1",
-            "needle": "2.2.0",
-            "nopt": "4.0.1",
-            "npm-packlist": "1.1.10",
-            "npmlog": "4.1.2",
-            "rc": "1.2.7",
-            "rimraf": "2.6.2",
-            "semver": "5.5.0",
-            "tar": "4.4.1"
+            "detect-libc": "^1.0.2",
+            "mkdirp": "^0.5.1",
+            "needle": "^2.2.1",
+            "nopt": "^4.0.1",
+            "npm-packlist": "^1.1.6",
+            "npmlog": "^4.0.2",
+            "rc": "^1.2.7",
+            "rimraf": "^2.6.1",
+            "semver": "^5.3.0",
+            "tar": "^4"
           }
         },
         "nopt": {
           "dev": true,
           "optional": true,
           "requires": {
-            "abbrev": "1.1.1",
-            "osenv": "0.1.5"
+            "abbrev": "1",
+            "osenv": "^0.1.4"
           }
         },
         "npm-bundled": {
-          "version": "1.0.3",
+          "version": "1.0.6",
           "bundled": true,
           "dev": true,
           "optional": true
         },
         "npm-packlist": {
-          "version": "1.1.10",
+          "version": "1.4.1",
           "bundled": true,
           "dev": true,
           "optional": true,
           "requires": {
-            "ignore-walk": "3.0.1",
-            "npm-bundled": "1.0.3"
+            "ignore-walk": "^3.0.1",
+            "npm-bundled": "^1.0.1"
           }
         },
         "npmlog": {
           "dev": true,
           "optional": true,
           "requires": {
-            "are-we-there-yet": "1.1.4",
-            "console-control-strings": "1.1.0",
-            "gauge": "2.7.4",
-            "set-blocking": "2.0.0"
+            "are-we-there-yet": "~1.1.2",
+            "console-control-strings": "~1.1.0",
+            "gauge": "~2.7.3",
+            "set-blocking": "~2.0.0"
           }
         },
         "number-is-nan": {
           "version": "1.0.1",
           "bundled": true,
-          "dev": true
+          "dev": true,
+          "optional": true
         },
         "object-assign": {
           "version": "4.1.1",
           "version": "1.4.0",
           "bundled": true,
           "dev": true,
+          "optional": true,
           "requires": {
-            "wrappy": "1.0.2"
+            "wrappy": "1"
           }
         },
         "os-homedir": {
           "dev": true,
           "optional": true,
           "requires": {
-            "os-homedir": "1.0.2",
-            "os-tmpdir": "1.0.2"
+            "os-homedir": "^1.0.0",
+            "os-tmpdir": "^1.0.0"
           }
         },
         "path-is-absolute": {
           "optional": true
         },
         "rc": {
-          "version": "1.2.7",
+          "version": "1.2.8",
           "bundled": true,
           "dev": true,
           "optional": true,
           "requires": {
-            "deep-extend": "0.5.1",
-            "ini": "1.3.5",
-            "minimist": "1.2.0",
-            "strip-json-comments": "2.0.1"
+            "deep-extend": "^0.6.0",
+            "ini": "~1.3.0",
+            "minimist": "^1.2.0",
+            "strip-json-comments": "~2.0.1"
           },
           "dependencies": {
             "minimist": {
           "dev": true,
           "optional": true,
           "requires": {
-            "core-util-is": "1.0.2",
-            "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.2"
+            "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"
           }
         },
         "rimraf": {
-          "version": "2.6.2",
+          "version": "2.6.3",
           "bundled": true,
           "dev": true,
           "optional": true,
           "requires": {
-            "glob": "7.1.2"
+            "glob": "^7.1.3"
           }
         },
         "safe-buffer": {
-          "version": "5.1.1",
+          "version": "5.1.2",
           "bundled": true,
-          "dev": true
+          "dev": true,
+          "optional": true
         },
         "safer-buffer": {
           "version": "2.1.2",
           "optional": true
         },
         "semver": {
-          "version": "5.5.0",
+          "version": "5.7.0",
           "bundled": true,
           "dev": true,
           "optional": true
           "version": "1.0.2",
           "bundled": true,
           "dev": true,
+          "optional": true,
           "requires": {
-            "code-point-at": "1.1.0",
-            "is-fullwidth-code-point": "1.0.0",
-            "strip-ansi": "3.0.1"
+            "code-point-at": "^1.0.0",
+            "is-fullwidth-code-point": "^1.0.0",
+            "strip-ansi": "^3.0.0"
           }
         },
         "string_decoder": {
           "dev": true,
           "optional": true,
           "requires": {
-            "safe-buffer": "5.1.1"
+            "safe-buffer": "~5.1.0"
           }
         },
         "strip-ansi": {
           "version": "3.0.1",
           "bundled": true,
           "dev": true,
+          "optional": true,
           "requires": {
-            "ansi-regex": "2.1.1"
+            "ansi-regex": "^2.0.0"
           }
         },
         "strip-json-comments": {
           "optional": true
         },
         "tar": {
-          "version": "4.4.1",
+          "version": "4.4.8",
           "bundled": true,
           "dev": true,
           "optional": true,
           "requires": {
-            "chownr": "1.0.1",
-            "fs-minipass": "1.2.5",
-            "minipass": "2.2.4",
-            "minizlib": "1.1.0",
-            "mkdirp": "0.5.1",
-            "safe-buffer": "5.1.1",
-            "yallist": "3.0.2"
+            "chownr": "^1.1.1",
+            "fs-minipass": "^1.2.5",
+            "minipass": "^2.3.4",
+            "minizlib": "^1.1.1",
+            "mkdirp": "^0.5.0",
+            "safe-buffer": "^5.1.2",
+            "yallist": "^3.0.2"
           }
         },
         "util-deprecate": {
           "optional": true
         },
         "wide-align": {
-          "version": "1.1.2",
+          "version": "1.1.3",
           "bundled": true,
           "dev": true,
           "optional": true,
           "requires": {
-            "string-width": "1.0.2"
+            "string-width": "^1.0.2 || 2"
           }
         },
         "wrappy": {
           "version": "1.0.2",
           "bundled": true,
-          "dev": true
+          "dev": true,
+          "optional": true
         },
         "yallist": {
-          "version": "3.0.2",
+          "version": "3.0.3",
           "bundled": true,
-          "dev": true
+          "dev": true,
+          "optional": true
         }
       }
     },
     "fstream": {
-      "version": "1.0.11",
-      "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz",
-      "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=",
+      "version": "1.0.12",
+      "resolved": "https://registry.npm.taobao.org/fstream/download/fstream-1.0.12.tgz",
+      "integrity": "sha1-Touo7i1Ivk99DeUFRVVI6uWTIEU=",
       "dev": true,
+      "optional": true,
       "requires": {
-        "graceful-fs": "4.1.11",
-        "inherits": "2.0.3",
-        "mkdirp": "0.5.1",
-        "rimraf": "2.6.2"
+        "graceful-fs": "^4.1.2",
+        "inherits": "~2.0.0",
+        "mkdirp": ">=0.5 0",
+        "rimraf": "2"
       }
     },
     "ftp": {
       "dev": true,
       "optional": true,
       "requires": {
-        "readable-stream": "1.1.14",
+        "readable-stream": "1.1.x",
         "xregexp": "2.0.0"
       },
       "dependencies": {
           "dev": true,
           "optional": true,
           "requires": {
-            "core-util-is": "1.0.2",
-            "inherits": "2.0.3",
+            "core-util-is": "~1.0.0",
+            "inherits": "~2.0.1",
             "isarray": "0.0.1",
-            "string_decoder": "0.10.31"
+            "string_decoder": "~0.10.x"
           }
         },
         "string_decoder": {
       "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
       "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
       "dev": true,
+      "optional": true,
       "requires": {
-        "aproba": "1.2.0",
-        "console-control-strings": "1.1.0",
-        "has-unicode": "2.0.1",
-        "object-assign": "4.1.1",
-        "signal-exit": "3.0.2",
-        "string-width": "1.0.2",
-        "strip-ansi": "3.0.1",
-        "wide-align": "1.1.3"
+        "aproba": "^1.0.3",
+        "console-control-strings": "^1.0.0",
+        "has-unicode": "^2.0.0",
+        "object-assign": "^4.1.0",
+        "signal-exit": "^3.0.0",
+        "string-width": "^1.0.1",
+        "strip-ansi": "^3.0.1",
+        "wide-align": "^1.1.0"
       }
     },
     "gaze": {
       "dev": true,
       "optional": true,
       "requires": {
-        "globule": "1.2.1"
+        "globule": "^1.0.0"
       }
     },
     "generate-function": {
       "dev": true,
       "optional": true,
       "requires": {
-        "is-property": "1.0.2"
+        "is-property": "^1.0.2"
       }
     },
     "generate-object-property": {
       "dev": true,
       "optional": true,
       "requires": {
-        "is-property": "1.0.2"
+        "is-property": "^1.0.0"
       }
     },
     "get-caller-file": {
       "dev": true,
       "optional": true,
       "requires": {
-        "data-uri-to-buffer": "1.2.0",
-        "debug": "2.6.9",
-        "extend": "3.0.2",
-        "file-uri-to-path": "1.0.0",
-        "ftp": "0.3.10",
-        "readable-stream": "2.3.6"
+        "data-uri-to-buffer": "1",
+        "debug": "2",
+        "extend": "3",
+        "file-uri-to-path": "1",
+        "ftp": "~0.3.10",
+        "readable-stream": "2"
       }
     },
     "get-value": {
       "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
       "dev": true,
       "requires": {
-        "assert-plus": "1.0.0"
+        "assert-plus": "^1.0.0"
       },
       "dependencies": {
         "assert-plus": {
       "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
       "dev": true,
       "requires": {
-        "fs.realpath": "1.0.0",
-        "inflight": "1.0.6",
-        "inherits": "2.0.3",
-        "minimatch": "3.0.4",
-        "once": "1.4.0",
-        "path-is-absolute": "1.0.1"
+        "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"
       }
     },
     "glob-base": {
       "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=",
       "dev": true,
       "requires": {
-        "glob-parent": "2.0.0",
-        "is-glob": "2.0.1"
+        "glob-parent": "^2.0.0",
+        "is-glob": "^2.0.0"
       }
     },
     "glob-parent": {
       "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=",
       "dev": true,
       "requires": {
-        "is-glob": "2.0.1"
+        "is-glob": "^2.0.0"
+      }
+    },
+    "global-dirs": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npm.taobao.org/global-dirs/download/global-dirs-0.1.1.tgz",
+      "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=",
+      "dev": true,
+      "requires": {
+        "ini": "^1.3.4"
       }
     },
     "globals": {
       "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=",
       "dev": true,
       "requires": {
-        "array-union": "1.0.2",
-        "dir-glob": "2.0.0",
-        "glob": "7.1.3",
-        "ignore": "3.3.10",
-        "pify": "3.0.0",
-        "slash": "1.0.0"
+        "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"
       }
     },
     "globule": {
       "dev": true,
       "optional": true,
       "requires": {
-        "glob": "7.1.3",
-        "lodash": "4.17.11",
-        "minimatch": "3.0.4"
+        "glob": "~7.1.1",
+        "lodash": "~4.17.10",
+        "minimatch": "~3.0.2"
+      }
+    },
+    "got": {
+      "version": "9.6.0",
+      "resolved": "https://registry.npm.taobao.org/got/download/got-9.6.0.tgz",
+      "integrity": "sha1-7fRefWf5lUVwXeH3u+7rEhdl7YU=",
+      "dev": true,
+      "requires": {
+        "@sindresorhus/is": "^0.14.0",
+        "@szmarczak/http-timer": "^1.1.2",
+        "cacheable-request": "^6.0.0",
+        "decompress-response": "^3.3.0",
+        "duplexer3": "^0.1.4",
+        "get-stream": "^4.1.0",
+        "lowercase-keys": "^1.0.1",
+        "mimic-response": "^1.0.1",
+        "p-cancelable": "^1.0.0",
+        "to-readable-stream": "^1.0.0",
+        "url-parse-lax": "^3.0.0"
+      },
+      "dependencies": {
+        "get-stream": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npm.taobao.org/get-stream/download/get-stream-4.1.0.tgz",
+          "integrity": "sha1-wbJVV189wh1Zv8ec09K0axw6VLU=",
+          "dev": true,
+          "requires": {
+            "pump": "^3.0.0"
+          }
+        },
+        "pump": {
+          "version": "3.0.0",
+          "resolved": "http://registry.npm.taobao.org/pump/download/pump-3.0.0.tgz",
+          "integrity": "sha1-tKIRaBW94vTh6mAjVOjHVWUQemQ=",
+          "dev": true,
+          "requires": {
+            "end-of-stream": "^1.1.0",
+            "once": "^1.3.1"
+          }
+        }
       }
     },
     "graceful-fs": {
       "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
       "dev": true
     },
-    "handle-thing": {
-      "version": "1.2.5",
-      "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-1.2.5.tgz",
-      "integrity": "sha1-/Xqtcmvxpf0W38KbL3pmAdJxOcQ=",
-      "dev": true
-    },
     "handlebars": {
-      "version": "4.0.12",
-      "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.12.tgz",
-      "integrity": "sha512-RhmTekP+FZL+XNhwS1Wf+bTTZpdLougwt5pcgA1tuz6Jcx0fpH/7z0qd71RKnZHBCxIRBHfBOnio4gViPemNzA==",
+      "version": "4.1.2",
+      "resolved": "https://registry.npm.taobao.org/handlebars/download/handlebars-4.1.2.tgz",
+      "integrity": "sha1-trN8HO0DBrIh4JT8eso+wjsTG2c=",
       "dev": true,
       "requires": {
-        "async": "2.6.1",
-        "optimist": "0.6.1",
-        "source-map": "0.6.1",
-        "uglify-js": "3.4.9"
+        "neo-async": "^2.6.0",
+        "optimist": "^0.6.1",
+        "source-map": "^0.6.1",
+        "uglify-js": "^3.1.4"
       },
       "dependencies": {
         "source-map": {
           "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+          "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz",
+          "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
           "dev": true
         }
       }
       "dev": true,
       "optional": true,
       "requires": {
-        "ajv": "4.11.8",
-        "har-schema": "1.0.5"
+        "ajv": "^4.9.1",
+        "har-schema": "^1.0.5"
       },
       "dependencies": {
         "ajv": {
           "dev": true,
           "optional": true,
           "requires": {
-            "co": "4.6.0",
-            "json-stable-stringify": "1.0.1"
+            "co": "^4.6.0",
+            "json-stable-stringify": "^1.0.1"
           }
         }
       }
       "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
       "dev": true,
       "requires": {
-        "function-bind": "1.1.1"
+        "function-bind": "^1.1.1"
       }
     },
     "has-ansi": {
       "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
       "dev": true,
       "requires": {
-        "ansi-regex": "2.1.1"
+        "ansi-regex": "^2.0.0"
       }
     },
     "has-binary2": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
       "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
-      "dev": true
+      "dev": true,
+      "optional": true
     },
     "has-value": {
       "version": "1.0.0",
       "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
       "dev": true,
       "requires": {
-        "get-value": "2.0.6",
-        "has-values": "1.0.0",
-        "isobject": "3.0.1"
+        "get-value": "^2.0.6",
+        "has-values": "^1.0.0",
+        "isobject": "^3.0.0"
       },
       "dependencies": {
         "isobject": {
       "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
       "dev": true,
       "requires": {
-        "is-number": "3.0.0",
-        "kind-of": "4.0.0"
+        "is-number": "^3.0.0",
+        "kind-of": "^4.0.0"
       },
       "dependencies": {
         "is-number": {
           "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
           "dev": true,
           "requires": {
-            "kind-of": "3.2.2"
+            "kind-of": "^3.0.2"
           },
           "dependencies": {
             "kind-of": {
               "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
               "dev": true,
               "requires": {
-                "is-buffer": "1.1.6"
+                "is-buffer": "^1.1.5"
               }
             }
           }
           "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
           "dev": true,
           "requires": {
-            "is-buffer": "1.1.6"
+            "is-buffer": "^1.1.5"
           }
         }
       }
     },
+    "has-yarn": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npm.taobao.org/has-yarn/download/has-yarn-2.1.0.tgz",
+      "integrity": "sha1-E34RNUp7W/EapctknPDG8/8rLnc=",
+      "dev": true
+    },
     "hash-base": {
       "version": "3.0.4",
       "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz",
       "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=",
       "dev": true,
       "requires": {
-        "inherits": "2.0.3",
-        "safe-buffer": "5.1.2"
+        "inherits": "^2.0.1",
+        "safe-buffer": "^5.0.1"
       }
     },
     "hash.js": {
       "integrity": "sha512-eWI5HG9Np+eHV1KQhisXWwM+4EPPYe5dFX1UZZH7k/E3JzDEazVH+VGlZi6R94ZqImq+A3D1mCEtrFIfg/E7sA==",
       "dev": true,
       "requires": {
-        "inherits": "2.0.3",
-        "minimalistic-assert": "1.0.1"
+        "inherits": "^2.0.3",
+        "minimalistic-assert": "^1.0.1"
       }
     },
     "hawk": {
       "dev": true,
       "optional": true,
       "requires": {
-        "boom": "2.10.1",
-        "cryptiles": "2.0.5",
-        "hoek": "2.16.3",
-        "sntp": "1.0.9"
+        "boom": "2.x.x",
+        "cryptiles": "2.x.x",
+        "hoek": "2.x.x",
+        "sntp": "1.x.x"
       }
     },
     "he": {
       "dev": true,
       "optional": true,
       "requires": {
-        "lodash": "4.17.11",
-        "request": "2.81.0"
+        "lodash": "^4.0.0",
+        "request": "^2.0.0"
       }
     },
     "hmac-drbg": {
       "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
       "dev": true,
       "requires": {
-        "hash.js": "1.1.5",
-        "minimalistic-assert": "1.0.1",
-        "minimalistic-crypto-utils": "1.0.1"
+        "hash.js": "^1.0.3",
+        "minimalistic-assert": "^1.0.0",
+        "minimalistic-crypto-utils": "^1.0.1"
       }
     },
     "hoek": {
       "version": "2.16.3",
       "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz",
       "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=",
-      "dev": true
+      "dev": true,
+      "optional": true
     },
     "homedir-polyfill": {
       "version": "1.0.1",
       "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=",
       "dev": true,
       "requires": {
-        "parse-passwd": "1.0.0"
+        "parse-passwd": "^1.0.0"
       }
     },
     "hosted-git-info": {
       "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=",
       "dev": true,
       "requires": {
-        "inherits": "2.0.3",
-        "obuf": "1.1.2",
-        "readable-stream": "2.3.6",
-        "wbuf": "1.7.3"
+        "inherits": "^2.0.1",
+        "obuf": "^1.0.0",
+        "readable-stream": "^2.0.1",
+        "wbuf": "^1.1.0"
       }
     },
     "html-entities": {
       "integrity": "sha512-ZmgNLaTp54+HFKkONyLFEfs5dd/ZOtlquKaTnqIWFmx3Av5zG6ZPcV2d0o9XM2fXOTxxIf6eDcwzFFotke/5zA==",
       "dev": true,
       "requires": {
-        "camel-case": "3.0.0",
-        "clean-css": "4.2.1",
-        "commander": "2.17.1",
-        "he": "1.1.1",
-        "param-case": "2.1.1",
-        "relateurl": "0.2.7",
-        "uglify-js": "3.4.9"
+        "camel-case": "3.0.x",
+        "clean-css": "4.2.x",
+        "commander": "2.17.x",
+        "he": "1.1.x",
+        "param-case": "2.1.x",
+        "relateurl": "0.2.x",
+        "uglify-js": "3.4.x"
       }
     },
     "html-webpack-plugin": {
       "integrity": "sha1-f5xCG36pHsRg9WUn1430hO51N9U=",
       "dev": true,
       "requires": {
-        "bluebird": "3.5.2",
-        "html-minifier": "3.5.20",
-        "loader-utils": "0.2.17",
-        "lodash": "4.17.11",
-        "pretty-error": "2.1.1",
-        "toposort": "1.0.7"
+        "bluebird": "^3.4.7",
+        "html-minifier": "^3.2.3",
+        "loader-utils": "^0.2.16",
+        "lodash": "^4.17.3",
+        "pretty-error": "^2.0.2",
+        "toposort": "^1.0.0"
       },
       "dependencies": {
         "loader-utils": {
           "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=",
           "dev": true,
           "requires": {
-            "big.js": "3.2.0",
-            "emojis-list": "2.1.0",
-            "json5": "0.5.1",
-            "object-assign": "4.1.1"
+            "big.js": "^3.1.3",
+            "emojis-list": "^2.0.0",
+            "json5": "^0.5.0",
+            "object-assign": "^4.0.1"
           }
         }
       }
       "integrity": "sha1-zHDQWln2VC5D8OaFyYLhTJJKnv4=",
       "dev": true,
       "requires": {
-        "domelementtype": "1.2.1",
-        "domhandler": "2.1.0",
-        "domutils": "1.1.6",
-        "readable-stream": "1.0.34"
+        "domelementtype": "1",
+        "domhandler": "2.1",
+        "domutils": "1.1",
+        "readable-stream": "1.0"
       },
       "dependencies": {
         "domutils": {
           "integrity": "sha1-vdw94Jm5ou+sxRxiPyj0FuzFdIU=",
           "dev": true,
           "requires": {
-            "domelementtype": "1.2.1"
+            "domelementtype": "1"
           }
         },
         "isarray": {
           "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
           "dev": true,
           "requires": {
-            "core-util-is": "1.0.2",
-            "inherits": "2.0.3",
+            "core-util-is": "~1.0.0",
+            "inherits": "~2.0.1",
             "isarray": "0.0.1",
-            "string_decoder": "0.10.31"
+            "string_decoder": "~0.10.x"
           }
         },
         "string_decoder": {
         }
       }
     },
+    "http-cache-semantics": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npm.taobao.org/http-cache-semantics/download/http-cache-semantics-4.0.3.tgz",
+      "integrity": "sha1-SVcEdzJ37u9uQ/mrLCx9JZ3aJcU=",
+      "dev": true
+    },
     "http-deceiver": {
       "version": "1.2.7",
       "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz",
       "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
       "dev": true,
       "requires": {
-        "depd": "1.1.2",
+        "depd": "~1.1.2",
         "inherits": "2.0.3",
         "setprototypeof": "1.1.0",
-        "statuses": "1.4.0"
+        "statuses": ">= 1.4.0 < 2"
       }
     },
     "http-parser-js": {
       "integrity": "sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==",
       "dev": true,
       "requires": {
-        "eventemitter3": "3.1.0",
-        "follow-redirects": "1.5.9",
-        "requires-port": "1.0.0"
+        "eventemitter3": "^3.0.0",
+        "follow-redirects": "^1.0.0",
+        "requires-port": "^1.0.0"
       }
     },
     "http-proxy-agent": {
       "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz",
       "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==",
       "dev": true,
+      "optional": true,
       "requires": {
-        "agent-base": "4.2.1",
+        "agent-base": "4",
         "debug": "3.1.0"
       },
       "dependencies": {
           "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
           "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
           "dev": true,
+          "optional": true,
           "requires": {
             "ms": "2.0.0"
           }
         }
       }
     },
-    "http-proxy-middleware": {
-      "version": "0.17.4",
-      "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz",
-      "integrity": "sha1-ZC6ISIUdZvCdTxJJEoRtuutBuDM=",
-      "dev": true,
-      "requires": {
-        "http-proxy": "1.17.0",
-        "is-glob": "3.1.0",
-        "lodash": "4.17.11",
-        "micromatch": "2.3.11"
-      },
-      "dependencies": {
-        "is-extglob": {
-          "version": "2.1.1",
-          "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
-          "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
-          "dev": true
-        },
-        "is-glob": {
-          "version": "3.1.0",
-          "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
-          "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
-          "dev": true,
-          "requires": {
-            "is-extglob": "2.1.1"
-          }
-        }
-      }
-    },
     "http-signature": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz",
       "dev": true,
       "optional": true,
       "requires": {
-        "assert-plus": "0.2.0",
-        "jsprim": "1.4.1",
-        "sshpk": "1.15.1"
+        "assert-plus": "^0.2.0",
+        "jsprim": "^1.2.2",
+        "sshpk": "^1.7.0"
       }
     },
     "httpntlm": {
       "resolved": "https://registry.npmjs.org/httpntlm/-/httpntlm-1.6.1.tgz",
       "integrity": "sha1-rQFScUOi6Hc8+uapb1hla7UqNLI=",
       "dev": true,
+      "optional": true,
       "requires": {
-        "httpreq": "0.4.24",
-        "underscore": "1.7.0"
+        "httpreq": ">=0.4.22",
+        "underscore": "~1.7.0"
       }
     },
     "httpreq": {
       "version": "0.4.24",
       "resolved": "https://registry.npmjs.org/httpreq/-/httpreq-0.4.24.tgz",
       "integrity": "sha1-QzX/2CzZaWaKOUZckprGHWOTYn8=",
-      "dev": true
+      "dev": true,
+      "optional": true
     },
     "https-browserify": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz",
       "integrity": "sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==",
       "dev": true,
+      "optional": true,
       "requires": {
-        "agent-base": "4.2.1",
-        "debug": "3.2.6"
+        "agent-base": "^4.1.0",
+        "debug": "^3.1.0"
       },
       "dependencies": {
         "debug": {
           "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
           "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
           "dev": true,
+          "optional": true,
           "requires": {
-            "ms": "2.1.1"
+            "ms": "^2.1.1"
           }
         },
         "ms": {
           "version": "2.1.1",
           "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
           "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
-          "dev": true
+          "dev": true,
+          "optional": true
         }
       }
     },
       "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==",
       "dev": true,
       "requires": {
-        "safer-buffer": "2.1.2"
+        "safer-buffer": ">= 2.1.2 < 3"
       }
     },
     "ieee754": {
       "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=",
       "dev": true,
       "requires": {
-        "import-from": "2.1.0"
+        "import-from": "^2.1.0"
       }
     },
     "import-from": {
       "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=",
       "dev": true,
       "requires": {
-        "resolve-from": "3.0.0"
+        "resolve-from": "^3.0.0"
       }
     },
+    "import-lazy": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npm.taobao.org/import-lazy/download/import-lazy-2.1.0.tgz",
+      "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=",
+      "dev": true
+    },
     "import-local": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/import-local/-/import-local-1.0.0.tgz",
       "integrity": "sha512-vAaZHieK9qjGo58agRBg+bhHX3hoTZU/Oa3GESWLz7t1U62fk63aHuDJJEteXoDeTCcPmUT+z38gkHPZkkmpmQ==",
       "dev": true,
       "requires": {
-        "pkg-dir": "2.0.0",
-        "resolve-cwd": "2.0.0"
+        "pkg-dir": "^2.0.0",
+        "resolve-cwd": "^2.0.0"
       }
     },
     "imurmurhash": {
       "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
       "dev": true,
       "requires": {
-        "repeating": "2.0.1"
+        "repeating": "^2.0.0"
       }
     },
     "indexof": {
       "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
       "dev": true,
       "requires": {
-        "once": "1.4.0",
-        "wrappy": "1.0.2"
+        "once": "^1.3.0",
+        "wrappy": "1"
       }
     },
     "inherits": {
       "integrity": "sha1-rp+/k7mEh4eF1QqN4bNWlWBYz1w=",
       "dev": true,
       "requires": {
-        "meow": "3.7.0"
+        "meow": "^3.3.0"
       }
     },
     "interpret": {
       "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
       "dev": true,
       "requires": {
-        "loose-envify": "1.4.0"
+        "loose-envify": "^1.0.0"
       }
     },
     "invert-kv": {
       "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
       "dev": true,
       "requires": {
-        "kind-of": "3.2.2"
+        "kind-of": "^3.0.2"
       }
     },
     "is-arrayish": {
       "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
       "dev": true,
       "requires": {
-        "binary-extensions": "1.12.0"
+        "binary-extensions": "^1.0.0"
       }
     },
     "is-buffer": {
       "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=",
       "dev": true,
       "requires": {
-        "builtin-modules": "1.1.1"
+        "builtin-modules": "^1.0.0"
       }
     },
     "is-callable": {
       "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==",
       "dev": true
     },
+    "is-ci": {
+      "version": "2.0.0",
+      "resolved": "http://registry.npm.taobao.org/is-ci/download/is-ci-2.0.0.tgz",
+      "integrity": "sha1-a8YzQYGBDgS1wis9WJ/cpVAmQEw=",
+      "dev": true,
+      "requires": {
+        "ci-info": "^2.0.0"
+      }
+    },
     "is-data-descriptor": {
       "version": "0.1.4",
       "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
       "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
       "dev": true,
       "requires": {
-        "kind-of": "3.2.2"
+        "kind-of": "^3.0.2"
       }
     },
     "is-date-object": {
       "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
       "dev": true,
       "requires": {
-        "is-accessor-descriptor": "0.1.6",
-        "is-data-descriptor": "0.1.4",
-        "kind-of": "5.1.0"
+        "is-accessor-descriptor": "^0.1.6",
+        "is-data-descriptor": "^0.1.4",
+        "kind-of": "^5.0.0"
       },
       "dependencies": {
         "kind-of": {
       "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=",
       "dev": true,
       "requires": {
-        "is-primitive": "2.0.0"
+        "is-primitive": "^2.0.0"
       }
     },
     "is-extendable": {
       "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
       "dev": true,
       "requires": {
-        "number-is-nan": "1.0.1"
+        "number-is-nan": "^1.0.0"
       }
     },
     "is-fullwidth-code-point": {
       "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
       "dev": true,
       "requires": {
-        "number-is-nan": "1.0.1"
+        "number-is-nan": "^1.0.0"
       }
     },
     "is-glob": {
       "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
       "dev": true,
       "requires": {
-        "is-extglob": "1.0.0"
+        "is-extglob": "^1.0.0"
+      }
+    },
+    "is-installed-globally": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npm.taobao.org/is-installed-globally/download/is-installed-globally-0.1.0.tgz",
+      "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=",
+      "dev": true,
+      "requires": {
+        "global-dirs": "^0.1.0",
+        "is-path-inside": "^1.0.0"
       }
     },
     "is-my-ip-valid": {
       "dev": true,
       "optional": true,
       "requires": {
-        "generate-function": "2.3.1",
-        "generate-object-property": "1.2.0",
-        "is-my-ip-valid": "1.0.0",
-        "jsonpointer": "4.0.1",
-        "xtend": "4.0.1"
+        "generate-function": "^2.0.0",
+        "generate-object-property": "^1.1.0",
+        "is-my-ip-valid": "^1.0.0",
+        "jsonpointer": "^4.0.0",
+        "xtend": "^4.0.0"
       }
     },
+    "is-npm": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npm.taobao.org/is-npm/download/is-npm-3.0.0.tgz",
+      "integrity": "sha1-7JFHv7YpxD9JTPZ5Nqlh7ex+gFM=",
+      "dev": true
+    },
     "is-number": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz",
       "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=",
       "dev": true,
       "requires": {
-        "kind-of": "3.2.2"
+        "kind-of": "^3.0.2"
       }
     },
+    "is-obj": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/is-obj/download/is-obj-1.0.1.tgz",
+      "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=",
+      "dev": true
+    },
     "is-path-cwd": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz",
       "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==",
       "dev": true,
       "requires": {
-        "is-path-inside": "1.0.1"
+        "is-path-inside": "^1.0.0"
       }
     },
     "is-path-inside": {
       "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=",
       "dev": true,
       "requires": {
-        "path-is-inside": "1.0.2"
+        "path-is-inside": "^1.0.1"
       }
     },
     "is-plain-object": {
       "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
       "dev": true,
       "requires": {
-        "isobject": "3.0.1"
+        "isobject": "^3.0.1"
       },
       "dependencies": {
         "isobject": {
       "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=",
       "dev": true
     },
+    "is-promise": {
+      "version": "2.1.0",
+      "resolved": "http://registry.npm.taobao.org/is-promise/download/is-promise-2.1.0.tgz",
+      "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=",
+      "dev": true
+    },
     "is-property": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz",
       "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=",
-      "dev": true
+      "dev": true,
+      "optional": true
     },
     "is-regex": {
       "version": "1.0.4",
       "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=",
       "dev": true,
       "requires": {
-        "has": "1.0.3"
+        "has": "^1.0.1"
       }
     },
     "is-stream": {
       "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==",
       "dev": true,
       "requires": {
-        "has-symbols": "1.0.0"
+        "has-symbols": "^1.0.0"
       }
     },
     "is-typedarray": {
       "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=",
       "dev": true
     },
+    "is-yarn-global": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npm.taobao.org/is-yarn-global/download/is-yarn-global-0.3.0.tgz",
+      "integrity": "sha1-1QLTOCWQ6jAEiTdGdUyJE5lz4jI=",
+      "dev": true
+    },
     "isarray": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
       "integrity": "sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==",
       "dev": true,
       "requires": {
-        "buffer-alloc": "1.2.0"
+        "buffer-alloc": "^1.2.0"
       }
     },
     "isexe": {
       "integrity": "sha512-4/ApBnMVeEPG3EkSzcw25wDe4N66wxwn+KKn6b47vyek8Xb3NBAcg4xfuQbS7BqcZuTX4wxfD5lVagdggR3gyA==",
       "dev": true,
       "requires": {
-        "async": "2.6.1",
-        "fileset": "2.0.3",
-        "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.12.0",
-        "mkdirp": "0.5.1",
-        "once": "1.4.0"
+        "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-instrumenter-loader": {
       "integrity": "sha512-a5SPObZgS0jB/ixaKSMdn6n/gXSrK2S6q/UfRJBT3e6gQmVjwZROTODQsYW5ZNwOu78hG62Y3fWlebaVOL0C+w==",
       "dev": true,
       "requires": {
-        "convert-source-map": "1.6.0",
-        "istanbul-lib-instrument": "1.10.2",
-        "loader-utils": "1.1.0",
-        "schema-utils": "0.3.0"
+        "convert-source-map": "^1.5.0",
+        "istanbul-lib-instrument": "^1.7.3",
+        "loader-utils": "^1.1.0",
+        "schema-utils": "^0.3.0"
       },
       "dependencies": {
         "ajv": {
           "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
           "dev": true,
           "requires": {
-            "co": "4.6.0",
-            "fast-deep-equal": "1.1.0",
-            "fast-json-stable-stringify": "2.0.0",
-            "json-schema-traverse": "0.3.1"
+            "co": "^4.6.0",
+            "fast-deep-equal": "^1.0.0",
+            "fast-json-stable-stringify": "^2.0.0",
+            "json-schema-traverse": "^0.3.0"
           }
         },
         "schema-utils": {
           "integrity": "sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8=",
           "dev": true,
           "requires": {
-            "ajv": "5.5.2"
+            "ajv": "^5.0.0"
           }
         }
       }
       "integrity": "sha512-/Jmq7Y1VeHnZEQ3TL10VHyb564mn6VrQXHchON9Jf/AEcmQ3ZIiyD1BVzNOKTZf/G3gE+kiGK6SmpF9y3qGPLw==",
       "dev": true,
       "requires": {
-        "append-transform": "0.4.0"
+        "append-transform": "^0.4.0"
       }
     },
     "istanbul-lib-instrument": {
       "integrity": "sha512-aWHxfxDqvh/ZlxR8BBaEPVSWDPUkGD63VjGQn3jcw8jCp7sHEMKcrj4xfJn/ABzdMEHiQNyvDQhqm5o8+SQg7A==",
       "dev": true,
       "requires": {
-        "babel-generator": "6.26.1",
-        "babel-template": "6.26.0",
-        "babel-traverse": "6.26.0",
-        "babel-types": "6.26.0",
-        "babylon": "6.18.0",
-        "istanbul-lib-coverage": "1.2.1",
-        "semver": "5.6.0"
+        "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": {
       "integrity": "sha512-UsYfRMoi6QO/doUshYNqcKJqVmFe9w51GZz8BS3WB0lYxAllQYklka2wP9+dGZeHYaWIdcXUx8JGdbqaoXRXzw==",
       "dev": true,
       "requires": {
-        "istanbul-lib-coverage": "1.2.1",
-        "mkdirp": "0.5.1",
-        "path-parse": "1.0.6",
-        "supports-color": "3.2.3"
+        "istanbul-lib-coverage": "^1.2.1",
+        "mkdirp": "^0.5.1",
+        "path-parse": "^1.0.5",
+        "supports-color": "^3.1.2"
       },
       "dependencies": {
         "has-flag": {
           "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
           "dev": true,
           "requires": {
-            "has-flag": "1.0.0"
+            "has-flag": "^1.0.0"
           }
         }
       }
       "integrity": "sha512-TtbsY5GIHgbMsMiRw35YBHGpZ1DVFEO19vxxeiDMYaeOFOCzfnYVxvl6pOUIZR4dtPhAGpSMup8OyF8ubsaqEg==",
       "dev": true,
       "requires": {
-        "debug": "3.2.6",
-        "istanbul-lib-coverage": "1.2.1",
-        "mkdirp": "0.5.1",
-        "rimraf": "2.6.2",
-        "source-map": "0.5.7"
+        "debug": "^3.1.0",
+        "istanbul-lib-coverage": "^1.2.1",
+        "mkdirp": "^0.5.1",
+        "rimraf": "^2.6.1",
+        "source-map": "^0.5.3"
       },
       "dependencies": {
         "debug": {
           "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
           "dev": true,
           "requires": {
-            "ms": "2.1.1"
+            "ms": "^2.1.1"
           }
         },
         "ms": {
       "integrity": "sha512-+cfoZ0UXzWjhAdzosCPP3AN8vvef8XDkWtTfgaN+7L3YTpNYITnCaEkceo5SEYy644VkHka/P1FvkWvrG/rrJw==",
       "dev": true,
       "requires": {
-        "handlebars": "4.0.12"
+        "handlebars": "^4.0.3"
       }
     },
     "jasmine": {
       "integrity": "sha1-jKctEC5jm4Z8ZImFbg4YqceqQrc=",
       "dev": true,
       "requires": {
-        "exit": "0.1.2",
-        "glob": "7.1.3",
-        "jasmine-core": "2.99.1"
+        "exit": "^0.1.2",
+        "glob": "^7.0.6",
+        "jasmine-core": "~2.99.0"
       },
       "dependencies": {
         "jasmine-core": {
       "integrity": "sha1-43zwsX8ZnM4jvqcbIDk5Uka07E4=",
       "dev": true
     },
+    "jju": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npm.taobao.org/jju/download/jju-1.4.0.tgz",
+      "integrity": "sha1-o6vicYryQaKykE+EpiWXDzia4yo=",
+      "dev": true
+    },
     "jquery": {
-      "version": "3.3.1",
-      "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.3.1.tgz",
-      "integrity": "sha512-Ubldcmxp5np52/ENotGxlLe6aGMvmF4R8S6tZjsP6Knsaxd/xp3Zrh50cG93lR6nPXyUFwzN3ZSOQI0wRJNdGg=="
+      "version": "3.4.1",
+      "resolved": "https://registry.npm.taobao.org/jquery/download/jquery-3.4.1.tgz",
+      "integrity": "sha1-cU8fjZ3eS9+lV2S6N+8hRjDYDvI="
     },
     "js-base64": {
       "version": "2.4.9",
       "dev": true
     },
     "js-yaml": {
-      "version": "3.12.0",
-      "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz",
-      "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==",
+      "version": "3.13.1",
+      "resolved": "https://registry.npm.taobao.org/js-yaml/download/js-yaml-3.13.1.tgz",
+      "integrity": "sha1-r/FRswv9+o5J4F2iLnQV6d+jeEc=",
       "dev": true,
       "requires": {
-        "argparse": "1.0.10",
-        "esprima": "4.0.1"
+        "argparse": "^1.0.7",
+        "esprima": "^4.0.0"
+      }
+    },
+    "jsbn": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+      "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
+      "dev": true
+    },
+    "jsesc": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
+      "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
+      "dev": true
+    },
+    "json-buffer": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npm.taobao.org/json-buffer/download/json-buffer-3.0.0.tgz",
+      "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=",
+      "dev": true
+    },
+    "json-loader": {
+      "version": "0.5.7",
+      "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz",
+      "integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==",
+      "dev": true
+    },
+    "json-parse-better-errors": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
+      "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
+      "dev": true
+    },
+    "json-parse-helpfulerror": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npm.taobao.org/json-parse-helpfulerror/download/json-parse-helpfulerror-1.0.3.tgz",
+      "integrity": "sha1-E/FM4C7tTpgSl7ZOueO5MuLdE9w=",
+      "dev": true,
+      "requires": {
+        "jju": "^1.1.0"
+      }
+    },
+    "json-schema": {
+      "version": "0.2.3",
+      "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
+      "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
+      "dev": true
+    },
+    "json-schema-traverse": {
+      "version": "0.3.1",
+      "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
+      "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=",
+      "dev": true
+    },
+    "json-server": {
+      "version": "0.15.0",
+      "resolved": "https://registry.npm.taobao.org/json-server/download/json-server-0.15.0.tgz",
+      "integrity": "sha1-uLCEAHfkbxVgjp7/LDT8TWPRkTk=",
+      "dev": true,
+      "requires": {
+        "body-parser": "^1.19.0",
+        "chalk": "^2.4.2",
+        "compression": "^1.7.4",
+        "connect-pause": "^0.1.1",
+        "cors": "^2.8.5",
+        "errorhandler": "^1.5.1",
+        "express": "^4.17.0",
+        "express-urlrewrite": "^1.2.0",
+        "json-parse-helpfulerror": "^1.0.3",
+        "lodash": "^4.17.11",
+        "lodash-id": "^0.14.0",
+        "lowdb": "^1.0.0",
+        "method-override": "^3.0.0",
+        "morgan": "^1.9.1",
+        "nanoid": "^2.0.2",
+        "object-assign": "^4.1.1",
+        "please-upgrade-node": "^3.1.1",
+        "pluralize": "^7.0.0",
+        "request": "^2.88.0",
+        "server-destroy": "^1.0.1",
+        "update-notifier": "^3.0.0",
+        "yargs": "^13.2.4"
+      },
+      "dependencies": {
+        "ajv": {
+          "version": "6.10.2",
+          "resolved": "https://registry.npm.taobao.org/ajv/download/ajv-6.10.2.tgz",
+          "integrity": "sha1-086gTWsBeyiUrWkED+yLYj60vVI=",
+          "dev": true,
+          "requires": {
+            "fast-deep-equal": "^2.0.1",
+            "fast-json-stable-stringify": "^2.0.0",
+            "json-schema-traverse": "^0.4.1",
+            "uri-js": "^4.2.2"
+          }
+        },
+        "ansi-regex": {
+          "version": "4.1.0",
+          "resolved": "http://registry.npm.taobao.org/ansi-regex/download/ansi-regex-4.1.0.tgz",
+          "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=",
+          "dev": true
+        },
+        "array-flatten": {
+          "version": "1.1.1",
+          "resolved": "http://registry.npm.taobao.org/array-flatten/download/array-flatten-1.1.1.tgz",
+          "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=",
+          "dev": true
+        },
+        "assert-plus": {
+          "version": "1.0.0",
+          "resolved": "http://registry.npm.taobao.org/assert-plus/download/assert-plus-1.0.0.tgz",
+          "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+          "dev": true
+        },
+        "aws-sign2": {
+          "version": "0.7.0",
+          "resolved": "http://registry.npm.taobao.org/aws-sign2/download/aws-sign2-0.7.0.tgz",
+          "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
+          "dev": true
+        },
+        "body-parser": {
+          "version": "1.19.0",
+          "resolved": "https://registry.npm.taobao.org/body-parser/download/body-parser-1.19.0.tgz",
+          "integrity": "sha1-lrJwnlfJxOCab9Zqj9l5hE9p8Io=",
+          "dev": true,
+          "requires": {
+            "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"
+          }
+        },
+        "bytes": {
+          "version": "3.1.0",
+          "resolved": "http://registry.npm.taobao.org/bytes/download/bytes-3.1.0.tgz",
+          "integrity": "sha1-9s95M6Ng4FiPqf3oVlHNx/gF0fY=",
+          "dev": true
+        },
+        "camelcase": {
+          "version": "5.3.1",
+          "resolved": "https://registry.npm.taobao.org/camelcase/download/camelcase-5.3.1.tgz",
+          "integrity": "sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA=",
+          "dev": true
+        },
+        "chalk": {
+          "version": "2.4.2",
+          "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-2.4.2.tgz",
+          "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=",
+          "dev": true,
+          "requires": {
+            "ansi-styles": "^3.2.1",
+            "escape-string-regexp": "^1.0.5",
+            "supports-color": "^5.3.0"
+          }
+        },
+        "cliui": {
+          "version": "5.0.0",
+          "resolved": "https://registry.npm.taobao.org/cliui/download/cliui-5.0.0.tgz",
+          "integrity": "sha1-3u/P2y6AB4SqNPRvoI4GhRx7u8U=",
+          "dev": true,
+          "requires": {
+            "string-width": "^3.1.0",
+            "strip-ansi": "^5.2.0",
+            "wrap-ansi": "^5.1.0"
+          }
+        },
+        "compressible": {
+          "version": "2.0.17",
+          "resolved": "https://registry.npm.taobao.org/compressible/download/compressible-2.0.17.tgz",
+          "integrity": "sha1-bowQihatWDhKl386SCyiC/8vOME=",
+          "dev": true,
+          "requires": {
+            "mime-db": ">= 1.40.0 < 2"
+          }
+        },
+        "compression": {
+          "version": "1.7.4",
+          "resolved": "http://registry.npm.taobao.org/compression/download/compression-1.7.4.tgz",
+          "integrity": "sha1-lVI+/xcMpXwpoMpB5v4TH0Hlu48=",
+          "dev": true,
+          "requires": {
+            "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"
+          },
+          "dependencies": {
+            "bytes": {
+              "version": "3.0.0",
+              "resolved": "http://registry.npm.taobao.org/bytes/download/bytes-3.0.0.tgz",
+              "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=",
+              "dev": true
+            }
+          }
+        },
+        "content-disposition": {
+          "version": "0.5.3",
+          "resolved": "http://registry.npm.taobao.org/content-disposition/download/content-disposition-0.5.3.tgz",
+          "integrity": "sha1-4TDK9+cnkIfFYWwgB9BIVpiYT70=",
+          "dev": true,
+          "requires": {
+            "safe-buffer": "5.1.2"
+          }
+        },
+        "cookie": {
+          "version": "0.4.0",
+          "resolved": "https://registry.npm.taobao.org/cookie/download/cookie-0.4.0.tgz",
+          "integrity": "sha1-vrQ35wIrO21JAZ0IhmUwPr6cFLo=",
+          "dev": true
+        },
+        "express": {
+          "version": "4.17.1",
+          "resolved": "https://registry.npm.taobao.org/express/download/express-4.17.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexpress%2Fdownload%2Fexpress-4.17.1.tgz",
+          "integrity": "sha1-RJH8OGBc9R+GKdOcK10Cb5ikwTQ=",
+          "dev": true,
+          "requires": {
+            "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"
+          },
+          "dependencies": {
+            "accepts": {
+              "version": "1.3.7",
+              "resolved": "https://registry.npm.taobao.org/accepts/download/accepts-1.3.7.tgz",
+              "integrity": "sha1-UxvHJlF6OytB+FACHGzBXqq1B80=",
+              "dev": true,
+              "requires": {
+                "mime-types": "~2.1.24",
+                "negotiator": "0.6.2"
+              }
+            }
+          }
+        },
+        "fast-deep-equal": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-2.0.1.tgz",
+          "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
+          "dev": true
+        },
+        "finalhandler": {
+          "version": "1.1.2",
+          "resolved": "https://registry.npm.taobao.org/finalhandler/download/finalhandler-1.1.2.tgz",
+          "integrity": "sha1-t+fQAP/RGTjQ/bBTUG9uur6fWH0=",
+          "dev": true,
+          "requires": {
+            "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-up": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npm.taobao.org/find-up/download/find-up-3.0.0.tgz",
+          "integrity": "sha1-SRafHXmTQwZG2mHsxa41XCHJe3M=",
+          "dev": true,
+          "requires": {
+            "locate-path": "^3.0.0"
+          }
+        },
+        "form-data": {
+          "version": "2.3.3",
+          "resolved": "https://registry.npm.taobao.org/form-data/download/form-data-2.3.3.tgz",
+          "integrity": "sha1-3M5SwF9kTymManq5Nr1yTO/786Y=",
+          "dev": true,
+          "requires": {
+            "asynckit": "^0.4.0",
+            "combined-stream": "^1.0.6",
+            "mime-types": "^2.1.12"
+          }
+        },
+        "get-caller-file": {
+          "version": "2.0.5",
+          "resolved": "http://registry.npm.taobao.org/get-caller-file/download/get-caller-file-2.0.5.tgz",
+          "integrity": "sha1-T5RBKoLbMvNuOwuXQfipf+sDH34=",
+          "dev": true
+        },
+        "har-schema": {
+          "version": "2.0.0",
+          "resolved": "http://registry.npm.taobao.org/har-schema/download/har-schema-2.0.0.tgz",
+          "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
+          "dev": true
+        },
+        "har-validator": {
+          "version": "5.1.3",
+          "resolved": "http://registry.npm.taobao.org/har-validator/download/har-validator-5.1.3.tgz",
+          "integrity": "sha1-HvievT5JllV2de7ZiTEQ3DUPoIA=",
+          "dev": true,
+          "requires": {
+            "ajv": "^6.5.5",
+            "har-schema": "^2.0.0"
+          }
+        },
+        "has-flag": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-3.0.0.tgz",
+          "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+          "dev": true
+        },
+        "http-errors": {
+          "version": "1.7.2",
+          "resolved": "https://registry.npm.taobao.org/http-errors/download/http-errors-1.7.2.tgz?cache=0&sync_timestamp=1561418526117&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-errors%2Fdownload%2Fhttp-errors-1.7.2.tgz",
+          "integrity": "sha1-T1ApzxMjnzEDblsuVSkrz7zIXI8=",
+          "dev": true,
+          "requires": {
+            "depd": "~1.1.2",
+            "inherits": "2.0.3",
+            "setprototypeof": "1.1.1",
+            "statuses": ">= 1.5.0 < 2",
+            "toidentifier": "1.0.0"
+          }
+        },
+        "http-signature": {
+          "version": "1.2.0",
+          "resolved": "http://registry.npm.taobao.org/http-signature/download/http-signature-1.2.0.tgz",
+          "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
+          "dev": true,
+          "requires": {
+            "assert-plus": "^1.0.0",
+            "jsprim": "^1.2.2",
+            "sshpk": "^1.7.0"
+          }
+        },
+        "iconv-lite": {
+          "version": "0.4.24",
+          "resolved": "https://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.4.24.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ficonv-lite%2Fdownload%2Ficonv-lite-0.4.24.tgz",
+          "integrity": "sha1-ICK0sl+93CHS9SSXSkdKr+czkIs=",
+          "dev": true,
+          "requires": {
+            "safer-buffer": ">= 2.1.2 < 3"
+          }
+        },
+        "ipaddr.js": {
+          "version": "1.9.0",
+          "resolved": "https://registry.npm.taobao.org/ipaddr.js/download/ipaddr.js-1.9.0.tgz",
+          "integrity": "sha1-N9905DCg5HVQ/lSi3v4w2KzZX2U=",
+          "dev": true
+        },
+        "is-fullwidth-code-point": {
+          "version": "2.0.0",
+          "resolved": "http://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz",
+          "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+          "dev": true
+        },
+        "json-schema-traverse": {
+          "version": "0.4.1",
+          "resolved": "http://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.4.1.tgz",
+          "integrity": "sha1-afaofZUTq4u4/mO9sJecRI5oRmA=",
+          "dev": true
+        },
+        "locate-path": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npm.taobao.org/locate-path/download/locate-path-3.0.0.tgz",
+          "integrity": "sha1-2+w7OrdZdYBxtY/ln8QYca8hQA4=",
+          "dev": true,
+          "requires": {
+            "p-locate": "^3.0.0",
+            "path-exists": "^3.0.0"
+          }
+        },
+        "mime-db": {
+          "version": "1.40.0",
+          "resolved": "https://registry.npm.taobao.org/mime-db/download/mime-db-1.40.0.tgz",
+          "integrity": "sha1-plBX6ZjbCQ9zKmj2wnbTh9QSbDI=",
+          "dev": true
+        },
+        "mime-types": {
+          "version": "2.1.24",
+          "resolved": "https://registry.npm.taobao.org/mime-types/download/mime-types-2.1.24.tgz",
+          "integrity": "sha1-tvjQs+lR77d97eyhlM/20W9nb4E=",
+          "dev": true,
+          "requires": {
+            "mime-db": "1.40.0"
+          }
+        },
+        "ms": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.1.1.tgz",
+          "integrity": "sha1-MKWGTrPrsKZvLr5tcnrwagnYbgo=",
+          "dev": true
+        },
+        "negotiator": {
+          "version": "0.6.2",
+          "resolved": "https://registry.npm.taobao.org/negotiator/download/negotiator-0.6.2.tgz",
+          "integrity": "sha1-/qz3zPUlp3rpY0Q2pkiD/+yjRvs=",
+          "dev": true
+        },
+        "oauth-sign": {
+          "version": "0.9.0",
+          "resolved": "http://registry.npm.taobao.org/oauth-sign/download/oauth-sign-0.9.0.tgz",
+          "integrity": "sha1-R6ewFrqmi1+g7PPe4IqFxnmsZFU=",
+          "dev": true
+        },
+        "on-headers": {
+          "version": "1.0.2",
+          "resolved": "http://registry.npm.taobao.org/on-headers/download/on-headers-1.0.2.tgz",
+          "integrity": "sha1-dysK5qqlJcOZ5Imt+tkMQD6zwo8=",
+          "dev": true
+        },
+        "p-limit": {
+          "version": "2.2.1",
+          "resolved": "https://registry.npm.taobao.org/p-limit/download/p-limit-2.2.1.tgz",
+          "integrity": "sha1-qgeniMwxUck5tRMfY1cPDdIAlTc=",
+          "dev": true,
+          "requires": {
+            "p-try": "^2.0.0"
+          }
+        },
+        "p-locate": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npm.taobao.org/p-locate/download/p-locate-3.0.0.tgz",
+          "integrity": "sha1-Mi1poFwCZLJZl9n0DNiokasAZKQ=",
+          "dev": true,
+          "requires": {
+            "p-limit": "^2.0.0"
+          }
+        },
+        "p-try": {
+          "version": "2.2.0",
+          "resolved": "https://registry.npm.taobao.org/p-try/download/p-try-2.2.0.tgz",
+          "integrity": "sha1-yyhoVA4xPWHeWPr741zpAE1VQOY=",
+          "dev": true
+        },
+        "parseurl": {
+          "version": "1.3.3",
+          "resolved": "https://registry.npm.taobao.org/parseurl/download/parseurl-1.3.3.tgz",
+          "integrity": "sha1-naGee+6NEt/wUT7Vt2lXeTvC6NQ=",
+          "dev": true
+        },
+        "performance-now": {
+          "version": "2.1.0",
+          "resolved": "http://registry.npm.taobao.org/performance-now/download/performance-now-2.1.0.tgz",
+          "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
+          "dev": true
+        },
+        "proxy-addr": {
+          "version": "2.0.5",
+          "resolved": "https://registry.npm.taobao.org/proxy-addr/download/proxy-addr-2.0.5.tgz",
+          "integrity": "sha1-NMvWSi2B9LH9IedvnwbIpFKZ7jQ=",
+          "dev": true,
+          "requires": {
+            "forwarded": "~0.1.2",
+            "ipaddr.js": "1.9.0"
+          }
+        },
+        "punycode": {
+          "version": "1.4.1",
+          "resolved": "http://registry.npm.taobao.org/punycode/download/punycode-1.4.1.tgz",
+          "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
+          "dev": true
+        },
+        "qs": {
+          "version": "6.7.0",
+          "resolved": "https://registry.npm.taobao.org/qs/download/qs-6.7.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fqs%2Fdownload%2Fqs-6.7.0.tgz",
+          "integrity": "sha1-QdwaAV49WB8WIXdr4xr7KHapsbw=",
+          "dev": true
+        },
+        "range-parser": {
+          "version": "1.2.1",
+          "resolved": "https://registry.npm.taobao.org/range-parser/download/range-parser-1.2.1.tgz",
+          "integrity": "sha1-PPNwI9GZ4cJNGlW4SADC8+ZGgDE=",
+          "dev": true
+        },
+        "raw-body": {
+          "version": "2.4.0",
+          "resolved": "https://registry.npm.taobao.org/raw-body/download/raw-body-2.4.0.tgz?cache=0&sync_timestamp=1561521020890&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fraw-body%2Fdownload%2Fraw-body-2.4.0.tgz",
+          "integrity": "sha1-oc5vucm8NWylLoklarWQWeE9AzI=",
+          "dev": true,
+          "requires": {
+            "bytes": "3.1.0",
+            "http-errors": "1.7.2",
+            "iconv-lite": "0.4.24",
+            "unpipe": "1.0.0"
+          }
+        },
+        "request": {
+          "version": "2.88.0",
+          "resolved": "http://registry.npm.taobao.org/request/download/request-2.88.0.tgz",
+          "integrity": "sha1-nC/KT301tZLv5Xx/ClXoEFIST+8=",
+          "dev": true,
+          "requires": {
+            "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.0",
+            "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.4.3",
+            "tunnel-agent": "^0.6.0",
+            "uuid": "^3.3.2"
+          },
+          "dependencies": {
+            "qs": {
+              "version": "6.5.2",
+              "resolved": "https://registry.npm.taobao.org/qs/download/qs-6.5.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fqs%2Fdownload%2Fqs-6.5.2.tgz",
+              "integrity": "sha1-yzroBuh0BERYTvFUzo7pjUA/PjY=",
+              "dev": true
+            }
+          }
+        },
+        "require-main-filename": {
+          "version": "2.0.0",
+          "resolved": "http://registry.npm.taobao.org/require-main-filename/download/require-main-filename-2.0.0.tgz",
+          "integrity": "sha1-0LMp7MfMD2Fkn2IhW+aa9UqomJs=",
+          "dev": true
+        },
+        "send": {
+          "version": "0.17.1",
+          "resolved": "https://registry.npm.taobao.org/send/download/send-0.17.1.tgz",
+          "integrity": "sha1-wdiwWfeQD3Rm3Uk4vcROEd2zdsg=",
+          "dev": true,
+          "requires": {
+            "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"
+          }
+        },
+        "serve-static": {
+          "version": "1.14.1",
+          "resolved": "https://registry.npm.taobao.org/serve-static/download/serve-static-1.14.1.tgz",
+          "integrity": "sha1-Zm5jbcTwEPfvKZcKiKZ0MgiYsvk=",
+          "dev": true,
+          "requires": {
+            "encodeurl": "~1.0.2",
+            "escape-html": "~1.0.3",
+            "parseurl": "~1.3.3",
+            "send": "0.17.1"
+          }
+        },
+        "setprototypeof": {
+          "version": "1.1.1",
+          "resolved": "https://registry.npm.taobao.org/setprototypeof/download/setprototypeof-1.1.1.tgz",
+          "integrity": "sha1-fpWsskqpL1iF4KvvW6ExMw1K5oM=",
+          "dev": true
+        },
+        "statuses": {
+          "version": "1.5.0",
+          "resolved": "http://registry.npm.taobao.org/statuses/download/statuses-1.5.0.tgz",
+          "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
+          "dev": true
+        },
+        "string-width": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-3.1.0.tgz",
+          "integrity": "sha1-InZ74htirxCBV0MG9prFG2IgOWE=",
+          "dev": true,
+          "requires": {
+            "emoji-regex": "^7.0.1",
+            "is-fullwidth-code-point": "^2.0.0",
+            "strip-ansi": "^5.1.0"
+          }
+        },
+        "strip-ansi": {
+          "version": "5.2.0",
+          "resolved": "http://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz",
+          "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=",
+          "dev": true,
+          "requires": {
+            "ansi-regex": "^4.1.0"
+          }
+        },
+        "supports-color": {
+          "version": "5.5.0",
+          "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-5.5.0.tgz",
+          "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=",
+          "dev": true,
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        },
+        "tough-cookie": {
+          "version": "2.4.3",
+          "resolved": "http://registry.npm.taobao.org/tough-cookie/download/tough-cookie-2.4.3.tgz",
+          "integrity": "sha1-U/Nto/R3g7CSWvoG/587FlKA94E=",
+          "dev": true,
+          "requires": {
+            "psl": "^1.1.24",
+            "punycode": "^1.4.1"
+          }
+        },
+        "type-is": {
+          "version": "1.6.18",
+          "resolved": "https://registry.npm.taobao.org/type-is/download/type-is-1.6.18.tgz",
+          "integrity": "sha1-TlUs0F3wlGfcvE73Od6J8s83wTE=",
+          "dev": true,
+          "requires": {
+            "media-typer": "0.3.0",
+            "mime-types": "~2.1.24"
+          }
+        },
+        "which-module": {
+          "version": "2.0.0",
+          "resolved": "http://registry.npm.taobao.org/which-module/download/which-module-2.0.0.tgz",
+          "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
+          "dev": true
+        },
+        "wrap-ansi": {
+          "version": "5.1.0",
+          "resolved": "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-5.1.0.tgz",
+          "integrity": "sha1-H9H2cjXVttD+54EFYAG/tpTAOwk=",
+          "dev": true,
+          "requires": {
+            "ansi-styles": "^3.2.0",
+            "string-width": "^3.0.0",
+            "strip-ansi": "^5.0.0"
+          }
+        },
+        "yargs": {
+          "version": "13.3.0",
+          "resolved": "https://registry.npm.taobao.org/yargs/download/yargs-13.3.0.tgz",
+          "integrity": "sha1-TGV6VeB+Xyz5R/ijZlZ8BKDe3IM=",
+          "dev": true,
+          "requires": {
+            "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.1"
+          }
+        },
+        "yargs-parser": {
+          "version": "13.1.1",
+          "resolved": "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-13.1.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs-parser%2Fdownload%2Fyargs-parser-13.1.1.tgz",
+          "integrity": "sha1-0mBYUyqgbTZf4JH2ofwGsvfl7KA=",
+          "dev": true,
+          "requires": {
+            "camelcase": "^5.0.0",
+            "decamelize": "^1.2.0"
+          }
+        }
       }
     },
-    "jsbn": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
-      "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
-      "dev": true
-    },
-    "jsesc": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
-      "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
-      "dev": true
-    },
-    "json-loader": {
-      "version": "0.5.7",
-      "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz",
-      "integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==",
-      "dev": true
-    },
-    "json-parse-better-errors": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
-      "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
-      "dev": true
-    },
-    "json-schema": {
-      "version": "0.2.3",
-      "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
-      "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
-      "dev": true
-    },
-    "json-schema-traverse": {
-      "version": "0.3.1",
-      "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
-      "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=",
-      "dev": true
-    },
     "json-stable-stringify": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz",
       "dev": true,
       "optional": true,
       "requires": {
-        "jsonify": "0.0.0"
+        "jsonify": "~0.0.0"
       }
     },
     "json-stringify-safe": {
       "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
       "dev": true,
       "requires": {
-        "graceful-fs": "4.1.11"
+        "graceful-fs": "^4.1.6"
       }
     },
     "jsonify": {
       "integrity": "sha512-rECezBeY7mjzGUWhFlB7CvPHgkHJLXyUmWg+6vHCEsdWNUTnmiS6jRrIMcJEWgU2DUGZzGWG0bTRVky8fsDTOA==",
       "dev": true,
       "requires": {
-        "bluebird": "3.5.2",
-        "body-parser": "1.18.3",
-        "chokidar": "2.0.4",
-        "colors": "1.1.2",
-        "combine-lists": "1.0.1",
-        "connect": "3.6.6",
-        "core-js": "2.5.7",
-        "di": "0.0.1",
-        "dom-serialize": "2.2.1",
-        "expand-braces": "0.1.2",
-        "glob": "7.1.3",
-        "graceful-fs": "4.1.11",
-        "http-proxy": "1.17.0",
-        "isbinaryfile": "3.0.3",
-        "lodash": "4.17.11",
-        "log4js": "2.11.0",
-        "mime": "1.6.0",
-        "minimatch": "3.0.4",
-        "optimist": "0.6.1",
-        "qjobs": "1.2.0",
-        "range-parser": "1.2.0",
-        "rimraf": "2.6.2",
-        "safe-buffer": "5.1.2",
+        "bluebird": "^3.3.0",
+        "body-parser": "^1.16.1",
+        "chokidar": "^2.0.3",
+        "colors": "^1.1.0",
+        "combine-lists": "^1.0.0",
+        "connect": "^3.6.0",
+        "core-js": "^2.2.0",
+        "di": "^0.0.1",
+        "dom-serialize": "^2.2.0",
+        "expand-braces": "^0.1.1",
+        "glob": "^7.1.1",
+        "graceful-fs": "^4.1.2",
+        "http-proxy": "^1.13.0",
+        "isbinaryfile": "^3.0.0",
+        "lodash": "^4.17.4",
+        "log4js": "^2.5.3",
+        "mime": "^1.3.4",
+        "minimatch": "^3.0.2",
+        "optimist": "^0.6.1",
+        "qjobs": "^1.1.4",
+        "range-parser": "^1.2.0",
+        "rimraf": "^2.6.0",
+        "safe-buffer": "^5.0.1",
         "socket.io": "2.0.4",
-        "source-map": "0.6.1",
+        "source-map": "^0.6.1",
         "tmp": "0.0.33",
         "useragent": "2.2.1"
       },
       "dependencies": {
         "anymatch": {
           "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
-          "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
+          "resolved": "https://registry.npm.taobao.org/anymatch/download/anymatch-2.0.0.tgz",
+          "integrity": "sha1-vLJLTzeTTZqnrBe0ra+J58du8us=",
           "dev": true,
           "requires": {
-            "micromatch": "3.1.10",
-            "normalize-path": "2.1.1"
+            "micromatch": "^3.1.4",
+            "normalize-path": "^2.1.1"
           }
         },
         "arr-diff": {
         },
         "braces": {
           "version": "2.3.2",
-          "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
-          "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
-          "dev": true,
-          "requires": {
-            "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.3",
-            "snapdragon": "0.8.2",
-            "snapdragon-node": "2.1.1",
-            "split-string": "3.1.0",
-            "to-regex": "3.0.2"
+          "resolved": "https://registry.npm.taobao.org/braces/download/braces-2.3.2.tgz",
+          "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=",
+          "dev": true,
+          "requires": {
+            "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"
           },
           "dependencies": {
             "extend-shallow": {
               "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
               "dev": true,
               "requires": {
-                "is-extendable": "0.1.1"
+                "is-extendable": "^0.1.0"
               }
             }
           }
         },
         "chokidar": {
-          "version": "2.0.4",
-          "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz",
-          "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==",
-          "dev": true,
-          "requires": {
-            "anymatch": "2.0.0",
-            "async-each": "1.0.1",
-            "braces": "2.3.2",
-            "fsevents": "1.2.4",
-            "glob-parent": "3.1.0",
-            "inherits": "2.0.3",
-            "is-binary-path": "1.0.1",
-            "is-glob": "4.0.0",
-            "lodash.debounce": "4.0.8",
-            "normalize-path": "2.1.1",
-            "path-is-absolute": "1.0.1",
-            "readdirp": "2.2.1",
-            "upath": "1.1.0"
+          "version": "2.1.6",
+          "resolved": "https://registry.npm.taobao.org/chokidar/download/chokidar-2.1.6.tgz",
+          "integrity": "sha1-tsrWU6kp4kTOioNCRBZNJB+pVMU=",
+          "dev": true,
+          "requires": {
+            "anymatch": "^2.0.0",
+            "async-each": "^1.0.1",
+            "braces": "^2.3.2",
+            "fsevents": "^1.2.7",
+            "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"
+          },
+          "dependencies": {
+            "normalize-path": {
+              "version": "3.0.0",
+              "resolved": "http://registry.npm.taobao.org/normalize-path/download/normalize-path-3.0.0.tgz",
+              "integrity": "sha1-Dc1p/yOhybEf0JeDFmRKA4ghamU=",
+              "dev": true
+            },
+            "upath": {
+              "version": "1.1.2",
+              "resolved": "http://registry.npm.taobao.org/upath/download/upath-1.1.2.tgz",
+              "integrity": "sha1-PbZYYA7a7sy+bbXmhNZ+6MKs0Gg=",
+              "dev": true
+            }
           }
         },
         "expand-brackets": {
           "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
           "dev": true,
           "requires": {
-            "debug": "2.6.9",
-            "define-property": "0.2.5",
-            "extend-shallow": "2.0.1",
-            "posix-character-classes": "0.1.1",
-            "regex-not": "1.0.2",
-            "snapdragon": "0.8.2",
-            "to-regex": "3.0.2"
+            "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"
           },
           "dependencies": {
             "define-property": {
               "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
               "dev": true,
               "requires": {
-                "is-descriptor": "0.1.6"
+                "is-descriptor": "^0.1.0"
               }
             },
             "extend-shallow": {
               "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
               "dev": true,
               "requires": {
-                "is-extendable": "0.1.1"
+                "is-extendable": "^0.1.0"
               }
             },
             "is-accessor-descriptor": {
               "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
               "dev": true,
               "requires": {
-                "kind-of": "3.2.2"
+                "kind-of": "^3.0.2"
               },
               "dependencies": {
                 "kind-of": {
                   "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
                   "dev": true,
                   "requires": {
-                    "is-buffer": "1.1.6"
+                    "is-buffer": "^1.1.5"
                   }
                 }
               }
               "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
               "dev": true,
               "requires": {
-                "kind-of": "3.2.2"
+                "kind-of": "^3.0.2"
               },
               "dependencies": {
                 "kind-of": {
                   "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
                   "dev": true,
                   "requires": {
-                    "is-buffer": "1.1.6"
+                    "is-buffer": "^1.1.5"
                   }
                 }
               }
             },
             "is-descriptor": {
               "version": "0.1.6",
-              "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
-              "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+              "resolved": "http://registry.npm.taobao.org/is-descriptor/download/is-descriptor-0.1.6.tgz",
+              "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=",
               "dev": true,
               "requires": {
-                "is-accessor-descriptor": "0.1.6",
-                "is-data-descriptor": "0.1.4",
-                "kind-of": "5.1.0"
+                "is-accessor-descriptor": "^0.1.6",
+                "is-data-descriptor": "^0.1.4",
+                "kind-of": "^5.0.0"
               }
             },
             "kind-of": {
               "version": "5.1.0",
-              "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
-              "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+              "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-5.1.0.tgz",
+              "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=",
               "dev": true
             }
           }
         },
         "extglob": {
           "version": "2.0.4",
-          "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
-          "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
-          "dev": true,
-          "requires": {
-            "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.2",
-            "snapdragon": "0.8.2",
-            "to-regex": "3.0.2"
+          "resolved": "http://registry.npm.taobao.org/extglob/download/extglob-2.0.4.tgz",
+          "integrity": "sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM=",
+          "dev": true,
+          "requires": {
+            "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"
           },
           "dependencies": {
             "define-property": {
               "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
               "dev": true,
               "requires": {
-                "is-descriptor": "1.0.2"
+                "is-descriptor": "^1.0.0"
               }
             },
             "extend-shallow": {
               "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
               "dev": true,
               "requires": {
-                "is-extendable": "0.1.1"
+                "is-extendable": "^0.1.0"
               }
             }
           }
           "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
           "dev": true,
           "requires": {
-            "extend-shallow": "2.0.1",
-            "is-number": "3.0.0",
-            "repeat-string": "1.6.1",
-            "to-regex-range": "2.1.1"
+            "extend-shallow": "^2.0.1",
+            "is-number": "^3.0.0",
+            "repeat-string": "^1.6.1",
+            "to-regex-range": "^2.1.0"
           },
           "dependencies": {
             "extend-shallow": {
               "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
               "dev": true,
               "requires": {
-                "is-extendable": "0.1.1"
+                "is-extendable": "^0.1.0"
               }
             }
           }
           "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
           "dev": true,
           "requires": {
-            "is-glob": "3.1.0",
-            "path-dirname": "1.0.2"
+            "is-glob": "^3.1.0",
+            "path-dirname": "^1.0.0"
           },
           "dependencies": {
             "is-glob": {
               "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
               "dev": true,
               "requires": {
-                "is-extglob": "2.1.1"
+                "is-extglob": "^2.1.0"
               }
             }
           }
         },
         "is-accessor-descriptor": {
           "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
-          "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+          "resolved": "http://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz",
+          "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=",
           "dev": true,
           "requires": {
-            "kind-of": "6.0.2"
+            "kind-of": "^6.0.0"
           }
         },
         "is-data-descriptor": {
           "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
-          "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+          "resolved": "http://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz",
+          "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=",
           "dev": true,
           "requires": {
-            "kind-of": "6.0.2"
+            "kind-of": "^6.0.0"
           }
         },
         "is-descriptor": {
           "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
-          "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+          "resolved": "http://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz",
+          "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=",
           "dev": true,
           "requires": {
-            "is-accessor-descriptor": "1.0.0",
-            "is-data-descriptor": "1.0.0",
-            "kind-of": "6.0.2"
+            "is-accessor-descriptor": "^1.0.0",
+            "is-data-descriptor": "^1.0.0",
+            "kind-of": "^6.0.2"
           }
         },
         "is-extglob": {
           "dev": true
         },
         "is-glob": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz",
-          "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=",
+          "version": "4.0.1",
+          "resolved": "https://registry.npm.taobao.org/is-glob/download/is-glob-4.0.1.tgz",
+          "integrity": "sha1-dWfb6fL14kZ7x3q4PEopSCQHpdw=",
           "dev": true,
           "requires": {
-            "is-extglob": "2.1.1"
+            "is-extglob": "^2.1.1"
           }
         },
         "is-number": {
           "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
           "dev": true,
           "requires": {
-            "kind-of": "3.2.2"
+            "kind-of": "^3.0.2"
           },
           "dependencies": {
             "kind-of": {
               "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
               "dev": true,
               "requires": {
-                "is-buffer": "1.1.6"
+                "is-buffer": "^1.1.5"
               }
             }
           }
         },
         "kind-of": {
           "version": "6.0.2",
-          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
-          "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+          "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-6.0.2.tgz",
+          "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=",
           "dev": true
         },
         "micromatch": {
           "version": "3.1.10",
-          "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
-          "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+          "resolved": "https://registry.npm.taobao.org/micromatch/download/micromatch-3.1.10.tgz",
+          "integrity": "sha1-cIWbyVyYQJUvNZoGij/En57PrCM=",
           "dev": true,
           "requires": {
-            "arr-diff": "4.0.0",
-            "array-unique": "0.3.2",
-            "braces": "2.3.2",
-            "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.13",
-            "object.pick": "1.3.0",
-            "regex-not": "1.0.2",
-            "snapdragon": "0.8.2",
-            "to-regex": "3.0.2"
+            "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"
           }
         },
         "source-map": {
       "integrity": "sha512-uf/ZVpAabDBPvdPdveyk1EPgbnloPvFFGgmRhYLTDH7gEB4nZdSBk8yTU47w1g/drLSx5uMOkjKk7IWKfWg/+w==",
       "dev": true,
       "requires": {
-        "fs-access": "1.0.1",
-        "which": "1.3.1"
+        "fs-access": "^1.0.0",
+        "which": "^1.2.1"
       }
     },
     "karma-coverage-istanbul-reporter": {
       "integrity": "sha1-O13/RmT6W41RlrmInj9hwforgNk=",
       "dev": true,
       "requires": {
-        "istanbul-api": "1.3.7",
-        "minimatch": "3.0.4"
+        "istanbul-api": "^1.3.1",
+        "minimatch": "^3.0.4"
       }
     },
     "karma-jasmine": {
       "integrity": "sha1-SKjl7xiAdhfuK14zwRlMNbQ5Ukw=",
       "dev": true,
       "requires": {
-        "karma-jasmine": "1.1.2"
+        "karma-jasmine": "^1.0.2"
       }
     },
     "karma-source-map-support": {
       "integrity": "sha512-HcPqdAusNez/ywa+biN4EphGz62MmQyPggUsDfsHqa7tSe4jdsxgvTKuDfIazjL+IOxpVWyT7Pr4dhAV+sxX5Q==",
       "dev": true,
       "requires": {
-        "source-map-support": "0.5.9"
+        "source-map-support": "^0.5.5"
       },
       "dependencies": {
         "source-map": {
           "integrity": "sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA==",
           "dev": true,
           "requires": {
-            "buffer-from": "1.1.1",
-            "source-map": "0.6.1"
+            "buffer-from": "^1.0.0",
+            "source-map": "^0.6.0"
           }
         }
       }
     },
+    "keyv": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npm.taobao.org/keyv/download/keyv-3.1.0.tgz",
+      "integrity": "sha1-7MIoSG9pmR5J6UdkhaW+Ho/FxNk=",
+      "dev": true,
+      "requires": {
+        "json-buffer": "3.0.0"
+      }
+    },
     "killable": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz",
       "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
       "dev": true,
       "requires": {
-        "is-buffer": "1.1.6"
+        "is-buffer": "^1.1.5"
+      }
+    },
+    "latest-version": {
+      "version": "5.1.0",
+      "resolved": "https://registry.npm.taobao.org/latest-version/download/latest-version-5.1.0.tgz",
+      "integrity": "sha1-EZ3+kI/jjRXfpD7NE/oS7Igy+s4=",
+      "dev": true,
+      "requires": {
+        "package-json": "^6.3.0"
       }
     },
     "lazy-cache": {
       "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
       "dev": true,
       "requires": {
-        "invert-kv": "1.0.0"
+        "invert-kv": "^1.0.0"
       }
     },
     "less": {
       "integrity": "sha512-KPdIJKWcEAb02TuJtaLrhue0krtRLoRoo7x6BNJIBelO00t/CCdJQUnHW5V34OnHMWzIktSalJxRO+FvytQlCQ==",
       "dev": true,
       "requires": {
-        "errno": "0.1.7",
-        "graceful-fs": "4.1.11",
-        "image-size": "0.5.5",
-        "mime": "1.6.0",
-        "mkdirp": "0.5.1",
-        "promise": "7.3.1",
+        "errno": "^0.1.1",
+        "graceful-fs": "^4.1.2",
+        "image-size": "~0.5.0",
+        "mime": "^1.2.11",
+        "mkdirp": "^0.5.0",
+        "promise": "^7.1.1",
         "request": "2.81.0",
-        "source-map": "0.5.7"
+        "source-map": "^0.5.3"
       }
     },
     "less-loader": {
       "integrity": "sha512-KNTsgCE9tMOM70+ddxp9yyt9iHqgmSs0yTZc5XH5Wo+g80RWRIYNqE58QJKm/yMud5wZEvz50ugRDuzVIkyahg==",
       "dev": true,
       "requires": {
-        "clone": "2.1.2",
-        "loader-utils": "1.1.0",
-        "pify": "3.0.0"
+        "clone": "^2.1.1",
+        "loader-utils": "^1.1.0",
+        "pify": "^3.0.0"
       }
     },
     "levn": {
       "dev": true,
       "optional": true,
       "requires": {
-        "prelude-ls": "1.1.2",
-        "type-check": "0.3.2"
+        "prelude-ls": "~1.1.2",
+        "type-check": "~0.3.2"
       }
     },
     "libbase64": {
       "version": "0.1.0",
       "resolved": "https://registry.npmjs.org/libbase64/-/libbase64-0.1.0.tgz",
       "integrity": "sha1-YjUag5VjrF/1vSbxL2Dpgwu3UeY=",
-      "dev": true
+      "dev": true,
+      "optional": true
     },
     "libmime": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/libmime/-/libmime-3.0.0.tgz",
       "integrity": "sha1-UaGp50SOy9Ms2lRCFnW7IbwJPaY=",
       "dev": true,
+      "optional": true,
       "requires": {
         "iconv-lite": "0.4.15",
         "libbase64": "0.1.0",
           "version": "0.4.15",
           "resolved": "http://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.15.tgz",
           "integrity": "sha1-/iZaIYrGpXz+hUkn6dBMGYJe3es=",
-          "dev": true
+          "dev": true,
+          "optional": true
         }
       }
     },
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/libqp/-/libqp-1.1.0.tgz",
       "integrity": "sha1-9ebgatdLeU+1tbZpiL9yjvHe2+g=",
-      "dev": true
+      "dev": true,
+      "optional": true
     },
     "license-webpack-plugin": {
       "version": "1.5.0",
       "integrity": "sha512-Of/H79rZqm2aeg4RnP9SMSh19qkKemoLT5VaJV58uH5AxeYWEcBgGFs753JEJ/Hm6BPvQVfIlrrjoBwYj8p7Tw==",
       "dev": true,
       "requires": {
-        "ejs": "2.6.1"
+        "ejs": "^2.5.7"
       }
     },
     "load-json-file": {
       "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
       "dev": true,
       "requires": {
-        "graceful-fs": "4.1.11",
-        "parse-json": "2.2.0",
-        "pify": "2.3.0",
-        "pinkie-promise": "2.0.1",
-        "strip-bom": "2.0.0"
+        "graceful-fs": "^4.1.2",
+        "parse-json": "^2.2.0",
+        "pify": "^2.0.0",
+        "pinkie-promise": "^2.0.0",
+        "strip-bom": "^2.0.0"
       },
       "dependencies": {
         "pify": {
       "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=",
       "dev": true,
       "requires": {
-        "big.js": "3.2.0",
-        "emojis-list": "2.1.0",
-        "json5": "0.5.1"
+        "big.js": "^3.1.3",
+        "emojis-list": "^2.0.0",
+        "json5": "^0.5.0"
       }
     },
     "locate-path": {
       "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
       "dev": true,
       "requires": {
-        "p-locate": "2.0.0",
-        "path-exists": "3.0.0"
+        "p-locate": "^2.0.0",
+        "path-exists": "^3.0.0"
       }
     },
     "lodash": {
-      "version": "4.17.11",
-      "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
-      "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==",
+      "version": "4.17.15",
+      "resolved": "https://registry.npm.taobao.org/lodash/download/lodash-4.17.15.tgz",
+      "integrity": "sha1-tEf2ZwoEVbv+7dETku/zMOoJdUg="
+    },
+    "lodash-id": {
+      "version": "0.14.0",
+      "resolved": "https://registry.npm.taobao.org/lodash-id/download/lodash-id-0.14.0.tgz",
+      "integrity": "sha1-uvSJNOVDobXWNG+MhGmLGoyAOJY=",
       "dev": true
     },
     "lodash.assign": {
       "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=",
       "dev": true
     },
-    "lodash.debounce": {
-      "version": "4.0.8",
-      "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
-      "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=",
-      "dev": true
-    },
     "lodash.mergewith": {
-      "version": "4.6.1",
-      "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz",
-      "integrity": "sha512-eWw5r+PYICtEBgrBE5hhlT6aAa75f411bgDz/ZL2KZqYV03USvucsxcHUIlGTDTECs1eunpI7HOV7U+WLDvNdQ==",
+      "version": "4.6.2",
+      "resolved": "https://registry.npm.taobao.org/lodash.mergewith/download/lodash.mergewith-4.6.2.tgz?cache=0&sync_timestamp=1562718558085&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flodash.mergewith%2Fdownload%2Flodash.mergewith-4.6.2.tgz",
+      "integrity": "sha1-YXEh+JrFX1kEfHrsHM1mVMZZD1U=",
       "dev": true,
       "optional": true
     },
       "integrity": "sha512-z1XdwyGFg8/WGkOyF6DPJjivCWNLKrklGdViywdYnSKOvgtEBo2UyEMZS5sD2mZrQlU3TvO8wDWLc8mzE1ncBQ==",
       "dev": true,
       "requires": {
-        "amqplib": "0.5.2",
-        "axios": "0.15.3",
-        "circular-json": "0.5.8",
-        "date-format": "1.2.0",
-        "debug": "3.2.6",
-        "hipchat-notifier": "1.1.0",
-        "loggly": "1.1.1",
-        "mailgun-js": "0.18.1",
-        "nodemailer": "2.7.2",
-        "redis": "2.8.0",
-        "semver": "5.6.0",
-        "slack-node": "0.2.0",
+        "amqplib": "^0.5.2",
+        "axios": "^0.15.3",
+        "circular-json": "^0.5.4",
+        "date-format": "^1.2.0",
+        "debug": "^3.1.0",
+        "hipchat-notifier": "^1.1.0",
+        "loggly": "^1.1.0",
+        "mailgun-js": "^0.18.0",
+        "nodemailer": "^2.5.0",
+        "redis": "^2.7.1",
+        "semver": "^5.5.0",
+        "slack-node": "~0.2.0",
         "streamroller": "0.7.0"
       },
       "dependencies": {
           "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
           "dev": true,
           "requires": {
-            "ms": "2.1.1"
+            "ms": "^2.1.1"
           }
         },
         "ms": {
       "dev": true,
       "optional": true,
       "requires": {
-        "json-stringify-safe": "5.0.1",
-        "request": "2.75.0",
-        "timespan": "2.3.0"
+        "json-stringify-safe": "5.0.x",
+        "request": "2.75.x",
+        "timespan": "2.3.x"
       },
       "dependencies": {
         "ansi-styles": {
           "dev": true,
           "optional": true,
           "requires": {
-            "ansi-styles": "2.2.1",
-            "escape-string-regexp": "1.0.5",
-            "has-ansi": "2.0.0",
-            "strip-ansi": "3.0.1",
-            "supports-color": "2.0.0"
+            "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"
           }
         },
         "form-data": {
           "dev": true,
           "optional": true,
           "requires": {
-            "asynckit": "0.4.0",
-            "combined-stream": "1.0.7",
-            "mime-types": "2.1.21"
+            "asynckit": "^0.4.0",
+            "combined-stream": "^1.0.5",
+            "mime-types": "^2.1.11"
           }
         },
         "har-validator": {
           "dev": true,
           "optional": true,
           "requires": {
-            "chalk": "1.1.3",
-            "commander": "2.17.1",
-            "is-my-json-valid": "2.19.0",
-            "pinkie-promise": "2.0.1"
+            "chalk": "^1.1.1",
+            "commander": "^2.9.0",
+            "is-my-json-valid": "^2.12.4",
+            "pinkie-promise": "^2.0.0"
           }
         },
         "node-uuid": {
           "dev": true,
           "optional": true,
           "requires": {
-            "aws-sign2": "0.6.0",
-            "aws4": "1.8.0",
-            "bl": "1.1.2",
-            "caseless": "0.11.0",
-            "combined-stream": "1.0.7",
-            "extend": "3.0.2",
-            "forever-agent": "0.6.1",
-            "form-data": "2.0.0",
-            "har-validator": "2.0.6",
-            "hawk": "3.1.3",
-            "http-signature": "1.1.1",
-            "is-typedarray": "1.0.0",
-            "isstream": "0.1.2",
-            "json-stringify-safe": "5.0.1",
-            "mime-types": "2.1.21",
-            "node-uuid": "1.4.8",
-            "oauth-sign": "0.8.2",
-            "qs": "6.2.3",
-            "stringstream": "0.0.6",
-            "tough-cookie": "2.3.4",
-            "tunnel-agent": "0.4.3"
+            "aws-sign2": "~0.6.0",
+            "aws4": "^1.2.1",
+            "bl": "~1.1.2",
+            "caseless": "~0.11.0",
+            "combined-stream": "~1.0.5",
+            "extend": "~3.0.0",
+            "forever-agent": "~0.6.1",
+            "form-data": "~2.0.0",
+            "har-validator": "~2.0.6",
+            "hawk": "~3.1.3",
+            "http-signature": "~1.1.0",
+            "is-typedarray": "~1.0.0",
+            "isstream": "~0.1.2",
+            "json-stringify-safe": "~5.0.1",
+            "mime-types": "~2.1.7",
+            "node-uuid": "~1.4.7",
+            "oauth-sign": "~0.8.1",
+            "qs": "~6.2.0",
+            "stringstream": "~0.0.4",
+            "tough-cookie": "~2.3.0",
+            "tunnel-agent": "~0.4.1"
           }
         },
         "supports-color": {
       "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
       "dev": true,
       "requires": {
-        "js-tokens": "3.0.2"
+        "js-tokens": "^3.0.0 || ^4.0.0"
       }
     },
     "loud-rejection": {
       "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
       "dev": true,
       "requires": {
-        "currently-unhandled": "0.4.1",
-        "signal-exit": "3.0.2"
+        "currently-unhandled": "^0.4.1",
+        "signal-exit": "^3.0.0"
+      }
+    },
+    "lowdb": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npm.taobao.org/lowdb/download/lowdb-1.0.0.tgz",
+      "integrity": "sha1-UkO+ayJ4bMzjDlDJoz6sNrIMgGQ=",
+      "dev": true,
+      "requires": {
+        "graceful-fs": "^4.1.3",
+        "is-promise": "^2.1.0",
+        "lodash": "4",
+        "pify": "^3.0.0",
+        "steno": "^0.4.1"
       }
     },
     "lower-case": {
       "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=",
       "dev": true
     },
+    "lowercase-keys": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/lowercase-keys/download/lowercase-keys-1.0.1.tgz",
+      "integrity": "sha1-b54wtHCE2XGnyCD/FabFFnt0wm8=",
+      "dev": true
+    },
     "lru-cache": {
       "version": "4.1.3",
       "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz",
       "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==",
       "dev": true,
       "requires": {
-        "pseudomap": "1.0.2",
-        "yallist": "2.1.2"
+        "pseudomap": "^1.0.2",
+        "yallist": "^2.1.2"
       }
     },
     "magic-string": {
       "integrity": "sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w==",
       "dev": true,
       "requires": {
-        "vlq": "0.2.3"
+        "vlq": "^0.2.2"
       }
     },
     "mailcomposer": {
       "dev": true,
       "optional": true,
       "requires": {
-        "async": "2.6.1",
-        "debug": "3.1.0",
-        "form-data": "2.3.3",
-        "inflection": "1.12.0",
-        "is-stream": "1.1.0",
-        "path-proxy": "1.0.0",
-        "promisify-call": "2.0.4",
-        "proxy-agent": "3.0.3",
-        "tsscmp": "1.0.6"
+        "async": "~2.6.0",
+        "debug": "~3.1.0",
+        "form-data": "~2.3.0",
+        "inflection": "~1.12.0",
+        "is-stream": "^1.1.0",
+        "path-proxy": "~1.0.0",
+        "promisify-call": "^2.0.2",
+        "proxy-agent": "~3.0.0",
+        "tsscmp": "~1.0.0"
       },
       "dependencies": {
         "debug": {
           "dev": true,
           "optional": true,
           "requires": {
-            "asynckit": "0.4.0",
-            "combined-stream": "1.0.7",
-            "mime-types": "2.1.21"
+            "asynckit": "^0.4.0",
+            "combined-stream": "^1.0.6",
+            "mime-types": "^2.1.12"
           }
         }
       }
       "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
       "dev": true,
       "requires": {
-        "pify": "3.0.0"
+        "pify": "^3.0.0"
       }
     },
     "make-error": {
       "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
       "dev": true,
       "requires": {
-        "object-visit": "1.0.1"
+        "object-visit": "^1.0.0"
       }
     },
     "math-random": {
       "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
       "dev": true,
       "requires": {
-        "hash-base": "3.0.4",
-        "inherits": "2.0.3",
-        "safe-buffer": "5.1.2"
+        "hash-base": "^3.0.0",
+        "inherits": "^2.0.1",
+        "safe-buffer": "^5.1.2"
       }
     },
     "media-typer": {
       "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=",
       "dev": true,
       "requires": {
-        "mimic-fn": "1.2.0"
+        "mimic-fn": "^1.0.0"
       }
     },
     "memory-fs": {
       "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=",
       "dev": true,
       "requires": {
-        "errno": "0.1.7",
-        "readable-stream": "2.3.6"
+        "errno": "^0.1.3",
+        "readable-stream": "^2.0.1"
       }
     },
     "meow": {
       "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
       "dev": true,
       "requires": {
-        "camelcase-keys": "2.1.0",
-        "decamelize": "1.2.0",
-        "loud-rejection": "1.6.0",
-        "map-obj": "1.0.1",
-        "minimist": "1.2.0",
-        "normalize-package-data": "2.4.0",
-        "object-assign": "4.1.1",
-        "read-pkg-up": "1.0.1",
-        "redent": "1.0.0",
-        "trim-newlines": "1.0.0"
+        "camelcase-keys": "^2.0.0",
+        "decamelize": "^1.1.2",
+        "loud-rejection": "^1.0.0",
+        "map-obj": "^1.0.1",
+        "minimist": "^1.1.3",
+        "normalize-package-data": "^2.3.4",
+        "object-assign": "^4.0.1",
+        "read-pkg-up": "^1.0.1",
+        "redent": "^1.0.0",
+        "trim-newlines": "^1.0.0"
       },
       "dependencies": {
         "minimist": {
       "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=",
       "dev": true
     },
+    "method-override": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npm.taobao.org/method-override/download/method-override-3.0.0.tgz",
+      "integrity": "sha1-arDV1XTjII8VsMnPRatSAARo16I=",
+      "dev": true,
+      "requires": {
+        "debug": "3.1.0",
+        "methods": "~1.1.2",
+        "parseurl": "~1.3.2",
+        "vary": "~1.1.2"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "3.1.0",
+          "resolved": "http://registry.npm.taobao.org/debug/download/debug-3.1.0.tgz",
+          "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=",
+          "dev": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        }
+      }
+    },
     "methods": {
       "version": "1.1.2",
       "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
       "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
       "dev": true,
       "requires": {
-        "arr-diff": "2.0.0",
-        "array-unique": "0.2.1",
-        "braces": "1.8.5",
-        "expand-brackets": "0.1.5",
-        "extglob": "0.3.2",
-        "filename-regex": "2.0.1",
-        "is-extglob": "1.0.0",
-        "is-glob": "2.0.1",
-        "kind-of": "3.2.2",
-        "normalize-path": "2.1.1",
-        "object.omit": "2.0.1",
-        "parse-glob": "3.0.4",
-        "regex-cache": "0.4.4"
+        "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"
       }
     },
     "miller-rabin": {
       "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
       "dev": true,
       "requires": {
-        "bn.js": "4.11.8",
-        "brorand": "1.1.0"
+        "bn.js": "^4.0.0",
+        "brorand": "^1.0.1"
       }
     },
     "mime": {
       "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==",
       "dev": true,
       "requires": {
-        "mime-db": "1.37.0"
+        "mime-db": "~1.37.0"
       }
     },
     "mimic-fn": {
       "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==",
       "dev": true
     },
+    "mimic-response": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/mimic-response/download/mimic-response-1.0.1.tgz",
+      "integrity": "sha1-SSNTiHju9CBjy4o+OweYeBSHqxs=",
+      "dev": true
+    },
     "minimalistic-assert": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
       "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
       "dev": true,
       "requires": {
-        "brace-expansion": "1.1.11"
+        "brace-expansion": "^1.1.7"
       }
     },
     "minimist": {
       "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==",
       "dev": true,
       "requires": {
-        "concat-stream": "1.6.2",
-        "duplexify": "3.6.1",
-        "end-of-stream": "1.4.1",
-        "flush-write-stream": "1.0.3",
-        "from2": "2.3.0",
-        "parallel-transform": "1.1.0",
-        "pump": "2.0.1",
-        "pumpify": "1.5.1",
-        "stream-each": "1.2.3",
-        "through2": "2.0.3"
+        "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"
       }
     },
     "mixin-deep": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz",
-      "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==",
+      "version": "1.3.2",
+      "resolved": "https://registry.npm.taobao.org/mixin-deep/download/mixin-deep-1.3.2.tgz?cache=0&sync_timestamp=1561409514276&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmixin-deep%2Fdownload%2Fmixin-deep-1.3.2.tgz",
+      "integrity": "sha1-ESC0PcNZp4Xc5ltVuC4lfM9HlWY=",
       "dev": true,
       "requires": {
-        "for-in": "1.0.2",
-        "is-extendable": "1.0.1"
+        "for-in": "^1.0.2",
+        "is-extendable": "^1.0.1"
       },
       "dependencies": {
         "is-extendable": {
           "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
-          "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+          "resolved": "http://registry.npm.taobao.org/is-extendable/download/is-extendable-1.0.1.tgz",
+          "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=",
           "dev": true,
           "requires": {
-            "is-plain-object": "2.0.4"
+            "is-plain-object": "^2.0.4"
           }
         }
       }
       "integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=",
       "dev": true,
       "requires": {
-        "for-in": "0.1.8",
-        "is-extendable": "0.1.1"
+        "for-in": "^0.1.3",
+        "is-extendable": "^0.1.1"
       },
       "dependencies": {
         "for-in": {
         "minimist": "0.0.8"
       }
     },
+    "morgan": {
+      "version": "1.9.1",
+      "resolved": "https://registry.npm.taobao.org/morgan/download/morgan-1.9.1.tgz",
+      "integrity": "sha1-Co0Wc0odmvvIJLmd+H5zjlji2lk=",
+      "dev": true,
+      "requires": {
+        "basic-auth": "~2.0.0",
+        "debug": "2.6.9",
+        "depd": "~1.1.2",
+        "on-finished": "~2.3.0",
+        "on-headers": "~1.0.1"
+      }
+    },
     "move-concurrently": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz",
       "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=",
       "dev": true,
       "requires": {
-        "aproba": "1.2.0",
-        "copy-concurrently": "1.0.5",
-        "fs-write-stream-atomic": "1.0.10",
-        "mkdirp": "0.5.1",
-        "rimraf": "2.6.2",
-        "run-queue": "1.0.3"
+        "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": {
       "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==",
       "dev": true,
       "requires": {
-        "dns-packet": "1.3.1",
-        "thunky": "1.0.3"
+        "dns-packet": "^1.3.1",
+        "thunky": "^1.0.2"
       }
     },
     "multicast-dns-service-types": {
       "dev": true,
       "optional": true
     },
+    "nanoid": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npm.taobao.org/nanoid/download/nanoid-2.0.3.tgz",
+      "integrity": "sha1-3emZ4XO8nXvS7idGuJkJremOB14=",
+      "dev": true
+    },
     "nanomatch": {
       "version": "1.2.13",
       "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
       "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
       "dev": true,
       "requires": {
-        "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.2",
-        "snapdragon": "0.8.2",
-        "to-regex": "3.0.2"
+        "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"
       },
       "dependencies": {
         "arr-diff": {
       "resolved": "https://registry.npmjs.org/ng-zorro-antd/-/ng-zorro-antd-0.7.1.tgz",
       "integrity": "sha512-GqeQ8BqOVu3ubKtavYsFti5niRKQwNgz6tMeULmKZdJAwS/ylAsDDmx5AB0bGLv4CrIgto9fUolRyxR8+dLYVw==",
       "requires": {
-        "@angular/cdk": "5.2.5",
-        "date-fns": "1.29.0"
+        "@angular/cdk": "^5.0.0",
+        "date-fns": "^1.29.0"
       }
     },
     "ngx-echarts": {
       "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==",
       "dev": true,
       "requires": {
-        "lower-case": "1.1.4"
+        "lower-case": "^1.1.1"
       }
     },
     "node-forge": {
       "dev": true,
       "optional": true,
       "requires": {
-        "fstream": "1.0.11",
-        "glob": "7.1.3",
-        "graceful-fs": "4.1.11",
-        "mkdirp": "0.5.1",
-        "nopt": "3.0.6",
-        "npmlog": "4.1.2",
-        "osenv": "0.1.5",
-        "request": "2.88.0",
-        "rimraf": "2.6.2",
-        "semver": "5.3.0",
-        "tar": "2.2.1",
-        "which": "1.3.1"
+        "fstream": "^1.0.0",
+        "glob": "^7.0.3",
+        "graceful-fs": "^4.1.2",
+        "mkdirp": "^0.5.0",
+        "nopt": "2 || 3",
+        "npmlog": "0 || 1 || 2 || 3 || 4",
+        "osenv": "0",
+        "request": "^2.87.0",
+        "rimraf": "2",
+        "semver": "~5.3.0",
+        "tar": "^2.0.0",
+        "which": "1"
       },
       "dependencies": {
         "ajv": {
           "dev": true,
           "optional": true,
           "requires": {
-            "co": "4.6.0",
-            "fast-deep-equal": "1.1.0",
-            "fast-json-stable-stringify": "2.0.0",
-            "json-schema-traverse": "0.3.1"
+            "co": "^4.6.0",
+            "fast-deep-equal": "^1.0.0",
+            "fast-json-stable-stringify": "^2.0.0",
+            "json-schema-traverse": "^0.3.0"
           }
         },
         "assert-plus": {
           "dev": true,
           "optional": true,
           "requires": {
-            "asynckit": "0.4.0",
-            "combined-stream": "1.0.7",
-            "mime-types": "2.1.21"
+            "asynckit": "^0.4.0",
+            "combined-stream": "^1.0.6",
+            "mime-types": "^2.1.12"
           }
         },
         "har-schema": {
           "dev": true,
           "optional": true,
           "requires": {
-            "ajv": "5.5.2",
-            "har-schema": "2.0.0"
+            "ajv": "^5.3.0",
+            "har-schema": "^2.0.0"
           }
         },
         "http-signature": {
           "dev": true,
           "optional": true,
           "requires": {
-            "assert-plus": "1.0.0",
-            "jsprim": "1.4.1",
-            "sshpk": "1.15.1"
+            "assert-plus": "^1.0.0",
+            "jsprim": "^1.2.2",
+            "sshpk": "^1.7.0"
           }
         },
         "nopt": {
           "dev": true,
           "optional": true,
           "requires": {
-            "abbrev": "1.1.1"
+            "abbrev": "1"
           }
         },
         "oauth-sign": {
           "dev": true,
           "optional": true,
           "requires": {
-            "aws-sign2": "0.7.0",
-            "aws4": "1.8.0",
-            "caseless": "0.12.0",
-            "combined-stream": "1.0.7",
-            "extend": "3.0.2",
-            "forever-agent": "0.6.1",
-            "form-data": "2.3.3",
-            "har-validator": "5.1.0",
-            "http-signature": "1.2.0",
-            "is-typedarray": "1.0.0",
-            "isstream": "0.1.2",
-            "json-stringify-safe": "5.0.1",
-            "mime-types": "2.1.21",
-            "oauth-sign": "0.9.0",
-            "performance-now": "2.1.0",
-            "qs": "6.5.2",
-            "safe-buffer": "5.1.2",
-            "tough-cookie": "2.4.3",
-            "tunnel-agent": "0.6.0",
-            "uuid": "3.3.2"
+            "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.0",
+            "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.4.3",
+            "tunnel-agent": "^0.6.0",
+            "uuid": "^3.3.2"
           }
         },
         "semver": {
           "dev": true,
           "optional": true,
           "requires": {
-            "psl": "1.1.29",
-            "punycode": "1.4.1"
+            "psl": "^1.1.24",
+            "punycode": "^1.4.1"
           }
         }
       }
       "integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==",
       "dev": true,
       "requires": {
-        "assert": "1.4.1",
-        "browserify-zlib": "0.2.0",
-        "buffer": "4.9.1",
-        "console-browserify": "1.1.0",
-        "constants-browserify": "1.0.0",
-        "crypto-browserify": "3.12.0",
-        "domain-browser": "1.2.0",
-        "events": "1.1.1",
-        "https-browserify": "1.0.0",
-        "os-browserify": "0.3.0",
+        "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": "^1.0.0",
+        "https-browserify": "^1.0.0",
+        "os-browserify": "^0.3.0",
         "path-browserify": "0.0.0",
-        "process": "0.11.10",
-        "punycode": "1.4.1",
-        "querystring-es3": "0.2.1",
-        "readable-stream": "2.3.6",
-        "stream-browserify": "2.0.1",
-        "stream-http": "2.8.3",
-        "string_decoder": "1.1.1",
-        "timers-browserify": "2.0.10",
+        "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.10.4",
+        "url": "^0.11.0",
+        "util": "^0.10.3",
         "vm-browserify": "0.0.4"
       },
       "dependencies": {
       "dev": true,
       "optional": true,
       "requires": {
-        "async-foreach": "0.1.3",
-        "chalk": "1.1.3",
-        "cross-spawn": "3.0.1",
-        "gaze": "1.1.3",
-        "get-stdin": "4.0.1",
-        "glob": "7.1.3",
-        "in-publish": "2.0.0",
-        "lodash.assign": "4.2.0",
-        "lodash.clonedeep": "4.5.0",
-        "lodash.mergewith": "4.6.1",
-        "meow": "3.7.0",
-        "mkdirp": "0.5.1",
-        "nan": "2.11.1",
-        "node-gyp": "3.8.0",
-        "npmlog": "4.1.2",
-        "request": "2.88.0",
-        "sass-graph": "2.2.4",
-        "stdout-stream": "1.4.1",
-        "true-case-path": "1.0.3"
+        "async-foreach": "^0.1.3",
+        "chalk": "^1.1.1",
+        "cross-spawn": "^3.0.0",
+        "gaze": "^1.0.0",
+        "get-stdin": "^4.0.1",
+        "glob": "^7.0.3",
+        "in-publish": "^2.0.0",
+        "lodash.assign": "^4.2.0",
+        "lodash.clonedeep": "^4.3.2",
+        "lodash.mergewith": "^4.6.0",
+        "meow": "^3.7.0",
+        "mkdirp": "^0.5.1",
+        "nan": "^2.10.0",
+        "node-gyp": "^3.8.0",
+        "npmlog": "^4.0.0",
+        "request": "^2.88.0",
+        "sass-graph": "^2.2.4",
+        "stdout-stream": "^1.4.0",
+        "true-case-path": "^1.0.2"
       },
       "dependencies": {
         "ajv": {
           "dev": true,
           "optional": true,
           "requires": {
-            "co": "4.6.0",
-            "fast-deep-equal": "1.1.0",
-            "fast-json-stable-stringify": "2.0.0",
-            "json-schema-traverse": "0.3.1"
+            "co": "^4.6.0",
+            "fast-deep-equal": "^1.0.0",
+            "fast-json-stable-stringify": "^2.0.0",
+            "json-schema-traverse": "^0.3.0"
           }
         },
         "ansi-styles": {
           "dev": true,
           "optional": true,
           "requires": {
-            "ansi-styles": "2.2.1",
-            "escape-string-regexp": "1.0.5",
-            "has-ansi": "2.0.0",
-            "strip-ansi": "3.0.1",
-            "supports-color": "2.0.0"
+            "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"
           }
         },
         "form-data": {
           "dev": true,
           "optional": true,
           "requires": {
-            "asynckit": "0.4.0",
-            "combined-stream": "1.0.7",
-            "mime-types": "2.1.21"
+            "asynckit": "^0.4.0",
+            "combined-stream": "^1.0.6",
+            "mime-types": "^2.1.12"
           }
         },
         "har-schema": {
           "dev": true,
           "optional": true,
           "requires": {
-            "ajv": "5.5.2",
-            "har-schema": "2.0.0"
+            "ajv": "^5.3.0",
+            "har-schema": "^2.0.0"
           }
         },
         "http-signature": {
           "dev": true,
           "optional": true,
           "requires": {
-            "assert-plus": "1.0.0",
-            "jsprim": "1.4.1",
-            "sshpk": "1.15.1"
+            "assert-plus": "^1.0.0",
+            "jsprim": "^1.2.2",
+            "sshpk": "^1.7.0"
           }
         },
         "oauth-sign": {
           "dev": true,
           "optional": true,
           "requires": {
-            "aws-sign2": "0.7.0",
-            "aws4": "1.8.0",
-            "caseless": "0.12.0",
-            "combined-stream": "1.0.7",
-            "extend": "3.0.2",
-            "forever-agent": "0.6.1",
-            "form-data": "2.3.3",
-            "har-validator": "5.1.0",
-            "http-signature": "1.2.0",
-            "is-typedarray": "1.0.0",
-            "isstream": "0.1.2",
-            "json-stringify-safe": "5.0.1",
-            "mime-types": "2.1.21",
-            "oauth-sign": "0.9.0",
-            "performance-now": "2.1.0",
-            "qs": "6.5.2",
-            "safe-buffer": "5.1.2",
-            "tough-cookie": "2.4.3",
-            "tunnel-agent": "0.6.0",
-            "uuid": "3.3.2"
+            "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.0",
+            "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.4.3",
+            "tunnel-agent": "^0.6.0",
+            "uuid": "^3.3.2"
           }
         },
         "supports-color": {
           "dev": true,
           "optional": true,
           "requires": {
-            "psl": "1.1.29",
-            "punycode": "1.4.1"
+            "psl": "^1.1.24",
+            "punycode": "^1.4.1"
           }
         }
       }
           "dev": true,
           "optional": true,
           "requires": {
-            "ip": "1.1.5",
-            "smart-buffer": "1.1.15"
+            "ip": "^1.1.2",
+            "smart-buffer": "^1.0.4"
           }
         }
       }
       "version": "1.6.0",
       "resolved": "https://registry.npmjs.org/nodemailer-fetch/-/nodemailer-fetch-1.6.0.tgz",
       "integrity": "sha1-ecSQihwPXzdbc/6IjamCj23JY6Q=",
-      "dev": true
+      "dev": true,
+      "optional": true
     },
     "nodemailer-shared": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/nodemailer-shared/-/nodemailer-shared-1.1.0.tgz",
       "integrity": "sha1-z1mU4v0mjQD1zw+nZ6CBae2wfsA=",
       "dev": true,
+      "optional": true,
       "requires": {
         "nodemailer-fetch": "1.6.0"
       }
       "version": "0.1.10",
       "resolved": "https://registry.npmjs.org/nodemailer-wellknown/-/nodemailer-wellknown-0.1.10.tgz",
       "integrity": "sha1-WG24EB2zDLRDjrVGc3pBqtDPE9U=",
-      "dev": true
+      "dev": true,
+      "optional": true
     },
     "nopt": {
       "version": "4.0.1",
       "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=",
       "dev": true,
       "requires": {
-        "abbrev": "1.1.1",
-        "osenv": "0.1.5"
+        "abbrev": "1",
+        "osenv": "^0.1.4"
       }
     },
     "normalize-package-data": {
       "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==",
       "dev": true,
       "requires": {
-        "hosted-git-info": "2.7.1",
-        "is-builtin-module": "1.0.0",
-        "semver": "5.6.0",
-        "validate-npm-package-license": "3.0.4"
+        "hosted-git-info": "^2.1.4",
+        "is-builtin-module": "^1.0.0",
+        "semver": "2 || 3 || 4 || 5",
+        "validate-npm-package-license": "^3.0.1"
       }
     },
     "normalize-path": {
       "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
       "dev": true,
       "requires": {
-        "remove-trailing-separator": "1.1.0"
+        "remove-trailing-separator": "^1.0.1"
       }
     },
     "normalize-range": {
       "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=",
       "dev": true
     },
+    "normalize-url": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npm.taobao.org/normalize-url/download/normalize-url-4.3.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnormalize-url%2Fdownload%2Fnormalize-url-4.3.0.tgz",
+      "integrity": "sha1-nEnhD8GHaut226iL8bK12fpXsu4=",
+      "dev": true
+    },
     "npm-run-path": {
       "version": "2.0.2",
       "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
       "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
       "dev": true,
       "requires": {
-        "path-key": "2.0.1"
+        "path-key": "^2.0.0"
       }
     },
     "npmlog": {
       "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
       "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
       "dev": true,
+      "optional": true,
       "requires": {
-        "are-we-there-yet": "1.1.5",
-        "console-control-strings": "1.1.0",
-        "gauge": "2.7.4",
-        "set-blocking": "2.0.0"
+        "are-we-there-yet": "~1.1.2",
+        "console-control-strings": "~1.1.0",
+        "gauge": "~2.7.3",
+        "set-blocking": "~2.0.0"
       }
     },
     "nth-check": {
       "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==",
       "dev": true,
       "requires": {
-        "boolbase": "1.0.0"
+        "boolbase": "~1.0.0"
       }
     },
     "null-check": {
       "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
       "dev": true,
       "requires": {
-        "copy-descriptor": "0.1.1",
-        "define-property": "0.2.5",
-        "kind-of": "3.2.2"
+        "copy-descriptor": "^0.1.0",
+        "define-property": "^0.2.5",
+        "kind-of": "^3.0.3"
       },
       "dependencies": {
         "define-property": {
           "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
           "dev": true,
           "requires": {
-            "is-descriptor": "0.1.6"
+            "is-descriptor": "^0.1.0"
           }
         }
       }
       "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
       "dev": true,
       "requires": {
-        "isobject": "3.0.1"
+        "isobject": "^3.0.0"
       },
       "dependencies": {
         "isobject": {
       "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=",
       "dev": true,
       "requires": {
-        "for-own": "0.1.5",
-        "is-extendable": "0.1.1"
+        "for-own": "^0.1.4",
+        "is-extendable": "^0.1.1"
       }
     },
     "object.pick": {
       "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
       "dev": true,
       "requires": {
-        "isobject": "3.0.1"
+        "isobject": "^3.0.1"
       },
       "dependencies": {
         "isobject": {
       "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
       "dev": true,
       "requires": {
-        "wrappy": "1.0.2"
+        "wrappy": "1"
       }
     },
     "opn": {
       "integrity": "sha512-iPNl7SyM8L30Rm1sjGdLLheyHVw5YXVfi3SKWJzBI7efxRwHojfRFjwE/OLM6qp9xJYMgab8WicTU1cPoY+Hpg==",
       "dev": true,
       "requires": {
-        "is-wsl": "1.1.0"
+        "is-wsl": "^1.1.0"
       }
     },
     "optimist": {
       "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
       "dev": true,
       "requires": {
-        "minimist": "0.0.8",
-        "wordwrap": "0.0.2"
+        "minimist": "~0.0.1",
+        "wordwrap": "~0.0.2"
       }
     },
     "optionator": {
       "dev": true,
       "optional": true,
       "requires": {
-        "deep-is": "0.1.3",
-        "fast-levenshtein": "2.0.6",
-        "levn": "0.3.0",
-        "prelude-ls": "1.1.2",
-        "type-check": "0.3.2",
-        "wordwrap": "1.0.0"
+        "deep-is": "~0.1.3",
+        "fast-levenshtein": "~2.0.4",
+        "levn": "~0.3.0",
+        "prelude-ls": "~1.1.2",
+        "type-check": "~0.3.2",
+        "wordwrap": "~1.0.0"
       },
       "dependencies": {
         "wordwrap": {
       "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==",
       "dev": true,
       "requires": {
-        "url-parse": "1.4.3"
+        "url-parse": "^1.4.3"
       }
     },
     "os-browserify": {
       "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=",
       "dev": true,
       "requires": {
-        "lcid": "1.0.0"
+        "lcid": "^1.0.0"
       }
     },
     "os-tmpdir": {
       "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
       "dev": true,
       "requires": {
-        "os-homedir": "1.0.2",
-        "os-tmpdir": "1.0.2"
+        "os-homedir": "^1.0.0",
+        "os-tmpdir": "^1.0.0"
       }
     },
+    "p-cancelable": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npm.taobao.org/p-cancelable/download/p-cancelable-1.1.0.tgz",
+      "integrity": "sha1-0HjRWjr0CSIMiG8dmgyi5EGrJsw=",
+      "dev": true
+    },
     "p-finally": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
       "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
       "dev": true,
       "requires": {
-        "p-try": "1.0.0"
+        "p-try": "^1.0.0"
       }
     },
     "p-locate": {
       "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
       "dev": true,
       "requires": {
-        "p-limit": "1.3.0"
+        "p-limit": "^1.1.0"
       }
     },
     "p-map": {
       "dev": true,
       "optional": true,
       "requires": {
-        "agent-base": "4.2.1",
-        "debug": "3.2.6",
-        "get-uri": "2.0.2",
-        "http-proxy-agent": "2.1.0",
-        "https-proxy-agent": "2.2.1",
-        "pac-resolver": "3.0.0",
-        "raw-body": "2.3.3",
-        "socks-proxy-agent": "4.0.1"
+        "agent-base": "^4.2.0",
+        "debug": "^3.1.0",
+        "get-uri": "^2.0.0",
+        "http-proxy-agent": "^2.1.0",
+        "https-proxy-agent": "^2.2.1",
+        "pac-resolver": "^3.0.0",
+        "raw-body": "^2.2.0",
+        "socks-proxy-agent": "^4.0.1"
       },
       "dependencies": {
         "debug": {
           "dev": true,
           "optional": true,
           "requires": {
-            "ms": "2.1.1"
+            "ms": "^2.1.1"
           }
         },
         "ms": {
       "dev": true,
       "optional": true,
       "requires": {
-        "co": "4.6.0",
-        "degenerator": "1.0.4",
-        "ip": "1.1.5",
-        "netmask": "1.0.6",
-        "thunkify": "2.1.2"
+        "co": "^4.6.0",
+        "degenerator": "^1.0.4",
+        "ip": "^1.1.5",
+        "netmask": "^1.0.6",
+        "thunkify": "^2.1.2"
+      }
+    },
+    "package-json": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npm.taobao.org/package-json/download/package-json-6.5.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpackage-json%2Fdownload%2Fpackage-json-6.5.0.tgz",
+      "integrity": "sha1-b+7ayjXnVyWHbQsOZJdGl/7RRbA=",
+      "dev": true,
+      "requires": {
+        "got": "^9.6.0",
+        "registry-auth-token": "^4.0.0",
+        "registry-url": "^5.0.0",
+        "semver": "^6.2.0"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "6.3.0",
+          "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1565627367398&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz",
+          "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=",
+          "dev": true
+        }
       }
     },
     "pako": {
       "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=",
       "dev": true,
       "requires": {
-        "cyclist": "0.2.2",
-        "inherits": "2.0.3",
-        "readable-stream": "2.3.6"
+        "cyclist": "~0.2.2",
+        "inherits": "^2.0.3",
+        "readable-stream": "^2.1.5"
       }
     },
     "param-case": {
       "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=",
       "dev": true,
       "requires": {
-        "no-case": "2.3.2"
+        "no-case": "^2.2.0"
       }
     },
     "parse-asn1": {
       "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==",
       "dev": true,
       "requires": {
-        "asn1.js": "4.10.1",
-        "browserify-aes": "1.2.0",
-        "create-hash": "1.2.0",
-        "evp_bytestokey": "1.0.3",
-        "pbkdf2": "3.0.17"
+        "asn1.js": "^4.0.0",
+        "browserify-aes": "^1.0.0",
+        "create-hash": "^1.1.0",
+        "evp_bytestokey": "^1.0.0",
+        "pbkdf2": "^3.0.3"
       }
     },
     "parse-glob": {
       "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=",
       "dev": true,
       "requires": {
-        "glob-base": "0.3.0",
-        "is-dotfile": "1.0.3",
-        "is-extglob": "1.0.0",
-        "is-glob": "2.0.1"
+        "glob-base": "^0.3.0",
+        "is-dotfile": "^1.0.0",
+        "is-extglob": "^1.0.0",
+        "is-glob": "^2.0.0"
       }
     },
     "parse-json": {
       "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
       "dev": true,
       "requires": {
-        "error-ex": "1.3.2"
+        "error-ex": "^1.2.0"
       }
     },
     "parse-passwd": {
       "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=",
       "dev": true,
       "requires": {
-        "better-assert": "1.0.2"
+        "better-assert": "~1.0.0"
       }
     },
     "parseuri": {
       "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=",
       "dev": true,
       "requires": {
-        "better-assert": "1.0.2"
+        "better-assert": "~1.0.0"
       }
     },
     "parseurl": {
       "dev": true,
       "optional": true,
       "requires": {
-        "inflection": "1.3.8"
+        "inflection": "~1.3.0"
       },
       "dependencies": {
         "inflection": {
       "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
       "dev": true,
       "requires": {
-        "pify": "3.0.0"
+        "pify": "^3.0.0"
       }
     },
     "pbkdf2": {
       "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==",
       "dev": true,
       "requires": {
-        "create-hash": "1.2.0",
-        "create-hmac": "1.1.7",
-        "ripemd160": "2.0.2",
-        "safe-buffer": "5.1.2",
-        "sha.js": "2.4.11"
+        "create-hash": "^1.1.2",
+        "create-hmac": "^1.1.4",
+        "ripemd160": "^2.0.1",
+        "safe-buffer": "^5.0.1",
+        "sha.js": "^2.4.8"
       }
     },
     "performance-now": {
       "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
       "dev": true,
       "requires": {
-        "pinkie": "2.0.4"
+        "pinkie": "^2.0.0"
       }
     },
     "pkg-dir": {
       "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=",
       "dev": true,
       "requires": {
-        "find-up": "2.1.0"
+        "find-up": "^2.1.0"
+      }
+    },
+    "please-upgrade-node": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npm.taobao.org/please-upgrade-node/download/please-upgrade-node-3.2.0.tgz",
+      "integrity": "sha1-rt3T+ZTJM+StmLmdmlVu+g4v6UI=",
+      "dev": true,
+      "requires": {
+        "semver-compare": "^1.0.0"
       }
     },
+    "pluralize": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npm.taobao.org/pluralize/download/pluralize-7.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpluralize%2Fdownload%2Fpluralize-7.0.0.tgz",
+      "integrity": "sha1-KYuJ34uTsCIdv0Ia0rGx6iP8Z3c=",
+      "dev": true
+    },
     "portfinder": {
       "version": "1.0.18",
       "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.18.tgz",
       "integrity": "sha512-KanzLOERzKoX3En5yTiV8K/arnU1ykYVokmtEn0PgCzqKZG9489tqW8ifp9+v3/VJZ5YDjvDt/PAP5WaPgk7FA==",
       "dev": true,
       "requires": {
-        "async": "1.5.2",
-        "debug": "2.6.9",
-        "mkdirp": "0.5.1"
+        "async": "^1.5.2",
+        "debug": "^2.2.0",
+        "mkdirp": "0.5.x"
       },
       "dependencies": {
         "async": {
       "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
       "dev": true,
       "requires": {
-        "chalk": "2.4.1",
-        "source-map": "0.6.1",
-        "supports-color": "5.5.0"
+        "chalk": "^2.4.1",
+        "source-map": "^0.6.1",
+        "supports-color": "^5.4.0"
       },
       "dependencies": {
         "chalk": {
           "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
           "dev": true,
           "requires": {
-            "ansi-styles": "3.2.1",
-            "escape-string-regexp": "1.0.5",
-            "supports-color": "5.5.0"
+            "ansi-styles": "^3.2.1",
+            "escape-string-regexp": "^1.0.5",
+            "supports-color": "^5.3.0"
           }
         },
         "has-flag": {
           "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
           "dev": true,
           "requires": {
-            "has-flag": "3.0.0"
+            "has-flag": "^3.0.0"
           }
         }
       }
       "integrity": "sha512-5l327iI75POonjxkXgdRCUS+AlzAdBx4pOvMEhTKTCjb1p8IEeVR9yx3cPbmN7LIWJLbfnIXxAhoB4jpD0c/Cw==",
       "dev": true,
       "requires": {
-        "postcss": "6.0.23",
-        "postcss-value-parser": "3.3.1",
-        "read-cache": "1.0.0",
-        "resolve": "1.8.1"
+        "postcss": "^6.0.1",
+        "postcss-value-parser": "^3.2.3",
+        "read-cache": "^1.0.0",
+        "resolve": "^1.1.7"
       }
     },
     "postcss-load-config": {
       "integrity": "sha512-V5JBLzw406BB8UIfsAWSK2KSwIJ5yoEIVFb4gVkXci0QdKgA24jLmHZ/ghe/GgX0lJ0/D1uUK1ejhzEY94MChQ==",
       "dev": true,
       "requires": {
-        "cosmiconfig": "4.0.0",
-        "import-cwd": "2.1.0"
+        "cosmiconfig": "^4.0.0",
+        "import-cwd": "^2.0.0"
       }
     },
     "postcss-loader": {
       "integrity": "sha512-hgiWSc13xVQAq25cVw80CH0l49ZKlAnU1hKPOdRrNj89bokRr/bZF2nT+hebPPF9c9xs8c3gw3Fr2nxtmXYnNg==",
       "dev": true,
       "requires": {
-        "loader-utils": "1.1.0",
-        "postcss": "6.0.23",
-        "postcss-load-config": "2.0.0",
-        "schema-utils": "0.4.7"
+        "loader-utils": "^1.1.0",
+        "postcss": "^6.0.0",
+        "postcss-load-config": "^2.0.0",
+        "schema-utils": "^0.4.0"
       }
     },
     "postcss-url": {
       "integrity": "sha512-QMV5mA+pCYZQcUEPQkmor9vcPQ2MT+Ipuu8qdi1gVxbNiIiErEGft+eny1ak19qALoBkccS5AHaCaCDzh7b9MA==",
       "dev": true,
       "requires": {
-        "mime": "1.6.0",
-        "minimatch": "3.0.4",
-        "mkdirp": "0.5.1",
-        "postcss": "6.0.23",
-        "xxhashjs": "0.2.2"
+        "mime": "^1.4.1",
+        "minimatch": "^3.0.4",
+        "mkdirp": "^0.5.0",
+        "postcss": "^6.0.1",
+        "xxhashjs": "^0.2.1"
       }
     },
     "postcss-value-parser": {
       "version": "1.1.2",
       "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
       "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+      "dev": true,
+      "optional": true
+    },
+    "prepend-http": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npm.taobao.org/prepend-http/download/prepend-http-2.0.0.tgz",
+      "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=",
       "dev": true
     },
     "preserve": {
       "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=",
       "dev": true,
       "requires": {
-        "renderkid": "2.0.2",
-        "utila": "0.4.0"
+        "renderkid": "^2.0.1",
+        "utila": "~0.4"
       }
     },
     "process": {
       "dev": true,
       "optional": true,
       "requires": {
-        "asap": "2.0.6"
+        "asap": "~2.0.3"
       }
     },
     "promise-inflight": {
       "dev": true,
       "optional": true,
       "requires": {
-        "with-callback": "1.0.2"
+        "with-callback": "^1.0.2"
       }
     },
     "protractor": {
       "integrity": "sha1-myIXQXCaTGLVzVPGqt1UpxE36V8=",
       "dev": true,
       "requires": {
-        "@types/node": "6.0.118",
-        "@types/q": "0.0.32",
-        "@types/selenium-webdriver": "2.53.43",
+        "@types/node": "^6.0.46",
+        "@types/q": "^0.0.32",
+        "@types/selenium-webdriver": "~2.53.39",
         "blocking-proxy": "0.0.5",
-        "chalk": "1.1.3",
-        "glob": "7.1.3",
-        "jasmine": "2.99.0",
-        "jasminewd2": "2.2.0",
-        "optimist": "0.6.1",
+        "chalk": "^1.1.3",
+        "glob": "^7.0.3",
+        "jasmine": "^2.5.3",
+        "jasminewd2": "^2.1.0",
+        "optimist": "~0.6.0",
         "q": "1.4.1",
-        "saucelabs": "1.3.0",
+        "saucelabs": "~1.3.0",
         "selenium-webdriver": "3.0.1",
-        "source-map-support": "0.4.18",
-        "webdriver-js-extender": "1.0.0",
-        "webdriver-manager": "12.1.0"
+        "source-map-support": "~0.4.0",
+        "webdriver-js-extender": "^1.0.0",
+        "webdriver-manager": "^12.0.6"
       },
       "dependencies": {
         "ajv": {
           "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
           "dev": true,
           "requires": {
-            "co": "4.6.0",
-            "fast-deep-equal": "1.1.0",
-            "fast-json-stable-stringify": "2.0.0",
-            "json-schema-traverse": "0.3.1"
+            "co": "^4.6.0",
+            "fast-deep-equal": "^1.0.0",
+            "fast-json-stable-stringify": "^2.0.0",
+            "json-schema-traverse": "^0.3.0"
           }
         },
         "ansi-styles": {
           "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
           "dev": true,
           "requires": {
-            "ansi-styles": "2.2.1",
-            "escape-string-regexp": "1.0.5",
-            "has-ansi": "2.0.0",
-            "strip-ansi": "3.0.1",
-            "supports-color": "2.0.0"
+            "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"
           }
         },
         "del": {
           "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=",
           "dev": true,
           "requires": {
-            "globby": "5.0.0",
-            "is-path-cwd": "1.0.0",
-            "is-path-in-cwd": "1.0.1",
-            "object-assign": "4.1.1",
-            "pify": "2.3.0",
-            "pinkie-promise": "2.0.1",
-            "rimraf": "2.6.2"
+            "globby": "^5.0.0",
+            "is-path-cwd": "^1.0.0",
+            "is-path-in-cwd": "^1.0.0",
+            "object-assign": "^4.0.1",
+            "pify": "^2.0.0",
+            "pinkie-promise": "^2.0.0",
+            "rimraf": "^2.2.8"
           }
         },
         "form-data": {
           "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
           "dev": true,
           "requires": {
-            "asynckit": "0.4.0",
-            "combined-stream": "1.0.7",
-            "mime-types": "2.1.21"
+            "asynckit": "^0.4.0",
+            "combined-stream": "^1.0.6",
+            "mime-types": "^2.1.12"
           }
         },
         "globby": {
           "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=",
           "dev": true,
           "requires": {
-            "array-union": "1.0.2",
-            "arrify": "1.0.1",
-            "glob": "7.1.3",
-            "object-assign": "4.1.1",
-            "pify": "2.3.0",
-            "pinkie-promise": "2.0.1"
+            "array-union": "^1.0.1",
+            "arrify": "^1.0.0",
+            "glob": "^7.0.3",
+            "object-assign": "^4.0.1",
+            "pify": "^2.0.0",
+            "pinkie-promise": "^2.0.0"
           }
         },
         "har-schema": {
           "integrity": "sha512-+qnmNjI4OfH2ipQ9VQOw23bBd/ibtfbVdK2fYbY4acTDqKTW/YDp9McimZdDbG8iV9fZizUqQMD5xvriB146TA==",
           "dev": true,
           "requires": {
-            "ajv": "5.5.2",
-            "har-schema": "2.0.0"
+            "ajv": "^5.3.0",
+            "har-schema": "^2.0.0"
           }
         },
         "http-signature": {
           "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
           "dev": true,
           "requires": {
-            "assert-plus": "1.0.0",
-            "jsprim": "1.4.1",
-            "sshpk": "1.15.1"
+            "assert-plus": "^1.0.0",
+            "jsprim": "^1.2.2",
+            "sshpk": "^1.7.0"
           }
         },
         "minimist": {
           "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==",
           "dev": true,
           "requires": {
-            "aws-sign2": "0.7.0",
-            "aws4": "1.8.0",
-            "caseless": "0.12.0",
-            "combined-stream": "1.0.7",
-            "extend": "3.0.2",
-            "forever-agent": "0.6.1",
-            "form-data": "2.3.3",
-            "har-validator": "5.1.0",
-            "http-signature": "1.2.0",
-            "is-typedarray": "1.0.0",
-            "isstream": "0.1.2",
-            "json-stringify-safe": "5.0.1",
-            "mime-types": "2.1.21",
-            "oauth-sign": "0.9.0",
-            "performance-now": "2.1.0",
-            "qs": "6.5.2",
-            "safe-buffer": "5.1.2",
-            "tough-cookie": "2.4.3",
-            "tunnel-agent": "0.6.0",
-            "uuid": "3.3.2"
+            "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.0",
+            "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.4.3",
+            "tunnel-agent": "^0.6.0",
+            "uuid": "^3.3.2"
           }
         },
         "supports-color": {
           "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",
           "dev": true,
           "requires": {
-            "psl": "1.1.29",
-            "punycode": "1.4.1"
+            "psl": "^1.1.24",
+            "punycode": "^1.4.1"
           }
         },
         "webdriver-manager": {
           "integrity": "sha512-oEc5fmkpz6Yh6udhwir5m0eN5mgRPq9P/NU5YWuT3Up5slt6Zz+znhLU7q4+8rwCZz/Qq3Fgpr/4oao7NPCm2A==",
           "dev": true,
           "requires": {
-            "adm-zip": "0.4.11",
-            "chalk": "1.1.3",
-            "del": "2.2.2",
-            "glob": "7.1.3",
-            "ini": "1.3.5",
-            "minimist": "1.2.0",
-            "q": "1.4.1",
-            "request": "2.88.0",
-            "rimraf": "2.6.2",
-            "semver": "5.6.0",
-            "xml2js": "0.4.19"
+            "adm-zip": "^0.4.9",
+            "chalk": "^1.1.1",
+            "del": "^2.2.0",
+            "glob": "^7.0.3",
+            "ini": "^1.3.4",
+            "minimist": "^1.2.0",
+            "q": "^1.4.1",
+            "request": "^2.87.0",
+            "rimraf": "^2.5.2",
+            "semver": "^5.3.0",
+            "xml2js": "^0.4.17"
           }
         }
       }
       "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==",
       "dev": true,
       "requires": {
-        "forwarded": "0.1.2",
+        "forwarded": "~0.1.2",
         "ipaddr.js": "1.8.0"
       }
     },
       "dev": true,
       "optional": true,
       "requires": {
-        "agent-base": "4.2.1",
-        "debug": "3.2.6",
-        "http-proxy-agent": "2.1.0",
-        "https-proxy-agent": "2.2.1",
-        "lru-cache": "4.1.3",
-        "pac-proxy-agent": "3.0.0",
-        "proxy-from-env": "1.0.0",
-        "socks-proxy-agent": "4.0.1"
+        "agent-base": "^4.2.0",
+        "debug": "^3.1.0",
+        "http-proxy-agent": "^2.1.0",
+        "https-proxy-agent": "^2.2.1",
+        "lru-cache": "^4.1.2",
+        "pac-proxy-agent": "^3.0.0",
+        "proxy-from-env": "^1.0.0",
+        "socks-proxy-agent": "^4.0.1"
       },
       "dependencies": {
         "debug": {
           "dev": true,
           "optional": true,
           "requires": {
-            "ms": "2.1.1"
+            "ms": "^2.1.1"
           }
         },
         "ms": {
       "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==",
       "dev": true,
       "requires": {
-        "bn.js": "4.11.8",
-        "browserify-rsa": "4.0.1",
-        "create-hash": "1.2.0",
-        "parse-asn1": "5.1.1",
-        "randombytes": "2.0.6",
-        "safe-buffer": "5.1.2"
+        "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": {
       "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
       "dev": true,
       "requires": {
-        "end-of-stream": "1.4.1",
-        "once": "1.4.0"
+        "end-of-stream": "^1.1.0",
+        "once": "^1.3.1"
       }
     },
     "pumpify": {
       "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==",
       "dev": true,
       "requires": {
-        "duplexify": "3.6.1",
-        "inherits": "2.0.3",
-        "pump": "2.0.1"
+        "duplexify": "^3.6.0",
+        "inherits": "^2.0.3",
+        "pump": "^2.0.0"
       }
     },
     "punycode": {
       "integrity": "sha512-KnGPVE0lo2WoXxIZ7cPR8YBpiol4gsSuOwDSg410oHh80ZMp5EiypNqL2K4Z77vJn6lB5rap7IkAmcUlalcnBQ==",
       "dev": true,
       "requires": {
-        "is-number": "4.0.0",
-        "kind-of": "6.0.2",
-        "math-random": "1.0.1"
+        "is-number": "^4.0.0",
+        "kind-of": "^6.0.0",
+        "math-random": "^1.0.1"
       },
       "dependencies": {
         "is-number": {
       "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==",
       "dev": true,
       "requires": {
-        "safe-buffer": "5.1.2"
+        "safe-buffer": "^5.1.0"
       }
     },
     "randomfill": {
       "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==",
       "dev": true,
       "requires": {
-        "randombytes": "2.0.6",
-        "safe-buffer": "5.1.2"
+        "randombytes": "^2.0.5",
+        "safe-buffer": "^5.1.0"
       }
     },
     "range-parser": {
       "integrity": "sha1-DD0L6u2KAclm2Xh793goElKpeao=",
       "dev": true
     },
+    "rc": {
+      "version": "1.2.8",
+      "resolved": "http://registry.npm.taobao.org/rc/download/rc-1.2.8.tgz",
+      "integrity": "sha1-zZJL9SAKB1uDwYjNa54hG3/A0+0=",
+      "dev": true,
+      "requires": {
+        "deep-extend": "^0.6.0",
+        "ini": "~1.3.0",
+        "minimist": "^1.2.0",
+        "strip-json-comments": "~2.0.1"
+      },
+      "dependencies": {
+        "minimist": {
+          "version": "1.2.0",
+          "resolved": "http://registry.npm.taobao.org/minimist/download/minimist-1.2.0.tgz",
+          "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+          "dev": true
+        }
+      }
+    },
     "read-cache": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
       "integrity": "sha1-5mTvMRYRZsl1HNvo28+GtftY93Q=",
       "dev": true,
       "requires": {
-        "pify": "2.3.0"
+        "pify": "^2.3.0"
       },
       "dependencies": {
         "pify": {
       "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
       "dev": true,
       "requires": {
-        "load-json-file": "1.1.0",
-        "normalize-package-data": "2.4.0",
-        "path-type": "1.1.0"
+        "load-json-file": "^1.0.0",
+        "normalize-package-data": "^2.3.2",
+        "path-type": "^1.0.0"
       },
       "dependencies": {
         "path-type": {
           "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
           "dev": true,
           "requires": {
-            "graceful-fs": "4.1.11",
-            "pify": "2.3.0",
-            "pinkie-promise": "2.0.1"
+            "graceful-fs": "^4.1.2",
+            "pify": "^2.0.0",
+            "pinkie-promise": "^2.0.0"
           }
         },
         "pify": {
       "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
       "dev": true,
       "requires": {
-        "find-up": "1.1.2",
-        "read-pkg": "1.1.0"
+        "find-up": "^1.0.0",
+        "read-pkg": "^1.0.0"
       },
       "dependencies": {
         "find-up": {
           "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
           "dev": true,
           "requires": {
-            "path-exists": "2.1.0",
-            "pinkie-promise": "2.0.1"
+            "path-exists": "^2.0.0",
+            "pinkie-promise": "^2.0.0"
           }
         },
         "path-exists": {
           "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
           "dev": true,
           "requires": {
-            "pinkie-promise": "2.0.1"
+            "pinkie-promise": "^2.0.0"
           }
         }
       }
       "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
       "dev": true,
       "requires": {
-        "core-util-is": "1.0.2",
-        "inherits": "2.0.3",
-        "isarray": "1.0.0",
-        "process-nextick-args": "2.0.0",
-        "safe-buffer": "5.1.2",
-        "string_decoder": "1.1.1",
-        "util-deprecate": "1.0.2"
+        "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"
       }
     },
     "readdirp": {
       "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
       "dev": true,
       "requires": {
-        "graceful-fs": "4.1.11",
-        "micromatch": "3.1.10",
-        "readable-stream": "2.3.6"
+        "graceful-fs": "^4.1.11",
+        "micromatch": "^3.1.10",
+        "readable-stream": "^2.0.2"
       },
       "dependencies": {
         "arr-diff": {
           "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
           "dev": true,
           "requires": {
-            "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.3",
-            "snapdragon": "0.8.2",
-            "snapdragon-node": "2.1.1",
-            "split-string": "3.1.0",
-            "to-regex": "3.0.2"
+            "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"
           },
           "dependencies": {
             "extend-shallow": {
               "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
               "dev": true,
               "requires": {
-                "is-extendable": "0.1.1"
+                "is-extendable": "^0.1.0"
               }
             }
           }
           "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
           "dev": true,
           "requires": {
-            "debug": "2.6.9",
-            "define-property": "0.2.5",
-            "extend-shallow": "2.0.1",
-            "posix-character-classes": "0.1.1",
-            "regex-not": "1.0.2",
-            "snapdragon": "0.8.2",
-            "to-regex": "3.0.2"
+            "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"
           },
           "dependencies": {
             "define-property": {
               "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
               "dev": true,
               "requires": {
-                "is-descriptor": "0.1.6"
+                "is-descriptor": "^0.1.0"
               }
             },
             "extend-shallow": {
               "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
               "dev": true,
               "requires": {
-                "is-extendable": "0.1.1"
+                "is-extendable": "^0.1.0"
               }
             },
             "is-accessor-descriptor": {
               "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
               "dev": true,
               "requires": {
-                "kind-of": "3.2.2"
+                "kind-of": "^3.0.2"
               },
               "dependencies": {
                 "kind-of": {
                   "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
                   "dev": true,
                   "requires": {
-                    "is-buffer": "1.1.6"
+                    "is-buffer": "^1.1.5"
                   }
                 }
               }
               "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
               "dev": true,
               "requires": {
-                "kind-of": "3.2.2"
+                "kind-of": "^3.0.2"
               },
               "dependencies": {
                 "kind-of": {
                   "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
                   "dev": true,
                   "requires": {
-                    "is-buffer": "1.1.6"
+                    "is-buffer": "^1.1.5"
                   }
                 }
               }
               "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
               "dev": true,
               "requires": {
-                "is-accessor-descriptor": "0.1.6",
-                "is-data-descriptor": "0.1.4",
-                "kind-of": "5.1.0"
+                "is-accessor-descriptor": "^0.1.6",
+                "is-data-descriptor": "^0.1.4",
+                "kind-of": "^5.0.0"
               }
             },
             "kind-of": {
           "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
           "dev": true,
           "requires": {
-            "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.2",
-            "snapdragon": "0.8.2",
-            "to-regex": "3.0.2"
+            "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"
           },
           "dependencies": {
             "define-property": {
               "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
               "dev": true,
               "requires": {
-                "is-descriptor": "1.0.2"
+                "is-descriptor": "^1.0.0"
               }
             },
             "extend-shallow": {
               "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
               "dev": true,
               "requires": {
-                "is-extendable": "0.1.1"
+                "is-extendable": "^0.1.0"
               }
             }
           }
           "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
           "dev": true,
           "requires": {
-            "extend-shallow": "2.0.1",
-            "is-number": "3.0.0",
-            "repeat-string": "1.6.1",
-            "to-regex-range": "2.1.1"
+            "extend-shallow": "^2.0.1",
+            "is-number": "^3.0.0",
+            "repeat-string": "^1.6.1",
+            "to-regex-range": "^2.1.0"
           },
           "dependencies": {
             "extend-shallow": {
               "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
               "dev": true,
               "requires": {
-                "is-extendable": "0.1.1"
+                "is-extendable": "^0.1.0"
               }
             }
           }
           "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
           "dev": true,
           "requires": {
-            "kind-of": "6.0.2"
+            "kind-of": "^6.0.0"
           }
         },
         "is-data-descriptor": {
           "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
           "dev": true,
           "requires": {
-            "kind-of": "6.0.2"
+            "kind-of": "^6.0.0"
           }
         },
         "is-descriptor": {
           "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
           "dev": true,
           "requires": {
-            "is-accessor-descriptor": "1.0.0",
-            "is-data-descriptor": "1.0.0",
-            "kind-of": "6.0.2"
+            "is-accessor-descriptor": "^1.0.0",
+            "is-data-descriptor": "^1.0.0",
+            "kind-of": "^6.0.2"
           }
         },
         "is-number": {
           "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
           "dev": true,
           "requires": {
-            "kind-of": "3.2.2"
+            "kind-of": "^3.0.2"
           },
           "dependencies": {
             "kind-of": {
               "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
               "dev": true,
               "requires": {
-                "is-buffer": "1.1.6"
+                "is-buffer": "^1.1.5"
               }
             }
           }
           "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
           "dev": true,
           "requires": {
-            "arr-diff": "4.0.0",
-            "array-unique": "0.3.2",
-            "braces": "2.3.2",
-            "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.13",
-            "object.pick": "1.3.0",
-            "regex-not": "1.0.2",
-            "snapdragon": "0.8.2",
-            "to-regex": "3.0.2"
+            "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"
           }
         }
       }
       "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
       "dev": true,
       "requires": {
-        "indent-string": "2.1.0",
-        "strip-indent": "1.0.1"
+        "indent-string": "^2.1.0",
+        "strip-indent": "^1.0.1"
       }
     },
     "redis": {
       "dev": true,
       "optional": true,
       "requires": {
-        "double-ended-queue": "2.1.0-0",
-        "redis-commands": "1.4.0",
-        "redis-parser": "2.6.0"
+        "double-ended-queue": "^2.1.0-0",
+        "redis-commands": "^1.2.0",
+        "redis-parser": "^2.6.0"
       }
     },
     "redis-commands": {
       "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==",
       "dev": true,
       "requires": {
-        "is-equal-shallow": "0.1.3"
+        "is-equal-shallow": "^0.1.3"
       }
     },
     "regex-not": {
       "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
       "dev": true,
       "requires": {
-        "extend-shallow": "3.0.2",
-        "safe-regex": "1.1.0"
+        "extend-shallow": "^3.0.2",
+        "safe-regex": "^1.1.0"
       }
     },
     "regexpu-core": {
       "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=",
       "dev": true,
       "requires": {
-        "regenerate": "1.4.0",
-        "regjsgen": "0.2.0",
-        "regjsparser": "0.1.5"
+        "regenerate": "^1.2.1",
+        "regjsgen": "^0.2.0",
+        "regjsparser": "^0.1.4"
+      }
+    },
+    "registry-auth-token": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npm.taobao.org/registry-auth-token/download/registry-auth-token-4.0.0.tgz?cache=0&sync_timestamp=1560785240550&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregistry-auth-token%2Fdownload%2Fregistry-auth-token-4.0.0.tgz",
+      "integrity": "sha1-MOVZYe7Hc3naVR6lxM9Dy/A1Ir4=",
+      "dev": true,
+      "requires": {
+        "rc": "^1.2.8",
+        "safe-buffer": "^5.0.1"
+      }
+    },
+    "registry-url": {
+      "version": "5.1.0",
+      "resolved": "https://registry.npm.taobao.org/registry-url/download/registry-url-5.1.0.tgz",
+      "integrity": "sha1-6YM0tQ1UNLgRNrROxjjZwgCcUAk=",
+      "dev": true,
+      "requires": {
+        "rc": "^1.2.8"
       }
     },
     "regjsgen": {
       "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=",
       "dev": true,
       "requires": {
-        "jsesc": "0.5.0"
+        "jsesc": "~0.5.0"
       },
       "dependencies": {
         "jsesc": {
       "integrity": "sha512-FsygIxevi1jSiPY9h7vZmBFUbAOcbYm9UwyiLNdVsLRs/5We9Ob5NMPbGYUTWiLq5L+ezlVdE0A8bbME5CWTpg==",
       "dev": true,
       "requires": {
-        "css-select": "1.2.0",
-        "dom-converter": "0.2.0",
-        "htmlparser2": "3.3.0",
-        "strip-ansi": "3.0.1",
-        "utila": "0.4.0"
+        "css-select": "^1.1.0",
+        "dom-converter": "~0.2",
+        "htmlparser2": "~3.3.0",
+        "strip-ansi": "^3.0.0",
+        "utila": "^0.4.0"
       }
     },
     "repeat-element": {
       "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
       "dev": true,
       "requires": {
-        "is-finite": "1.0.2"
+        "is-finite": "^1.0.0"
       }
     },
     "request": {
       "dev": true,
       "optional": true,
       "requires": {
-        "aws-sign2": "0.6.0",
-        "aws4": "1.8.0",
-        "caseless": "0.12.0",
-        "combined-stream": "1.0.7",
-        "extend": "3.0.2",
-        "forever-agent": "0.6.1",
-        "form-data": "2.1.4",
-        "har-validator": "4.2.1",
-        "hawk": "3.1.3",
-        "http-signature": "1.1.1",
-        "is-typedarray": "1.0.0",
-        "isstream": "0.1.2",
-        "json-stringify-safe": "5.0.1",
-        "mime-types": "2.1.21",
-        "oauth-sign": "0.8.2",
-        "performance-now": "0.2.0",
-        "qs": "6.4.0",
-        "safe-buffer": "5.1.2",
-        "stringstream": "0.0.6",
-        "tough-cookie": "2.3.4",
-        "tunnel-agent": "0.6.0",
-        "uuid": "3.3.2"
+        "aws-sign2": "~0.6.0",
+        "aws4": "^1.2.1",
+        "caseless": "~0.12.0",
+        "combined-stream": "~1.0.5",
+        "extend": "~3.0.0",
+        "forever-agent": "~0.6.1",
+        "form-data": "~2.1.1",
+        "har-validator": "~4.2.1",
+        "hawk": "~3.1.3",
+        "http-signature": "~1.1.0",
+        "is-typedarray": "~1.0.0",
+        "isstream": "~0.1.2",
+        "json-stringify-safe": "~5.0.1",
+        "mime-types": "~2.1.7",
+        "oauth-sign": "~0.8.1",
+        "performance-now": "^0.2.0",
+        "qs": "~6.4.0",
+        "safe-buffer": "^5.0.1",
+        "stringstream": "~0.0.4",
+        "tough-cookie": "~2.3.0",
+        "tunnel-agent": "^0.6.0",
+        "uuid": "^3.0.0"
       }
     },
     "requestretry": {
       "dev": true,
       "optional": true,
       "requires": {
-        "extend": "3.0.2",
-        "lodash": "4.17.11",
-        "request": "2.81.0",
-        "when": "3.7.8"
+        "extend": "^3.0.0",
+        "lodash": "^4.15.0",
+        "request": "^2.74.0",
+        "when": "^3.7.7"
       },
       "dependencies": {
         "when": {
       "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==",
       "dev": true,
       "requires": {
-        "path-parse": "1.0.6"
+        "path-parse": "^1.0.5"
       }
     },
     "resolve-cwd": {
       "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=",
       "dev": true,
       "requires": {
-        "resolve-from": "3.0.0"
+        "resolve-from": "^3.0.0"
       }
     },
     "resolve-from": {
       "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
       "dev": true
     },
+    "responselike": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npm.taobao.org/responselike/download/responselike-1.0.2.tgz",
+      "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=",
+      "dev": true,
+      "requires": {
+        "lowercase-keys": "^1.0.0"
+      }
+    },
     "ret": {
       "version": "0.1.15",
       "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
       "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=",
       "dev": true,
       "requires": {
-        "align-text": "0.1.4"
+        "align-text": "^0.1.1"
       }
     },
     "rimraf": {
       "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
       "dev": true,
       "requires": {
-        "glob": "7.1.3"
+        "glob": "^7.0.5"
       }
     },
     "ripemd160": {
       "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
       "dev": true,
       "requires": {
-        "hash-base": "3.0.4",
-        "inherits": "2.0.3"
+        "hash-base": "^3.0.0",
+        "inherits": "^2.0.1"
       }
     },
     "run-queue": {
       "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=",
       "dev": true,
       "requires": {
-        "aproba": "1.2.0"
+        "aproba": "^1.1.1"
       }
     },
     "rxjs": {
       "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
       "dev": true,
       "requires": {
-        "ret": "0.1.15"
+        "ret": "~0.1.10"
       }
     },
     "safer-buffer": {
       "dev": true,
       "optional": true,
       "requires": {
-        "glob": "7.1.3",
-        "lodash": "4.17.11",
-        "scss-tokenizer": "0.2.3",
-        "yargs": "7.1.0"
+        "glob": "^7.0.0",
+        "lodash": "^4.0.0",
+        "scss-tokenizer": "^0.2.3",
+        "yargs": "^7.0.0"
       }
     },
     "sass-loader": {
       "integrity": "sha512-JoiyD00Yo1o61OJsoP2s2kb19L1/Y2p3QFcCdWdF6oomBGKVYuZyqHWemRBfQ2uGYsk+CH3eCguXNfpjzlcpaA==",
       "dev": true,
       "requires": {
-        "clone-deep": "2.0.2",
-        "loader-utils": "1.1.0",
-        "lodash.tail": "4.1.1",
-        "neo-async": "2.6.0",
-        "pify": "3.0.0"
+        "clone-deep": "^2.0.1",
+        "loader-utils": "^1.0.1",
+        "lodash.tail": "^4.1.1",
+        "neo-async": "^2.5.0",
+        "pify": "^3.0.0"
       }
     },
     "saucelabs": {
       "integrity": "sha1-0kDoAJ33+ocwbsRXimm6O1xCT+4=",
       "dev": true,
       "requires": {
-        "https-proxy-agent": "1.0.0"
+        "https-proxy-agent": "^1.0.0"
       },
       "dependencies": {
         "agent-base": {
           "integrity": "sha1-1t4Q1a9hMtW9aSQn1G/FOFOQlMc=",
           "dev": true,
           "requires": {
-            "extend": "3.0.2",
-            "semver": "5.0.3"
+            "extend": "~3.0.0",
+            "semver": "~5.0.1"
           }
         },
         "https-proxy-agent": {
           "integrity": "sha1-NffabEjOTdv6JkiRrFk+5f+GceY=",
           "dev": true,
           "requires": {
-            "agent-base": "2.1.1",
-            "debug": "2.6.9",
-            "extend": "3.0.2"
+            "agent-base": "2",
+            "debug": "2",
+            "extend": "3"
           }
         },
         "semver": {
       "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==",
       "dev": true,
       "requires": {
-        "ajv": "6.5.4",
-        "ajv-keywords": "3.2.0"
+        "ajv": "^6.1.0",
+        "ajv-keywords": "^3.1.0"
       }
     },
     "scss-tokenizer": {
       "dev": true,
       "optional": true,
       "requires": {
-        "js-base64": "2.4.9",
-        "source-map": "0.4.4"
+        "js-base64": "^2.1.8",
+        "source-map": "^0.4.2"
       },
       "dependencies": {
         "source-map": {
           "dev": true,
           "optional": true,
           "requires": {
-            "amdefine": "1.0.1"
+            "amdefine": ">=0.0.4"
           }
         }
       }
       "integrity": "sha1-ot6l2kqX9mcuiefKcnbO+jZRR6c=",
       "dev": true,
       "requires": {
-        "adm-zip": "0.4.11",
-        "rimraf": "2.6.2",
+        "adm-zip": "^0.4.7",
+        "rimraf": "^2.5.4",
         "tmp": "0.0.30",
-        "xml2js": "0.4.19"
+        "xml2js": "^0.4.17"
       },
       "dependencies": {
         "tmp": {
           "integrity": "sha1-ckGdSovn1s51FI/YsyTlk6cRwu0=",
           "dev": true,
           "requires": {
-            "os-tmpdir": "1.0.2"
+            "os-tmpdir": "~1.0.1"
           }
         }
       }
       "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==",
       "dev": true
     },
+    "semver-compare": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npm.taobao.org/semver-compare/download/semver-compare-1.0.0.tgz",
+      "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=",
+      "dev": true
+    },
+    "semver-diff": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npm.taobao.org/semver-diff/download/semver-diff-2.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver-diff%2Fdownload%2Fsemver-diff-2.1.0.tgz",
+      "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=",
+      "dev": true,
+      "requires": {
+        "semver": "^5.0.3"
+      }
+    },
     "semver-dsl": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/semver-dsl/-/semver-dsl-1.0.1.tgz",
       "integrity": "sha1-02eN5VVeimH2Ke7QJTZq5fJzQKA=",
       "dev": true,
       "requires": {
-        "semver": "5.6.0"
+        "semver": "^5.3.0"
       }
     },
     "semver-intersect": {
       "integrity": "sha512-d8fvGg5ycKAq0+I6nfWeCx6ffaWJCsBYU0H2Rq56+/zFePYfT8mXkB3tWBSjR5BerkHNZ5eTPIk1/LBYas35xQ==",
       "dev": true,
       "requires": {
-        "semver": "5.6.0"
+        "semver": "^5.0.0"
       }
     },
     "send": {
       "dev": true,
       "requires": {
         "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",
+        "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.6.3",
+        "http-errors": "~1.6.2",
         "mime": "1.4.1",
         "ms": "2.0.0",
-        "on-finished": "2.3.0",
-        "range-parser": "1.2.0",
-        "statuses": "1.4.0"
+        "on-finished": "~2.3.0",
+        "range-parser": "~1.2.0",
+        "statuses": "~1.4.0"
       },
       "dependencies": {
         "mime": {
       "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=",
       "dev": true,
       "requires": {
-        "accepts": "1.3.5",
+        "accepts": "~1.3.4",
         "batch": "0.6.1",
         "debug": "2.6.9",
-        "escape-html": "1.0.3",
-        "http-errors": "1.6.3",
-        "mime-types": "2.1.21",
-        "parseurl": "1.3.2"
+        "escape-html": "~1.0.3",
+        "http-errors": "~1.6.2",
+        "mime-types": "~2.1.17",
+        "parseurl": "~1.3.2"
       }
     },
     "serve-static": {
       "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==",
       "dev": true,
       "requires": {
-        "encodeurl": "1.0.2",
-        "escape-html": "1.0.3",
-        "parseurl": "1.3.2",
+        "encodeurl": "~1.0.2",
+        "escape-html": "~1.0.3",
+        "parseurl": "~1.3.2",
         "send": "0.16.2"
       }
     },
+    "server-destroy": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/server-destroy/download/server-destroy-1.0.1.tgz",
+      "integrity": "sha1-8Tv5KOQrnD55OD5hzDmYtdFObN0=",
+      "dev": true
+    },
     "set-blocking": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
       "dev": true
     },
     "set-value": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz",
-      "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==",
+      "version": "2.0.1",
+      "resolved": "https://registry.npm.taobao.org/set-value/download/set-value-2.0.1.tgz",
+      "integrity": "sha1-oY1AUw5vB95CKMfe/kInr4ytAFs=",
       "dev": true,
       "requires": {
-        "extend-shallow": "2.0.1",
-        "is-extendable": "0.1.1",
-        "is-plain-object": "2.0.4",
-        "split-string": "3.1.0"
+        "extend-shallow": "^2.0.1",
+        "is-extendable": "^0.1.1",
+        "is-plain-object": "^2.0.3",
+        "split-string": "^3.0.1"
       },
       "dependencies": {
         "extend-shallow": {
           "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
           "dev": true,
           "requires": {
-            "is-extendable": "0.1.1"
+            "is-extendable": "^0.1.0"
           }
         }
       }
       "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
       "dev": true,
       "requires": {
-        "inherits": "2.0.3",
-        "safe-buffer": "5.1.2"
+        "inherits": "^2.0.1",
+        "safe-buffer": "^5.0.1"
       }
     },
     "shallow-clone": {
       "integrity": "sha512-oeXreoKR/SyNJtRJMAKPDSvd28OqEwG4eR/xc856cRGBII7gX9lvAqDxusPm0846z/w/hWYjI1NpKwJ00NHzRA==",
       "dev": true,
       "requires": {
-        "is-extendable": "0.1.1",
-        "kind-of": "5.1.0",
-        "mixin-object": "2.0.1"
+        "is-extendable": "^0.1.1",
+        "kind-of": "^5.0.0",
+        "mixin-object": "^2.0.1"
       },
       "dependencies": {
         "kind-of": {
       "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
       "dev": true,
       "requires": {
-        "shebang-regex": "1.0.0"
+        "shebang-regex": "^1.0.0"
       }
     },
     "shebang-regex": {
       "integrity": "sha512-n4iEKyNcg4v6/jpb3c0/iyH2G1nzUNl7Gpqtn/mHIJK9S/q/7MCfoO4rwVOoO59qPFIc0hVHvMbiOJ0NdtxKKw==",
       "dev": true,
       "requires": {
-        "debug": "2.6.9"
+        "debug": "^2.2.0"
       }
     },
     "slack-node": {
       "dev": true,
       "optional": true,
       "requires": {
-        "requestretry": "1.13.0"
+        "requestretry": "^1.2.2"
       }
     },
     "slash": {
       "version": "4.0.1",
       "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.0.1.tgz",
       "integrity": "sha512-RFqinRVJVcCAL9Uh1oVqE6FZkqsyLiVOYEZ20TqIOjuX7iFVJ+zsbs4RIghnw/pTs7mZvt8ZHhvm1ZUrR4fykg==",
-      "dev": true
+      "dev": true,
+      "optional": true
     },
     "smtp-connection": {
       "version": "2.12.0",
       "resolved": "https://registry.npmjs.org/smtp-connection/-/smtp-connection-2.12.0.tgz",
       "integrity": "sha1-1275EnyyPCJZ7bHoNJwujV4tdME=",
       "dev": true,
+      "optional": true,
       "requires": {
         "httpntlm": "1.6.1",
         "nodemailer-shared": "1.1.0"
       "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
       "dev": true,
       "requires": {
-        "base": "0.11.2",
-        "debug": "2.6.9",
-        "define-property": "0.2.5",
-        "extend-shallow": "2.0.1",
-        "map-cache": "0.2.2",
-        "source-map": "0.5.7",
-        "source-map-resolve": "0.5.2",
-        "use": "3.1.1"
+        "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"
       },
       "dependencies": {
         "define-property": {
           "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
           "dev": true,
           "requires": {
-            "is-descriptor": "0.1.6"
+            "is-descriptor": "^0.1.0"
           }
         },
         "extend-shallow": {
           "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
           "dev": true,
           "requires": {
-            "is-extendable": "0.1.1"
+            "is-extendable": "^0.1.0"
           }
         }
       }
       "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
       "dev": true,
       "requires": {
-        "define-property": "1.0.0",
-        "isobject": "3.0.1",
-        "snapdragon-util": "3.0.1"
+        "define-property": "^1.0.0",
+        "isobject": "^3.0.0",
+        "snapdragon-util": "^3.0.1"
       },
       "dependencies": {
         "define-property": {
           "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
           "dev": true,
           "requires": {
-            "is-descriptor": "1.0.2"
+            "is-descriptor": "^1.0.0"
           }
         },
         "is-accessor-descriptor": {
           "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
           "dev": true,
           "requires": {
-            "kind-of": "6.0.2"
+            "kind-of": "^6.0.0"
           }
         },
         "is-data-descriptor": {
           "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
           "dev": true,
           "requires": {
-            "kind-of": "6.0.2"
+            "kind-of": "^6.0.0"
           }
         },
         "is-descriptor": {
           "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
           "dev": true,
           "requires": {
-            "is-accessor-descriptor": "1.0.0",
-            "is-data-descriptor": "1.0.0",
-            "kind-of": "6.0.2"
+            "is-accessor-descriptor": "^1.0.0",
+            "is-data-descriptor": "^1.0.0",
+            "kind-of": "^6.0.2"
           }
         },
         "isobject": {
       "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
       "dev": true,
       "requires": {
-        "kind-of": "3.2.2"
+        "kind-of": "^3.2.0"
       }
     },
     "sntp": {
       "dev": true,
       "optional": true,
       "requires": {
-        "hoek": "2.16.3"
+        "hoek": "2.x.x"
       }
     },
     "socket.io": {
       "integrity": "sha1-waRZDO/4fs8TxyZS8Eb3FrKeYBQ=",
       "dev": true,
       "requires": {
-        "debug": "2.6.9",
-        "engine.io": "3.1.5",
-        "socket.io-adapter": "1.1.1",
+        "debug": "~2.6.6",
+        "engine.io": "~3.1.0",
+        "socket.io-adapter": "~1.1.0",
         "socket.io-client": "2.0.4",
-        "socket.io-parser": "3.1.3"
+        "socket.io-parser": "~3.1.1"
       }
     },
     "socket.io-adapter": {
         "base64-arraybuffer": "0.1.5",
         "component-bind": "1.0.0",
         "component-emitter": "1.2.1",
-        "debug": "2.6.9",
-        "engine.io-client": "3.1.6",
+        "debug": "~2.6.4",
+        "engine.io-client": "~3.1.0",
         "has-cors": "1.1.0",
         "indexof": "0.0.1",
         "object-component": "0.0.3",
         "parseqs": "0.0.5",
         "parseuri": "0.0.5",
-        "socket.io-parser": "3.1.3",
+        "socket.io-parser": "~3.1.1",
         "to-array": "0.1.4"
       }
     },
       "dev": true,
       "requires": {
         "component-emitter": "1.2.1",
-        "debug": "3.1.0",
-        "has-binary2": "1.0.3",
+        "debug": "~3.1.0",
+        "has-binary2": "~1.0.2",
         "isarray": "2.0.1"
       },
       "dependencies": {
       "integrity": "sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==",
       "dev": true,
       "requires": {
-        "faye-websocket": "0.10.0",
-        "uuid": "3.3.2"
+        "faye-websocket": "^0.10.0",
+        "uuid": "^3.0.1"
       }
     },
     "sockjs-client": {
       "integrity": "sha1-G7fA9yIsQPQq3xT0RCy9Eml3GoM=",
       "dev": true,
       "requires": {
-        "debug": "2.6.9",
+        "debug": "^2.6.6",
         "eventsource": "0.1.6",
-        "faye-websocket": "0.11.1",
-        "inherits": "2.0.3",
-        "json3": "3.3.2",
-        "url-parse": "1.4.3"
+        "faye-websocket": "~0.11.0",
+        "inherits": "^2.0.1",
+        "json3": "^3.3.2",
+        "url-parse": "^1.1.8"
       },
       "dependencies": {
         "faye-websocket": {
           "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=",
           "dev": true,
           "requires": {
-            "websocket-driver": "0.7.0"
+            "websocket-driver": ">=0.5.1"
           }
         }
       }
       "resolved": "https://registry.npmjs.org/socks/-/socks-2.2.1.tgz",
       "integrity": "sha512-0GabKw7n9mI46vcNrVfs0o6XzWzjVa3h6GaSo2UPxtWAROXUWavfJWh1M4PR5tnE0dcnQXZIDFP4yrAysLze/w==",
       "dev": true,
+      "optional": true,
       "requires": {
-        "ip": "1.1.5",
-        "smart-buffer": "4.0.1"
+        "ip": "^1.1.5",
+        "smart-buffer": "^4.0.1"
       }
     },
     "socks-proxy-agent": {
       "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-4.0.1.tgz",
       "integrity": "sha512-Kezx6/VBguXOsEe5oU3lXYyKMi4+gva72TwJ7pQY5JfqUx2nMk7NXA6z/mpNqIlfQjWYVfeuNvQjexiTaTn6Nw==",
       "dev": true,
+      "optional": true,
       "requires": {
-        "agent-base": "4.2.1",
-        "socks": "2.2.1"
+        "agent-base": "~4.2.0",
+        "socks": "~2.2.0"
       }
     },
     "source-list-map": {
       "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==",
       "dev": true,
       "requires": {
-        "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"
+        "atob": "^2.1.1",
+        "decode-uri-component": "^0.2.0",
+        "resolve-url": "^0.2.1",
+        "source-map-url": "^0.4.0",
+        "urix": "^0.1.0"
       }
     },
     "source-map-support": {
       "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==",
       "dev": true,
       "requires": {
-        "source-map": "0.5.7"
+        "source-map": "^0.5.6"
       }
     },
     "source-map-url": {
       "integrity": "sha512-q9hedtzyXHr5S0A1vEPoK/7l8NpfkFYTq6iCY+Pno2ZbdZR6WexZFtqeVGkGxW3TEJMN914Z55EnAGMmenlIQQ==",
       "dev": true,
       "requires": {
-        "spdx-expression-parse": "3.0.0",
-        "spdx-license-ids": "3.0.1"
+        "spdx-expression-parse": "^3.0.0",
+        "spdx-license-ids": "^3.0.0"
       }
     },
     "spdx-exceptions": {
       "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
       "dev": true,
       "requires": {
-        "spdx-exceptions": "2.2.0",
-        "spdx-license-ids": "3.0.1"
+        "spdx-exceptions": "^2.1.0",
+        "spdx-license-ids": "^3.0.0"
       }
     },
     "spdx-license-ids": {
       "integrity": "sha512-TfOfPcYGBB5sDuPn3deByxPhmfegAhpDYKSOXZQN81Oyrrif8ZCodOLzK3AesELnCx03kikhyDwh0pfvvQvF8w==",
       "dev": true
     },
-    "spdy": {
-      "version": "3.4.7",
-      "resolved": "https://registry.npmjs.org/spdy/-/spdy-3.4.7.tgz",
-      "integrity": "sha1-Qv9B7OXMD5mjpsKKq7c/XDsDrLw=",
-      "dev": true,
-      "requires": {
-        "debug": "2.6.9",
-        "handle-thing": "1.2.5",
-        "http-deceiver": "1.2.7",
-        "safe-buffer": "5.1.2",
-        "select-hose": "2.0.0",
-        "spdy-transport": "2.1.0"
-      }
-    },
-    "spdy-transport": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-2.1.0.tgz",
-      "integrity": "sha512-bpUeGpZcmZ692rrTiqf9/2EUakI6/kXX1Rpe0ib/DyOzbiexVfXkw6GnvI9hVGvIwVaUhkaBojjCZwLNRGQg1g==",
-      "dev": true,
-      "requires": {
-        "debug": "2.6.9",
-        "detect-node": "2.0.4",
-        "hpack.js": "2.1.6",
-        "obuf": "1.1.2",
-        "readable-stream": "2.3.6",
-        "safe-buffer": "5.1.2",
-        "wbuf": "1.7.3"
-      }
-    },
     "split-string": {
       "version": "3.1.0",
       "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
       "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
       "dev": true,
       "requires": {
-        "extend-shallow": "3.0.2"
+        "extend-shallow": "^3.0.0"
       }
     },
     "sprintf-js": {
       "integrity": "sha512-mSdgNUaidk+dRU5MhYtN9zebdzF2iG0cNPWy8HG+W8y+fT1JnSkh0fzzpjOa0L7P8i1Rscz38t0h4gPcKz43xA==",
       "dev": true,
       "requires": {
-        "asn1": "0.2.4",
-        "assert-plus": "1.0.0",
-        "bcrypt-pbkdf": "1.0.2",
-        "dashdash": "1.14.1",
-        "ecc-jsbn": "0.1.2",
-        "getpass": "0.1.7",
-        "jsbn": "0.1.1",
-        "safer-buffer": "2.1.2",
-        "tweetnacl": "0.14.5"
+        "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"
       },
       "dependencies": {
         "assert-plus": {
       "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==",
       "dev": true,
       "requires": {
-        "safe-buffer": "5.1.2"
+        "safe-buffer": "^5.1.1"
       }
     },
     "static-extend": {
       "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
       "dev": true,
       "requires": {
-        "define-property": "0.2.5",
-        "object-copy": "0.1.0"
+        "define-property": "^0.2.5",
+        "object-copy": "^0.1.0"
       },
       "dependencies": {
         "define-property": {
           "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
           "dev": true,
           "requires": {
-            "is-descriptor": "0.1.6"
+            "is-descriptor": "^0.1.0"
           }
         }
       }
       "dev": true,
       "optional": true,
       "requires": {
-        "readable-stream": "2.3.6"
+        "readable-stream": "^2.0.1"
+      }
+    },
+    "steno": {
+      "version": "0.4.4",
+      "resolved": "https://registry.npm.taobao.org/steno/download/steno-0.4.4.tgz",
+      "integrity": "sha1-BxEFvfwobmYVwEA8J+nXtdy4Vcs=",
+      "dev": true,
+      "requires": {
+        "graceful-fs": "^4.1.3"
       }
     },
     "stream-browserify": {
       "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=",
       "dev": true,
       "requires": {
-        "inherits": "2.0.3",
-        "readable-stream": "2.3.6"
+        "inherits": "~2.0.1",
+        "readable-stream": "^2.0.2"
       }
     },
     "stream-each": {
       "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==",
       "dev": true,
       "requires": {
-        "end-of-stream": "1.4.1",
-        "stream-shift": "1.0.0"
+        "end-of-stream": "^1.1.0",
+        "stream-shift": "^1.0.0"
       }
     },
     "stream-http": {
       "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==",
       "dev": true,
       "requires": {
-        "builtin-status-codes": "3.0.0",
-        "inherits": "2.0.3",
-        "readable-stream": "2.3.6",
-        "to-arraybuffer": "1.0.1",
-        "xtend": "4.0.1"
+        "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": {
       "integrity": "sha512-WREzfy0r0zUqp3lGO096wRuUp7ho1X6uo/7DJfTlEi0Iv/4gT7YHqXDjKC2ioVGBZtE8QzsQD9nx1nIuoZ57jQ==",
       "dev": true,
       "requires": {
-        "date-format": "1.2.0",
-        "debug": "3.2.6",
-        "mkdirp": "0.5.1",
-        "readable-stream": "2.3.6"
+        "date-format": "^1.2.0",
+        "debug": "^3.1.0",
+        "mkdirp": "^0.5.1",
+        "readable-stream": "^2.3.0"
       },
       "dependencies": {
         "debug": {
           "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
           "dev": true,
           "requires": {
-            "ms": "2.1.1"
+            "ms": "^2.1.1"
           }
         },
         "ms": {
       "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
       "dev": true,
       "requires": {
-        "code-point-at": "1.1.0",
-        "is-fullwidth-code-point": "1.0.0",
-        "strip-ansi": "3.0.1"
+        "code-point-at": "^1.0.0",
+        "is-fullwidth-code-point": "^1.0.0",
+        "strip-ansi": "^3.0.0"
       }
     },
     "string_decoder": {
       "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
       "dev": true,
       "requires": {
-        "safe-buffer": "5.1.2"
+        "safe-buffer": "~5.1.0"
       }
     },
     "stringstream": {
       "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
       "dev": true,
       "requires": {
-        "ansi-regex": "2.1.1"
+        "ansi-regex": "^2.0.0"
       }
     },
     "strip-bom": {
       "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
       "dev": true,
       "requires": {
-        "is-utf8": "0.2.1"
+        "is-utf8": "^0.2.0"
       }
     },
     "strip-eof": {
       "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
       "dev": true,
       "requires": {
-        "get-stdin": "4.0.1"
+        "get-stdin": "^4.0.1"
       }
     },
     "strip-json-comments": {
       "integrity": "sha512-IRE+ijgojrygQi3rsqT0U4dd+UcPCqcVvauZpCnQrGAlEe+FUIyrK93bUDScamesjP08JlQNsFJU+KmPedP5Og==",
       "dev": true,
       "requires": {
-        "loader-utils": "1.1.0",
-        "schema-utils": "0.3.0"
+        "loader-utils": "^1.0.2",
+        "schema-utils": "^0.3.0"
       },
       "dependencies": {
         "ajv": {
           "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
           "dev": true,
           "requires": {
-            "co": "4.6.0",
-            "fast-deep-equal": "1.1.0",
-            "fast-json-stable-stringify": "2.0.0",
-            "json-schema-traverse": "0.3.1"
+            "co": "^4.6.0",
+            "fast-deep-equal": "^1.0.0",
+            "fast-json-stable-stringify": "^2.0.0",
+            "json-schema-traverse": "^0.3.0"
           }
         },
         "schema-utils": {
           "integrity": "sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8=",
           "dev": true,
           "requires": {
-            "ajv": "5.5.2"
+            "ajv": "^5.0.0"
           }
         }
       }
       "integrity": "sha1-QrlWCTHKcJDOhRWnmLqeaqPW3Hk=",
       "dev": true,
       "requires": {
-        "css-parse": "1.7.0",
-        "debug": "2.6.9",
-        "glob": "7.0.6",
-        "mkdirp": "0.5.1",
-        "sax": "0.5.8",
-        "source-map": "0.1.43"
+        "css-parse": "1.7.x",
+        "debug": "*",
+        "glob": "7.0.x",
+        "mkdirp": "0.5.x",
+        "sax": "0.5.x",
+        "source-map": "0.1.x"
       },
       "dependencies": {
         "glob": {
           "integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=",
           "dev": true,
           "requires": {
-            "fs.realpath": "1.0.0",
-            "inflight": "1.0.6",
-            "inherits": "2.0.3",
-            "minimatch": "3.0.4",
-            "once": "1.4.0",
-            "path-is-absolute": "1.0.1"
+            "fs.realpath": "^1.0.0",
+            "inflight": "^1.0.4",
+            "inherits": "2",
+            "minimatch": "^3.0.2",
+            "once": "^1.3.0",
+            "path-is-absolute": "^1.0.0"
           }
         },
         "source-map": {
           "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=",
           "dev": true,
           "requires": {
-            "amdefine": "1.0.1"
+            "amdefine": ">=0.0.4"
           }
         }
       }
       "integrity": "sha512-+VomPdZ6a0razP+zinir61yZgpw2NfljeSsdUF5kJuEzlo3khXhY19Fn6l8QQz1GRJGtMCo8nG5C04ePyV7SUA==",
       "dev": true,
       "requires": {
-        "loader-utils": "1.1.0",
-        "lodash.clonedeep": "4.5.0",
-        "when": "3.6.4"
+        "loader-utils": "^1.0.2",
+        "lodash.clonedeep": "^4.5.0",
+        "when": "~3.6.x"
       }
     },
     "supports-color": {
       "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
       "dev": true,
       "requires": {
-        "has-flag": "2.0.0"
+        "has-flag": "^2.0.0"
       }
     },
     "symbol-observable": {
       "dev": true,
       "optional": true,
       "requires": {
-        "block-stream": "0.0.9",
-        "fstream": "1.0.11",
-        "inherits": "2.0.3"
+        "block-stream": "*",
+        "fstream": "^1.0.2",
+        "inherits": "2"
+      }
+    },
+    "term-size": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npm.taobao.org/term-size/download/term-size-1.2.0.tgz",
+      "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=",
+      "dev": true,
+      "requires": {
+        "execa": "^0.7.0"
       }
     },
     "through": {
       "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
       "dev": true,
       "requires": {
-        "readable-stream": "2.3.6",
-        "xtend": "4.0.1"
+        "readable-stream": "^2.1.5",
+        "xtend": "~4.0.1"
       }
     },
     "thunkify": {
       "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==",
       "dev": true,
       "requires": {
-        "setimmediate": "1.0.5"
+        "setimmediate": "^1.0.4"
       }
     },
     "timespan": {
       "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
       "dev": true,
       "requires": {
-        "os-tmpdir": "1.0.2"
+        "os-tmpdir": "~1.0.2"
       }
     },
     "to-array": {
       "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
       "dev": true,
       "requires": {
-        "kind-of": "3.2.2"
+        "kind-of": "^3.0.2"
       }
     },
+    "to-readable-stream": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npm.taobao.org/to-readable-stream/download/to-readable-stream-1.0.0.tgz",
+      "integrity": "sha1-zgqgwvPfat+FLvtASng+d8BHV3E=",
+      "dev": true
+    },
     "to-regex": {
       "version": "3.0.2",
       "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
       "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
       "dev": true,
       "requires": {
-        "define-property": "2.0.2",
-        "extend-shallow": "3.0.2",
-        "regex-not": "1.0.2",
-        "safe-regex": "1.1.0"
+        "define-property": "^2.0.2",
+        "extend-shallow": "^3.0.2",
+        "regex-not": "^1.0.2",
+        "safe-regex": "^1.1.0"
       }
     },
     "to-regex-range": {
       "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
       "dev": true,
       "requires": {
-        "is-number": "3.0.0",
-        "repeat-string": "1.6.1"
+        "is-number": "^3.0.0",
+        "repeat-string": "^1.6.1"
       },
       "dependencies": {
         "is-number": {
           "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
           "dev": true,
           "requires": {
-            "kind-of": "3.2.2"
+            "kind-of": "^3.0.2"
           }
         }
       }
     },
+    "toidentifier": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npm.taobao.org/toidentifier/download/toidentifier-1.0.0.tgz",
+      "integrity": "sha1-fhvjRw8ed5SLxD2Uo8j013UrpVM=",
+      "dev": true
+    },
     "toposort": {
       "version": "1.0.7",
       "resolved": "https://registry.npmjs.org/toposort/-/toposort-1.0.7.tgz",
       "dev": true,
       "optional": true,
       "requires": {
-        "punycode": "1.4.1"
+        "punycode": "^1.4.1"
       },
       "dependencies": {
         "punycode": {
       "dev": true,
       "optional": true,
       "requires": {
-        "glob": "7.1.3"
+        "glob": "^7.1.2"
       }
     },
     "ts-node": {
       "integrity": "sha512-xcZH12oVg9PShKhy3UHyDmuDLV3y7iKwX25aMVPt1SIXSuAfWkFiGPEkg+th8R4YKW/QCxDoW7lJdb15lx6QWg==",
       "dev": true,
       "requires": {
-        "arrify": "1.0.1",
-        "chalk": "2.4.1",
-        "diff": "3.5.0",
-        "make-error": "1.3.5",
-        "minimist": "1.2.0",
-        "mkdirp": "0.5.1",
-        "source-map-support": "0.5.9",
-        "tsconfig": "7.0.0",
-        "v8flags": "3.1.1",
-        "yn": "2.0.0"
+        "arrify": "^1.0.0",
+        "chalk": "^2.3.0",
+        "diff": "^3.1.0",
+        "make-error": "^1.1.1",
+        "minimist": "^1.2.0",
+        "mkdirp": "^0.5.1",
+        "source-map-support": "^0.5.0",
+        "tsconfig": "^7.0.0",
+        "v8flags": "^3.0.0",
+        "yn": "^2.0.0"
       },
       "dependencies": {
         "chalk": {
           "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
           "dev": true,
           "requires": {
-            "ansi-styles": "3.2.1",
-            "escape-string-regexp": "1.0.5",
-            "supports-color": "5.5.0"
+            "ansi-styles": "^3.2.1",
+            "escape-string-regexp": "^1.0.5",
+            "supports-color": "^5.3.0"
           }
         },
         "has-flag": {
           "integrity": "sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA==",
           "dev": true,
           "requires": {
-            "buffer-from": "1.1.1",
-            "source-map": "0.6.1"
+            "buffer-from": "^1.0.0",
+            "source-map": "^0.6.0"
           }
         },
         "supports-color": {
           "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
           "dev": true,
           "requires": {
-            "has-flag": "3.0.0"
+            "has-flag": "^3.0.0"
           }
         }
       }
       "integrity": "sha512-vZXmzPrL+EmC4T/4rVlT2jNVMWCi/O4DIiSj3UHg1OE5kCKbk4mfrXc6dZksLgRM/TZlKnousKH9bbTazUWRRw==",
       "dev": true,
       "requires": {
-        "@types/strip-bom": "3.0.0",
+        "@types/strip-bom": "^3.0.0",
         "@types/strip-json-comments": "0.0.30",
-        "strip-bom": "3.0.0",
-        "strip-json-comments": "2.0.1"
+        "strip-bom": "^3.0.0",
+        "strip-json-comments": "^2.0.0"
       },
       "dependencies": {
         "strip-bom": {
       "integrity": "sha512-NP+CjM1EXza/M8mOXBLH3vkFEJiu1zfEAlC5WdJxHPn8l96QPz5eooP6uAgYtw1CcKfuSyIiheNUdKxtDWCNeg==",
       "dev": true,
       "requires": {
-        "minimist": "1.2.0",
-        "mkdirp": "0.5.1",
-        "source-map": "0.6.1",
-        "source-map-support": "0.5.9"
+        "minimist": "^1.2.0",
+        "mkdirp": "^0.5.1",
+        "source-map": "^0.6.0",
+        "source-map-support": "^0.5.0"
       },
       "dependencies": {
         "minimist": {
           "integrity": "sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA==",
           "dev": true,
           "requires": {
-            "buffer-from": "1.1.1",
-            "source-map": "0.6.1"
+            "buffer-from": "^1.0.0",
+            "source-map": "^0.6.0"
           }
         }
       }
       "integrity": "sha1-ElX4ej/1frCw4fDmEKi0dIBGya4=",
       "dev": true,
       "requires": {
-        "babel-code-frame": "6.26.0",
-        "builtin-modules": "1.1.1",
-        "chalk": "2.4.1",
-        "commander": "2.17.1",
-        "diff": "3.5.0",
-        "glob": "7.1.3",
-        "js-yaml": "3.12.0",
-        "minimatch": "3.0.4",
-        "resolve": "1.8.1",
-        "semver": "5.6.0",
-        "tslib": "1.9.3",
-        "tsutils": "2.29.0"
+        "babel-code-frame": "^6.22.0",
+        "builtin-modules": "^1.1.1",
+        "chalk": "^2.3.0",
+        "commander": "^2.12.1",
+        "diff": "^3.2.0",
+        "glob": "^7.1.1",
+        "js-yaml": "^3.7.0",
+        "minimatch": "^3.0.4",
+        "resolve": "^1.3.2",
+        "semver": "^5.3.0",
+        "tslib": "^1.8.0",
+        "tsutils": "^2.12.1"
       },
       "dependencies": {
         "chalk": {
           "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
           "dev": true,
           "requires": {
-            "ansi-styles": "3.2.1",
-            "escape-string-regexp": "1.0.5",
-            "supports-color": "5.5.0"
+            "ansi-styles": "^3.2.1",
+            "escape-string-regexp": "^1.0.5",
+            "supports-color": "^5.3.0"
           }
         },
         "has-flag": {
           "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
           "dev": true,
           "requires": {
-            "has-flag": "3.0.0"
+            "has-flag": "^3.0.0"
           }
         }
       }
       "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==",
       "dev": true,
       "requires": {
-        "tslib": "1.9.3"
+        "tslib": "^1.8.1"
       }
     },
     "tty-browserify": {
       "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
       "dev": true,
       "requires": {
-        "safe-buffer": "5.1.2"
+        "safe-buffer": "^5.0.1"
       }
     },
     "tweetnacl": {
       "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
       "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
       "dev": true,
+      "optional": true,
       "requires": {
-        "prelude-ls": "1.1.2"
+        "prelude-ls": "~1.1.2"
       }
     },
+    "type-fest": {
+      "version": "0.3.1",
+      "resolved": "https://registry.npm.taobao.org/type-fest/download/type-fest-0.3.1.tgz?cache=0&sync_timestamp=1564840459932&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftype-fest%2Fdownload%2Ftype-fest-0.3.1.tgz",
+      "integrity": "sha1-Y9ANIE4FlHT+Xht8ARESu9HcKeE=",
+      "dev": true
+    },
     "type-is": {
       "version": "1.6.16",
       "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz",
       "dev": true,
       "requires": {
         "media-typer": "0.3.0",
-        "mime-types": "2.1.21"
+        "mime-types": "~2.1.18"
       }
     },
     "typedarray": {
       "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==",
       "dev": true,
       "requires": {
-        "commander": "2.17.1",
-        "source-map": "0.6.1"
+        "commander": "~2.17.1",
+        "source-map": "~0.6.1"
       },
       "dependencies": {
         "source-map": {
       "integrity": "sha512-ovHIch0AMlxjD/97j9AYovZxG5wnHOPkL7T1GKochBADp/Zwc44pEWNqpKl1Loupp1WhFg7SlYmHZRUfdAacgw==",
       "dev": true,
       "requires": {
-        "cacache": "10.0.4",
-        "find-cache-dir": "1.0.0",
-        "schema-utils": "0.4.7",
-        "serialize-javascript": "1.5.0",
-        "source-map": "0.6.1",
-        "uglify-es": "3.3.9",
-        "webpack-sources": "1.3.0",
-        "worker-farm": "1.6.0"
+        "cacache": "^10.0.4",
+        "find-cache-dir": "^1.0.0",
+        "schema-utils": "^0.4.5",
+        "serialize-javascript": "^1.4.0",
+        "source-map": "^0.6.1",
+        "uglify-es": "^3.3.4",
+        "webpack-sources": "^1.1.0",
+        "worker-farm": "^1.5.2"
       },
       "dependencies": {
         "commander": {
           "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==",
           "dev": true,
           "requires": {
-            "commander": "2.13.0",
-            "source-map": "0.6.1"
+            "commander": "~2.13.0",
+            "source-map": "~0.6.1"
           }
         }
       }
       "version": "1.7.0",
       "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz",
       "integrity": "sha1-a7rwh3UA02vjTsqlhODbn+8DUgk=",
-      "dev": true
+      "dev": true,
+      "optional": true
     },
     "union-value": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz",
-      "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=",
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/union-value/download/union-value-1.0.1.tgz",
+      "integrity": "sha1-C2/nuDWuzaYcbqTU8CwUIh4QmEc=",
       "dev": true,
       "requires": {
-        "arr-union": "3.1.0",
-        "get-value": "2.0.6",
-        "is-extendable": "0.1.1",
-        "set-value": "0.4.3"
-      },
-      "dependencies": {
-        "extend-shallow": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
-          "dev": true,
-          "requires": {
-            "is-extendable": "0.1.1"
-          }
-        },
-        "set-value": {
-          "version": "0.4.3",
-          "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz",
-          "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=",
-          "dev": true,
-          "requires": {
-            "extend-shallow": "2.0.1",
-            "is-extendable": "0.1.1",
-            "is-plain-object": "2.0.4",
-            "to-object-path": "0.3.0"
-          }
-        }
+        "arr-union": "^3.1.0",
+        "get-value": "^2.0.6",
+        "is-extendable": "^0.1.1",
+        "set-value": "^2.0.1"
       }
     },
     "unique-filename": {
       "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==",
       "dev": true,
       "requires": {
-        "unique-slug": "2.0.1"
+        "unique-slug": "^2.0.0"
       }
     },
     "unique-slug": {
       "integrity": "sha512-n9cU6+gITaVu7VGj1Z8feKMmfAjEAQGhwD9fE3zvpRRa0wEIx8ODYkVGfSc94M2OX00tUFV8wH3zYbm1I8mxFg==",
       "dev": true,
       "requires": {
-        "imurmurhash": "0.1.4"
+        "imurmurhash": "^0.1.4"
+      }
+    },
+    "unique-string": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npm.taobao.org/unique-string/download/unique-string-1.0.0.tgz",
+      "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=",
+      "dev": true,
+      "requires": {
+        "crypto-random-string": "^1.0.0"
       }
     },
     "universalify": {
       "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
       "dev": true,
       "requires": {
-        "has-value": "0.3.1",
-        "isobject": "3.0.1"
+        "has-value": "^0.3.1",
+        "isobject": "^3.0.0"
       },
       "dependencies": {
         "has-value": {
           "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
           "dev": true,
           "requires": {
-            "get-value": "2.0.6",
-            "has-values": "0.1.4",
-            "isobject": "2.1.0"
+            "get-value": "^2.0.3",
+            "has-values": "^0.1.4",
+            "isobject": "^2.0.0"
           },
           "dependencies": {
             "isobject": {
         }
       }
     },
-    "upath": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz",
-      "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==",
-      "dev": true
+    "update-notifier": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npm.taobao.org/update-notifier/download/update-notifier-3.0.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fupdate-notifier%2Fdownload%2Fupdate-notifier-3.0.1.tgz",
+      "integrity": "sha1-eOy2i5FeL9G+n3Z/bimM6HtzYlA=",
+      "dev": true,
+      "requires": {
+        "boxen": "^3.0.0",
+        "chalk": "^2.0.1",
+        "configstore": "^4.0.0",
+        "has-yarn": "^2.1.0",
+        "import-lazy": "^2.1.0",
+        "is-ci": "^2.0.0",
+        "is-installed-globally": "^0.1.0",
+        "is-npm": "^3.0.0",
+        "is-yarn-global": "^0.3.0",
+        "latest-version": "^5.0.0",
+        "semver-diff": "^2.0.0",
+        "xdg-basedir": "^3.0.0"
+      }
     },
     "upper-case": {
       "version": "1.1.3",
       "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
       "dev": true,
       "requires": {
-        "punycode": "2.1.1"
+        "punycode": "^2.1.0"
       }
     },
     "urix": {
       "integrity": "sha512-h3qf9TNn53BpuXTTcpC+UehiRrl0Cv45Yr/xWayApjw6G8Bg2dGke7rIwDQ39piciWCWrC+WiqLjOh3SUp9n0Q==",
       "dev": true,
       "requires": {
-        "loader-utils": "1.1.0",
-        "mime": "1.6.0",
-        "schema-utils": "0.3.0"
+        "loader-utils": "^1.0.2",
+        "mime": "^1.4.1",
+        "schema-utils": "^0.3.0"
       },
       "dependencies": {
         "ajv": {
           "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
           "dev": true,
           "requires": {
-            "co": "4.6.0",
-            "fast-deep-equal": "1.1.0",
-            "fast-json-stable-stringify": "2.0.0",
-            "json-schema-traverse": "0.3.1"
+            "co": "^4.6.0",
+            "fast-deep-equal": "^1.0.0",
+            "fast-json-stable-stringify": "^2.0.0",
+            "json-schema-traverse": "^0.3.0"
           }
         },
         "schema-utils": {
           "integrity": "sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8=",
           "dev": true,
           "requires": {
-            "ajv": "5.5.2"
+            "ajv": "^5.0.0"
           }
         }
       }
       "integrity": "sha512-rh+KuAW36YKo0vClhQzLLveoj8FwPJNu65xLb7Mrt+eZht0IPT0IXgSv8gcMegZ6NvjJUALf6Mf25POlMwD1Fw==",
       "dev": true,
       "requires": {
-        "querystringify": "2.1.0",
-        "requires-port": "1.0.0"
+        "querystringify": "^2.0.0",
+        "requires-port": "^1.0.0"
+      }
+    },
+    "url-parse-lax": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npm.taobao.org/url-parse-lax/download/url-parse-lax-3.0.0.tgz",
+      "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=",
+      "dev": true,
+      "requires": {
+        "prepend-http": "^2.0.0"
       }
     },
     "use": {
       "integrity": "sha1-z1k+9PLRdYdei7ZY6pLhik/QbY4=",
       "dev": true,
       "requires": {
-        "lru-cache": "2.2.4",
-        "tmp": "0.0.33"
+        "lru-cache": "2.2.x",
+        "tmp": "0.0.x"
       },
       "dependencies": {
         "lru-cache": {
       "integrity": "sha512-iw/1ViSEaff8NJ3HLyEjawk/8hjJib3E7pvG4pddVXfUg1983s3VGsiClDjhK64MQVDGqc1Q8r18S4VKQZS9EQ==",
       "dev": true,
       "requires": {
-        "homedir-polyfill": "1.0.1"
+        "homedir-polyfill": "^1.0.1"
       }
     },
     "validate-npm-package-license": {
       "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
       "dev": true,
       "requires": {
-        "spdx-correct": "3.0.2",
-        "spdx-expression-parse": "3.0.0"
+        "spdx-correct": "^3.0.0",
+        "spdx-expression-parse": "^3.0.0"
       }
     },
     "vary": {
       "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
       "dev": true,
       "requires": {
-        "assert-plus": "1.0.0",
+        "assert-plus": "^1.0.0",
         "core-util-is": "1.0.2",
-        "extsprintf": "1.3.0"
+        "extsprintf": "^1.2.0"
       },
       "dependencies": {
         "assert-plus": {
       "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==",
       "dev": true,
       "requires": {
-        "chokidar": "2.0.4",
-        "graceful-fs": "4.1.11",
-        "neo-async": "2.6.0"
+        "chokidar": "^2.0.2",
+        "graceful-fs": "^4.1.2",
+        "neo-async": "^2.5.0"
       },
       "dependencies": {
         "anymatch": {
           "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
-          "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
+          "resolved": "https://registry.npm.taobao.org/anymatch/download/anymatch-2.0.0.tgz",
+          "integrity": "sha1-vLJLTzeTTZqnrBe0ra+J58du8us=",
           "dev": true,
           "requires": {
-            "micromatch": "3.1.10",
-            "normalize-path": "2.1.1"
+            "micromatch": "^3.1.4",
+            "normalize-path": "^2.1.1"
           }
         },
         "arr-diff": {
         },
         "braces": {
           "version": "2.3.2",
-          "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
-          "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
-          "dev": true,
-          "requires": {
-            "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.3",
-            "snapdragon": "0.8.2",
-            "snapdragon-node": "2.1.1",
-            "split-string": "3.1.0",
-            "to-regex": "3.0.2"
+          "resolved": "https://registry.npm.taobao.org/braces/download/braces-2.3.2.tgz",
+          "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=",
+          "dev": true,
+          "requires": {
+            "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"
           },
           "dependencies": {
             "extend-shallow": {
               "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
               "dev": true,
               "requires": {
-                "is-extendable": "0.1.1"
+                "is-extendable": "^0.1.0"
               }
             }
           }
         },
         "chokidar": {
-          "version": "2.0.4",
-          "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz",
-          "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==",
-          "dev": true,
-          "requires": {
-            "anymatch": "2.0.0",
-            "async-each": "1.0.1",
-            "braces": "2.3.2",
-            "fsevents": "1.2.4",
-            "glob-parent": "3.1.0",
-            "inherits": "2.0.3",
-            "is-binary-path": "1.0.1",
-            "is-glob": "4.0.0",
-            "lodash.debounce": "4.0.8",
-            "normalize-path": "2.1.1",
-            "path-is-absolute": "1.0.1",
-            "readdirp": "2.2.1",
-            "upath": "1.1.0"
+          "version": "2.1.6",
+          "resolved": "https://registry.npm.taobao.org/chokidar/download/chokidar-2.1.6.tgz",
+          "integrity": "sha1-tsrWU6kp4kTOioNCRBZNJB+pVMU=",
+          "dev": true,
+          "requires": {
+            "anymatch": "^2.0.0",
+            "async-each": "^1.0.1",
+            "braces": "^2.3.2",
+            "fsevents": "^1.2.7",
+            "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"
+          },
+          "dependencies": {
+            "normalize-path": {
+              "version": "3.0.0",
+              "resolved": "http://registry.npm.taobao.org/normalize-path/download/normalize-path-3.0.0.tgz",
+              "integrity": "sha1-Dc1p/yOhybEf0JeDFmRKA4ghamU=",
+              "dev": true
+            },
+            "upath": {
+              "version": "1.1.2",
+              "resolved": "http://registry.npm.taobao.org/upath/download/upath-1.1.2.tgz",
+              "integrity": "sha1-PbZYYA7a7sy+bbXmhNZ+6MKs0Gg=",
+              "dev": true
+            }
           }
         },
         "expand-brackets": {
           "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
           "dev": true,
           "requires": {
-            "debug": "2.6.9",
-            "define-property": "0.2.5",
-            "extend-shallow": "2.0.1",
-            "posix-character-classes": "0.1.1",
-            "regex-not": "1.0.2",
-            "snapdragon": "0.8.2",
-            "to-regex": "3.0.2"
+            "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"
           },
           "dependencies": {
             "define-property": {
               "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
               "dev": true,
               "requires": {
-                "is-descriptor": "0.1.6"
+                "is-descriptor": "^0.1.0"
               }
             },
             "extend-shallow": {
               "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
               "dev": true,
               "requires": {
-                "is-extendable": "0.1.1"
+                "is-extendable": "^0.1.0"
               }
             },
             "is-accessor-descriptor": {
               "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
               "dev": true,
               "requires": {
-                "kind-of": "3.2.2"
+                "kind-of": "^3.0.2"
               },
               "dependencies": {
                 "kind-of": {
                   "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
                   "dev": true,
                   "requires": {
-                    "is-buffer": "1.1.6"
+                    "is-buffer": "^1.1.5"
                   }
                 }
               }
               "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
               "dev": true,
               "requires": {
-                "kind-of": "3.2.2"
+                "kind-of": "^3.0.2"
               },
               "dependencies": {
                 "kind-of": {
                   "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
                   "dev": true,
                   "requires": {
-                    "is-buffer": "1.1.6"
+                    "is-buffer": "^1.1.5"
                   }
                 }
               }
             },
             "is-descriptor": {
               "version": "0.1.6",
-              "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
-              "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+              "resolved": "http://registry.npm.taobao.org/is-descriptor/download/is-descriptor-0.1.6.tgz",
+              "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=",
               "dev": true,
               "requires": {
-                "is-accessor-descriptor": "0.1.6",
-                "is-data-descriptor": "0.1.4",
-                "kind-of": "5.1.0"
+                "is-accessor-descriptor": "^0.1.6",
+                "is-data-descriptor": "^0.1.4",
+                "kind-of": "^5.0.0"
               }
             },
             "kind-of": {
               "version": "5.1.0",
-              "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
-              "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+              "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-5.1.0.tgz",
+              "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=",
               "dev": true
             }
           }
         },
         "extglob": {
           "version": "2.0.4",
-          "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
-          "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
-          "dev": true,
-          "requires": {
-            "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.2",
-            "snapdragon": "0.8.2",
-            "to-regex": "3.0.2"
+          "resolved": "http://registry.npm.taobao.org/extglob/download/extglob-2.0.4.tgz",
+          "integrity": "sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM=",
+          "dev": true,
+          "requires": {
+            "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"
           },
           "dependencies": {
             "define-property": {
               "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
               "dev": true,
               "requires": {
-                "is-descriptor": "1.0.2"
+                "is-descriptor": "^1.0.0"
               }
             },
             "extend-shallow": {
               "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
               "dev": true,
               "requires": {
-                "is-extendable": "0.1.1"
+                "is-extendable": "^0.1.0"
               }
             }
           }
           "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
           "dev": true,
           "requires": {
-            "extend-shallow": "2.0.1",
-            "is-number": "3.0.0",
-            "repeat-string": "1.6.1",
-            "to-regex-range": "2.1.1"
+            "extend-shallow": "^2.0.1",
+            "is-number": "^3.0.0",
+            "repeat-string": "^1.6.1",
+            "to-regex-range": "^2.1.0"
           },
           "dependencies": {
             "extend-shallow": {
               "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
               "dev": true,
               "requires": {
-                "is-extendable": "0.1.1"
+                "is-extendable": "^0.1.0"
               }
             }
           }
           "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
           "dev": true,
           "requires": {
-            "is-glob": "3.1.0",
-            "path-dirname": "1.0.2"
+            "is-glob": "^3.1.0",
+            "path-dirname": "^1.0.0"
           },
           "dependencies": {
             "is-glob": {
               "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
               "dev": true,
               "requires": {
-                "is-extglob": "2.1.1"
+                "is-extglob": "^2.1.0"
               }
             }
           }
         },
         "is-accessor-descriptor": {
           "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
-          "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+          "resolved": "http://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz",
+          "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=",
           "dev": true,
           "requires": {
-            "kind-of": "6.0.2"
+            "kind-of": "^6.0.0"
           }
         },
         "is-data-descriptor": {
           "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
-          "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+          "resolved": "http://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz",
+          "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=",
           "dev": true,
           "requires": {
-            "kind-of": "6.0.2"
+            "kind-of": "^6.0.0"
           }
         },
         "is-descriptor": {
           "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
-          "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+          "resolved": "http://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz",
+          "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=",
           "dev": true,
           "requires": {
-            "is-accessor-descriptor": "1.0.0",
-            "is-data-descriptor": "1.0.0",
-            "kind-of": "6.0.2"
+            "is-accessor-descriptor": "^1.0.0",
+            "is-data-descriptor": "^1.0.0",
+            "kind-of": "^6.0.2"
           }
         },
         "is-extglob": {
           "dev": true
         },
         "is-glob": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz",
-          "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=",
+          "version": "4.0.1",
+          "resolved": "https://registry.npm.taobao.org/is-glob/download/is-glob-4.0.1.tgz",
+          "integrity": "sha1-dWfb6fL14kZ7x3q4PEopSCQHpdw=",
           "dev": true,
           "requires": {
-            "is-extglob": "2.1.1"
+            "is-extglob": "^2.1.1"
           }
         },
         "is-number": {
           "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
           "dev": true,
           "requires": {
-            "kind-of": "3.2.2"
+            "kind-of": "^3.0.2"
           },
           "dependencies": {
             "kind-of": {
               "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
               "dev": true,
               "requires": {
-                "is-buffer": "1.1.6"
+                "is-buffer": "^1.1.5"
               }
             }
           }
         },
         "kind-of": {
           "version": "6.0.2",
-          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
-          "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+          "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-6.0.2.tgz",
+          "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=",
           "dev": true
         },
         "micromatch": {
           "version": "3.1.10",
-          "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
-          "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
-          "dev": true,
-          "requires": {
-            "arr-diff": "4.0.0",
-            "array-unique": "0.3.2",
-            "braces": "2.3.2",
-            "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.13",
-            "object.pick": "1.3.0",
-            "regex-not": "1.0.2",
-            "snapdragon": "0.8.2",
-            "to-regex": "3.0.2"
+          "resolved": "https://registry.npm.taobao.org/micromatch/download/micromatch-3.1.10.tgz",
+          "integrity": "sha1-cIWbyVyYQJUvNZoGij/En57PrCM=",
+          "dev": true,
+          "requires": {
+            "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"
           }
         }
       }
       "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==",
       "dev": true,
       "requires": {
-        "minimalistic-assert": "1.0.1"
+        "minimalistic-assert": "^1.0.0"
       }
     },
     "webdriver-js-extender": {
       "integrity": "sha1-gcUzqeM9W/tZe05j4s2yW1R3dRU=",
       "dev": true,
       "requires": {
-        "@types/selenium-webdriver": "2.53.43",
-        "selenium-webdriver": "2.53.3"
+        "@types/selenium-webdriver": "^2.53.35",
+        "selenium-webdriver": "^2.53.2"
       },
       "dependencies": {
         "adm-zip": {
           "dev": true,
           "requires": {
             "adm-zip": "0.4.4",
-            "rimraf": "2.6.2",
+            "rimraf": "^2.2.8",
             "tmp": "0.0.24",
-            "ws": "1.1.5",
+            "ws": "^1.0.1",
             "xml2js": "0.4.4"
           }
         },
           "integrity": "sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==",
           "dev": true,
           "requires": {
-            "options": "0.0.6",
-            "ultron": "1.0.2"
+            "options": ">=0.0.5",
+            "ultron": "1.0.x"
           }
         },
         "xml2js": {
           "integrity": "sha1-MREBAAMAiuGSQOuhdJe1fHKcVV0=",
           "dev": true,
           "requires": {
-            "sax": "0.6.1",
-            "xmlbuilder": "9.0.7"
+            "sax": "0.6.x",
+            "xmlbuilder": ">=1.0.0"
           }
         }
       }
       "integrity": "sha512-3kOFejWqj5ISpJk4Qj/V7w98h9Vl52wak3CLiw/cDOfbVTq7FeoZ0SdoHHY9PYlHr50ZS42OfvzE2vB4nncKQg==",
       "dev": true,
       "requires": {
-        "acorn": "5.7.3",
-        "acorn-dynamic-import": "2.0.2",
-        "ajv": "6.5.4",
-        "ajv-keywords": "3.2.0",
-        "async": "2.6.1",
-        "enhanced-resolve": "3.4.1",
-        "escope": "3.6.0",
-        "interpret": "1.1.0",
-        "json-loader": "0.5.7",
-        "json5": "0.5.1",
-        "loader-runner": "2.3.1",
-        "loader-utils": "1.1.0",
-        "memory-fs": "0.4.1",
-        "mkdirp": "0.5.1",
-        "node-libs-browser": "2.1.0",
-        "source-map": "0.5.7",
-        "supports-color": "4.5.0",
-        "tapable": "0.2.8",
-        "uglifyjs-webpack-plugin": "0.4.6",
-        "watchpack": "1.6.0",
-        "webpack-sources": "1.3.0",
-        "yargs": "8.0.2"
+        "acorn": "^5.0.0",
+        "acorn-dynamic-import": "^2.0.0",
+        "ajv": "^6.1.0",
+        "ajv-keywords": "^3.1.0",
+        "async": "^2.1.2",
+        "enhanced-resolve": "^3.4.0",
+        "escope": "^3.6.0",
+        "interpret": "^1.0.0",
+        "json-loader": "^0.5.4",
+        "json5": "^0.5.1",
+        "loader-runner": "^2.3.0",
+        "loader-utils": "^1.1.0",
+        "memory-fs": "~0.4.1",
+        "mkdirp": "~0.5.0",
+        "node-libs-browser": "^2.0.0",
+        "source-map": "^0.5.3",
+        "supports-color": "^4.2.1",
+        "tapable": "^0.2.7",
+        "uglifyjs-webpack-plugin": "^0.4.6",
+        "watchpack": "^1.4.0",
+        "webpack-sources": "^1.0.1",
+        "yargs": "^8.0.2"
       },
       "dependencies": {
         "ansi-regex": {
           "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
           "dev": true,
           "requires": {
-            "center-align": "0.1.3",
-            "right-align": "0.1.3",
+            "center-align": "^0.1.1",
+            "right-align": "^0.1.1",
             "wordwrap": "0.0.2"
           }
         },
           "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=",
           "dev": true,
           "requires": {
-            "graceful-fs": "4.1.11",
-            "parse-json": "2.2.0",
-            "pify": "2.3.0",
-            "strip-bom": "3.0.0"
+            "graceful-fs": "^4.1.2",
+            "parse-json": "^2.2.0",
+            "pify": "^2.0.0",
+            "strip-bom": "^3.0.0"
           }
         },
         "os-locale": {
           "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==",
           "dev": true,
           "requires": {
-            "execa": "0.7.0",
-            "lcid": "1.0.0",
-            "mem": "1.1.0"
+            "execa": "^0.7.0",
+            "lcid": "^1.0.0",
+            "mem": "^1.1.0"
           }
         },
         "path-type": {
           "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=",
           "dev": true,
           "requires": {
-            "pify": "2.3.0"
+            "pify": "^2.0.0"
           }
         },
         "pify": {
           "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=",
           "dev": true,
           "requires": {
-            "load-json-file": "2.0.0",
-            "normalize-package-data": "2.4.0",
-            "path-type": "2.0.0"
+            "load-json-file": "^2.0.0",
+            "normalize-package-data": "^2.3.2",
+            "path-type": "^2.0.0"
           }
         },
         "read-pkg-up": {
           "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=",
           "dev": true,
           "requires": {
-            "find-up": "2.1.0",
-            "read-pkg": "2.0.0"
+            "find-up": "^2.0.0",
+            "read-pkg": "^2.0.0"
           }
         },
         "string-width": {
           "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
           "dev": true,
           "requires": {
-            "is-fullwidth-code-point": "2.0.0",
-            "strip-ansi": "4.0.0"
+            "is-fullwidth-code-point": "^2.0.0",
+            "strip-ansi": "^4.0.0"
           },
           "dependencies": {
             "is-fullwidth-code-point": {
               "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
               "dev": true,
               "requires": {
-                "ansi-regex": "3.0.0"
+                "ansi-regex": "^3.0.0"
               }
             }
           }
           "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=",
           "dev": true,
           "requires": {
-            "source-map": "0.5.7",
-            "uglify-to-browserify": "1.0.2",
-            "yargs": "3.10.0"
+            "source-map": "~0.5.1",
+            "uglify-to-browserify": "~1.0.0",
+            "yargs": "~3.10.0"
           },
           "dependencies": {
             "yargs": {
               "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
               "dev": true,
               "requires": {
-                "camelcase": "1.2.1",
-                "cliui": "2.1.0",
-                "decamelize": "1.2.0",
+                "camelcase": "^1.0.2",
+                "cliui": "^2.1.0",
+                "decamelize": "^1.0.0",
                 "window-size": "0.1.0"
               }
             }
           "integrity": "sha1-uVH0q7a9YX5m9j64kUmOORdj4wk=",
           "dev": true,
           "requires": {
-            "source-map": "0.5.7",
-            "uglify-js": "2.8.29",
-            "webpack-sources": "1.3.0"
+            "source-map": "^0.5.6",
+            "uglify-js": "^2.8.29",
+            "webpack-sources": "^1.0.1"
           }
         },
         "which-module": {
           "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=",
           "dev": true,
           "requires": {
-            "camelcase": "4.1.0",
-            "cliui": "3.2.0",
-            "decamelize": "1.2.0",
-            "get-caller-file": "1.0.3",
-            "os-locale": "2.1.0",
-            "read-pkg-up": "2.0.0",
-            "require-directory": "2.1.1",
-            "require-main-filename": "1.0.1",
-            "set-blocking": "2.0.0",
-            "string-width": "2.1.1",
-            "which-module": "2.0.0",
-            "y18n": "3.2.1",
-            "yargs-parser": "7.0.0"
+            "camelcase": "^4.1.0",
+            "cliui": "^3.2.0",
+            "decamelize": "^1.1.1",
+            "get-caller-file": "^1.0.1",
+            "os-locale": "^2.0.0",
+            "read-pkg-up": "^2.0.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": "^7.0.0"
           },
           "dependencies": {
             "camelcase": {
               "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
               "dev": true,
               "requires": {
-                "string-width": "1.0.2",
-                "strip-ansi": "3.0.1",
-                "wrap-ansi": "2.1.0"
+                "string-width": "^1.0.1",
+                "strip-ansi": "^3.0.1",
+                "wrap-ansi": "^2.0.0"
               },
               "dependencies": {
                 "string-width": {
                   "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
                   "dev": true,
                   "requires": {
-                    "code-point-at": "1.1.0",
-                    "is-fullwidth-code-point": "1.0.0",
-                    "strip-ansi": "3.0.1"
+                    "code-point-at": "^1.0.0",
+                    "is-fullwidth-code-point": "^1.0.0",
+                    "strip-ansi": "^3.0.0"
                   }
                 }
               }
           "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=",
           "dev": true,
           "requires": {
-            "camelcase": "4.1.0"
+            "camelcase": "^4.1.0"
           },
           "dependencies": {
             "camelcase": {
       "integrity": "sha512-FCrqPy1yy/sN6U/SaEZcHKRXGlqU0DUaEBL45jkUYoB8foVb6wCnbIJ1HKIx+qUFTW+3JpVcCJCxZ8VATL4e+A==",
       "dev": true,
       "requires": {
-        "memory-fs": "0.4.1",
-        "mime": "1.6.0",
-        "path-is-absolute": "1.0.1",
-        "range-parser": "1.2.0",
-        "time-stamp": "2.1.0"
+        "memory-fs": "~0.4.1",
+        "mime": "^1.5.0",
+        "path-is-absolute": "^1.0.0",
+        "range-parser": "^1.0.3",
+        "time-stamp": "^2.0.0"
       }
     },
     "webpack-dev-server": {
-      "version": "2.11.3",
-      "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-2.11.3.tgz",
-      "integrity": "sha512-Qz22YEFhWx+M2vvJ+rQppRv39JA0h5NNbOOdODApdX6iZ52Diz7vTPXjF7kJlfn+Uc24Qr48I3SZ9yncQwRycg==",
+      "version": "2.11.5",
+      "resolved": "https://registry.npm.taobao.org/webpack-dev-server/download/webpack-dev-server-2.11.5.tgz?cache=0&sync_timestamp=1565370754455&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-dev-server%2Fdownload%2Fwebpack-dev-server-2.11.5.tgz",
+      "integrity": "sha1-QW+96g4E7r5EpibnkdWi6zf+jEg=",
       "dev": true,
       "requires": {
         "ansi-html": "0.0.7",
-        "array-includes": "3.0.3",
-        "bonjour": "3.5.0",
-        "chokidar": "2.0.4",
-        "compression": "1.7.3",
-        "connect-history-api-fallback": "1.5.0",
-        "debug": "3.2.6",
-        "del": "3.0.0",
-        "express": "4.16.4",
-        "html-entities": "1.2.1",
-        "http-proxy-middleware": "0.17.4",
-        "import-local": "1.0.0",
+        "array-includes": "^3.0.3",
+        "bonjour": "^3.5.0",
+        "chokidar": "^2.1.2",
+        "compression": "^1.7.3",
+        "connect-history-api-fallback": "^1.3.0",
+        "debug": "^3.1.0",
+        "del": "^3.0.0",
+        "express": "^4.16.2",
+        "html-entities": "^1.2.0",
+        "http-proxy-middleware": "^0.19.1",
+        "import-local": "^1.0.0",
         "internal-ip": "1.2.0",
-        "ip": "1.1.5",
-        "killable": "1.0.1",
-        "loglevel": "1.6.1",
-        "opn": "5.1.0",
-        "portfinder": "1.0.18",
-        "selfsigned": "1.10.4",
-        "serve-index": "1.9.1",
+        "ip": "^1.1.5",
+        "killable": "^1.0.0",
+        "loglevel": "^1.4.1",
+        "opn": "^5.1.0",
+        "portfinder": "^1.0.9",
+        "selfsigned": "^1.9.1",
+        "serve-index": "^1.9.1",
         "sockjs": "0.3.19",
         "sockjs-client": "1.1.5",
-        "spdy": "3.4.7",
-        "strip-ansi": "3.0.1",
-        "supports-color": "5.5.0",
+        "spdy": "^4.0.0",
+        "strip-ansi": "^3.0.0",
+        "supports-color": "^5.1.0",
         "webpack-dev-middleware": "1.12.2",
         "yargs": "6.6.0"
       },
       "dependencies": {
         "anymatch": {
           "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
-          "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
+          "resolved": "https://registry.npm.taobao.org/anymatch/download/anymatch-2.0.0.tgz",
+          "integrity": "sha1-vLJLTzeTTZqnrBe0ra+J58du8us=",
           "dev": true,
           "requires": {
-            "micromatch": "3.1.10",
-            "normalize-path": "2.1.1"
+            "micromatch": "^3.1.4",
+            "normalize-path": "^2.1.1"
+          },
+          "dependencies": {
+            "normalize-path": {
+              "version": "2.1.1",
+              "resolved": "http://registry.npm.taobao.org/normalize-path/download/normalize-path-2.1.1.tgz",
+              "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+              "dev": true,
+              "requires": {
+                "remove-trailing-separator": "^1.0.1"
+              }
+            }
           }
         },
         "arr-diff": {
         },
         "braces": {
           "version": "2.3.2",
-          "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
-          "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
-          "dev": true,
-          "requires": {
-            "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.3",
-            "snapdragon": "0.8.2",
-            "snapdragon-node": "2.1.1",
-            "split-string": "3.1.0",
-            "to-regex": "3.0.2"
+          "resolved": "https://registry.npm.taobao.org/braces/download/braces-2.3.2.tgz",
+          "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=",
+          "dev": true,
+          "requires": {
+            "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"
           },
           "dependencies": {
             "extend-shallow": {
               "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
               "dev": true,
               "requires": {
-                "is-extendable": "0.1.1"
+                "is-extendable": "^0.1.0"
               }
             }
           }
           "dev": true
         },
         "chokidar": {
-          "version": "2.0.4",
-          "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz",
-          "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==",
+          "version": "2.1.6",
+          "resolved": "https://registry.npm.taobao.org/chokidar/download/chokidar-2.1.6.tgz",
+          "integrity": "sha1-tsrWU6kp4kTOioNCRBZNJB+pVMU=",
           "dev": true,
           "requires": {
-            "anymatch": "2.0.0",
-            "async-each": "1.0.1",
-            "braces": "2.3.2",
-            "fsevents": "1.2.4",
-            "glob-parent": "3.1.0",
-            "inherits": "2.0.3",
-            "is-binary-path": "1.0.1",
-            "is-glob": "4.0.0",
-            "lodash.debounce": "4.0.8",
-            "normalize-path": "2.1.1",
-            "path-is-absolute": "1.0.1",
-            "readdirp": "2.2.1",
-            "upath": "1.1.0"
+            "anymatch": "^2.0.0",
+            "async-each": "^1.0.1",
+            "braces": "^2.3.2",
+            "fsevents": "^1.2.7",
+            "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"
           }
         },
         "debug": {
           "version": "3.2.6",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
-          "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+          "resolved": "http://registry.npm.taobao.org/debug/download/debug-3.2.6.tgz",
+          "integrity": "sha1-6D0X3hbYp++3cX7b5fsQE17uYps=",
           "dev": true,
           "requires": {
-            "ms": "2.1.1"
+            "ms": "^2.1.1"
           },
           "dependencies": {
             "ms": {
-              "version": "2.1.1",
-              "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
-              "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
+              "version": "2.1.2",
+              "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.1.2.tgz",
+              "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=",
               "dev": true
             }
           }
           "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
           "dev": true,
           "requires": {
-            "debug": "2.6.9",
-            "define-property": "0.2.5",
-            "extend-shallow": "2.0.1",
-            "posix-character-classes": "0.1.1",
-            "regex-not": "1.0.2",
-            "snapdragon": "0.8.2",
-            "to-regex": "3.0.2"
+            "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"
           },
           "dependencies": {
             "debug": {
               "version": "2.6.9",
-              "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
-              "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+              "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz",
+              "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=",
               "dev": true,
               "requires": {
                 "ms": "2.0.0"
               "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
               "dev": true,
               "requires": {
-                "is-descriptor": "0.1.6"
+                "is-descriptor": "^0.1.0"
               }
             },
             "extend-shallow": {
               "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
               "dev": true,
               "requires": {
-                "is-extendable": "0.1.1"
+                "is-extendable": "^0.1.0"
               }
             },
             "is-accessor-descriptor": {
               "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
               "dev": true,
               "requires": {
-                "kind-of": "3.2.2"
+                "kind-of": "^3.0.2"
               },
               "dependencies": {
                 "kind-of": {
                   "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
                   "dev": true,
                   "requires": {
-                    "is-buffer": "1.1.6"
+                    "is-buffer": "^1.1.5"
                   }
                 }
               }
               "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
               "dev": true,
               "requires": {
-                "kind-of": "3.2.2"
+                "kind-of": "^3.0.2"
               },
               "dependencies": {
                 "kind-of": {
                   "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
                   "dev": true,
                   "requires": {
-                    "is-buffer": "1.1.6"
+                    "is-buffer": "^1.1.5"
                   }
                 }
               }
             },
             "is-descriptor": {
               "version": "0.1.6",
-              "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
-              "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+              "resolved": "http://registry.npm.taobao.org/is-descriptor/download/is-descriptor-0.1.6.tgz",
+              "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=",
               "dev": true,
               "requires": {
-                "is-accessor-descriptor": "0.1.6",
-                "is-data-descriptor": "0.1.4",
-                "kind-of": "5.1.0"
+                "is-accessor-descriptor": "^0.1.6",
+                "is-data-descriptor": "^0.1.4",
+                "kind-of": "^5.0.0"
               }
             },
             "kind-of": {
               "version": "5.1.0",
-              "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
-              "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+              "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-5.1.0.tgz",
+              "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=",
               "dev": true
             }
           }
         },
         "extglob": {
           "version": "2.0.4",
-          "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
-          "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
-          "dev": true,
-          "requires": {
-            "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.2",
-            "snapdragon": "0.8.2",
-            "to-regex": "3.0.2"
+          "resolved": "http://registry.npm.taobao.org/extglob/download/extglob-2.0.4.tgz",
+          "integrity": "sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM=",
+          "dev": true,
+          "requires": {
+            "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"
           },
           "dependencies": {
             "define-property": {
               "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
               "dev": true,
               "requires": {
-                "is-descriptor": "1.0.2"
+                "is-descriptor": "^1.0.0"
               }
             },
             "extend-shallow": {
               "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
               "dev": true,
               "requires": {
-                "is-extendable": "0.1.1"
+                "is-extendable": "^0.1.0"
               }
             }
           }
           "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
           "dev": true,
           "requires": {
-            "extend-shallow": "2.0.1",
-            "is-number": "3.0.0",
-            "repeat-string": "1.6.1",
-            "to-regex-range": "2.1.1"
+            "extend-shallow": "^2.0.1",
+            "is-number": "^3.0.0",
+            "repeat-string": "^1.6.1",
+            "to-regex-range": "^2.1.0"
           },
           "dependencies": {
             "extend-shallow": {
               "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
               "dev": true,
               "requires": {
-                "is-extendable": "0.1.1"
+                "is-extendable": "^0.1.0"
               }
             }
           }
           "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
           "dev": true,
           "requires": {
-            "is-glob": "3.1.0",
-            "path-dirname": "1.0.2"
+            "is-glob": "^3.1.0",
+            "path-dirname": "^1.0.0"
           },
           "dependencies": {
             "is-glob": {
               "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
               "dev": true,
               "requires": {
-                "is-extglob": "2.1.1"
+                "is-extglob": "^2.1.0"
               }
             }
           }
         },
+        "handle-thing": {
+          "version": "2.0.0",
+          "resolved": "http://registry.npm.taobao.org/handle-thing/download/handle-thing-2.0.0.tgz",
+          "integrity": "sha1-DgOWlf9QyT/CiFV9aW88HcZ3Z1Q=",
+          "dev": true
+        },
         "has-flag": {
           "version": "3.0.0",
           "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
           "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
           "dev": true
         },
+        "http-proxy-middleware": {
+          "version": "0.19.1",
+          "resolved": "https://registry.npm.taobao.org/http-proxy-middleware/download/http-proxy-middleware-0.19.1.tgz",
+          "integrity": "sha1-GDx9xKoUeRUDBkmMIQza+WCApDo=",
+          "dev": true,
+          "requires": {
+            "http-proxy": "^1.17.0",
+            "is-glob": "^4.0.0",
+            "lodash": "^4.17.11",
+            "micromatch": "^3.1.10"
+          }
+        },
         "is-accessor-descriptor": {
           "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
-          "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+          "resolved": "http://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz",
+          "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=",
           "dev": true,
           "requires": {
-            "kind-of": "6.0.2"
+            "kind-of": "^6.0.0"
           }
         },
         "is-data-descriptor": {
           "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
-          "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+          "resolved": "http://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz",
+          "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=",
           "dev": true,
           "requires": {
-            "kind-of": "6.0.2"
+            "kind-of": "^6.0.0"
           }
         },
         "is-descriptor": {
           "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
-          "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+          "resolved": "http://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz",
+          "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=",
           "dev": true,
           "requires": {
-            "is-accessor-descriptor": "1.0.0",
-            "is-data-descriptor": "1.0.0",
-            "kind-of": "6.0.2"
+            "is-accessor-descriptor": "^1.0.0",
+            "is-data-descriptor": "^1.0.0",
+            "kind-of": "^6.0.2"
           }
         },
         "is-extglob": {
           "dev": true
         },
         "is-glob": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz",
-          "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=",
+          "version": "4.0.1",
+          "resolved": "https://registry.npm.taobao.org/is-glob/download/is-glob-4.0.1.tgz",
+          "integrity": "sha1-dWfb6fL14kZ7x3q4PEopSCQHpdw=",
           "dev": true,
           "requires": {
-            "is-extglob": "2.1.1"
+            "is-extglob": "^2.1.1"
           }
         },
         "is-number": {
           "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
           "dev": true,
           "requires": {
-            "kind-of": "3.2.2"
+            "kind-of": "^3.0.2"
           },
           "dependencies": {
             "kind-of": {
               "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
               "dev": true,
               "requires": {
-                "is-buffer": "1.1.6"
+                "is-buffer": "^1.1.5"
               }
             }
           }
         },
         "kind-of": {
           "version": "6.0.2",
-          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
-          "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+          "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-6.0.2.tgz",
+          "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=",
           "dev": true
         },
         "micromatch": {
           "version": "3.1.10",
-          "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
-          "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+          "resolved": "https://registry.npm.taobao.org/micromatch/download/micromatch-3.1.10.tgz",
+          "integrity": "sha1-cIWbyVyYQJUvNZoGij/En57PrCM=",
+          "dev": true,
+          "requires": {
+            "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"
+          }
+        },
+        "normalize-path": {
+          "version": "3.0.0",
+          "resolved": "http://registry.npm.taobao.org/normalize-path/download/normalize-path-3.0.0.tgz",
+          "integrity": "sha1-Dc1p/yOhybEf0JeDFmRKA4ghamU=",
+          "dev": true
+        },
+        "readable-stream": {
+          "version": "3.4.0",
+          "resolved": "https://registry.npm.taobao.org/readable-stream/download/readable-stream-3.4.0.tgz",
+          "integrity": "sha1-pRwmdUZY4KPCHb9ZFjvUW6b0R/w=",
+          "dev": true,
+          "requires": {
+            "inherits": "^2.0.3",
+            "string_decoder": "^1.1.1",
+            "util-deprecate": "^1.0.1"
+          }
+        },
+        "spdy": {
+          "version": "4.0.1",
+          "resolved": "https://registry.npm.taobao.org/spdy/download/spdy-4.0.1.tgz",
+          "integrity": "sha1-bxLtHF236k8k67i4m6WMh8CCV/I=",
+          "dev": true,
+          "requires": {
+            "debug": "^4.1.0",
+            "handle-thing": "^2.0.0",
+            "http-deceiver": "^1.2.7",
+            "select-hose": "^2.0.0",
+            "spdy-transport": "^3.0.0"
+          },
+          "dependencies": {
+            "debug": {
+              "version": "4.1.1",
+              "resolved": "http://registry.npm.taobao.org/debug/download/debug-4.1.1.tgz",
+              "integrity": "sha1-O3ImAlUQnGtYnO4FDx1RYTlmR5E=",
+              "dev": true,
+              "requires": {
+                "ms": "^2.1.1"
+              }
+            },
+            "ms": {
+              "version": "2.1.2",
+              "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.1.2.tgz",
+              "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=",
+              "dev": true
+            }
+          }
+        },
+        "spdy-transport": {
+          "version": "3.0.0",
+          "resolved": "http://registry.npm.taobao.org/spdy-transport/download/spdy-transport-3.0.0.tgz",
+          "integrity": "sha1-ANSGOmQArXXfkzYaFghgXl3NzzE=",
           "dev": true,
           "requires": {
-            "arr-diff": "4.0.0",
-            "array-unique": "0.3.2",
-            "braces": "2.3.2",
-            "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.13",
-            "object.pick": "1.3.0",
-            "regex-not": "1.0.2",
-            "snapdragon": "0.8.2",
-            "to-regex": "3.0.2"
+            "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"
+          },
+          "dependencies": {
+            "debug": {
+              "version": "4.1.1",
+              "resolved": "http://registry.npm.taobao.org/debug/download/debug-4.1.1.tgz",
+              "integrity": "sha1-O3ImAlUQnGtYnO4FDx1RYTlmR5E=",
+              "dev": true,
+              "requires": {
+                "ms": "^2.1.1"
+              }
+            },
+            "ms": {
+              "version": "2.1.2",
+              "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.1.2.tgz",
+              "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=",
+              "dev": true
+            }
           }
         },
         "supports-color": {
           "version": "5.5.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
-          "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+          "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-5.5.0.tgz",
+          "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=",
           "dev": true,
           "requires": {
-            "has-flag": "3.0.0"
+            "has-flag": "^3.0.0"
           }
         },
+        "upath": {
+          "version": "1.1.2",
+          "resolved": "http://registry.npm.taobao.org/upath/download/upath-1.1.2.tgz",
+          "integrity": "sha1-PbZYYA7a7sy+bbXmhNZ+6MKs0Gg=",
+          "dev": true
+        },
         "y18n": {
           "version": "3.2.1",
           "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
           "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=",
           "dev": true,
           "requires": {
-            "camelcase": "3.0.0",
-            "cliui": "3.2.0",
-            "decamelize": "1.2.0",
-            "get-caller-file": "1.0.3",
-            "os-locale": "1.4.0",
-            "read-pkg-up": "1.0.1",
-            "require-directory": "2.1.1",
-            "require-main-filename": "1.0.1",
-            "set-blocking": "2.0.0",
-            "string-width": "1.0.2",
-            "which-module": "1.0.0",
-            "y18n": "3.2.1",
-            "yargs-parser": "4.2.1"
+            "camelcase": "^3.0.0",
+            "cliui": "^3.2.0",
+            "decamelize": "^1.1.1",
+            "get-caller-file": "^1.0.1",
+            "os-locale": "^1.4.0",
+            "read-pkg-up": "^1.0.1",
+            "require-directory": "^2.1.1",
+            "require-main-filename": "^1.0.1",
+            "set-blocking": "^2.0.0",
+            "string-width": "^1.0.2",
+            "which-module": "^1.0.0",
+            "y18n": "^3.2.1",
+            "yargs-parser": "^4.2.0"
           }
         },
         "yargs-parser": {
           "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=",
           "dev": true,
           "requires": {
-            "camelcase": "3.0.0"
+            "camelcase": "^3.0.0"
           }
         }
       }
       "integrity": "sha512-TmSe1HZKeOPey3oy1Ov2iS3guIZjWvMT2BBJDzzT5jScHTjVC3mpjJofgueEzaEd6ibhxRDD6MIblDr8tzh8iQ==",
       "dev": true,
       "requires": {
-        "lodash": "4.17.11"
+        "lodash": "^4.17.5"
       }
     },
     "webpack-sources": {
       "integrity": "sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==",
       "dev": true,
       "requires": {
-        "source-list-map": "2.0.1",
-        "source-map": "0.6.1"
+        "source-list-map": "^2.0.0",
+        "source-map": "~0.6.1"
       },
       "dependencies": {
         "source-map": {
       "integrity": "sha512-bdMR4DRbINUFt+QhNfBFHURnCzT8mtHjXiclQWX/aXBpu2pM4nOb2qViyt84ZSFrVKEXkAbmz7mSoZQH/08xFg==",
       "dev": true,
       "requires": {
-        "webpack-sources": "1.3.0"
+        "webpack-sources": "^1.3.0"
       }
     },
     "websocket-driver": {
       "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=",
       "dev": true,
       "requires": {
-        "http-parser-js": "0.5.0",
-        "websocket-extensions": "0.1.3"
+        "http-parser-js": ">=0.4.0",
+        "websocket-extensions": ">=0.1.1"
       }
     },
     "websocket-extensions": {
       "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
       "dev": true,
       "requires": {
-        "isexe": "2.0.0"
+        "isexe": "^2.0.0"
       }
     },
     "which-module": {
       "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
       "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==",
       "dev": true,
+      "optional": true,
+      "requires": {
+        "string-width": "^1.0.2 || 2"
+      }
+    },
+    "widest-line": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npm.taobao.org/widest-line/download/widest-line-2.0.1.tgz",
+      "integrity": "sha1-dDh2RzDsfvQ4HOTfgvuYpTFCo/w=",
+      "dev": true,
       "requires": {
-        "string-width": "1.0.2"
+        "string-width": "^2.1.1"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "3.0.0",
+          "resolved": "http://registry.npm.taobao.org/ansi-regex/download/ansi-regex-3.0.0.tgz",
+          "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+          "dev": true
+        },
+        "is-fullwidth-code-point": {
+          "version": "2.0.0",
+          "resolved": "http://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz",
+          "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+          "dev": true
+        },
+        "string-width": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-2.1.1.tgz",
+          "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=",
+          "dev": true,
+          "requires": {
+            "is-fullwidth-code-point": "^2.0.0",
+            "strip-ansi": "^4.0.0"
+          }
+        },
+        "strip-ansi": {
+          "version": "4.0.0",
+          "resolved": "http://registry.npm.taobao.org/strip-ansi/download/strip-ansi-4.0.0.tgz",
+          "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+          "dev": true,
+          "requires": {
+            "ansi-regex": "^3.0.0"
+          }
+        }
       }
     },
     "window-size": {
       "integrity": "sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==",
       "dev": true,
       "requires": {
-        "errno": "0.1.7"
+        "errno": "~0.1.7"
       }
     },
     "wrap-ansi": {
       "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
       "dev": true,
       "requires": {
-        "string-width": "1.0.2",
-        "strip-ansi": "3.0.1"
+        "string-width": "^1.0.1",
+        "strip-ansi": "^3.0.1"
       }
     },
     "wrappy": {
       "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
       "dev": true
     },
+    "write-file-atomic": {
+      "version": "2.4.3",
+      "resolved": "https://registry.npm.taobao.org/write-file-atomic/download/write-file-atomic-2.4.3.tgz",
+      "integrity": "sha1-H9Lprh3z51uNjDZ0Q8aS1MqB9IE=",
+      "dev": true,
+      "requires": {
+        "graceful-fs": "^4.1.11",
+        "imurmurhash": "^0.1.4",
+        "signal-exit": "^3.0.2"
+      }
+    },
     "ws": {
       "version": "3.3.3",
       "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz",
       "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==",
       "dev": true,
       "requires": {
-        "async-limiter": "1.0.0",
-        "safe-buffer": "5.1.2",
-        "ultron": "1.1.1"
+        "async-limiter": "~1.0.0",
+        "safe-buffer": "~5.1.0",
+        "ultron": "~1.1.0"
       }
     },
+    "xdg-basedir": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npm.taobao.org/xdg-basedir/download/xdg-basedir-3.0.0.tgz",
+      "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=",
+      "dev": true
+    },
     "xml2js": {
       "version": "0.4.19",
       "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz",
       "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==",
       "dev": true,
       "requires": {
-        "sax": "1.2.4",
-        "xmlbuilder": "9.0.7"
+        "sax": ">=0.6.0",
+        "xmlbuilder": "~9.0.1"
       },
       "dependencies": {
         "sax": {
       "integrity": "sha512-AkTuIuVTET12tpsVIQo+ZU6f/qDmKuRUcjaqR+OIvm+aCBsZ95i7UVY5WJ9TMsSaZ0DA2WxoZ4acu0sPH+OKAw==",
       "dev": true,
       "requires": {
-        "cuint": "0.2.2"
+        "cuint": "^0.2.2"
       }
     },
     "y18n": {
       "dev": true,
       "optional": true,
       "requires": {
-        "camelcase": "3.0.0",
-        "cliui": "3.2.0",
-        "decamelize": "1.2.0",
-        "get-caller-file": "1.0.3",
-        "os-locale": "1.4.0",
-        "read-pkg-up": "1.0.1",
-        "require-directory": "2.1.1",
-        "require-main-filename": "1.0.1",
-        "set-blocking": "2.0.0",
-        "string-width": "1.0.2",
-        "which-module": "1.0.0",
-        "y18n": "3.2.1",
-        "yargs-parser": "5.0.0"
+        "camelcase": "^3.0.0",
+        "cliui": "^3.2.0",
+        "decamelize": "^1.1.1",
+        "get-caller-file": "^1.0.1",
+        "os-locale": "^1.4.0",
+        "read-pkg-up": "^1.0.1",
+        "require-directory": "^2.1.1",
+        "require-main-filename": "^1.0.1",
+        "set-blocking": "^2.0.0",
+        "string-width": "^1.0.2",
+        "which-module": "^1.0.0",
+        "y18n": "^3.2.1",
+        "yargs-parser": "^5.0.0"
       },
       "dependencies": {
         "camelcase": {
       "dev": true,
       "optional": true,
       "requires": {
-        "camelcase": "3.0.0"
+        "camelcase": "^3.0.0"
       },
       "dependencies": {
         "camelcase": {
index 70035a3..e85f236 100644 (file)
@@ -5,10 +5,14 @@
   "scripts": {
     "ng": "ng",
     "start": "ng serve",
+    "server": "ng serve --host='0.0.0.0' --proxy-config proxy.conf.json",
     "build": "ng build --prod --aot",
     "test": "ng test",
     "lint": "ng lint",
     "e2e": "ng e2e",
+    "mockproxy": "ng serve --host='0.0.0.0' --proxy-config localproxy.conf.json",
+    "mockconfig": "node ./src/app/mock/server.js --port 3004",
+    "mock": "npm run mockconfig & npm run mockproxy",
     "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s"
   },
   "private": true,
@@ -27,7 +31,9 @@
     "core-js": "^2.4.1",
     "d3": "^3.5.17",
     "echarts": "^4.1.0",
-    "jquery": "^3.3.1",
+    "faker": "^4.1.0",
+    "jquery": "^3.4.1",
+    "lodash": "^4.17.15",
     "ng-zorro-antd": "^0.7.1",
     "ngx-echarts": "^2.2.0",
     "rxjs": "^5.5.6",
@@ -43,6 +49,7 @@
     "codelyzer": "^4.0.1",
     "jasmine-core": "~2.8.0",
     "jasmine-spec-reporter": "~4.2.1",
+    "json-server": "^0.15.0",
     "karma": "~2.0.0",
     "karma-chrome-launcher": "~2.2.0",
     "karma-coverage-istanbul-reporter": "^1.2.1",
diff --git a/usecaseui-portal/proxy.conf.json b/usecaseui-portal/proxy.conf.json
new file mode 100644 (file)
index 0000000..a5afae0
--- /dev/null
@@ -0,0 +1,8 @@
+{
+    "/api/usecaseui-server/v1": {
+        "target": "http://10.73.191.100:8082",
+        "secure": false,
+        "logLevel": "debug",
+        "changeOrigin": true
+    }
+}
\ No newline at end of file
diff --git a/usecaseui-portal/src/app/alarm/alarm.component.spec.ts b/usecaseui-portal/src/app/alarm/alarm.component.spec.ts
deleted file mode 100644 (file)
index f64bcb8..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-import { async, ComponentFixture, TestBed, inject, fakeAsync } from '@angular/core/testing';
-import { NO_ERRORS_SCHEMA,CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
-import { NgxEchartsModule } from 'ngx-echarts';
-import { NgZorroAntdModule } from 'ng-zorro-antd';
-import { TranslateModule, TranslateLoader, TranslateService, TranslateFakeLoader} from '@ngx-translate/core';
-import { HttpClientModule } from '@angular/common/http';
-import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing';
-import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
-import { NZ_I18N, en_US } from 'ng-zorro-antd';
-
-import { AlarmComponent } from './alarm.component';
-import { DetailsComponent } from '../components/details/details.component';
-import { LineComponent } from '../components/charts/line/line.component';
-import { HomesService } from '../homes.service';
-
-fdescribe('AlarmComponent', () => {
-  let component: AlarmComponent;
-  let fixture: ComponentFixture<AlarmComponent>;
-
-  beforeEach(async(() => {
-    TestBed.configureTestingModule({
-      declarations: [ AlarmComponent, DetailsComponent, LineComponent ],
-      imports: [ TranslateModule.forRoot({loader: { provide: TranslateLoader, useClass: TranslateFakeLoader }}),        
-        NgZorroAntdModule.forRoot(), 
-        NgxEchartsModule, 
-        HttpClientModule,
-        BrowserAnimationsModule,
-        HttpClientTestingModule ],
-      providers: [ TranslateService, HomesService,
-                   { provide: NZ_I18N, useValue: en_US } ],
-      schemas: [
-        CUSTOM_ELEMENTS_SCHEMA,
-        NO_ERRORS_SCHEMA
-      ]
-    })
-    .compileComponents();
-  }));
-
-  beforeEach(() => {
-    fixture = TestBed.createComponent(AlarmComponent);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  });
-
-  it('should create', inject([HttpTestingController, HomesService], 
-    (httpMock: HttpTestingController, service: HomesService) => {
-    expect(component).toBeTruthy();
-  }));
-
-  it('expects service to fetch data with proper sorting',
-  inject([HttpTestingController, HomesService],
-    (httpMock: HttpTestingController, service: HomesService) => {
-      // We call the service
-      service.getqueryAllSourceNames().subscribe(data => {
-        expect(data.pageInfo.totalRecordCount).toBe(21);
-        expect(data.pageInfo.pageNumber).toBe(0);
-        expect(data.data.length).toBe(7);
-      });
-      // We set the expectations for the HttpClient mock
-      const req = httpMock.expectOne('http://.../data/contacts');
-      expect(req.request.method).toEqual('GET');
-      // Then we set the fake data to be returned by the mock
-      req.flush({data: ...});
-    })
-);
-});
index 04a6bc8..f47cf11 100644 (file)
     See the License for the specific language governing permissions and
     limitations under the License.
 */
-import { NgModule }             from '@angular/core';
+import { NgModule } from '@angular/core';
 import { RouterModule, Routes } from '@angular/router';
 
 
-import { HomeComponent }        from './home/home.component';
-import { ManagementComponent }    from './management/management.component';
-import { FcapsComponent }    from './fcaps/fcaps.component';
-import { ServicesComponent }    from './services/services.component';
-import { ServicesListComponent }    from './services/services-list/services-list.component';
-import { OnboardVnfVmComponent } from './services/onboard-vnf-vm/onboard-vnf-vm.component';
-import { AlarmComponent }       from './alarm/alarm.component';
-import { PerformanceComponent } from './performance/performance.component';
-import { PerformanceVnfComponent } from './performance/performance-vnf/performance-vnf.component';
-import { PerformanceVmComponent } from './performance/performance-vm/performance-vm.component';
+import { HomeComponent } from './views/home/home.component';
+import { ManagementComponent } from './views/management/management.component';
+import { FcapsComponent } from './views/fcaps/fcaps.component';
+import { ServicesComponent } from './views/services/services.component';
+import { ServicesListComponent } from './views/services/services-list/services-list.component';
+import { OnboardVnfVmComponent } from './views/services/onboard-vnf-vm/onboard-vnf-vm.component';
+import { AlarmComponent } from './views/alarm/alarm.component';
+import { PerformanceComponent } from './views/performance/performance.component';
+import { PerformanceVnfComponent } from './views/performance/performance-vnf/performance-vnf.component';
+import { PerformanceVmComponent } from './views/performance/performance-vm/performance-vm.component';
 
-import { CcvpnNetworkComponent } from './ccvpn-network/ccvpn-network.component';
+import { CcvpnNetworkComponent } from './views/ccvpn-network/ccvpn-network.component';
+
+
+import { TestComponent } from './test/test.component';
 
 // import { DetailsComponent } from './details/details.component';
 
 const ServicesChildRoutes: Routes = [
-  { path: 'services-list', component: ServicesListComponent},
-  { path: 'onboard-vnf-vm', component: OnboardVnfVmComponent},
+  { path: 'services-list', component: ServicesListComponent },
+  { path: 'onboard-vnf-vm', component: OnboardVnfVmComponent },
   { path: '**', redirectTo: 'services-list' }
 ]
 
 const routes: Routes = [
-  { path: 'home', component: HomeComponent},
-  { path: 'management', component: ManagementComponent},
-  { path: 'fcaps', component: FcapsComponent},
+  { path: 'text', component: TestComponent },
+  { path: 'home', component: HomeComponent },
+  { path: 'management', component: ManagementComponent },
+  { path: 'fcaps', component: FcapsComponent },
   // { path: 'services', component: ServicesComponent, children:ServicesChildRoutes}, //Temporarily not a sub-routing structure
-  { path: 'services/services-list', component: ServicesListComponent},
-  { path: 'services/onboard-vnf-vm', component: OnboardVnfVmComponent},
-  { path: 'alarm', component: AlarmComponent},
-  { path: 'performance', component: PerformanceComponent},
-  { path: 'performance/performance-vnf', component: PerformanceVnfComponent},
-  { path: 'performance/performance-vm', component: PerformanceVmComponent},
+  { path: 'services/services-list', component: ServicesListComponent },
+  { path: 'services/onboard-vnf-vm', component: OnboardVnfVmComponent },
+  { path: 'alarm', component: AlarmComponent },
+  { path: 'performance', component: PerformanceComponent },
+  { path: 'performance/performance-vnf', component: PerformanceVnfComponent },
+  { path: 'performance/performance-vm', component: PerformanceVmComponent },
   { path: 'network', component: CcvpnNetworkComponent },
-  { path: '**', redirectTo: 'home', pathMatch: 'full'}
+  { path: '**', redirectTo: 'home', pathMatch: 'full' }
 ];
 
 @NgModule({
-  imports: [ RouterModule.forRoot(routes) ],
-  exports: [ RouterModule ]
+  imports: [RouterModule.forRoot(routes)],
+  exports: [RouterModule]
 })
-export class AppRoutingModule {}
+export class AppRoutingModule { }
index 1e0f718..7e91ee2 100644 (file)
@@ -25,7 +25,7 @@ nz-layout nz-sider ul li i {
   height: 16px;
 }
 nz-layout nz-sider ul li .icon-services {
-  background: url(../assets/images/icon.png) no-repeat 0px -16px;
+  background: url(assets/images/icon.png) no-repeat 0px -16px;
 }
 nz-layout nz-sider ul li ul li {
   font-size: 12px;
index 2bd6067..a0838c3 100644 (file)
@@ -23,7 +23,9 @@
         <a routerLink="home">
           <span title>
             <i>
-              <img src="{{activeMenuBar[0] == true ? 'assets/images/home-icon-active.png':'assets/images/home-icon.png'}}" alt="home">
+              <img
+                src="{{activeMenuBar[0] == true ? 'assets/images/home-icon-active.png':'assets/images/home-icon.png'}}"
+                alt="home">
             </i>
             <span> {{"i18nTextDefine_Home" | translate}} </span>
           </span>
       <li nz-menu-item [ngClass]="{'activeMenuBar':activeMenuBar[1] == true}" (click)="thisActive(1)">
         <a routerLink="management">
           <span title>
-           <i>
-              <img src="{{activeMenuBar[1] == true ? 'assets/images/customer-icon-active.png':'assets/images/customer-icon.png'}}" alt="home">
+            <i>
+              <img
+                src="{{activeMenuBar[1] == true ? 'assets/images/customer-icon-active.png':'assets/images/customer-icon.png'}}"
+                alt="home">
             </i>
             <span> {{"i18nTextDefine_Customer" | translate}} </span>
           </span>
@@ -45,7 +49,9 @@
         <a href="#" onclick="window.open('http://172.30.1.80:5601/app/kibana#/dashboards')">
           <span title>
             <i>
-              <img src="{{activeMenuBar[2] == true ? 'assets/images/monitor-icon-active.png':'assets/images/monitor-icon.png'}}" alt="home">
+              <img
+                src="{{activeMenuBar[2] == true ? 'assets/images/monitor-icon-active.png':'assets/images/monitor-icon.png'}}"
+                alt="home">
             </i>
             <span> {{"i18nTextDefine_Monitor" | translate}} </span>
           </span>
       </li>
       <hr>
       <li nz-submenu [ngClass]="{'activeMenuBar':activeMenuBar[3] == true}" (click)="thisActive(3)">
-        <span title>  <i>
-              <img src="{{activeMenuBar[3] == true ? 'assets/images/Services-icon-active.png':'assets/images/Services-icon.png'}}" alt="home">
-            </i> {{"i18nTextDefine_Services" | translate}} </span>
+        <span title> <i>
+            <img
+              src="{{activeMenuBar[3] == true ? 'assets/images/Services-icon-active.png':'assets/images/Services-icon.png'}}"
+              alt="home">
+          </i> {{"i18nTextDefine_Services" | translate}} </span>
         <ul>
-          <li nz-menu-item [ngClass]="{'activeMenuList':activeMenuList[0] == true}" (click)="thisListActive(0)"><a routerLink='services/services-list'> {{"i18nTextDefine_ServicesList" | translate}} </a></li>
-          <li nz-menu-item [ngClass]="{'activeMenuList':activeMenuList[1] == true}" (click)="thisListActive(1)"><a routerLink='services/onboard-vnf-vm'> {{"i18nTextDefine_PackageManagement" | translate}} </a></li>
+          <li nz-menu-item [ngClass]="{'activeMenuList':activeMenuList[0] == true}" (click)="thisListActive(0)"><a
+              routerLink='services/services-list'> {{"i18nTextDefine_ServicesList" | translate}} </a></li>
+          <li nz-menu-item [ngClass]="{'activeMenuList':activeMenuList[1] == true}" (click)="thisListActive(1)"><a
+              routerLink='services/onboard-vnf-vm'> {{"i18nTextDefine_PackageManagement" | translate}} </a></li>
         </ul>
       </li>
       <!-- <hr>
       <li nz-menu-item [ngClass]="{'activeMenuBar':activeMenuBar[4] == true}" (click)="thisActive(4)">
         <a routerLink="network">
           <span title>
-             <i>
-              <img src="{{activeMenuBar[4] == true ? 'assets/images/network-icon-active.png':'assets/images/network-icon.png'}}" alt="home">
+            <i>
+              <img
+                src="{{activeMenuBar[4] == true ? 'assets/images/network-icon-active.png':'assets/images/network-icon.png'}}"
+                alt="home">
             </i>
             <span> {{"i18nTextDefine_NetworkTopology" | translate}} </span>
           </span>
     </ul>
   </nz-sider>
   <nz-layout class="main">
-      <router-outlet></router-outlet>
+    <router-outlet></router-outlet>
   </nz-layout>
-</nz-layout>
+</nz-layout>
\ No newline at end of file
index 653c52e..32387b4 100644 (file)
@@ -3,7 +3,7 @@ import { RouterTestingModule } from '@angular/router/testing';
 import { NgZorroAntdModule } from 'ng-zorro-antd';
 import { HttpClientTestingModule } from '@angular/common/http/testing';
 import { TranslateModule, TranslateLoader, TranslateService, TranslateFakeLoader} from '@ngx-translate/core';
-import {HomesService} from "./homes.service";
+import {HomesService} from "./core/services/homes.service";
 
 import { AppComponent } from './app.component';
 
index 2955594..d654900 100644 (file)
@@ -15,8 +15,8 @@
 */
 import {Component} from '@angular/core';
 import {TranslateService} from '@ngx-translate/core';
-import {MyhttpService} from "./myhttp.service";
-import {HomesService} from "./homes.service";
+import {MyhttpService} from "./core/services/myhttp.service";
+import {HomesService} from "./core/services/homes.service";
 
 
 @Component({
index 9c69124..fa4b6bf 100644 (file)
@@ -24,7 +24,7 @@ import { NZ_I18N, en_US } from 'ng-zorro-antd';
 import { NgxEchartsModule } from 'ngx-echarts';
 
 import { TranslateModule, TranslateLoader } from '@ngx-translate/core';
-import {TranslateHttpLoader} from '@ngx-translate/http-loader';
+import { TranslateHttpLoader } from '@ngx-translate/http-loader';
 export function HttpLoaderFactory(httpClient: HttpClient) {
   return new TranslateHttpLoader(httpClient, './assets/i18n/', '.json');
 }
@@ -34,52 +34,55 @@ import { AppRoutingModule } from './app-routing.module';
 //Registered language pack
 import { registerLocaleData } from '@angular/common';
 import en from '@angular/common/locales/en';
-registerLocaleData(en);  
+registerLocaleData(en);
 
 //Custom component
 import { AppComponent } from './app.component';
-import { HomeComponent } from './home/home.component';
-import { ManagementComponent } from './management/management.component';
-import { ServicesComponent } from './services/services.component';
-import { ServicesListComponent } from './services/services-list/services-list.component';
-import { OnboardVnfVmComponent } from './services/onboard-vnf-vm/onboard-vnf-vm.component';
-import { AlarmComponent } from './alarm/alarm.component';
-import { PerformanceComponent } from './performance/performance.component';
-import { PerformanceVnfComponent } from './performance/performance-vnf/performance-vnf.component';
-import { PerformanceVmComponent } from './performance/performance-vm/performance-vm.component';
-import { CcvpnNetworkComponent } from './ccvpn-network/ccvpn-network.component';
-import { CcvpnDetailComponent } from './ccvpn-detail/ccvpn-detail.component';
-import { CcvpnCreationComponent } from './ccvpn-creation/ccvpn-creation.component';
+import { HomeComponent } from './views/home/home.component';
+import { ManagementComponent } from './views/management/management.component';
+import { ServicesComponent } from './views/services/services.component';
+import { ServicesListComponent } from './views/services/services-list/services-list.component';
+import { OnboardVnfVmComponent } from './views/services/onboard-vnf-vm/onboard-vnf-vm.component';
+import { AlarmComponent } from './views/alarm/alarm.component';
+import { PerformanceComponent } from './views/performance/performance.component';
+import { PerformanceVnfComponent } from './views/performance/performance-vnf/performance-vnf.component';
+import { PerformanceVmComponent } from './views/performance/performance-vm/performance-vm.component';
+import { CcvpnNetworkComponent } from './views/ccvpn-network/ccvpn-network.component';
+import { CcvpnDetailComponent } from './views/ccvpn-detail/ccvpn-detail.component';
+import { CcvpnCreationComponent } from './views/ccvpn-creation/ccvpn-creation.component';
 
-import { DetailsComponent } from './components/details/details.component';
-import { GraphiclistComponent } from './components/graphiclist/graphiclist.component';
-import { E2eCreationComponent } from './components/e2e-creation/e2e-creation.component';
+import { DetailsComponent } from './shared/components/details/details.component';
+import { GraphiclistComponent } from './shared/components/graphiclist/graphiclist.component';
+import { E2eCreationComponent } from './shared/components/e2e-creation/e2e-creation.component';
 
-import { BarComponent } from './components/charts/bar/bar.component';
-import { LineComponent } from './components/charts/line/line.component';
-import { PieComponent } from './components/charts/pie/pie.component';
+import { BarComponent } from './shared/components/charts/bar/bar.component';
+import { LineComponent } from './shared/components/charts/line/line.component';
+import { PieComponent } from './shared/components/charts/pie/pie.component';
 
-import {PathLocationStrategy, LocationStrategy, HashLocationStrategy} from '@angular/common';
+import { PathLocationStrategy, LocationStrategy, HashLocationStrategy } from '@angular/common';
 // Custom service
-import { MyhttpService } from './myhttp.service';
-import { HomesService } from './homes.service';
-import { onboardService } from './onboard.service';
-import { networkHttpservice } from './networkHttpservice.service';
-import { PerformanceDetailsComponent } from './components/performance-details/performance-details.component';
-import { E2eDetailComponent } from './components/e2e-detail/e2e-detail.component';
-import { CustomerComponent } from './components/customer/customer.component';
-import { ManagemencsService } from './managemencs.service';
-import { FcapsComponent } from './fcaps/fcaps.component';
+import { MyhttpService } from './core/services/myhttp.service';
+import { HomesService } from './core/services/homes.service';
+import { onboardService } from './core/services/onboard.service';
+import { networkHttpservice } from './core/services/networkHttpservice.service';
+import { PerformanceDetailsComponent } from './shared/components/performance-details/performance-details.component';
+import { E2eDetailComponent } from './shared/components/e2e-detail/e2e-detail.component';
+import { CustomerComponent } from './shared/components/customer/customer.component';
+import { ManagemencsService } from './core/services/managemencs.service';
+import { FcapsComponent } from './views/fcaps/fcaps.component';
+import { TestComponent } from './test/test.component';
+import { TextService } from './core/services/text.service';
 
 @NgModule({
-  providers   : [ 
+  providers: [
     { provide: LocationStrategy, useClass: HashLocationStrategy },
     { provide: NZ_I18N, useValue: en_US },
     MyhttpService,
     HomesService,
     onboardService,
     networkHttpservice,
-    ManagemencsService 
+    ManagemencsService,
+    TextService
   ],
   declarations: [
     AppComponent,
@@ -90,7 +93,7 @@ import { FcapsComponent } from './fcaps/fcaps.component';
     OnboardVnfVmComponent,
 
     AlarmComponent,
-    
+
     PerformanceComponent,
     PerformanceVnfComponent,
     PerformanceVmComponent,
@@ -105,9 +108,10 @@ import { FcapsComponent } from './fcaps/fcaps.component';
     CcvpnDetailComponent,
     CcvpnCreationComponent,
     E2eDetailComponent,
-    CustomerComponent ,
+    CustomerComponent,
     PerformanceDetailsComponent,
-    FcapsComponent   
+    FcapsComponent,
+    TestComponent
   ],
   imports: [
     BrowserModule,
@@ -125,6 +129,6 @@ import { FcapsComponent } from './fcaps/fcaps.component';
     NgxEchartsModule,
     AppRoutingModule
   ],
-  bootstrap: [ AppComponent ]
+  bootstrap: [AppComponent]
 })
 export class AppModule { }
\ No newline at end of file
diff --git a/usecaseui-portal/src/app/ccvpn-creation/ccvpn-creation.component.html b/usecaseui-portal/src/app/ccvpn-creation/ccvpn-creation.component.html
deleted file mode 100644 (file)
index 1645325..0000000
+++ /dev/null
@@ -1,272 +0,0 @@
-<!--
-    Copyright (C) 2019 CMCC, Inc. and others. All rights reserved.
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-
-            http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<div class="model creation-model">
-    
-    <div class="top-title">
-        <h3 class="title fl">{{createParams.commonParams.templateType}}  {{"i18nTextDefine_InstanceCreation" | translate}} </h3>
-        <div class="fl" style="width: 20%">
-            <button class="submit" nz-button (click)="submit()"><span> {{"i18nTextDefine_Create" | translate}} </span>
-            </button>
-            <button class="back" nz-button (click)="goback()"></button>
-        </div>
-    </div>
-    <!-- chart -->
-    <div class="chart">
-       <span style="padding: 25px;display: inline-block;">
-            {{"i18nTextDefine_InstanceTopology" | translate}}
-       </span>
-        <div id="createChart">
-            <svg width="100%" height="100%">
-                <image id="domain" xlink:href="assets/images/domain1.png" style="width: 15%"
-                       x="40%" y="0"/>
-            </svg>
-        </div>
-    </div>
-    <!--Template resolution : Three major items-->
-    <div class="creation">
-        <nz-tabset [nzTabPosition]="'top'" [nzShowPagination]=false [nzTabBarGutter]="'2'" [nzTabBarStyle]=tabBarStyle>
-            <nz-tab nzTitle="Service Info">
-                <div class="service-title" style="clear: both">
-                    <span style="color: red;">*</span><span class="lable" style="width: 60px">name:</span>
-                    <input nz-input [(ngModel)]="this.templateParameters.service['name']" required="required">
-                    <span style="color: red;">*</span><span class="lable">description:</span>
-                    <input nz-input [(ngModel)]="this.templateParameters.service['description']">
-                </div>
-            </nz-tab>
-            <nz-tab nzTitle="Sdwanvpnresource List">
-                <div class="sotnvpn clearfix">
-                    <div style="clear: both;height: 10px">
-                        <h3 style="float: left;color: #3C4F8C">sdwanVPN List</h3>
-                        <button nz-button (click)="addSotnvpn()" class="addListBtn"
-                                style="float: right;margin-right: 10px"><i class="anticon anticon-plus"
-                                                                           style="transform: scale(1.2);font-weight: 700"></i> {{"i18nTextDefine_Add" | translate}}
-                        </button>
-                    </div>
-                    <nz-table #sotnVpnTable [nzData]="sotnVpnTableData"
-                              [nzShowPagination]="false"
-                              nzSize="small">
-                        <thead>
-                        <tr>
-                            <th width="30%"> NO.</th>
-                            <th *ngFor="let key of getKeys(this.sotnInfo)">{{key.split("_")[1] || key}}</th>
-                            <th width="10%"> Action</th>
-                        </tr>
-                        </thead>
-                        <tbody>
-                        <tr *ngFor="let item of sotnVpnTable.data; let i = index; ">
-                            <td>{{i+1}}</td>
-                            <td *ngFor="let keys of getKeys(this.sotnInfo);let a = index;">
-                                {{item[keys]}}
-                            </td>
-                            <td>
-                                <span class="action" (click)="editSotnVpn(i+1)"><i class="anticon anticon-edit"></i></span>
-                                &nbsp;
-                                <span class="action" (click)="deleteSotnVpn(i+1)"><i
-                                        class="anticon anticon-delete"></i></span>
-                            </td>
-                        </tr>
-                        </tbody>
-                    </nz-table>
-                </div>
-            </nz-tab>
-            <nz-tab nzTitle="Sdwansiteresource List">
-                <div class="site">
-                    <div style="height: 10px">
-                        <h3 style="float: left;color: #3C4F8C">Site List</h3>
-                        <button nz-button (click)="addSite()" class="addListBtn"
-                                style="float: right;margin-right: 10px"><i class="anticon anticon-plus"
-                                                                           style="transform: scale(1.2);font-weight: 700"></i>{{"i18nTextDefine_Add" | translate}}
-                        </button>
-                    </div>
-                    <nz-table #siteTable [nzData]="siteTableData"
-                              [nzShowPagination]="false"
-                              nzSize="small">
-                        <thead>
-                        <tr>
-                            <th nzWidth="10%"> NO.</th>
-                            <th *ngFor="let key of getKeys(this.siteBaseData)">{{key.split("_")[1] || key}}</th>
-                            <th nzWidth="20%" style="text-align: center"> Action</th>
-                        </tr>
-                        </thead>
-                        <tbody>
-                        <tr *ngFor="let item of siteTable.data; let i = index; ">
-                            <td>{{i+1}}</td>
-                            <td *ngFor="let keys of getKeys(this.siteBaseData);let a = index;">
-                                {{item[keys]}}
-                            </td>
-                            <td style="text-align: center">
-                                <span class="action" (click)="editSite(i+1)"><i class="anticon anticon-edit"></i></span>
-                                &nbsp;
-                                <span class="action" (click)="deleteSite(i+1)"><i
-                                        class="anticon anticon-delete"></i></span>
-                            </td>
-                        </tr>
-                        </tbody>
-                    </nz-table>
-                </div>
-            </nz-tab>
-        </nz-tabset>
-    </div>
-    <!-- sotnVpnmodel -->
-    <div class="sotnnpnmodel" *ngIf="sotnVpnModelShow">
-        <h3> {{"i18nTextDefine_Base" | translate}} </h3>
-        <div class="inputs">
-            <ul>
-                <li *ngFor="let item of this.templateParameters.sotnvpn.sdwanvpnresource_list">
-                    <span *ngIf="item.required" style="color: red;margin: 0;margin-right: -5px;">*</span><span>{{item.lableShow}}:</span>
-                    <input nz-input [(ngModel)]="sotnInfo[item.lable]" title="{{item.description ? item.description:null }}"
-                           required="{{item.required==true ? 'required':null}}"></li>
-            </ul>
-        </div>
-        <div>
-            <h3>Sdwansitelan List</h3>
-            <div>
-                <div style="width: 100%;text-align: right">
-                    <button nz-button (click)="addSotnSdwansitelan()" class="addListBtn"><i class="anticon anticon-plus"
-                                                                                   style="transform: scale(1.2);font-weight: 700;"></i>{{"i18nTextDefine_Add" | translate}}
-                    </button>
-                </div>
-                <table class="siteWanTab">
-                    <thead>
-                    <tr>
-                        <th width="4%"> NO.</th>
-                        <th *ngFor="let key of getKeys(this.sotnSdwansitelanParams)">{{key}}</th>
-                        <th width="7%"> Action</th>
-                    </tr>
-                    </thead>
-                    <tbody>
-                    <tr *ngFor="let item of sotnSdwansitelanData; let i = index;"
-                        [ngClass]="{'tr-border':item.tabInputShowSdwansitelan ==false}">
-                        <td>{{i+1}}</td>
-                        <td *ngFor="let key of getKeys(item);let a = index;">
-                            <span *ngIf="!tabInputShowSdwansitelan[i]"
-                                  title="{{this.templateParameters.sotnvpn.sdwansitelan_list[a]['lable']==getKeys(item)[a] ? this.templateParameters.site.sdwansitewan_list[a].description:null}}">{{item[key]}}</span>
-                            <input nz-input [(ngModel)]="item[key]" *ngIf="tabInputShowSdwansitelan[i] "
-                                   title="{{this.templateParameters.sotnvpn.sdwansitelan_list[a]['lable']==getKeys(item)[a] ? this.templateParameters.site.sdwansitewan_list[a].description:null}}"
-                                   required="{{item.required==true ? 'required':null}}">
-                        </td>
-                        <td>
-                            <span class="action" (click)="editSotnSdwansitelan(i+1,item,sotnSdwansitelanData)"><i
-                                    class="anticon anticon-edit" style="margin: 0 5px;"></i></span>
-                            <span class="action" (click)="deleteSotnSdwansitelan(i+1,item,sotnSdwansitelanData)"><i
-                                    class="anticon anticon-delete"></i></span>
-                        </td>
-                    </tr>
-                    </tbody>
-                </table>
-            </div>
-        </div>
-
-        <div class="action">
-            <button nz-button nzType="primary" (click)="addSotnVpn_cancel()">{{"i18nTextDefine_Cancel" | translate}}</button>
-            <button nz-button nzType="primary" (click)="addSotnVpn_OK()">{{"i18nTextDefine_Add" | translate}}</button>
-        </div>
-    </div>
-    <!-- sitemodel -->
-    <div class="sitemodel" *ngIf="siteModelShow">
-        <h3> {{"i18nTextDefine_Base" | translate}} </h3>
-        <div class="inputs">
-            <ul>
-                <li *ngFor="let item of this.templateParameters.site.sdwansiteresource_list">
-                    <span *ngIf="item.required" style="color: red;margin: 0;margin-right: -5px;">*</span><span>{{item.lableShow}}:</span>
-                    <input nz-input [(ngModel)]="siteBaseData[item.lable]" title="{{item.description}}"
-                           required="{{item.required==true ? 'required':null}}"></li>
-            </ul>
-        </div>
-        <div>
-            <h3>Sdwandevice</h3>
-            <div>
-                <div style="width: 100%;text-align: right">
-                    <button nz-button (click)="addSdwanDevice()" class="addListBtn"><i class="anticon anticon-plus"
-                                                                                   style="transform: scale(1.2);font-weight: 700;"></i>{{"i18nTextDefine_Add" | translate}}
-                    </button>
-                </div>
-                <table class="siteWanTab">
-                    <thead>
-                    <tr>
-                        <th width="4%"> NO.</th>
-                        <th *ngFor="let key of getKeys(this.siteCpeData)">{{key}}</th>
-                        <th width="7%"> Action</th>
-                    </tr>
-                    </thead>
-                    <tbody>                    
-                    <tr *ngFor="let item of siteSdwanDevice; let i = index;"
-                        [ngClass]="{'tr-border':item.tabInputShowDevice ==false}">
-                        <td>{{i+1}}</td>
-                        <td *ngFor="let key of getKeys(item);let a = index;">
-                            <span *ngIf="!tabInputShowDevice[i]"
-                                  title="{{this.templateParameters.site.sdwandevice_list[a]['lable']==getKeys(item)[a] ? this.templateParameters.site.sdwandevice_list[a].description:null}}">{{item[key]}}</span>
-                            <input nz-input [(ngModel)]="item[key]" *ngIf="tabInputShowDevice[i] "
-                                   title="{{this.templateParameters.site.sdwandevice_list[a]['lable']==getKeys(item)[a] ? this.templateParameters.site.sdwandevice_list[a].description:null}}"
-                                   required="{{item.required==true ? 'required':null}}">
-                        </td>
-                        <td>
-                            <span class="action" (click)="editDevicePort(i+1,item,siteSdwanDevice)"><i
-                                    class="anticon anticon-edit" style="margin: 0 5px;"></i></span>
-                            <span class="action" (click)="deleteDevicePort(i+1,item,siteSdwanDevice)"><i
-                                    class="anticon anticon-delete"></i></span>
-                        </td>
-                    </tr>
-                    </tbody>
-                </table>
-            </div>
-
-
-            <h3>Sdwansitewan List</h3>
-            <div>
-                <div style="width: 100%;text-align: right">
-                    <button nz-button (click)="addSiteWan()" class="addListBtn"><i class="anticon anticon-plus"
-                                                                                   style="transform: scale(1.2);font-weight: 700;"></i>{{"i18nTextDefine_Add" | translate}}
-                    </button>
-                </div>
-                <table class="siteWanTab">
-                    <thead>
-                    <tr>
-                        <th width="4%"> NO.</th>
-                        <th *ngFor="let key of getKeys(this.siteWanParams)">{{key}}</th>
-                        <th width="7%"> Action</th>
-                    </tr>
-                    </thead>
-                    <tbody>
-                    <tr *ngFor="let item of siteWanData; let i = index;"
-                        [ngClass]="{'tr-border':item.tabInputShowWanPort ==false}">
-                        <td>{{i+1}}</td>
-                        <td *ngFor="let key of getKeys(item);let a = index;">
-                            <span *ngIf="!tabInputShowWanPort[i]"
-                                  title="{{this.templateParameters.site.sdwansitewan_list[a]['lable']==getKeys(item)[a] ? this.templateParameters.site.sdwansitewan_list[a].description:null}}">{{item[key]}}</span>
-                            <input nz-input [(ngModel)]="item[key]" *ngIf="tabInputShowWanPort[i] "
-                                   title="{{this.templateParameters.site.sdwansitewan_list[a]['lable']==getKeys(item)[a] ? this.templateParameters.site.sdwansitewan_list[a].description:null}}"
-                                   required="{{item.required==true ? 'required':null}}">
-                        </td>
-                        <td>
-                            <span class="action" (click)="editWanPort(i+1,item,siteWanData)"><i
-                                    class="anticon anticon-edit" style="margin: 0 5px;"></i></span>
-                            <span class="action" (click)="deleteWanPort(i+1,item,siteWanData)"><i
-                                    class="anticon anticon-delete"></i></span>
-                        </td>
-                    </tr>
-                    </tbody>
-                </table>
-            </div>
-        </div>
-
-        <div class="action">
-            <button nz-button nzType="primary" (click)="addsite_cancel()">{{"i18nTextDefine_Cancel" | translate}}</button>
-            <button nz-button nzType="primary" (click)="addsite_OK()">{{"i18nTextDefine_Add" | translate}}</button>
-        </div>
-    </div>
-    <div class="mask" *ngIf="siteModelShow || sotnVpnModelShow"></div>
-</div>
diff --git a/usecaseui-portal/src/app/components/e2e-creation/e2e-creation.component.ts b/usecaseui-portal/src/app/components/e2e-creation/e2e-creation.component.ts
deleted file mode 100644 (file)
index 5446dc5..0000000
+++ /dev/null
@@ -1,354 +0,0 @@
-/*
-    Copyright (C) 2019 CMCC, Inc. and others. All rights reserved.
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-
-            http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
-*/
-import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';
-import { MyhttpService } from '../../myhttp.service';
-import * as d3 from 'd3';
-
-@Component({
-  selector: 'app-e2e-creation',
-  templateUrl: './e2e-creation.component.html',
-  styleUrls: ['./e2e-creation.component.less']
-})
-export class E2eCreationComponent implements OnInit {
-
-  constructor( private myhttp:MyhttpService ) { }
-
-  ngOnInit() {
-        this.gete2eTemParameters(this.e2e_ns_temParametersContent);
-    this.getVimInfo();
-    this.getSdnControllers();
-  }
-
-  @Output() e2eCloseCreate = new EventEmitter();
-  @Output() nsCloseCreate = new EventEmitter();
-  @Input() createParams;
-    @Input() e2e_ns_temParametersContent;
-
-
-  // e2e serviceTemplateParameters
-  templateParameters = {
-    invariantUUID: "",
-    uuid: "",
-    name: "",
-    type: "",
-    version: "",
-    description: "",
-    category: "",
-    subcategory: "",
-    customizationUuid: "",
-    inputs:[],
-    nestedTemplates:[]
-  };
-  // ns serviceTemplateParameters
-  nsTemplateParameters = {
-    inputs:{},
-    inputs2:[],
-    vnfs:[]
-  };
-    roote2e = {
-        "name": "e2e",
-        "type": "e2e",
-        "children": []
-    };
-
-    rootns = {
-        "name": "ns",
-        "type": "ns",
-        "children": []
-    };
-
-    imgmap = {
-        '1': './assets/images/create-e2e.png',
-        '2': './assets/images/create-ns.png',
-        '3': './assets/images/create-vnf.png',
-    };
-    gete2eTemParameters(data) { //Get template parameters
-    let type = this.createParams.commonParams.templateType == "E2E Service" ? "e2e" : "ns";
-        console.log(this.createParams);
-        console.log(data);
-      if(type == "e2e"){
-        this.templateParameters = data;
-        this.templateParameters.nestedTemplates.forEach((item)=>{
-          item.inputs = item.inputs.filter((input)=>{return input.type !== "sdn_controller"});
-        });
-                    this.templateParameters.nestedTemplates.map((item,index) => {
-                        let nsIndex={
-                            "name": "ns",
-                            "type": "ns",
-                            "children": []
-                        };
-                        nsIndex.children=item.nestedTemplates.map((item,index) => {
-                            return {
-                                "name": "vnf",
-                                "type": "vnf",
-                            }
-                        });
-                        this.roote2e.children.push(nsIndex);
-                    });
-                    console.log(this.templateParameters);
-      }else if(type == "ns"){
-        if(data["model"]!=undefined && typeof data["model"]=='string'){
-          this.nsTemplateParameters = JSON.parse(data["model"]);
-        }else{
-          this.nsTemplateParameters = data;
-        }
-        this.nsTemplateParameters["inputs2"] = [];
-        let inputs = this.nsTemplateParameters.inputs;
-        for(let key in inputs){
-          this.nsTemplateParameters["inputs2"].push({name:key,type:inputs[key].type,value:inputs[key].value})
-        }
-       this.rootns.children=this.nsTemplateParameters.vnfs.map((item,index) => {
-                            return {
-                                "name": "vnf",
-                                "type": "vnf",
-                            }
-                        });
-        console.log(this.nsTemplateParameters);
-      }
-
-      this.drawImage(type)
-
-  }
-  vimInfos=[];
-  getVimInfo() {
-    this.myhttp.getVimInfo()
-    .subscribe((data)=>{
-      this.vimInfos = data.map((item)=>{return {name:item['cloud-owner'],id:item['cloud-region-id']}});
-    })
-  };
-  sdnControllers=[];
-  getSdnControllers(){
-    this.myhttp.getSdnControllers()
-    .subscribe((data)=>{
-      this.sdnControllers = data.map((item)=>{return {name:item['thirdparty-sdnc-id'],id:item['thirdparty-sdnc-id']}});
-    })
-  }
-
-  // e2e requstbody
-  service = {
-    name: "",
-    description: "",
-    COS:"",
-    EBS:"",
-    serviceInvariantUuid: "",
-    serviceUuid: "", // uuid ??
-    globalSubscriberId: "",   // "customer.id",
-    serviceType: "",    // "serviceType.value",
-    parameters: {
-      locationConstraints:[
-
-      ],
-      resources: [],
-      requestInputs: {},
-    }
-
-  }
-
-  // ns requstbody
-  ns_service = {
-    csarId: "",
-    nsName: "",
-    description: "",
-    context: {
-      globalCustomerId: "",
-      serviceType: ""
-    }
-  };
-  ns_service2 = {
-    locationConstraints: [
-
-    ],
-    additionalParamForNs: {
-    }
-  };
-  submit(){
-    let type = this.createParams.commonParams.templateType == "E2E Service" ? "e2e" : "ns";
-    if(type == "e2e"){
-      this.service.serviceInvariantUuid = this.templateParameters.invariantUUID;
-      this.service.serviceUuid = this.templateParameters.uuid;
-      this.service.globalSubscriberId = this.createParams.commonParams.customer.id;
-      this.service.serviceType = this.createParams.commonParams.serviceType.name;
-  
-      this.templateParameters.inputs.forEach((ipnut)=>{
-        this.service.parameters.requestInputs[ipnut.name] = ipnut.value == undefined ? ipnut.defaultValue : ipnut.value; 
-      });
-  
-      this.templateParameters.nestedTemplates.forEach((item)=>{
-        let nsService = {
-          resourceName: item.name,
-          resourceInvariantUuid: item.invariantUUID,
-          resourceUuid: item.uuid,
-          resourceCustomizationUuid: item.customizationUuid,
-          parameters: {
-            locationConstraints:[],
-            resources:[],
-            requestInputs:{}
-          }
-        };
-        item.inputs.forEach((input)=>{
-          if(input.type == "vf_location"){
-            let location = {
-              vnfProfileId: input.name,
-              locationConstraints:{
-                                cloudOwner: input.value.name,
-                                cloudRegionId:input.value.id
-              }
-            };
-            nsService.parameters.locationConstraints.push(location);
-          }else{
-            nsService.parameters.requestInputs[input.name] = input.value == undefined ? input.defaultValue : input.value;
-          }
-        })
-        this.service.parameters.resources.push(nsService);
-      })
-           console.log(this.service);
-      this.service.parameters.requestInputs['orchestrator'] = this.createParams.orchestrator.name;
-      if(this.createParams.isSol005Interface){
-          this.service.parameters.requestInputs['isSol005Interface'] = this.createParams.isSol005Interface;
-      }
-      this.e2eCloseCreate.emit({service:this.service}); 
-
-    }else if(type == "ns"){
-      //create ns instance
-      this.ns_service.csarId = this.createParams.template.id;
-      this.ns_service.context.globalCustomerId = this.createParams.commonParams.customer.id;
-      this.ns_service.context.serviceType = this.createParams.commonParams.serviceType.name;
-
-      this.nsTemplateParameters.inputs2.forEach((input)=>{
-        this.ns_service2.additionalParamForNs[input.name] = input.value == undefined ? input.defaultValue : input.value; 
-      })
-      this.nsTemplateParameters.vnfs.forEach((vnf)=>{
-        let vnfparams = {
-          vnfProfileId: vnf.properties.id,
-          locationConstraints: {
-                        cloudOwner: vnf.value.name,
-                        cloudRegionId:vnf.value.id
-          }
-        }
-        this.ns_service2.locationConstraints.push(vnfparams);
-      });
-      console.log(this.ns_service2);
-
-      let requstbody = {
-        step1:this.ns_service,
-        step2:this.ns_service2
-      };
-      this.nsCloseCreate.emit(requstbody); 
-    }
-
-  }
-  goback(){
-    this.e2eCloseCreate.emit(); 
-  }
-
-    
-
-    drawImage(type) {
-        if (type == "e2e") {
-            this.render(this.roote2e, this.imgmap)
-        } else if (type == "ns") {
-            this.render(this.rootns, this.imgmap)
-        }
-
-
-    }
-
-    // e2e or NS draw d3 topo
-    render(data, imgmap) {
-        let width = document.getElementById("createChart").clientWidth,
-            height = document.getElementById("createChart").clientHeight;
-        let cluster = d3.layout.tree()
-            .size([width, height]);
-        let diagonal = d3.svg.diagonal()
-            .projection(function (d) {
-                return [d.x-18, d.y+40];
-            });
-        let svg = d3.select("svg");
-
-        //marker
-        let marker =
-            svg.append("marker")
-                .attr("id", "resolved")
-                .attr("markerUnits", "strokeWidth")
-                .attr("markerUnits", "userSpaceOnUse")
-                .attr("viewBox", "0 -5 10 10")
-                .attr("refX", 22)
-                .attr("refY", 0)
-                .attr("markerWidth", 20)
-                .attr("markerHeight", 20)
-                .attr("orient", "auto")
-                .attr("stroke-width", 1)
-                .append("circle")
-                .attr("cx", 5)
-                .attr("cy", 0)
-                .attr("r", 2)
-                .attr("stroke-width", 1)
-                .style("stroke", "#2F8BF7")
-                .attr('fill', 'white');
-        let i = 0;
-        let nodes = cluster.nodes(data).reverse();
-        nodes.forEach(function (d) {
-            d.y = d.depth * 200+100;
-
-        });
-
-        let links = cluster.links(nodes);
-
-        let linkEnter = svg.selectAll("path.link")
-            .data(links);
-
-        linkEnter.enter().append("path")
-            .attr("class", "link")
-            .attr("d", diagonal)
-            .style("stroke", "#2F8BF7")
-            .style('stroke-width', '1px')
-            .attr("marker-end", "url(#resolved)")
-            .style("fill", "none")
-            // .style("fill-opacity", 1)
-            .attr("id", function (d, i) {
-                return "mypath" + i;
-            });
-
-        let node = svg.selectAll(".node")
-            .data(nodes)
-            .enter()
-            .append("g")
-            .attr("class", "node")
-            .attr("transform", function (d) {
-                return "translate(" + (d.x + -50) + "," + (d.y) + ")";
-            });
-
-        node.append('image')
-            .attr('xlink:href', function (d) {
-                if(d.type=="e2e"){
-                    return imgmap[1];
-                }else if(d.type=="ns"){
-                    return imgmap[2];
-                }else if(d.type=="vnf"){
-                    return imgmap[3];
-                }
-
-            })
-            .style('width', '12%')
-            .style("cursor","pointer")
-            .attr("x", 0)
-            .attr("y", 0)
-            .attr("rx", 3);
-
-
-    }
-
-}
diff --git a/usecaseui-portal/src/app/components/e2e-detail/e2e-detail.component.ts b/usecaseui-portal/src/app/components/e2e-detail/e2e-detail.component.ts
deleted file mode 100644 (file)
index 5affeb9..0000000
+++ /dev/null
@@ -1,243 +0,0 @@
-/*
-    Copyright (C) 2019 CMCC, Inc. and others. All rights reserved.
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-
-            http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
-*/
-
-import {Component, OnInit, Input, Output, EventEmitter} from '@angular/core';
-import {MyhttpService} from '../../myhttp.service';
-import * as d3 from 'd3';
-
-@Component({
-  selector: 'app-e2e-detail',
-  templateUrl: './e2e-detail.component.html',
-  styleUrls: ['./e2e-detail.component.less']
-})
-export class E2eDetailComponent implements OnInit {
-
-  constructor(private myhttp: MyhttpService) {
-  }
-
-    ngOnInit() {
-        this.dataInit();
-    }
-
-    @Input() detailParams;
-
-    @Output() closeDetail = new EventEmitter();
-    serviceInstanceName: any;
-    serviceType: any;
-    input_parameters: any;
-
-    // e2e
-    service = {
-        name: "",
-        description: "",
-    };
-    e2e_nestedTemplates = [];
-    e2e_requestInputs: any;
-
-    ns_service = {
-        name:"",
-        description:""
-    };
-    ns_nestedTemplates = [];
-    ns_requestInputs = {};
-    roote2e = {
-        "name": "e2e",
-        "type": "e2e",
-        "children": []
-    };
-
-    rootns = {
-        "name": "ns",
-        "type": "ns",
-        "children": []
-    };
-
-    imgmap = {
-        '1': './assets/images/create-e2e.png',
-        '2': './assets/images/create-ns.png',
-        '3': './assets/images/create-vnf.png',
-    };
-
-    getKeys(item) {
-        return Object.keys(item);
-    }
-
-    dataInit() {
-        console.log(this.detailParams);
-        this.serviceInstanceName = this.detailParams['service-instance-name'] || this.detailParams["nsName"];
-        if (this.detailParams.serviceDomain == 'E2E Service'){
-            this.input_parameters = JSON.stringify(this.detailParams['input-parameters']);
-            this.input_parameters = JSON.parse(this.input_parameters);
-            console.log(this.input_parameters);
-            this.service = {
-                name:this.input_parameters.service.name,
-                description: this.input_parameters.service.description,
-            };
-            if(this.input_parameters.service.parameters.requestInputs!=undefined && Object.keys(this.input_parameters.service.parameters.requestInputs).length>0){
-              this.e2e_requestInputs = this.input_parameters.service.parameters.requestInputs;
-            }
-            if(this.input_parameters.service.parameters.resources!=undefined && this.input_parameters.service.parameters.resources.length>0){
-                this.input_parameters.service.parameters.resources.map((item,i) => {
-                    let nestedTemplates={
-                        name:null,
-                        vnfs:[]
-                    };
-                    nestedTemplates.name= item.resourceName;
-                    item.parameters.locationConstraints.map((its,k) => {
-                        nestedTemplates.vnfs.push({
-                            "vf_location":its.locationConstraints.cloudOwner
-                        })
-                    });
-                    this.e2e_nestedTemplates.push(nestedTemplates);
-
-                    let nsIndex={
-                        "name": "ns",
-                        "type": "ns",
-                        "children": []
-                    };
-                    nsIndex.children=item.parameters.locationConstraints.map((itemits,index) => {
-                        return {
-                            "name": "vnf",
-                            "type": "vnf",
-                        }
-                    });
-                    this.roote2e.children.push(nsIndex);
-                });
-                console.log(this.e2e_nestedTemplates);
-                console.log(this.e2e_requestInputs);
-            }
-        }else if(this.detailParams.serviceDomain == 'Network Service'){
-            this.ns_service = {
-                name:this.detailParams.name || this.detailParams['service-instance-name'],
-                description: this.detailParams.description || null
-            };
-            if(this.detailParams.requestInputs!=undefined && Object.keys(this.detailParams.requestInputs).length>0){
-                this.ns_requestInputs = this.detailParams.requestInputs;
-            }
-            this.ns_nestedTemplates = this.detailParams.childServiceInstances;
-            this.rootns.children=this.ns_nestedTemplates.map((item,index) => {
-                return {
-                    "name": "vnf",
-                    "type": "vnf"
-                }
-            });
-            console.log(this.ns_nestedTemplates);
-            console.log(this.ns_requestInputs);
-        }
-        this.drawImage(this.detailParams.serviceDomain)
-    }
-
-    goback() {
-        this.closeDetail.emit();
-    }
-
-  drawImage(type) {
-    if (type == "E2E Service") {
-      this.render(this.roote2e, this.imgmap)
-    } else if (type == "Network Service") {
-      this.render(this.rootns, this.imgmap)
-    }
-
-
-  }
-
-  // draw d3 charts
-  render(data, imgmap) {
-    let width = document.getElementById("createChart").clientWidth,
-      height = document.getElementById("createChart").clientHeight;
-    let cluster = d3.layout.tree()
-      .size([width, height]);
-    let diagonal = d3.svg.diagonal()
-      .projection(function (d) {
-        return [d.x-18, d.y+40];
-      });
-    let svg = d3.select("svg");
-
-    //marker
-    let marker =
-      svg.append("marker")
-        .attr("id", "resolved")
-        .attr("markerUnits", "strokeWidth")
-        .attr("markerUnits", "userSpaceOnUse")
-        .attr("viewBox", "0 -5 10 10")
-        .attr("refX", 22)
-        .attr("refY", 0)
-        .attr("markerWidth", 20)
-        .attr("markerHeight", 20)
-        .attr("orient", "auto")
-        .attr("stroke-width", 1)
-        .append("circle")
-        .attr("cx", 5)
-        .attr("cy", 0)
-        .attr("r", 2)
-        .attr("stroke-width", 1)
-        .style("stroke", "#2F8BF7")
-        .attr('fill', 'white');
-    let i = 0;
-    let nodes = cluster.nodes(data).reverse();
-    nodes.forEach(function (d) {
-      d.y = d.depth * 200+100;
-
-    });
-
-    let links = cluster.links(nodes);
-
-    let linkEnter = svg.selectAll("path.link")
-      .data(links);
-
-    linkEnter.enter().append("path")
-      .attr("class", "link")
-      .attr("d", diagonal)
-      .style("stroke", "#2F8BF7")
-      .style('stroke-width', '1px')
-      .attr("marker-end", "url(#resolved)")
-      .style("fill", "none")
-      // .style("fill-opacity", 1)
-      .attr("id", function (d, i) {
-        return "mypath" + i;
-      });
-
-    let node = svg.selectAll(".node")
-      .data(nodes)
-      .enter()
-      .append("g")
-      .attr("class", "node")
-      .attr("transform", function (d) {
-        return "translate(" + (d.x + -50) + "," + (d.y) + ")";
-      });
-
-    node.append('image')
-      .attr('xlink:href', function (d) {
-        if(d.type=="e2e"){
-          return imgmap[1];
-        }else if(d.type=="ns"){
-          return imgmap[2];
-        }else if(d.type=="vnf"){
-          return imgmap[3];
-        }
-
-      })
-      .style('width', '12%')
-      .style("cursor","pointer")
-      .attr("x", 0)
-      .attr("y", 0)
-      .attr("rx", 3);
-
-
-  }
-
-
-}
@@ -16,7 +16,7 @@
 import { Injectable } from '@angular/core';
 import { HttpClient, HttpHeaders, HttpParams, HttpResponse } from '@angular/common/http';
 import { Observable } from 'rxjs/Observable';
-import { homeData, homeVmLineData, servicesSelectData, servicesTableData, creatensData, onboardTableData, onboardDataVNF, onboardDataPNF , baseUrl} from './dataInterface';
+import { homeData, homeVmLineData, servicesSelectData, servicesTableData, creatensData, onboardTableData, onboardDataVNF, onboardDataPNF, baseUrl } from '../models/dataInterface';
 
 @Injectable()
 export class HomesService {
@@ -29,18 +29,17 @@ export class HomesService {
     home_performanceData: this.baseUrl + "/performance/queryAllSourceNames",
     home_alarmData: this.baseUrl + "/alarm/statusCount",
     home_alarmChartData: this.baseUrl + "/alarm/diagram",
-    home_servicebarData:this.baseUrl + "",
+    home_servicebarData: this.baseUrl + "",
     home_servicebarnsData: this.baseUrlbar + "ns-packages",
     home_servicebarvnfData: this.baseUrlbar + "vnf-packages",
-    home_servicebarpnfData: this.baseUrlbar + "pnf-packages",  
+    home_servicebarpnfData: this.baseUrlbar + "pnf-packages",
     sourceNames: this.baseUrl + "/alarm/getSourceNames",
-    listSortMasters:this.baseUrl+"/listSortMasters",
-    currentLanguage:"/api/portal-auxapi/languageSetting/user/",
-
+    listSortMasters: this.baseUrl + "/listSortMasters",
+    currentLanguage: "/api/portal-auxapi/languageSetting/user/",
   }
 
-   // Time formatting milliseconds to normal
-   dateformater(vmstime) {
+  // Time formatting milliseconds to normal
+  dateformater(vmstime) {
     if (!vmstime) {
       return ''
     }
@@ -71,22 +70,22 @@ export class HomesService {
     let params = new HttpParams({ fromObject: paramsObj });
     return this.http.get<any>(this.url.home_alarmChartData, { params });
   }
-  
-   getHomeServiceBarData(){
+
+  getHomeServiceBarData() {
     return this.http.get<any>(this.url.home_servicebarData);
   }
-  getHomeServiceBarNsData(){
+  getHomeServiceBarNsData() {
     return this.http.get<any>(this.url.home_servicebarnsData);
   }
-  getHomeServiceBarVnfData(){
+  getHomeServiceBarVnfData() {
     return this.http.get<any>(this.url.home_servicebarvnfData);
   }
-  getHomeServiceBarPnfData(){
+  getHomeServiceBarPnfData() {
     return this.http.get<any>(this.url.home_servicebarpnfData);
   }
 
-   // alarm data
-   getAlarmFormData(currentPage: number, pageSize: number, sourceName?: string, priority?: string, startTime?: string, endTime?: string, vfStatus?: string) {
+  // alarm data
+  getAlarmFormData(currentPage: number, pageSize: number, sourceName?: string, priority?: string, startTime?: string, endTime?: string, vfStatus?: string) {
     return this.http.get<any>(this.baseUrl + '/alarm/' + '/' + currentPage + '/' + pageSize + '?sourceName=' + sourceName + '&priority=' + priority + '&startTime=' + startTime + '&endTime=' + endTime + '&vfStatus=' + vfStatus);
   }
 
@@ -121,12 +120,12 @@ export class HomesService {
   }
 
 
-    getListSortMasters(){
-        return this.http.get<any>(this.url.listSortMasters);
-    }
+  getListSortMasters() {
+    return this.http.get<any>(this.url.listSortMasters);
+  }
 
-    getCurrentLanguage(currentloginId){
-      let url=this.url.currentLanguage+currentloginId;
-        return this.http.get<any>(url);
-    }
+  getCurrentLanguage(currentloginId) {
+    let url = this.url.currentLanguage + currentloginId;
+    return this.http.get<any>(url);
+  }
 }
@@ -1,57 +1,57 @@
 import { Injectable } from '@angular/core';
 import { HttpClient, HttpHeaders, HttpParams, HttpResponse } from '@angular/common/http';
 import { Observable } from 'rxjs/Observable';
-import {baseUrl} from './dataInterface';
+import { baseUrl } from '../models/dataInterface';
 
 
 @Injectable()
 export class ManagemencsService {
 
-  constructor(private http: HttpClient) { }
+    constructor(private http: HttpClient) { }
     baseUrl = baseUrl.baseUrl;
 
-    
+
 
 
     /* line up */
     url = {
-        customers:this.baseUrl + "/uui-lcm/customers", /* get */
-        serviceType:this.baseUrl + "/uui-lcm/customers/"+"*_*"+"/service-subscriptions", /* get */
-        CustomersPir:this.baseUrl + "/uui-lcm/serviceNumByCustomer", /* get */
-        CustomersColumn:this.baseUrl + "/uui-lcm/serviceNumByServiceType/"+"*_*", /* get */
-        createCustomer:this.baseUrl+"/uui-lcm/customers/", /* put */
-        createServiceType:this.baseUrl+"/uui-lcm/customers/*_*/service-subscriptions/*+*", /* put */
-        getCustomerresourceVersion:this.baseUrl+"/uui-lcm/customers/*_*", /* put */
-        deleteCustomer:this.baseUrl+"/uui-lcm/customers?customerId=*_*&resourceVersion=*+*",
-        getServiceTypeResourceVersion:this.baseUrl+"/uui-lcm/customers/*_*/service-subscriptions/*+*",
-        deleteServiceType:this.baseUrl+"/uui-lcm/customers/*_*/service-subscriptions/*+*?resourceVersion=*@*  ",
+        customers: this.baseUrl + "/uui-lcm/customers", /* get */
+        serviceType: this.baseUrl + "/uui-lcm/customers/" + "*_*" + "/service-subscriptions", /* get */
+        CustomersPir: this.baseUrl + "/uui-lcm/serviceNumByCustomer", /* get */
+        CustomersColumn: this.baseUrl + "/uui-lcm/serviceNumByServiceType/" + "*_*", /* get */
+        createCustomer: this.baseUrl + "/uui-lcm/customers/", /* put */
+        createServiceType: this.baseUrl + "/uui-lcm/customers/*_*/service-subscriptions/*+*", /* put */
+        getCustomerresourceVersion: this.baseUrl + "/uui-lcm/customers/*_*", /* put */
+        deleteCustomer: this.baseUrl + "/uui-lcm/customers?customerId=*_*&resourceVersion=*+*",
+        getServiceTypeResourceVersion: this.baseUrl + "/uui-lcm/customers/*_*/service-subscriptions/*+*",
+        deleteServiceType: this.baseUrl + "/uui-lcm/customers/*_*/service-subscriptions/*+*?resourceVersion=*@*  ",
     };
 
 
     // Get all customers
     getAllCustomers() {
-      return this.http.get<any>(this.url.customers);
+        return this.http.get<any>(this.url.customers);
     }
     // get all servicetype
     getServiceTypes(customer) {
-      let url = this.url.serviceType.replace("*_*", customer.id);
-      console.log(url)
-      return this.http.get<any>(url);
+        let url = this.url.serviceType.replace("*_*", customer.id);
+        console.log(url)
+        return this.http.get<any>(url);
     }
     // get Customer Pir
-    getCustomersPie(){
-      return this.http.get<any>(this.url.CustomersPir);
+    getCustomersPie() {
+        return this.http.get<any>(this.url.CustomersPir);
     }
     // get Customer ber
-    getCustomersColumn(customer){
-      let url = this.url.CustomersColumn.replace("*_*", customer.id);
-      return this.http.get<any>(url);
+    getCustomersColumn(customer) {
+        let url = this.url.CustomersColumn.replace("*_*", customer.id);
+        return this.http.get<any>(url);
     }
     // create New Customer
     createCustomer(customer, createParams) {
         let url = this.url.createCustomer + customer;
         // return this.http.get(url, createParams);//location
-        return this.http.put(url,createParams);//online
+        return this.http.put(url, createParams);//online
     }
 
     createServiceType(createParams) {
diff --git a/usecaseui-portal/src/app/core/services/myhttp.service.ts b/usecaseui-portal/src/app/core/services/myhttp.service.ts
new file mode 100644 (file)
index 0000000..9ed75b0
--- /dev/null
@@ -0,0 +1,235 @@
+/*
+    Copyright (C) 2019 CMCC, Inc. and others. All rights reserved.
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+            http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+*/
+import { Injectable } from '@angular/core';
+import { HttpClient, HttpHeaders, HttpParams, HttpResponse } from '@angular/common/http';
+import { Observable } from 'rxjs/Observable';
+import { homeData, homeVmLineData, servicesSelectData, servicesTableData, creatensData, onboardTableData, onboardDataVNF, onboardDataPNF, baseUrl } from '../models/dataInterface';
+
+@Injectable()
+export class MyhttpService {
+
+  constructor(private http: HttpClient) { }
+  baseUrl = baseUrl.baseUrl;
+  url = {
+    listSortMasters: this.baseUrl + "/listSortMasters",
+    customers: this.baseUrl + "/uui-lcm/customers",
+    orchestrators: this.baseUrl + "/uui-lcm/orchestrators",
+    serviceType: this.baseUrl + "/uui-lcm/customers/" + "*_*" + "/service-subscriptions",
+    servicesTableData: this.baseUrl + '/uui-lcm/service-instances',
+    serviceTemplates: this.baseUrl + "/uui-lcm/service-templates",
+    templateParameters: this.baseUrl + "/uui-lcm/fetchCCVPNTemplateData/*_*",
+    e2etemplateParameters: this.baseUrl + "/uui-lcm/service-templates/" + "*_*" + "?toscaModelPath=",
+    nstemplateParameters: this.baseUrl + "/uui-lcm/fetchNsTemplateData",
+    vimInfo: this.baseUrl + "/uui-lcm/locations/",
+    sdnControllers: this.baseUrl + "/uui-lcm/sdnc-controllers/",
+    addressData: this.baseUrl + "/uui-sotn/getOssInvenory",
+    createService: this.baseUrl + "/uui-lcm/services",
+    ns_createService: this.baseUrl + "/uui-lcm/createNetworkServiceInstance",
+    ns_createService2: this.baseUrl + "/uui-lcm/instantiateNetworkServiceInstance",
+    deleteService: this.baseUrl + "/uui-lcm/services/",
+    ns_deleteService: this.baseUrl + "/uui-lcm/deleteNetworkServiceInstance?ns_instance_id=",
+    ns_stopService: this.baseUrl + "/uui-lcm/terminateNetworkServiceInstance?ns_instance_id=",
+    ns_healService: this.baseUrl + "/uui-lcm/healNetworkServiceInstance?ns_instance_id=",
+    vnfInfo: this.baseUrl + "/uui-lcm/VnfInfo/",
+    progress: this.baseUrl + "/uui-lcm/services/" + "*_*" + "/operations/",
+    nsProgress: this.baseUrl + "/uui-lcm/jobs/getNsLcmJobStatus/" + "*_*" + "?responseId=0&serviceInstanceId=",
+    e2eScale: this.baseUrl + "/services/scaleServices/",
+    e2e_nsdata: this.baseUrl + "/getServiceInstanceById/customerId/",
+    updateccvpn: this.baseUrl + "/uui-lcm/services/updateService/",
+
+    allottedResource: this.baseUrl + "/uui-sotn/getAllottedResources",
+    pnfDetail: this.baseUrl + "/uui-sotn/getPnfInfo/",
+    connectivity: this.baseUrl + "/uui-sotn/getConnectivityInfo/",
+    vpnBinding: this.baseUrl + "/uui-sotn/getPinterfaceByVpnId/",
+  }
+
+  // serviceTable list
+  getServicesTableData(paramsObj): Observable<HttpResponse<servicesTableData>> {
+    let params = new HttpParams({ fromObject: paramsObj });
+    return this.http.get<servicesTableData>(this.url.servicesTableData, { observe: 'response', params });
+  }
+
+  //---------------------------------------------------------------------------------
+
+  // Get all customers
+  getAllCustomers() {
+    return this.http.get<any>(this.url.customers);
+  }
+
+  // Get all Orchestrators
+  getAllOrchestrators() {
+    return this.http.get<any>(this.url.orchestrators);
+  }
+
+  // Get relevant serviceType
+  getServiceTypes(customer) {
+    let url = this.url.serviceType.replace("*_*", customer.id);
+    return this.http.get<any>(url);
+  }
+
+
+  // Get all template types
+  getAllServiceTemplates(type) {
+    if (type == "Network Service") {
+      let nsUrl = this.url.serviceTemplates.replace("service-templates", "listNsTemplates").replace("serviceTemplates2", "serviceTemplates-ns");
+      console.log(nsUrl);
+      return this.http.get<any>(nsUrl);
+    }
+    return this.http.get<any>(this.url.serviceTemplates);
+  }
+
+
+  //Get template input parameters
+  getTemplateParameters(type, template) {
+    // let url = this.url.templateParameters.replace("*_*",type) + template.toscaModelURL;  //Local simulation
+    if (type == "ns") {
+      let body = {
+        csarId: template.id,
+        inputs: ""
+      };
+      return this.http.post<any>(this.url.nstemplateParameters, body);
+    } else if (type == "e2e") {
+      let url = this.url.e2etemplateParameters.replace("*_*", template.uuid) + template.toscaModelURL;
+      return this.http.get<any>(url);
+    } else {
+      let body = {
+        csarId: template.uuid,
+        packageType: "Service",
+        inputs: ""
+      };
+      let url = this.url.templateParameters.replace("*_*", template.uuid);
+      return this.http.post<any>(url, body);
+    }
+  }
+
+  getVimInfo() {
+    return this.http.get<any>(this.url.vimInfo);
+  };
+  getSdnControllers() {
+    return this.http.get<any>(this.url.sdnControllers);
+  }
+
+  // Create interface
+  createInstance(requestBody, createParams) {
+    // return this.http.get<any>(this.url.createService + createParams);  //Local simulation
+    return this.http.post<any>(this.url.createService + createParams, requestBody);
+  }
+  nsCreateInstance(requestBody) {
+    // return this.http.get<any>(this.url.ns_createService);  //Local simulation
+    return this.http.post<any>(this.url.ns_createService, requestBody);
+  }
+  nsCreateInstance2(params, requestBody) {
+    // return this.http.get<any>(this.url.ns_createService2 + params);  //Local simulation
+    return this.http.post<any>(this.url.ns_createService2 + params, requestBody);
+  }
+
+  updateccvpn(id, requestBody) {
+    console.log(id);
+    console.log(requestBody);
+    //return this.http.get<any>(this.url.updateccvpn + id);  //local
+    return this.http.put<any>(this.url.updateccvpn + id, requestBody);// online
+  }
+  // Delete interface
+  deleteInstance(obj) {
+    let httpOptions = {
+      headers: new HttpHeaders({
+        'Content-Type': 'application/json',
+        'Accept': 'application/json',
+        'Authorization': 'Basic SW5mcmFQb3J0YWxDbGllbnQ6cGFzc3dvcmQxJA=='
+      }),
+      body: {
+        'globalSubscriberId': obj.globalSubscriberId,
+        'serviceType': obj.serviceType.name
+      }
+    };
+    // return this.http.get<any>(this.url.deleteService);  //Local simulation
+    return this.http.delete<any>(this.url.deleteService + obj.serviceInstanceId, httpOptions);
+  }
+  nsDeleteInstance(id) {
+    // return this.http.get<any>(this.url.ns_deleteService);  //Local simulation
+    return this.http.delete<any>(this.url.ns_deleteService + id);
+  }
+  stopNsService(id, requestBody) {  //You need to terminate before deleting
+    // return this.http.get<any>(this.url.ns_stopService);  //Local simulation
+    return this.http.post<any>(this.url.ns_stopService + id, requestBody);
+  }
+
+  getVnfInfo(id) {
+    return this.http.get<any>(this.url.vnfInfo + id);
+  }
+  healNsService(id, requestBody) {
+    // return this.http.get<any>(this.url.ns_healService);  //Local simulation
+    return this.http.post<any>(this.url.ns_healService + id, requestBody);
+  }
+
+  // scale
+  scaleE2eService(id, requestBody) {
+    // return this.http.get<any>(this.url.e2eScale + id);
+    return this.http.post<any>(this.url.e2eScale + id, requestBody);
+  }
+  getE2e_nsData(paramsObj) {
+    let params = new HttpParams({ fromObject: paramsObj });
+    return this.http.get<any>(this.url.e2e_nsdata, { params });
+  }
+
+  // Query progress interface
+  getProgress(obj) {
+    let url = this.url.progress.replace("*_*", obj.serviceId) + obj.operationId + "?operationType=" + obj.operationType;
+    return this.http.get<any>(url);
+  }
+  getNsProgress(jobid, serviceId, operationType) {
+    let url = this.url.nsProgress.replace("*_*", jobid) + serviceId + "&operationType=" + operationType;
+    return this.http.get<any>(url);
+  }
+
+  // Get allotted-resource to get tp and pnf values
+  getAllottedResource(obj) {
+    let params = new HttpParams({ fromObject: obj });
+    let url = this.url.allottedResource;
+    return this.http.get<any>(url, { params });
+  }
+  //Get the corresponding domain (network-resource) by pnf value
+  getPnfDetail(name) {
+    let url = this.url.pnfDetail + name;
+    return this.http.get<any>(url);
+  }
+  //Get connectivity by sotn, find vpn-id
+  getSotnConnectivity(id) {
+    let url = this.url.connectivity + id;
+    return this.http.get<any>(url);
+  }
+  //Find tp and pnf by vpn-id
+  getVpnBinding(id) {
+    let url = this.url.vpnBinding + id;
+    return this.http.get<any>(url);
+  }
+  // Time formatting milliseconds to normal
+  dateformater(vmstime) {
+    if (!vmstime) {
+      return ''
+    }
+    let mstime = Number((vmstime + '').slice(0, 13));
+    let time = new Date(mstime);
+    let year = time.getFullYear();
+    let month = time.getMonth() + 1;
+    let day = time.getDate();
+    let hours = time.getHours();
+    let minutes = time.getMinutes();
+    let seconds = time.getSeconds();
+    let formattime = year + '-' + month + '-' + day + ' ' + hours + ':' + minutes + ':' + seconds;
+    return formattime;
+  }
+}
 */
 import { Injectable } from '@angular/core';
 import { HttpClient, HttpHeaders, HttpParams, HttpResponse } from '@angular/common/http';
-import { baseUrl} from './dataInterface';
+import { baseUrl } from '../models/dataInterface';
 
 
 @Injectable()
 export class networkHttpservice {
 
-    constructor(private http:HttpClient) { }
+    constructor(private http: HttpClient) { }
 
     // baseUrl = "./assets/json/";//Local environment
     // url={
@@ -42,81 +42,81 @@ export class networkHttpservice {
     // baseUrl = "http://10.73.242.244:8082/uui-sotn/";//Online environment
     // baseUrl = "http://172.19.44.223/api/usecaseui-server/v1/uui-sotn/";//Online environment
     baseUrl = baseUrl.baseUrl + "/uui-sotn/";//Online environment
-    url={
-        "getNetworkD3Data":this.baseUrl + "getNetWorkResources",
-        "getLogicalLinksData":this.baseUrl + "getLogicalLinks",
-        "getPInterfacesData1":this.baseUrl + "getPinterfaceByPnfName/",
-        "getPInterfacesData2":this.baseUrl + "getPinterfaceByPnfName/",
-        "createLink":this.baseUrl + "createLink/",
-        "querySpecificLinkInfo":this.baseUrl + "getSpecificLogicalLink/",
-        "queryCloudUrl":this.baseUrl + "getHostUrl/",
-        "queryExtAAIIdVersion":this.baseUrl + "getExtAaiId/",
-        "createNetwrok":this.baseUrl + "createTopoNetwork/",
-        "createPnf":this.baseUrl + "createPnf/",
-        "createTp":this.baseUrl + "pnf/",
-        "createCloudLink":this.baseUrl + "createLink/",
-        "createCloudUrl":this.baseUrl + "createHostUrl/",
-        "deleteLink":this.baseUrl + "deleteLink/",
-        "deleteCloud":this.baseUrl+"deleteExtNetWork"
+    url = {
+        "getNetworkD3Data": this.baseUrl + "getNetWorkResources",
+        "getLogicalLinksData": this.baseUrl + "getLogicalLinks",
+        "getPInterfacesData1": this.baseUrl + "getPinterfaceByPnfName/",
+        "getPInterfacesData2": this.baseUrl + "getPinterfaceByPnfName/",
+        "createLink": this.baseUrl + "createLink/",
+        "querySpecificLinkInfo": this.baseUrl + "getSpecificLogicalLink/",
+        "queryCloudUrl": this.baseUrl + "getHostUrl/",
+        "queryExtAAIIdVersion": this.baseUrl + "getExtAaiId/",
+        "createNetwrok": this.baseUrl + "createTopoNetwork/",
+        "createPnf": this.baseUrl + "createPnf/",
+        "createTp": this.baseUrl + "pnf/",
+        "createCloudLink": this.baseUrl + "createLink/",
+        "createCloudUrl": this.baseUrl + "createHostUrl/",
+        "deleteLink": this.baseUrl + "deleteLink/",
+        "deleteCloud": this.baseUrl + "deleteExtNetWork"
     };
     //d3data
-    getNetworkD3Data(){
+    getNetworkD3Data() {
         return this.http.get<any>(this.url["getNetworkD3Data"]);
     }
     //Initialize the connection logical-links
-    getLogicalLinksData(){
+    getLogicalLinksData() {
         return this.http.get<any>(this.url["getLogicalLinksData"]);
     }
     //Query the tp data corresponding to the specified node
-    getPInterfacesData1(paramsObj){
-        return this.http.get<any>(this.url['getPInterfacesData1']+paramsObj["pnfName"]);
+    getPInterfacesData1(paramsObj) {
+        return this.http.get<any>(this.url['getPInterfacesData1'] + paramsObj["pnfName"]);
     }
-    getPInterfacesData2(paramsObj){
-        return this.http.get<any>(this.url["getPInterfacesData2"]+paramsObj["pnfName"]);
+    getPInterfacesData2(paramsObj) {
+        return this.http.get<any>(this.url["getPInterfacesData2"] + paramsObj["pnfName"]);
     }
     //Create a connection interface
-    createLink(paramsObj){
-        return this.http.put<any>(this.url["createLink"]+paramsObj["link-name"],paramsObj);
+    createLink(paramsObj) {
+        return this.http.put<any>(this.url["createLink"] + paramsObj["link-name"], paramsObj);
     }
     //Query the specified single cable interface
-    querySpecificLinkInfo(paramsObj){
-        return this.http.get<any>(this.url["querySpecificLinkInfo"]+paramsObj["link-name"]);
+    querySpecificLinkInfo(paramsObj) {
+        return this.http.get<any>(this.url["querySpecificLinkInfo"] + paramsObj["link-name"]);
     }
     //Query external cloud host this.url address interface
-    queryCloudUrl(aaiId){
-        return this.http.get<any>(this.url["queryCloudUrl"]+aaiId);
+    queryCloudUrl(aaiId) {
+        return this.http.get<any>(this.url["queryCloudUrl"] + aaiId);
     }
-    queryExtAAIIdVersion(aaiId){
-      return this.http.get<any>(this.url["queryExtAAIIdVersion"]+aaiId);
+    queryExtAAIIdVersion(aaiId) {
+        return this.http.get<any>(this.url["queryExtAAIIdVersion"] + aaiId);
     }
     //Create an external cloud newwork interface
-    createNetwrok(paramsObj){
-        return this.http.put<any>(this.url["createNetwrok"]+paramsObj["network-id"],paramsObj);
+    createNetwrok(paramsObj) {
+        return this.http.put<any>(this.url["createNetwrok"] + paramsObj["network-id"], paramsObj);
     }
     //Create an external cloud pnf interface
-    createPnf(paramsObj){
-        return this.http.put<any>(this.url["createPnf"]+paramsObj["pnf-name"],paramsObj);
+    createPnf(paramsObj) {
+        return this.http.put<any>(this.url["createPnf"] + paramsObj["pnf-name"], paramsObj);
     }
     //Create an external cloud Tp interface
-    createTp(paramsObj,cloudNodeName){
-        let str=cloudNodeName+"/p-interfaces/p-interface/"+paramsObj["interface-name"]+"/createTerminationPoint";
-        return this.http.put<any>(this.url["createTp"]+str,paramsObj);
+    createTp(paramsObj, cloudNodeName) {
+        let str = cloudNodeName + "/p-interfaces/p-interface/" + paramsObj["interface-name"] + "/createTerminationPoint";
+        return this.http.put<any>(this.url["createTp"] + str, paramsObj);
     }
     //Create an external cloud link interface
-    createCloudLink(paramsObj){
-        return this.http.put<any>(this.url["createCloudLink"]+paramsObj["link-name"],paramsObj);
+    createCloudLink(paramsObj) {
+        return this.http.put<any>(this.url["createCloudLink"] + paramsObj["link-name"], paramsObj);
     }
     //Create an external cloud host url interface
-    createCloudUrl(paramsObj){
-        return this.http.put<any>(this.url["createCloudUrl"]+paramsObj["aai-id"],paramsObj);
+    createCloudUrl(paramsObj) {
+        return this.http.put<any>(this.url["createCloudUrl"] + paramsObj["aai-id"], paramsObj);
     }
     //Delete connection
-    deleteLink(paramsObj){
-        let str=paramsObj["logical-link"]+"/"+paramsObj["resource-version"];
-        return this.http.delete<any>((this.url["deleteLink"]+str));
+    deleteLink(paramsObj) {
+        let str = paramsObj["logical-link"] + "/" + paramsObj["resource-version"];
+        return this.http.delete<any>((this.url["deleteLink"] + str));
     }
-    deleteCloudLink(paramsObj){
-        let str="?extNetworkId="+paramsObj["aaiId"]+"&resourceVersion="+paramsObj["version"];
-        return this.http.delete<any>((this.url["deleteCloud"]+str));
+    deleteCloudLink(paramsObj) {
+        let str = "?extNetworkId=" + paramsObj["aaiId"] + "&resourceVersion=" + paramsObj["version"];
+        return this.http.delete<any>((this.url["deleteCloud"] + str));
     }
 }
@@ -16,7 +16,7 @@
 import { Injectable } from '@angular/core';
 import { HttpClient, HttpHeaders, HttpParams, HttpResponse } from '@angular/common/http';
 import { Observable } from 'rxjs/Observable';
-import { onboardTableData, onboardDataVNF, onboardDataPNF , baseUrl} from './dataInterface';
+import { onboardTableData, onboardDataVNF, onboardDataPNF, baseUrl } from '../models/dataInterface';
 
 @Injectable()
 export class onboardService {
@@ -84,9 +84,9 @@ export class onboardService {
     onboardVNF: this.baseUrl + "vf-packages", //POST
 
     //Delete ns package
-    deleteNspack: this.baseUrl + "deleteNsdPackage?nsdInfoId=",  
+    deleteNspack: this.baseUrl + "deleteNsdPackage?nsdInfoId=",
     // Delete Vnf vfc package 
-    deleteVnfPack: this.baseUrl + "deleteVnfPackage?vnfPkgId=",  
+    deleteVnfPack: this.baseUrl + "deleteVnfPackage?vnfPkgId=",
     // Delete Pnf package
     deletePnfPack: this.baseUrl + "deletePnfPackage?pnfdInfoId=",
 
@@ -109,7 +109,7 @@ export class onboardService {
     return this.http.get<any>(this.url["onboardTableData"]);
   }
   // NS SDC Data
-  getSDC_NSTableData(){
+  getSDC_NSTableData() {
     // return this.http.get<any>(this.url.sdc_nsListData);
     return this.http.get<any>(this.url["sdc_nsListData"]);
   }
@@ -121,7 +121,7 @@ export class onboardService {
   getSDC_VNFTableData() {
     return this.http.get<any>(this.url["sdc_vnfListData"]);
   }
-  
+
   // PNF Data
   getOnboardTablePnfData() {
     return this.http.get<any>(this.url.onboardDataPNF);
@@ -129,8 +129,8 @@ export class onboardService {
   //-------------------------------------------------------------------------------------
 
   //create--Get the id after dragging the file before uploading   //on-line post
-  getCreatensData(url_upId,requestBody) {
-    return this.http.post<any>(this.url.creatensData.replace("_jsonData",url_upId),requestBody);  //on-line
+  getCreatensData(url_upId, requestBody) {
+    return this.http.post<any>(this.url.creatensData.replace("_jsonData", url_upId), requestBody);  //on-line
   }
 
   //create--Get the id after dragging the file before uploading  //local json get
@@ -170,7 +170,7 @@ export class onboardService {
   }
 
   // Delete Pnf package
-  deletePnfIdData(paramsObj){
+  deletePnfIdData(paramsObj) {
     //Local test
     // return this.http.get<any>(this.url.deletePnfPack); 
     //online test
diff --git a/usecaseui-portal/src/app/core/services/text.service.spec.ts b/usecaseui-portal/src/app/core/services/text.service.spec.ts
new file mode 100644 (file)
index 0000000..7b4d9ef
--- /dev/null
@@ -0,0 +1,15 @@
+import { TestBed, inject } from '@angular/core/testing';
+
+import { TextService } from './text.service';
+
+describe('TextService', () => {
+  beforeEach(() => {
+    TestBed.configureTestingModule({
+      providers: [TextService]
+    });
+  });
+
+  it('should be created', inject([TextService], (service: TextService) => {
+    expect(service).toBeTruthy();
+  }));
+});
diff --git a/usecaseui-portal/src/app/core/services/text.service.ts b/usecaseui-portal/src/app/core/services/text.service.ts
new file mode 100644 (file)
index 0000000..26a2caa
--- /dev/null
@@ -0,0 +1,43 @@
+/*
+    Copyright (C) 2019 CMCC, Inc. and others. All rights reserved.
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+            http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+*/
+import { Injectable } from '@angular/core';
+import { HttpClient } from '@angular/common/http';
+
+@Injectable()
+export class TextService {
+  constructor(private http: HttpClient) { }
+  //---------------------------------------------------------------------------------------
+  /* line up*/
+  baseUrl = "/api";
+  url = {
+    textInterface: this.baseUrl + "/user/login",
+    singleInterface: this.baseUrl + "/home",
+    doubleInterface: this.baseUrl + "/customer/info",
+    multipleInterface: this.baseUrl + "/alarm/formdata/multiple",
+    jsonInterface: this.baseUrl + "/xuran/test/data",
+  }
+
+  //-----------------------------------Function-local-start------------------------------------------------------
+  /* Query data list */
+  getfakeData() {
+    return this.http.get<any>(this.url["singleInterface"]);
+  }
+  getjsonData() {
+    return this.http.get<any>(this.url["jsonInterface"]);
+  }
+  //-------------------------------------------------------------------------------------
+
+}
diff --git a/usecaseui-portal/src/app/mock/fakedata.js b/usecaseui-portal/src/app/mock/fakedata.js
new file mode 100644 (file)
index 0000000..a008c14
--- /dev/null
@@ -0,0 +1,24 @@
+const faker = require("faker");
+const _ = require("lodash");
+faker.locale = "en";
+
+module.exports = {
+    customer: _.times(20, function (n) {
+        return {
+            id: n,
+            name: faker.name.findName(),
+            phone: faker.phone.phoneNumber(),
+            address: faker.address.streetAddress(),
+            avatar: faker.internet.avatar()
+        }
+    }),
+    home: _.times(10, function (n) {
+        return {
+            id: n,
+            name: faker.name.findName(),
+            phone: faker.phone.phoneNumber(),
+            address: faker.address.streetAddress(),
+            avatar: faker.internet.avatar()
+        }
+    }),
+}
\ No newline at end of file
diff --git a/usecaseui-portal/src/app/mock/json/instanceTableData4.json b/usecaseui-portal/src/app/mock/json/instanceTableData4.json
new file mode 100644 (file)
index 0000000..d952af9
--- /dev/null
@@ -0,0 +1,656 @@
+{
+    "service-instance": [
+        {
+            "service-instance-id": "8e07f832-3f50-4657-9b44-010049e8b488",
+            "service-instance-name": "SOTNVPNInfra",
+            "service-type": "E2E Service",
+            "service-role": "E2E Service",
+            "model-invariant-id": "bafa365f-4056-4ad3-a039-d6b3e3e0fd35",
+            "model-version-id": "fdbb8ddd-3325-4840-a156-9ad601b9366c",
+            "resource-version": "1537769390960",
+            "input-parameters": "{\n    \"service\":{\n        \"name\":\"SOTNVPNInfra\",\n        \"description\":\"SOTNVPNInfra\",\n        \"serviceInvariantUuid\":\"bafa365f-4056-4ad3-a039-d6b3e3e0fd35\",\n        \"serviceUuid\":\"fdbb8ddd-3325-4840-a156-9ad601b9366c\",\n        \"globalSubscriberId\":\"demo\",\n        \"serviceType\":\"ccvpn\",\n        \"parameters\":{\n            \"locationConstraints\":[\n\n            ],\n            \"resources\":[\n                {\n                    \"resourceName\":\"SOTNConnectivity 0\",\n                    \"resourceInvariantUuid\":\"1b9c677d-fddf-4b70-938b-925a7fa57d43\",\n                    \"resourceUuid\":\"218df3c3-50dd-4c26-9e36-4771387bb771\",\n                    \"resourceCustomizationUuid\":\"b44071c8-04fd-4d6b-b6af-772cbfaa1129\",\n                    \"parameters\":{\n                        \"locationConstraints\":[\n\n                        ],\n                        \"resources\":[\n\n                        ],\n                        \"requestInputs\":{\n\n                        }\n                    }\n                },\n                {\n                    \"resourceName\":\"SPPartnerVF 0\",\n                    \"resourceInvariantUuid\":\"072f9238-15b0-4bc5-a5f5-f18548739470\",\n                    \"resourceUuid\":\"81b9430b-8abe-45d6-8bf9-f41a8f5c735f\",\n                    \"resourceCustomizationUuid\":\"c3612284-6c67-4d8c-8b41-b699cc90e76d\",\n                    \"parameters\":{\n                        \"locationConstraints\":[\n\n                        ],\n                        \"resources\":[\n\n                        ],\n                        \"requestInputs\":{\n\n                        }\n                    }\n                }\n            ],\n            \"requestInputs\":{\n                \"sotnconnectivity0_eir\":\"1000\",\n                \"sotnconnectivity0_cir\":\"1000\",\n                \"sotnconnectivity0_endTime\":\"2018-8-8 10:00\",\n                \"sotnconnectivity0_ebs\":\"1000\",\n                \"sotnconnectivity0_startTime\":\"2018-8-1 10:00\",\n                \"sotnconnectivity0_dualLink\":\"true\",\n                \"sotnconnectivity0_reroute\":\"false\",\n                \"sotnconnectivity0_cbs\":\"1000\",\n                \"sotnconnectivity0_name\":\"SOTN L2\",\n                \"sotnconnectivity0_SLS\":\"\",\n                \"sotnconnectivity0_description\":\"\",\n                \"sotnconnectivity0_couplingFlag\":\"\",\n                \"sotnconnectivity0_colorAware\":\"\",\n                \"sotnconnectivity0_COS\":\"standard\"\n            }\n        }\n    }\n}",
+            "relationship-list": {
+                "relationship": [
+                    {
+                        "related-to": "connectivity",
+                        "relationship-label": "org.onap.relationships.inventory.PartOf",
+                        "related-link": "/aai/v13/network/connectivities/connectivity/2e359c75-2af3-4fea-9550-a893edeab8b5",
+                        "relationship-data": [
+                            {
+                                "relationship-key": "connectivity.connectivity-id",
+                                "relationship-value": "2e359c75-2af3-4fea-9550-a893edeab8b5"
+                            }
+                        ],
+                        "related-to-property": [
+                            {
+                                "property-key": "connectivity.etht-svc-name",
+                                "property-value": "vpn1"
+                            }
+                        ]
+                    },
+                    {
+                        "related-to": "sp-partner",
+                        "relationship-label": "org.onap.relationships.inventory.PartOf",
+                        "related-link": "/aai/v13/business/sp-partners/sp-partner/32cd906f-ee7a-4ecf-b1c3-2fce4d59f8c0",
+                        "relationship-data": [
+                            {
+                                "relationship-key": "sp-partner.sp-partner-id",
+                                "relationship-value": "32cd906f-ee7a-4ecf-b1c3-2fce4d59f8c0"
+                            }
+                        ],
+                        "related-to-property": [
+                            {
+                                "property-key": "sp-partner.sp-partner-id",
+                                "property-value": "32cd906f-ee7a-4ecf-b1c3-2fce4d59f8c0"
+                            }
+                        ]
+                    },
+                    {
+                        "related-to": "allotted-resource",
+                        "relationship-label": "org.onap.relationships.inventory.Uses",
+                        "related-link": "/aai/v13/business/customers/customer/demo/service-subscriptions/service-subscription/ccvpn/service-instances/service-instance/2d55a540-f6d3-4108-9bb4-290574b87a6c/allotted-resources/allotted-resource/666085a7-132e-4a32-b9de-e58ecea3476a",
+                        "relationship-data": [
+                            {
+                                "relationship-key": "customer.global-customer-id",
+                                "relationship-value": "demo"
+                            },
+                            {
+                                "relationship-key": "service-subscription.service-type",
+                                "relationship-value": "ccvpn"
+                            },
+                            {
+                                "relationship-key": "service-instance.service-instance-id",
+                                "relationship-value": "2d55a540-f6d3-4108-9bb4-290574b87a6c"
+                            },
+                            {
+                                "relationship-key": "allotted-resource.id",
+                                "relationship-value": "666085a7-132e-4a32-b9de-e58ecea3476a"
+                            }
+                        ],
+                        "related-to-property": [
+                            {
+                                "property-key": "allotted-resource.description",
+                                "property-value": "sotn-attachment"
+                            },
+                            {
+                                "property-key": "allotted-resource.allotted-resource-name",
+                                "property-value": "sotn ar"
+                            }
+                        ]
+                    },
+                    {
+                        "related-to": "allotted-resource",
+                        "relationship-label": "org.onap.relationships.inventory.Uses",
+                        "related-link": "/aai/v13/business/customers/customer/demo/service-subscriptions/service-subscription/ccvpn/service-instances/service-instance/a6d69c62-75b5-4f04-8cd7-9ca5dfcc4205/allotted-resources/allotted-resource/562adc96-7fbe-435e-bd6d-ff4b8a0a7920",
+                        "relationship-data": [
+                            {
+                                "relationship-key": "customer.global-customer-id",
+                                "relationship-value": "demo"
+                            },
+                            {
+                                "relationship-key": "service-subscription.service-type",
+                                "relationship-value": "ccvpn"
+                            },
+                            {
+                                "relationship-key": "service-instance.service-instance-id",
+                                "relationship-value": "a6d69c62-75b5-4f04-8cd7-9ca5dfcc4205"
+                            },
+                            {
+                                "relationship-key": "allotted-resource.id",
+                                "relationship-value": "562adc96-7fbe-435e-bd6d-ff4b8a0a7920"
+                            }
+                        ],
+                        "related-to-property": [
+                            {
+                                "property-key": "allotted-resource.description",
+                                "property-value": "sotn-attachment"
+                            },
+                            {
+                                "property-key": "allotted-resource.allotted-resource-name",
+                                "property-value": "sotn ar"
+                            }
+                        ]
+                    }
+                ]
+            }
+        },
+        {
+            "service-instance-id": "a6d69c62-75b5-4f04-8cd7-9ca5dfcc4205",
+            "service-instance-name": "DcLondon",
+            "service-type": "E2E Service",
+            "service-role": "E2E Service",
+            "model-invariant-id": "499e5e60-c8b2-4ea6-8c4e-7739420673a9",
+            "model-version-id": "8ec97da1-1e0a-4198-9c9a-3da2c60d7974",
+            "resource-version": "1537866016457",
+            "input-parameters": "{\n    \"service\":{\n        \"name\":\"DcLondon\",\n        \"description\":\"SiteService\",\n        \"serviceInvariantUuid\":\"499e5e60-c8b2-4ea6-8c4e-7739420673a9\",\n        \"serviceUuid\":\"8ec97da1-1e0a-4198-9c9a-3da2c60d7974\",\n        \"globalSubscriberId\":\"demo\",\n        \"serviceType\":\"ccvpn\",\n        \"parameters\":{\n            \"locationConstraints\":[\n\n            ],\n            \"resources\":[\n                {\n                    \"resourceName\":\"SiteVF\",\n                    \"resourceInvariantUuid\":\"0c0e1cbe-6e01-4f9e-8c45-a9700ebc14df\",\n                    \"resourceUuid\":\"4ad2d390-5c51-45f5-9710-b467a4ec7a73\",\n                    \"resourceCustomizationUuid\":\"66590e07-0777-415c-af44-36347cf3ddd3\",\n                    \"parameters\":{\n                        \"locationConstraints\":[\n\n                        ],\n                        \"resources\":[\n\n                        ],\n                        \"requestInputs\":{\n\n                        }\n                    }\n                },\n                {\n                    \"resourceName\":\"mpls\",\n                    \"resourceInvariantUuid\":\"97a3e552-08c4-4697-aeeb-d8d3e09ce58e\",\n                    \"resourceUuid\":\"63d8e1af-32dc-4c71-891d-e3f7b6a976d2\",\n                    \"resourceCustomizationUuid\":\"205456e7-3dc0-40c4-8cb0-28e6c1877042\",\n                    \"parameters\":{\n                        \"locationConstraints\":[\n\n                        ],\n                        \"resources\":[\n\n                        ],\n                        \"requestInputs\":{\n\n                        }\n                    }\n                },\n                {\n                    \"resourceName\":\"deviceVF\",\n                    \"resourceInvariantUuid\":\"c726490a-0ce2-4bc7-abea-dade66bfb13d\",\n                    \"resourceUuid\":\"0e2de9d8-d76b-4134-b5f1-41e79056adbe\",\n                    \"resourceCustomizationUuid\":\"5bc1373e-9a36-4a00-8c62-784e0bc417ad\",\n                    \"parameters\":{\n                        \"locationConstraints\":[\n\n                        ],\n                        \"resources\":[\n\n                        ],\n                        \"requestInputs\":{\n\n                        }\n                    }\n                },\n                {\n                    \"resourceName\":\"sdwanvpnattachmentVF\",\n                    \"resourceInvariantUuid\":\"f714feec-1aef-4890-abba-f8f3a906935f\",\n                    \"resourceUuid\":\"709919b7-75fd-4e49-8398-67853323ff55\",\n                    \"resourceCustomizationUuid\":\"debd988f-fe04-4940-a5cb-37f61d84eab4\",\n                    \"parameters\":{\n                        \"locationConstraints\":[\n\n                        ],\n                        \"resources\":[\n\n                        ],\n                        \"requestInputs\":{\n\n                        }\n                    }\n                },\n                {\n                    \"resourceName\":\"internet\",\n                    \"resourceInvariantUuid\":\"97a3e552-08c4-4697-aeeb-d8d3e09ce58e\",\n                    \"resourceUuid\":\"63d8e1af-32dc-4c71-891d-e3f7b6a976d2\",\n                    \"resourceCustomizationUuid\":\"64b8e8ba-62b9-4db6-b420-1ca7067d63e0\",\n                    \"parameters\":{\n                        \"locationConstraints\":[\n\n                        ],\n                        \"resources\":[\n\n                        ],\n                        \"requestInputs\":{\n\n                        }\n                    }\n                },\n                {\n                    \"resourceName\":\"sotnvpnattachmentvF\",\n                    \"resourceInvariantUuid\":\"97c4a3c6-2943-41af-8717-2f3183f944be\",\n                    \"resourceUuid\":\"44b777ee-9793-465d-8053-d8e86d2e2362\",\n                    \"resourceCustomizationUuid\":\"37aeb073-c75d-4cf6-a7fa-a1af862ef58a\",\n                    \"parameters\":{\n                        \"locationConstraints\":[\n\n                        ],\n                        \"resources\":[\n\n                        ],\n                        \"requestInputs\":{\n\n                        }\n                    }\n                },\n                {\n                    \"resourceName\":\"SPPartnerVF\",\n                    \"resourceInvariantUuid\":\"072f9238-15b0-4bc5-a5f5-f18548739470\",\n                    \"resourceUuid\":\"81b9430b-8abe-45d6-8bf9-f41a8f5c735f\",\n                    \"resourceCustomizationUuid\":\"cd0b4b9c-66c6-49c5-b346-7580e4b6c394\",\n                    \"parameters\":{\n                        \"locationConstraints\":[\n\n                        ],\n                        \"resources\":[\n\n                        ],\n                        \"requestInputs\":{\n\n                        }\n                    }\n                }\n            ],\n            \"requestInputs\":{\n                \"devicevf_device_class\":\"PNF\",\n                \"devicevf_device_esn\":\"2102351BTJ10HB000075\",\n                \"devicevf_device_name\":\"50.47\",\n                \"devicevf_device_systemIp\":\"192.168.1.47\",\n                \"devicevf_device_type\":\"AR161EW\",\n                \"devicevf_device_vendor\":\"huawei\",\n                \"devicevf_device_version\":\"1.0\",\n                \"internet_sitewanport_description\":\"internet\",\n                \"internet_sitewanport_deviceName\":\"50.47\",\n                \"internet_sitewanport_inputBandwidth\":\"100\",\n                \"internet_sitewanport_ipAddress\":\"100.2.30.9\",\n                \"internet_sitewanport_name\":\"internet\",\n                \"internet_sitewanport_outputBandwidth\":\"100\",\n                \"internet_sitewanport_portNumber\":\"0/0/2\",\n                \"internet_sitewanport_portType\":\"GE\",\n                \"internet_sitewanport_providerIpAddress\":\"100.2.30.10\",\n                \"internet_sitewanport_transportNetworkName\":\"internet\",\n                \"mpls_sitewanport_description\":\"mpls\",\n                \"mpls_sitewanport_deviceName\":\"50.47\",\n                \"mpls_sitewanport_inputBandwidth\":\"100\",\n                \"mpls_sitewanport_ipAddress\":\"10.2.30.7\",\n                \"mpls_sitewanport_name\":\"mpls\",\n                \"mpls_sitewanport_outputBandwidth\":\"100\",\n                \"mpls_sitewanport_portNumber\":\"0/0/1\",\n                \"mpls_sitewanport_portType\":\"GE\",\n                \"mpls_sitewanport_providerIpAddress\":\"10.2.30.8\",\n                \"mpls_sitewanport_transportNetworkName\":\"internet\",\n                \"sdwanvpnattachmentvf_sdwancondition_role\":\"spoke\",\n                \"sdwanvpnattachmentvf_sdwancondition_sdwanVpnName\":\"SDWANVPNInfra\",\n                \"sitevf_site_address\":\"University College London,Gower Street,London\",\n                \"sitevf_site_controlPoint\":\"VDF_VCPE\",\n                \"sitevf_site_description\":\"VDF_vGW\",\n                \"sitevf_site_emails\":\"\",\n                \"sitevf_site_latitude\":\"\",\n                \"sitevf_site_longitude\":\"\",\n                \"sitevf_site_name\":\"DcLondon\",\n                \"sitevf_site_postcode\":\"N200095\",\n                \"sitevf_site_role\":\"sd-wan-edge\",\n                \"sitevf_site_type\":\"single-gateway\",\n                \"sotnvpnattachmentvf_sotncondition_clientSignal\":\"\",\n                \"sotnvpnattachmentvf_sotncondition_cVLAN\":\"\",\n                \"sotnvpnattachmentvf_sotncondition_sotnVpnName\":\"SOTN L2\"\n            }\n        }\n    }\n}",
+            "relationship-list": {
+                "relationship": [
+                    {
+                        "related-to": "device",
+                        "relationship-label": "org.onap.relationships.inventory.PartOf",
+                        "related-link": "/aai/v13/network/devices/device/2cacf49c-7c09-4155-b18a-4468dce34083",
+                        "relationship-data": [
+                            {
+                                "relationship-key": "device.device-id",
+                                "relationship-value": "2cacf49c-7c09-4155-b18a-4468dce34083"
+                            }
+                        ],
+                        "related-to-property": [
+                            {
+                                "property-key": "device.device-name",
+                                "property-value": "TravelDevice"
+                            }
+                        ]
+                    },
+                    {
+                        "related-to": "site-resource",
+                        "relationship-label": "org.onap.relationships.inventory.PartOf",
+                        "related-link": "/aai/v13/network/site-resources/site-resource/f288d54e-be09-46d3-bb1f-38729ec74bb5",
+                        "relationship-data": [
+                            {
+                                "relationship-key": "site-resource.site-resource-id",
+                                "relationship-value": "f288d54e-be09-46d3-bb1f-38729ec74bb5"
+                            }
+                        ],
+                        "related-to-property": [
+                            {
+                                "property-key": "site-resource.site-resource-name",
+                                "property-value": "travelSite"
+                            }
+                        ]
+                    },
+                    {
+                        "related-to": "wan-port-config",
+                        "relationship-label": "org.onap.relationships.inventory.PartOf",
+                        "related-link": "/aai/v13/network/wan-port-configs/wan-port-config/99866f05-9749-456e-8909-61eebf08373e",
+                        "relationship-data": [
+                            {
+                                "relationship-key": "wan-port-config.wan-port-config-id",
+                                "relationship-value": "99866f05-9749-456e-8909-61eebf08373e"
+                            }
+                        ],
+                        "related-to-property": [
+                            {
+                                "property-key": "wan-port-config.wan-port-config-name",
+                                "property-value": "intenet"
+                            }
+                        ]
+                    },
+                    {
+                        "related-to": "wan-port-config",
+                        "relationship-label": "org.onap.relationships.inventory.PartOf",
+                        "related-link": "/aai/v13/network/wan-port-configs/wan-port-config/afab2cc0-28c9-4fd3-bf03-01c8034f8191",
+                        "relationship-data": [
+                            {
+                                "relationship-key": "wan-port-config.wan-port-config-id",
+                                "relationship-value": "afab2cc0-28c9-4fd3-bf03-01c8034f8191"
+                            }
+                        ],
+                        "related-to-property": [
+                            {
+                                "property-key": "wan-port-config.wan-port-config-name",
+                                "property-value": "mpls"
+                            }
+                        ]
+                    },
+                    {
+                        "related-to": "sp-partner",
+                        "relationship-label": "org.onap.relationships.inventory.PartOf",
+                        "related-link": "/aai/v13/business/sp-partners/sp-partner/167a285b-0875-41ff-8ed1-1178db6f3133",
+                        "relationship-data": [
+                            {
+                                "relationship-key": "sp-partner.sp-partner-id",
+                                "relationship-value": "167a285b-0875-41ff-8ed1-1178db6f3133"
+                            }
+                        ],
+                        "related-to-property": [
+                            {
+                                "property-key": "sp-partner.sp-partner-id",
+                                "property-value": "167a285b-0875-41ff-8ed1-1178db6f3133"
+                            }
+                        ]
+                    },
+                    {
+                        "related-to": "allotted-resource",
+                        "relationship-label": "org.onap.relationships.inventory.Uses",
+                        "related-link": "/aai/v13/business/customers/customer/demo/service-subscriptions/service-subscription/ccvpn/service-instances/service-instance/0ea94797-3772-40ff-b6fb-69f06c533be3/allotted-resources/allotted-resource/d519761d-c89c-4164-86c7-8f74952eea65",
+                        "relationship-data": [
+                            {
+                                "relationship-key": "customer.global-customer-id",
+                                "relationship-value": "demo"
+                            },
+                            {
+                                "relationship-key": "service-subscription.service-type",
+                                "relationship-value": "ccvpn"
+                            },
+                            {
+                                "relationship-key": "service-instance.service-instance-id",
+                                "relationship-value": "0ea94797-3772-40ff-b6fb-69f06c533be3"
+                            },
+                            {
+                                "relationship-key": "allotted-resource.id",
+                                "relationship-value": "d519761d-c89c-4164-86c7-8f74952eea65"
+                            }
+                        ],
+                        "related-to-property": [
+                            {
+                                "property-key": "allotted-resource.description",
+                                "property-value": "sdwan-attachment"
+                            },
+                            {
+                                "property-key": "allotted-resource.allotted-resource-name",
+                                "property-value": "sdwan ar"
+                            }
+                        ]
+                    },
+                    {
+                        "related-to": "allotted-resource",
+                        "relationship-label": "org.onap.relationships.inventory.Uses",
+                        "related-link": "/aai/v13/business/customers/customer/demo/service-subscriptions/service-subscription/ccvpn/service-instances/service-instance/8e07f832-3f50-4657-9b44-010049e8b488/allotted-resources/allotted-resource/65f21c28-8b19-4769-8f08-174e2afa5488",
+                        "relationship-data": [
+                            {
+                                "relationship-key": "customer.global-customer-id",
+                                "relationship-value": "demo"
+                            },
+                            {
+                                "relationship-key": "service-subscription.service-type",
+                                "relationship-value": "ccvpn"
+                            },
+                            {
+                                "relationship-key": "service-instance.service-instance-id",
+                                "relationship-value": "8e07f832-3f50-4657-9b44-010049e8b488"
+                            },
+                            {
+                                "relationship-key": "allotted-resource.id",
+                                "relationship-value": "65f21c28-8b19-4769-8f08-174e2afa5488"
+                            }
+                        ],
+                        "related-to-property": [
+                            {
+                                "property-key": "allotted-resource.description",
+                                "property-value": "sotn attachment"
+                            },
+                            {
+                                "property-key": "allotted-resource.allotted-resource-name",
+                                "property-value": "ston ar"
+                            }
+                        ]
+                    }
+                ]
+            }
+        },
+        {
+            "service-instance-id": "0ea94797-3772-40ff-b6fb-69f06c533be3",
+            "service-instance-name": "SDWANVPNInfra",
+            "service-type": "E2E Service",
+            "service-role": "E2E Service",
+            "model-invariant-id": "e2b217d6-7cac-4156-9f44-f9b010b350a6",
+            "model-version-id": "20d9e7dc-f030-4230-af79-ba0bde7cbe2e",
+            "resource-version": "1537864894560",
+            "input-parameters": "{\n    \"service\":{\n        \"name\":\"SDWANVPNInfra\",\n        \"description\":\"SDWANVPNInfra\",\n        \"serviceInvariantUuid\":\"e2b217d6-7cac-4156-9f44-f9b010b350a6\",\n        \"serviceUuid\":\"20d9e7dc-f030-4230-af79-ba0bde7cbe2e\",\n        \"globalSubscriberId\":\"demo\",\n        \"serviceType\":\"ccvpn\",\n        \"parameters\":{\n            \"locationConstraints\":[\n\n            ],\n            \"resources\":[\n                {\n                    \"resourceName\":\"SDWANConnectivity 0\",\n                    \"resourceInvariantUuid\":\"f99a9a23-c88e-44ff-a4dc-22b88675d278\",\n                    \"resourceUuid\":\"7baa7742-3a13-4288-8330-868015adc340\",\n                    \"resourceCustomizationUuid\":\"94ec574b-2306-4cbd-8214-09662b040f73\",\n                    \"parameters\":{\n                        \"locationConstraints\":[\n\n                        ],\n                        \"resources\":[\n\n                        ],\n                        \"requestInputs\":{\n\n                        }\n                    }\n                },\n                {\n                    \"resourceName\":\"SPPartnerVF 0\",\n                    \"resourceInvariantUuid\":\"072f9238-15b0-4bc5-a5f5-f18548739470\",\n                    \"resourceUuid\":\"81b9430b-8abe-45d6-8bf9-f41a8f5c735f\",\n                    \"resourceCustomizationUuid\":\"a7baba5d-6ac3-42b5-b47d-070841303ab1\",\n                    \"parameters\":{\n                        \"locationConstraints\":[\n\n                        ],\n                        \"resources\":[\n\n                        ],\n                        \"requestInputs\":{\n\n                        }\n                    }\n                }\n            ],\n            \"requestInputs\":{\n                \"sdwanconnectivity0_name\":\"SDWANVPNInfra\",\n                \"sdwanconnectivity0_topology\":\"hub-spoke\"\n            }\n        }\n    }\n}",
+            "relationship-list": {
+                "relationship": [
+                    {
+                        "related-to": "sdwan-vpn",
+                        "relationship-label": "org.onap.relationships.inventory.PartOf",
+                        "related-link": "/aai/v13/network/sdwan-vpns/sdwan-vpn/0d8707cd-9d27-4503-a0b0-e9b1b1a83b1e",
+                        "relationship-data": [
+                            {
+                                "relationship-key": "sdwan-vpn.sdwan-vpn-id",
+                                "relationship-value": "0d8707cd-9d27-4503-a0b0-e9b1b1a83b1e"
+                            }
+                        ],
+                        "related-to-property": [
+                            {
+                                "property-key": "sdwan-vpn.sdwan-vpn-name"
+                            }
+                        ]
+                    },
+                    {
+                        "related-to": "sp-partner",
+                        "relationship-label": "org.onap.relationships.inventory.PartOf",
+                        "related-link": "/aai/v13/business/sp-partners/sp-partner/15e88f8e-473f-4d88-92f8-6739a42baa2g",
+                        "relationship-data": [
+                            {
+                                "relationship-key": "sp-partner.sp-partner-id",
+                                "relationship-value": "15e88f8e-473f-4d88-92f8-6739a42baa2g"
+                            }
+                        ],
+                        "related-to-property": [
+                            {
+                                "property-key": "sp-partner.sp-partner-id",
+                                "property-value": "15e88f8e-473f-4d88-92f8-6739a42baa2g"
+                            }
+                        ]
+                    },
+                    {
+                        "related-to": "allotted-resource",
+                        "relationship-label": "org.onap.relationships.inventory.Uses",
+                        "related-link": "/aai/v13/business/customers/customer/demo/service-subscriptions/service-subscription/ccvpn/service-instances/service-instance/2d55a540-f6d3-4108-9bb4-290574b87a6c/allotted-resources/allotted-resource/c797bba9-eb90-4825-b1c2-adbd1a31101f",
+                        "relationship-data": [
+                            {
+                                "relationship-key": "customer.global-customer-id",
+                                "relationship-value": "demo"
+                            },
+                            {
+                                "relationship-key": "service-subscription.service-type",
+                                "relationship-value": "ccvpn"
+                            },
+                            {
+                                "relationship-key": "service-instance.service-instance-id",
+                                "relationship-value": "2d55a540-f6d3-4108-9bb4-290574b87a6c"
+                            },
+                            {
+                                "relationship-key": "allotted-resource.id",
+                                "relationship-value": "c797bba9-eb90-4825-b1c2-adbd1a31101f"
+                            }
+                        ],
+                        "related-to-property": [
+                            {
+                                "property-key": "allotted-resource.description",
+                                "property-value": "sdwan-attachment"
+                            },
+                            {
+                                "property-key": "allotted-resource.allotted-resource-name",
+                                "property-value": "sdwan ar"
+                            }
+                        ]
+                    },
+                    {
+                        "related-to": "allotted-resource",
+                        "relationship-label": "org.onap.relationships.inventory.Uses",
+                        "related-link": "/aai/v13/business/customers/customer/demo/service-subscriptions/service-subscription/ccvpn/service-instances/service-instance/a6d69c62-75b5-4f04-8cd7-9ca5dfcc4205/allotted-resources/allotted-resource/9a7329e6-8961-4008-9dbe-adeacfcd20da",
+                        "relationship-data": [
+                            {
+                                "relationship-key": "customer.global-customer-id",
+                                "relationship-value": "demo"
+                            },
+                            {
+                                "relationship-key": "service-subscription.service-type",
+                                "relationship-value": "ccvpn"
+                            },
+                            {
+                                "relationship-key": "service-instance.service-instance-id",
+                                "relationship-value": "a6d69c62-75b5-4f04-8cd7-9ca5dfcc4205"
+                            },
+                            {
+                                "relationship-key": "allotted-resource.id",
+                                "relationship-value": "9a7329e6-8961-4008-9dbe-adeacfcd20da"
+                            }
+                        ],
+                        "related-to-property": [
+                            {
+                                "property-key": "allotted-resource.description",
+                                "property-value": "sdwan-attachment"
+                            },
+                            {
+                                "property-key": "allotted-resource.allotted-resource-name",
+                                "property-value": "sdwan ar"
+                            }
+                        ]
+                    }
+                ]
+            }
+        },
+        {
+            "service-instance-id": "f08067b8-a07b-4c41-b750-5f9b35281e67",
+            "service-instance-name": "siteFangshanQu",
+            "service-type": "E2E Service",
+            "service-role": "E2E Service",
+            "model-invariant-id": "499e5e60-c8b2-4ea6-8c4e-7739420673a9",
+            "model-version-id": "8ec97da1-1e0a-4198-9c9a-3da2c60d7974",
+            "resource-version": "1537867265890",
+            "selflink": "restconf/config/GENERIC-RESOURCE-API:services/service/506b87a5-72fe-4197-a307-6929c3871ab2/service-data/service-topology/",
+            "input-parameters": "{\n    \"service\":{\n        \"name\":\"siteFangshanQu\",\n        \"description\":\"SiteService\",\n        \"serviceInvariantUuid\":\"499e5e60-c8b2-4ea6-8c4e-7739420673a9\",\n        \"serviceUuid\":\"8ec97da1-1e0a-4198-9c9a-3da2c60d7974\",\n        \"globalSubscriberId\":\"demo\",\n        \"serviceType\":\"ccvpn\",\n        \"parameters\":{\n            \"locationConstraints\":[\n\n            ],\n            \"resources\":[\n                {\n                    \"resourceName\":\"SiteVF\",\n                    \"resourceInvariantUuid\":\"0c0e1cbe-6e01-4f9e-8c45-a9700ebc14df\",\n                    \"resourceUuid\":\"4ad2d390-5c51-45f5-9710-b467a4ec7a73\",\n                    \"resourceCustomizationUuid\":\"66590e07-0777-415c-af44-36347cf3ddd3\",\n                    \"parameters\":{\n                        \"locationConstraints\":[\n\n                        ],\n                        \"resources\":[\n\n                        ],\n                        \"requestInputs\":{\n\n                        }\n                    }\n                },\n                {\n                    \"resourceName\":\"mpls\",\n                    \"resourceInvariantUuid\":\"97a3e552-08c4-4697-aeeb-d8d3e09ce58e\",\n                    \"resourceUuid\":\"63d8e1af-32dc-4c71-891d-e3f7b6a976d2\",\n                    \"resourceCustomizationUuid\":\"205456e7-3dc0-40c4-8cb0-28e6c1877042\",\n                    \"parameters\":{\n                        \"locationConstraints\":[\n\n                        ],\n                        \"resources\":[\n\n                        ],\n                        \"requestInputs\":{\n\n                        }\n                    }\n                },\n                {\n                    \"resourceName\":\"deviceVF\",\n                    \"resourceInvariantUuid\":\"c726490a-0ce2-4bc7-abea-dade66bfb13d\",\n                    \"resourceUuid\":\"0e2de9d8-d76b-4134-b5f1-41e79056adbe\",\n                    \"resourceCustomizationUuid\":\"5bc1373e-9a36-4a00-8c62-784e0bc417ad\",\n                    \"parameters\":{\n                        \"locationConstraints\":[\n\n                        ],\n                        \"resources\":[\n\n                        ],\n                        \"requestInputs\":{\n\n                        }\n                    }\n                },\n                {\n                    \"resourceName\":\"sdwanvpnattachmentVF\",\n                    \"resourceInvariantUuid\":\"f714feec-1aef-4890-abba-f8f3a906935f\",\n                    \"resourceUuid\":\"709919b7-75fd-4e49-8398-67853323ff55\",\n                    \"resourceCustomizationUuid\":\"debd988f-fe04-4940-a5cb-37f61d84eab4\",\n                    \"parameters\":{\n                        \"locationConstraints\":[\n\n                        ],\n                        \"resources\":[\n\n                        ],\n                        \"requestInputs\":{\n\n                        }\n                    }\n                },\n                {\n                    \"resourceName\":\"internet\",\n                    \"resourceInvariantUuid\":\"97a3e552-08c4-4697-aeeb-d8d3e09ce58e\",\n                    \"resourceUuid\":\"63d8e1af-32dc-4c71-891d-e3f7b6a976d2\",\n                    \"resourceCustomizationUuid\":\"64b8e8ba-62b9-4db6-b420-1ca7067d63e0\",\n                    \"parameters\":{\n                        \"locationConstraints\":[\n\n                        ],\n                        \"resources\":[\n\n                        ],\n                        \"requestInputs\":{\n\n                        }\n                    }\n                },\n                {\n                    \"resourceName\":\"sotnvpnattachmentvF\",\n                    \"resourceInvariantUuid\":\"97c4a3c6-2943-41af-8717-2f3183f944be\",\n                    \"resourceUuid\":\"44b777ee-9793-465d-8053-d8e86d2e2362\",\n                    \"resourceCustomizationUuid\":\"37aeb073-c75d-4cf6-a7fa-a1af862ef58a\",\n                    \"parameters\":{\n                        \"locationConstraints\":[\n\n                        ],\n                        \"resources\":[\n\n                        ],\n                        \"requestInputs\":{\n\n                        }\n                    }\n                },\n                {\n                    \"resourceName\":\"SPPartnerVF\",\n                    \"resourceInvariantUuid\":\"072f9238-15b0-4bc5-a5f5-f18548739470\",\n                    \"resourceUuid\":\"81b9430b-8abe-45d6-8bf9-f41a8f5c735f\",\n                    \"resourceCustomizationUuid\":\"cd0b4b9c-66c6-49c5-b346-7580e4b6c394\",\n                    \"parameters\":{\n                        \"locationConstraints\":[\n\n                        ],\n                        \"resources\":[\n\n                        ],\n                        \"requestInputs\":{\n\n                        }\n                    }\n                }\n            ],\n            \"requestInputs\":{\n                \"devicevf_device_class\":\"PNF\",\n                \"devicevf_device_esn\":\"2102351BTJ10HB000075\",\n                \"devicevf_device_name\":\"50.47\",\n                \"devicevf_device_systemIp\":\"192.168.1.47\",\n                \"devicevf_device_type\":\"AR161EW\",\n                \"devicevf_device_vendor\":\"huawei\",\n                \"devicevf_device_version\":\"1.0\",\n                \"internet_sitewanport_description\":\"internet\",\n                \"internet_sitewanport_deviceName\":\"50.47\",\n                \"internet_sitewanport_inputBandwidth\":\"100\",\n                \"internet_sitewanport_ipAddress\":\"100.2.30.9\",\n                \"internet_sitewanport_name\":\"internet\",\n                \"internet_sitewanport_outputBandwidth\":\"100\",\n                \"internet_sitewanport_portNumber\":\"0/0/2\",\n                \"internet_sitewanport_portType\":\"GE\",\n                \"internet_sitewanport_providerIpAddress\":\"100.2.30.10\",\n                \"internet_sitewanport_transportNetworkName\":\"internet\",\n                \"mpls_sitewanport_description\":\"mpls\",\n                \"mpls_sitewanport_deviceName\":\"50.47\",\n                \"mpls_sitewanport_inputBandwidth\":\"100\",\n                \"mpls_sitewanport_ipAddress\":\"10.2.30.7\",\n                \"mpls_sitewanport_name\":\"mpls\",\n                \"mpls_sitewanport_outputBandwidth\":\"100\",\n                \"mpls_sitewanport_portNumber\":\"0/0/1\",\n                \"mpls_sitewanport_portType\":\"GE\",\n                \"mpls_sitewanport_providerIpAddress\":\"10.2.30.8\",\n                \"mpls_sitewanport_transportNetworkName\":\"internet\",\n                \"sdwanvpnattachmentvf_sdwancondition_role\":\"spoke\",\n                \"sdwanvpnattachmentvf_sdwancondition_sdwanVpnName\":\"SDWANVPNInfra-2\",\n                \"sitevf_site_address\":\"CMCC International Data Center,Hongkong\",\n                \"sitevf_site_controlPoint\":\"CMCC_VCPE\",\n                \"sitevf_site_description\":\"CMCC_vGW\",\n                \"sitevf_site_emails\":\"\",\n                \"sitevf_site_latitude\":\"\",\n                \"sitevf_site_longitude\":\"\",\n                \"sitevf_site_name\":\"siteFangshanQu\",\n                \"sitevf_site_postcode\":\"999077\",\n                \"sitevf_site_role\":\"sd-wan-edge\",\n                \"sitevf_site_type\":\"single-gateway\",\n                \"sotnvpnattachmentvf_sotncondition_clientSignal\":\"\",\n                \"sotnvpnattachmentvf_sotncondition_cVLAN\":\"\",\n                \"sotnvpnattachmentvf_sotncondition_sotnVpnName\":\"SOTN L2\"\n            }\n        }\n    }\n}",
+            "relationship-list": {
+                "relationship": [
+                    {
+                        "related-to": "sp-partner",
+                        "relationship-label": "org.onap.relationships.inventory.PartOf",
+                        "related-link": "/aai/v13/business/sp-partners/sp-partner/506b87a5-72fe-4197-a307-6929c3871ab2",
+                        "relationship-data": [
+                            {
+                                "relationship-key": "sp-partner.sp-partner-id",
+                                "relationship-value": "506b87a5-72fe-4197-a307-6929c3871ab2"
+                            }
+                        ],
+                        "related-to-property": [
+                            {
+                                "property-key": "sp-partner.sp-partner-id",
+                                "property-value": "506b87a5-72fe-4197-a307-6929c3871ab2"
+                            }
+                        ]
+                    }
+                ]
+            }
+        },
+        {
+            "service-instance-id": "6a6478d1-f62f-439c-8f16-6038a44af8c3",
+            "service-instance-name": "SDWANVPNInfra-2",
+            "service-type": "E2E Service",
+            "service-role": "E2E Service",
+            "model-invariant-id": "e2b217d6-7cac-4156-9f44-f9b010b350a6",
+            "model-version-id": "20d9e7dc-f030-4230-af79-ba0bde7cbe2e",
+            "resource-version": "1537779569094",
+            "input-parameters": "{\n    \"service\":{\n        \"name\":\"SDWANVPNInfra-2\",\n        \"description\":\"SDWANVPNInfra\",\n        \"serviceInvariantUuid\":\"e2b217d6-7cac-4156-9f44-f9b010b350a6\",\n        \"serviceUuid\":\"20d9e7dc-f030-4230-af79-ba0bde7cbe2e\",\n        \"globalSubscriberId\":\"demo\",\n        \"serviceType\":\"ccvpn\",\n        \"parameters\":{\n            \"locationConstraints\":[\n\n            ],\n            \"resources\":[\n                {\n                    \"resourceName\":\"SDWANConnectivity 0\",\n                    \"resourceInvariantUuid\":\"f99a9a23-c88e-44ff-a4dc-22b88675d278\",\n                    \"resourceUuid\":\"7baa7742-3a13-4288-8330-868015adc340\",\n                    \"resourceCustomizationUuid\":\"94ec574b-2306-4cbd-8214-09662b040f73\",\n                    \"parameters\":{\n                        \"locationConstraints\":[\n\n                        ],\n                        \"resources\":[\n\n                        ],\n                        \"requestInputs\":{\n\n                        }\n                    }\n                },\n                {\n                    \"resourceName\":\"SPPartnerVF 0\",\n                    \"resourceInvariantUuid\":\"072f9238-15b0-4bc5-a5f5-f18548739470\",\n                    \"resourceUuid\":\"81b9430b-8abe-45d6-8bf9-f41a8f5c735f\",\n                    \"resourceCustomizationUuid\":\"a7baba5d-6ac3-42b5-b47d-070841303ab1\",\n                    \"parameters\":{\n                        \"locationConstraints\":[\n\n                        ],\n                        \"resources\":[\n\n                        ],\n                        \"requestInputs\":{\n\n                        }\n                    }\n                }\n            ],\n            \"requestInputs\":{\n                \"sdwanconnectivity0_name\":\"CMCCVPN\",\n                \"sdwanconnectivity0_topology\":\"hub-spoke\"\n            }\n        }\n    }\n}",
+            "relationship-list": {
+                "relationship": [
+                    {
+                        "related-to": "sp-partner",
+                        "relationship-label": "org.onap.relationships.inventory.PartOf",
+                        "related-link": "/aai/v13/business/sp-partners/sp-partner/de888731-eac8-454c-bbb2-927a85ba2d1c",
+                        "relationship-data": [
+                            {
+                                "relationship-key": "sp-partner.sp-partner-id",
+                                "relationship-value": "de888731-eac8-454c-bbb2-927a85ba2d1c"
+                            }
+                        ],
+                        "related-to-property": [
+                            {
+                                "property-key": "sp-partner.sp-partner-id",
+                                "property-value": "de888731-eac8-454c-bbb2-927a85ba2d1c"
+                            }
+                        ]
+                    }
+                ]
+            }
+        },
+        {
+            "service-instance-id": "fd0b9f0a-0d5c-4f69-a3dc-fb9cabde9db8",
+            "service-instance-name": "DcXichengQuBeijing",
+            "service-type": "E2E Service",
+            "service-role": "E2E Service",
+            "model-invariant-id": "499e5e60-c8b2-4ea6-8c4e-7739420673a9",
+            "model-version-id": "8ec97da1-1e0a-4198-9c9a-3da2c60d7974",
+            "resource-version": "1537867379064",
+            "selflink": "restconf/config/GENERIC-RESOURCE-API:services/service/289b87a5-72fe-4197-a307-6929c3831f82/service-data/service-topology/",
+            "input-parameters": "{\n    \"service\":{\n        \"name\":\"DcXichengQuBeijing\",\n        \"description\":\"SiteService\",\n        \"serviceInvariantUuid\":\"499e5e60-c8b2-4ea6-8c4e-7739420673a9\",\n        \"serviceUuid\":\"8ec97da1-1e0a-4198-9c9a-3da2c60d7974\",\n        \"globalSubscriberId\":\"demo\",\n        \"serviceType\":\"ccvpn\",\n        \"parameters\":{\n            \"locationConstraints\":[\n\n            ],\n            \"resources\":[\n                {\n                    \"resourceName\":\"SiteVF\",\n                    \"resourceInvariantUuid\":\"0c0e1cbe-6e01-4f9e-8c45-a9700ebc14df\",\n                    \"resourceUuid\":\"4ad2d390-5c51-45f5-9710-b467a4ec7a73\",\n                    \"resourceCustomizationUuid\":\"66590e07-0777-415c-af44-36347cf3ddd3\",\n                    \"parameters\":{\n                        \"locationConstraints\":[\n\n                        ],\n                        \"resources\":[\n\n                        ],\n                        \"requestInputs\":{\n\n                        }\n                    }\n                },\n                {\n                    \"resourceName\":\"mpls\",\n                    \"resourceInvariantUuid\":\"97a3e552-08c4-4697-aeeb-d8d3e09ce58e\",\n                    \"resourceUuid\":\"63d8e1af-32dc-4c71-891d-e3f7b6a976d2\",\n                    \"resourceCustomizationUuid\":\"205456e7-3dc0-40c4-8cb0-28e6c1877042\",\n                    \"parameters\":{\n                        \"locationConstraints\":[\n\n                        ],\n                        \"resources\":[\n\n                        ],\n                        \"requestInputs\":{\n\n                        }\n                    }\n                },\n                {\n                    \"resourceName\":\"deviceVF\",\n                    \"resourceInvariantUuid\":\"c726490a-0ce2-4bc7-abea-dade66bfb13d\",\n                    \"resourceUuid\":\"0e2de9d8-d76b-4134-b5f1-41e79056adbe\",\n                    \"resourceCustomizationUuid\":\"5bc1373e-9a36-4a00-8c62-784e0bc417ad\",\n                    \"parameters\":{\n                        \"locationConstraints\":[\n\n                        ],\n                        \"resources\":[\n\n                        ],\n                        \"requestInputs\":{\n\n                        }\n                    }\n                },\n                {\n                    \"resourceName\":\"sdwanvpnattachmentVF\",\n                    \"resourceInvariantUuid\":\"f714feec-1aef-4890-abba-f8f3a906935f\",\n                    \"resourceUuid\":\"709919b7-75fd-4e49-8398-67853323ff55\",\n                    \"resourceCustomizationUuid\":\"debd988f-fe04-4940-a5cb-37f61d84eab4\",\n                    \"parameters\":{\n                        \"locationConstraints\":[\n\n                        ],\n                        \"resources\":[\n\n                        ],\n                        \"requestInputs\":{\n\n                        }\n                    }\n                },\n                {\n                    \"resourceName\":\"internet\",\n                    \"resourceInvariantUuid\":\"97a3e552-08c4-4697-aeeb-d8d3e09ce58e\",\n                    \"resourceUuid\":\"63d8e1af-32dc-4c71-891d-e3f7b6a976d2\",\n                    \"resourceCustomizationUuid\":\"64b8e8ba-62b9-4db6-b420-1ca7067d63e0\",\n                    \"parameters\":{\n                        \"locationConstraints\":[\n\n                        ],\n                        \"resources\":[\n\n                        ],\n                        \"requestInputs\":{\n\n                        }\n                    }\n                },\n                {\n                    \"resourceName\":\"sotnvpnattachmentvF\",\n                    \"resourceInvariantUuid\":\"97c4a3c6-2943-41af-8717-2f3183f944be\",\n                    \"resourceUuid\":\"44b777ee-9793-465d-8053-d8e86d2e2362\",\n                    \"resourceCustomizationUuid\":\"37aeb073-c75d-4cf6-a7fa-a1af862ef58a\",\n                    \"parameters\":{\n                        \"locationConstraints\":[\n\n                        ],\n                        \"resources\":[\n\n                        ],\n                        \"requestInputs\":{\n\n                        }\n                    }\n                },\n                {\n                    \"resourceName\":\"SPPartnerVF\",\n                    \"resourceInvariantUuid\":\"072f9238-15b0-4bc5-a5f5-f18548739470\",\n                    \"resourceUuid\":\"81b9430b-8abe-45d6-8bf9-f41a8f5c735f\",\n                    \"resourceCustomizationUuid\":\"cd0b4b9c-66c6-49c5-b346-7580e4b6c394\",\n                    \"parameters\":{\n                        \"locationConstraints\":[\n\n                        ],\n                        \"resources\":[\n\n                        ],\n                        \"requestInputs\":{\n\n                        }\n                    }\n                }\n            ],\n            \"requestInputs\":{\n                \"devicevf_device_class\":\"PNF\",\n                \"devicevf_device_esn\":\"2102351BTJ10HB000075\",\n                \"devicevf_device_name\":\"50.47\",\n                \"devicevf_device_systemIp\":\"192.168.1.47\",\n                \"devicevf_device_type\":\"AR161EW\",\n                \"devicevf_device_vendor\":\"huawei\",\n                \"devicevf_device_version\":\"1.0\",\n                \"internet_sitewanport_description\":\"internet\",\n                \"internet_sitewanport_deviceName\":\"50.47\",\n                \"internet_sitewanport_inputBandwidth\":\"100\",\n                \"internet_sitewanport_ipAddress\":\"100.2.30.9\",\n                \"internet_sitewanport_name\":\"internet\",\n                \"internet_sitewanport_outputBandwidth\":\"100\",\n                \"internet_sitewanport_portNumber\":\"0/0/2\",\n                \"internet_sitewanport_portType\":\"GE\",\n                \"internet_sitewanport_providerIpAddress\":\"100.2.30.10\",\n                \"internet_sitewanport_transportNetworkName\":\"internet\",\n                \"mpls_sitewanport_description\":\"mpls\",\n                \"mpls_sitewanport_deviceName\":\"50.47\",\n                \"mpls_sitewanport_inputBandwidth\":\"100\",\n                \"mpls_sitewanport_ipAddress\":\"10.2.30.7\",\n                \"mpls_sitewanport_name\":\"mpls\",\n                \"mpls_sitewanport_outputBandwidth\":\"100\",\n                \"mpls_sitewanport_portNumber\":\"0/0/1\",\n                \"mpls_sitewanport_portType\":\"GE\",\n                \"mpls_sitewanport_providerIpAddress\":\"10.2.30.8\",\n                \"mpls_sitewanport_transportNetworkName\":\"internet\",\n                \"sdwanvpnattachmentvf_sdwancondition_role\":\"spoke\",\n                \"sdwanvpnattachmentvf_sdwancondition_sdwanVpnName\":\"SDWANVPNInfra\",\n                \"sitevf_site_address\":\"Chuangxin Building,Tianningsi,Xicheng,Beijing\",\n                \"sitevf_site_controlPoint\":\"CMCC_VCPE\",\n                \"sitevf_site_description\":\"CMCC_vGW\",\n                \"sitevf_site_emails\":\"\",\n                \"sitevf_site_latitude\":\"\",\n                \"sitevf_site_longitude\":\"\",\n                \"sitevf_site_name\":\"DcXichengQuBeijing\",\n                \"sitevf_site_postcode\":\"100095\",\n                \"sitevf_site_role\":\"sd-wan-edge\",\n                \"sitevf_site_type\":\"single-gateway\",\n                \"sotnvpnattachmentvf_sotncondition_clientSignal\":\"\",\n                \"sotnvpnattachmentvf_sotncondition_cVLAN\":\"\",\n                \"sotnvpnattachmentvf_sotncondition_sotnVpnName\":\"SOTN L2\"\n            }\n        }\n    }\n}",
+            "relationship-list": {
+                "relationship": [
+                    {
+                        "related-to": "sp-partner",
+                        "relationship-label": "org.onap.relationships.inventory.PartOf",
+                        "related-link": "/aai/v13/business/sp-partners/sp-partner/289b87a5-72fe-4197-a307-6929c3831f82",
+                        "relationship-data": [
+                            {
+                                "relationship-key": "sp-partner.sp-partner-id",
+                                "relationship-value": "289b87a5-72fe-4197-a307-6929c3831f82"
+                            }
+                        ],
+                        "related-to-property": [
+                            {
+                                "property-key": "sp-partner.sp-partner-id",
+                                "property-value": "289b87a5-72fe-4197-a307-6929c3831f82"
+                            }
+                        ]
+                    }
+                ]
+            }
+        },
+        {
+            "service-instance-id": "2d55a540-f6d3-4108-9bb4-290574b87a6c",
+            "service-instance-name": "siteLondon",
+            "service-type": "E2E Service",
+            "service-role": "E2E Service",
+            "model-invariant-id": "499e5e60-c8b2-4ea6-8c4e-7739420673a9",
+            "model-version-id": "8ec97da1-1e0a-4198-9c9a-3da2c60d7974",
+            "resource-version": "1537866122803",
+            "input-parameters": "{\n    \"service\":{\n        \"name\":\"siteLondon\",\n        \"description\":\"SiteService\",\n        \"serviceInvariantUuid\":\"499e5e60-c8b2-4ea6-8c4e-7739420673a9\",\n        \"serviceUuid\":\"8ec97da1-1e0a-4198-9c9a-3da2c60d7974\",\n        \"globalSubscriberId\":\"demo\",\n        \"serviceType\":\"ccvpn\",\n        \"parameters\":{\n            \"locationConstraints\":[\n\n            ],\n            \"resources\":[\n                {\n                    \"resourceName\":\"SiteVF\",\n                    \"resourceInvariantUuid\":\"0c0e1cbe-6e01-4f9e-8c45-a9700ebc14df\",\n                    \"resourceUuid\":\"4ad2d390-5c51-45f5-9710-b467a4ec7a73\",\n                    \"resourceCustomizationUuid\":\"66590e07-0777-415c-af44-36347cf3ddd3\",\n                    \"parameters\":{\n                        \"locationConstraints\":[\n\n                        ],\n                        \"resources\":[\n\n                        ],\n                        \"requestInputs\":{\n\n                        }\n                    }\n                },\n                {\n                    \"resourceName\":\"mpls\",\n                    \"resourceInvariantUuid\":\"97a3e552-08c4-4697-aeeb-d8d3e09ce58e\",\n                    \"resourceUuid\":\"63d8e1af-32dc-4c71-891d-e3f7b6a976d2\",\n                    \"resourceCustomizationUuid\":\"205456e7-3dc0-40c4-8cb0-28e6c1877042\",\n                    \"parameters\":{\n                        \"locationConstraints\":[\n\n                        ],\n                        \"resources\":[\n\n                        ],\n                        \"requestInputs\":{\n\n                        }\n                    }\n                },\n                {\n                    \"resourceName\":\"deviceVF\",\n                    \"resourceInvariantUuid\":\"c726490a-0ce2-4bc7-abea-dade66bfb13d\",\n                    \"resourceUuid\":\"0e2de9d8-d76b-4134-b5f1-41e79056adbe\",\n                    \"resourceCustomizationUuid\":\"5bc1373e-9a36-4a00-8c62-784e0bc417ad\",\n                    \"parameters\":{\n                        \"locationConstraints\":[\n\n                        ],\n                        \"resources\":[\n\n                        ],\n                        \"requestInputs\":{\n\n                        }\n                    }\n                },\n                {\n                    \"resourceName\":\"sdwanvpnattachmentVF\",\n                    \"resourceInvariantUuid\":\"f714feec-1aef-4890-abba-f8f3a906935f\",\n                    \"resourceUuid\":\"709919b7-75fd-4e49-8398-67853323ff55\",\n                    \"resourceCustomizationUuid\":\"debd988f-fe04-4940-a5cb-37f61d84eab4\",\n                    \"parameters\":{\n                        \"locationConstraints\":[\n\n                        ],\n                        \"resources\":[\n\n                        ],\n                        \"requestInputs\":{\n\n                        }\n                    }\n                },\n                {\n                    \"resourceName\":\"internet\",\n                    \"resourceInvariantUuid\":\"97a3e552-08c4-4697-aeeb-d8d3e09ce58e\",\n                    \"resourceUuid\":\"63d8e1af-32dc-4c71-891d-e3f7b6a976d2\",\n                    \"resourceCustomizationUuid\":\"64b8e8ba-62b9-4db6-b420-1ca7067d63e0\",\n                    \"parameters\":{\n                        \"locationConstraints\":[\n\n                        ],\n                        \"resources\":[\n\n                        ],\n                        \"requestInputs\":{\n\n                        }\n                    }\n                },\n                {\n                    \"resourceName\":\"sotnvpnattachmentvF\",\n                    \"resourceInvariantUuid\":\"97c4a3c6-2943-41af-8717-2f3183f944be\",\n                    \"resourceUuid\":\"44b777ee-9793-465d-8053-d8e86d2e2362\",\n                    \"resourceCustomizationUuid\":\"37aeb073-c75d-4cf6-a7fa-a1af862ef58a\",\n                    \"parameters\":{\n                        \"locationConstraints\":[\n\n                        ],\n                        \"resources\":[\n\n                        ],\n                        \"requestInputs\":{\n\n                        }\n                    }\n                },\n                {\n                    \"resourceName\":\"SPPartnerVF\",\n                    \"resourceInvariantUuid\":\"072f9238-15b0-4bc5-a5f5-f18548739470\",\n                    \"resourceUuid\":\"81b9430b-8abe-45d6-8bf9-f41a8f5c735f\",\n                    \"resourceCustomizationUuid\":\"cd0b4b9c-66c6-49c5-b346-7580e4b6c394\",\n                    \"parameters\":{\n                        \"locationConstraints\":[\n\n                        ],\n                        \"resources\":[\n\n                        ],\n                        \"requestInputs\":{\n\n                        }\n                    }\n                }\n            ],\n            \"requestInputs\":{\n                \"devicevf_device_class\":\"PNF\",\n                \"devicevf_device_esn\":\"2102351BTJ10HB000075\",\n                \"devicevf_device_name\":\"50.47\",\n                \"devicevf_device_systemIp\":\"192.168.1.47\",\n                \"devicevf_device_type\":\"AR161EW\",\n                \"devicevf_device_vendor\":\"huawei\",\n                \"devicevf_device_version\":\"1.0\",\n                \"internet_sitewanport_description\":\"internet\",\n                \"internet_sitewanport_deviceName\":\"50.47\",\n                \"internet_sitewanport_inputBandwidth\":\"100\",\n                \"internet_sitewanport_ipAddress\":\"100.2.30.9\",\n                \"internet_sitewanport_name\":\"internet\",\n                \"internet_sitewanport_outputBandwidth\":\"100\",\n                \"internet_sitewanport_portNumber\":\"0/0/2\",\n                \"internet_sitewanport_portType\":\"GE\",\n                \"internet_sitewanport_providerIpAddress\":\"100.2.30.10\",\n                \"internet_sitewanport_transportNetworkName\":\"internet\",\n                \"mpls_sitewanport_description\":\"mpls\",\n                \"mpls_sitewanport_deviceName\":\"50.47\",\n                \"mpls_sitewanport_inputBandwidth\":\"100\",\n                \"mpls_sitewanport_ipAddress\":\"10.2.30.7\",\n                \"mpls_sitewanport_name\":\"mpls\",\n                \"mpls_sitewanport_outputBandwidth\":\"100\",\n                \"mpls_sitewanport_portNumber\":\"0/0/1\",\n                \"mpls_sitewanport_portType\":\"GE\",\n                \"mpls_sitewanport_providerIpAddress\":\"10.2.30.8\",\n                \"mpls_sitewanport_transportNetworkName\":\"internet\",\n                \"sdwanvpnattachmentvf_sdwancondition_role\":\"spoke\",\n                \"sdwanvpnattachmentvf_sdwancondition_sdwanVpnName\":\"SDWANVPNInfra-2\",\n                \"sitevf_site_address\":\"VDF International Data Center,Hongkong\",\n                \"sitevf_site_controlPoint\":\"VDF_VCPE\",\n                \"sitevf_site_description\":\"VDF_vGW\",\n                \"sitevf_site_emails\":\"\",\n                \"sitevf_site_latitude\":\"\",\n                \"sitevf_site_longitude\":\"\",\n                \"sitevf_site_name\":\"siteLondon\",\n                \"sitevf_site_postcode\":\"999077\",\n                \"sitevf_site_role\":\"sd-wan-edge\",\n                \"sitevf_site_type\":\"single-gateway\",\n                \"sotnvpnattachmentvf_sotncondition_clientSignal\":\"\",\n                \"sotnvpnattachmentvf_sotncondition_cVLAN\":\"\",\n                \"sotnvpnattachmentvf_sotncondition_sotnVpnName\":\"SOTN L2\"\n            }\n        }\n    }\n}",
+            "relationship-list": {
+                "relationship": [
+                    {
+                        "related-to": "wan-port-config",
+                        "relationship-label": "org.onap.relationships.inventory.PartOf",
+                        "related-link": "/aai/v13/network/wan-port-configs/wan-port-config/52ae7944-12b3-4766-848e-e43088947af9",
+                        "relationship-data": [
+                            {
+                                "relationship-key": "wan-port-config.wan-port-config-id",
+                                "relationship-value": "52ae7944-12b3-4766-848e-e43088947af9"
+                            }
+                        ],
+                        "related-to-property": [
+                            {
+                                "property-key": "wan-port-config.wan-port-config-name",
+                                "property-value": "intenet"
+                            }
+                        ]
+                    },
+                    {
+                        "related-to": "site-resource",
+                        "relationship-label": "org.onap.relationships.inventory.PartOf",
+                        "related-link": "/aai/v13/network/site-resources/site-resource/a22193fc-d1b5-41a7-9033-14339838b0c5",
+                        "relationship-data": [
+                            {
+                                "relationship-key": "site-resource.site-resource-id",
+                                "relationship-value": "a22193fc-d1b5-41a7-9033-14339838b0c5"
+                            }
+                        ],
+                        "related-to-property": [
+                            {
+                                "property-key": "site-resource.site-resource-name",
+                                "property-value": "travelSite"
+                            }
+                        ]
+                    },
+                    {
+                        "related-to": "wan-port-config",
+                        "relationship-label": "org.onap.relationships.inventory.PartOf",
+                        "related-link": "/aai/v13/network/wan-port-configs/wan-port-config/9fc7c231-1b71-49e6-8390-e92b707e7615",
+                        "relationship-data": [
+                            {
+                                "relationship-key": "wan-port-config.wan-port-config-id",
+                                "relationship-value": "9fc7c231-1b71-49e6-8390-e92b707e7615"
+                            }
+                        ],
+                        "related-to-property": [
+                            {
+                                "property-key": "wan-port-config.wan-port-config-name",
+                                "property-value": "mpls"
+                            }
+                        ]
+                    },
+                    {
+                        "related-to": "device",
+                        "relationship-label": "org.onap.relationships.inventory.PartOf",
+                        "related-link": "/aai/v13/network/devices/device/f0cf1e06-7be8-4602-83cb-60d87d8e7ef3",
+                        "relationship-data": [
+                            {
+                                "relationship-key": "device.device-id",
+                                "relationship-value": "f0cf1e06-7be8-4602-83cb-60d87d8e7ef3"
+                            }
+                        ],
+                        "related-to-property": [
+                            {
+                                "property-key": "device.device-name",
+                                "property-value": "CentSpokeDevice"
+                            }
+                        ]
+                    },
+                    {
+                        "related-to": "sp-partner",
+                        "relationship-label": "org.onap.relationships.inventory.PartOf",
+                        "related-link": "/aai/v13/business/sp-partners/sp-partner/3addd6b9-b05f-4841-881c-1ce2c753513f",
+                        "relationship-data": [
+                            {
+                                "relationship-key": "sp-partner.sp-partner-id",
+                                "relationship-value": "3addd6b9-b05f-4841-881c-1ce2c753513f"
+                            }
+                        ],
+                        "related-to-property": [
+                            {
+                                "property-key": "sp-partner.sp-partner-id",
+                                "property-value": "3addd6b9-b05f-4841-881c-1ce2c753513f"
+                            }
+                        ]
+                    },
+                    {
+                        "related-to": "allotted-resource",
+                        "relationship-label": "org.onap.relationships.inventory.Uses",
+                        "related-link": "/aai/v13/business/customers/customer/demo/service-subscriptions/service-subscription/ccvpn/service-instances/service-instance/0ea94797-3772-40ff-b6fb-69f06c533be3/allotted-resources/allotted-resource/f1523ca9-6b56-482e-b3a4-a2f8dcbfba12",
+                        "relationship-data": [
+                            {
+                                "relationship-key": "customer.global-customer-id",
+                                "relationship-value": "demo"
+                            },
+                            {
+                                "relationship-key": "service-subscription.service-type",
+                                "relationship-value": "ccvpn"
+                            },
+                            {
+                                "relationship-key": "service-instance.service-instance-id",
+                                "relationship-value": "0ea94797-3772-40ff-b6fb-69f06c533be3"
+                            },
+                            {
+                                "relationship-key": "allotted-resource.id",
+                                "relationship-value": "f1523ca9-6b56-482e-b3a4-a2f8dcbfba12"
+                            }
+                        ],
+                        "related-to-property": [
+                            {
+                                "property-key": "allotted-resource.description",
+                                "property-value": "sdwan-attachment"
+                            },
+                            {
+                                "property-key": "allotted-resource.allotted-resource-name",
+                                "property-value": "sdwan ar"
+                            }
+                        ]
+                    },
+                    {
+                        "related-to": "allotted-resource",
+                        "relationship-label": "org.onap.relationships.inventory.Uses",
+                        "related-link": "/aai/v13/business/customers/customer/demo/service-subscriptions/service-subscription/ccvpn/service-instances/service-instance/8e07f832-3f50-4657-9b44-010049e8b488/allotted-resources/allotted-resource/d1a6b573-0595-4468-bab9-02465c295618",
+                        "relationship-data": [
+                            {
+                                "relationship-key": "customer.global-customer-id",
+                                "relationship-value": "demo"
+                            },
+                            {
+                                "relationship-key": "service-subscription.service-type",
+                                "relationship-value": "ccvpn"
+                            },
+                            {
+                                "relationship-key": "service-instance.service-instance-id",
+                                "relationship-value": "8e07f832-3f50-4657-9b44-010049e8b488"
+                            },
+                            {
+                                "relationship-key": "allotted-resource.id",
+                                "relationship-value": "d1a6b573-0595-4468-bab9-02465c295618"
+                            }
+                        ],
+                        "related-to-property": [
+                            {
+                                "property-key": "allotted-resource.description",
+                                "property-value": "sotn attachment"
+                            },
+                            {
+                                "property-key": "allotted-resource.allotted-resource-name",
+                                "property-value": "sotn ar"
+                            }
+                        ]
+                    }
+                ]
+            }
+        }
+    ]
+}
\ No newline at end of file
diff --git a/usecaseui-portal/src/app/mock/json/status2.json b/usecaseui-portal/src/app/mock/json/status2.json
new file mode 100644 (file)
index 0000000..2932063
--- /dev/null
@@ -0,0 +1,3 @@
+{
+    "status": "fail"
+}
\ No newline at end of file
diff --git a/usecaseui-portal/src/app/mock/json/xuran_test_data.json b/usecaseui-portal/src/app/mock/json/xuran_test_data.json
new file mode 100644 (file)
index 0000000..1e6321b
--- /dev/null
@@ -0,0 +1,8 @@
+{
+    "esr-system-info-id": "xuran",
+    "service-url": "http://10.10.10.10:8080/",
+    "user-name": "demo",
+    "password": "demo123456!",
+    "system-type": "ONAP",
+    "resource-version": "1536221798873"
+}
\ No newline at end of file
diff --git a/usecaseui-portal/src/app/mock/mock.js b/usecaseui-portal/src/app/mock/mock.js
new file mode 100644 (file)
index 0000000..2864d4c
--- /dev/null
@@ -0,0 +1,7 @@
+const fakeData = require('./fakedata.js');
+module.exports = {
+    //Mock json
+    'customer_info': fakeData.customer,
+    'alarm_formdata_multiple': fakeData,
+    'home': fakeData.home,
+}
\ No newline at end of file
diff --git a/usecaseui-portal/src/app/mock/server.js b/usecaseui-portal/src/app/mock/server.js
new file mode 100644 (file)
index 0000000..45d6b2b
--- /dev/null
@@ -0,0 +1,87 @@
+const jsonServer = require('json-server');
+const server = jsonServer.create();
+const middlewares = jsonServer.defaults();
+
+// Set default middlewares (logger, static, cors and no-cache)
+server.use(middlewares);
+
+// Get mock data
+const fs = require('fs');
+const path = require('path');
+
+let localJsonDb = {};  //import mock datas
+const fakeoriginalData = require('./mock.js');  //import datas created in fakedata.js
+const mockFolder = './src/app/mock/json'; //mock json path folder
+const filePath = path.resolve(mockFolder);
+
+fileDisplay(filePath);
+
+function fileDisplay(filePath) {
+    let fileList = [];
+    let originPath = [];
+    let rewriter = {};
+    // Return filelist on based of filePath
+    const files = fs.readdirSync(filePath);
+    files.forEach((filename) => {
+        // Get filename's absolute path
+        let filedir = path.join(filePath, filename);
+        // Get the file information according to the file path and return an fs.Stats object
+        fs.stat(filedir, (err, stats) => {
+            if (err) {
+                console.warn('Get files failed......');
+            } else {
+                let isFile = stats.isFile(); // files
+                let isDir = stats.isDirectory(); //files folder
+                if (isFile) {
+                    fileList.push(path.basename(filedir, '.json'));
+                    fileList.forEach(item => {
+                        let paser = item.split("_").join("/");
+                        originPath.push({ route: `/${paser}`, origin: `/${item}` })
+                        originPath.map(route => {
+                            rewriter[route.route] = route.origin;
+                        })
+                        localJsonDb[item] = getjsonContent(item);
+                    })
+                }
+                if (isDir) {
+                    console.warn("=====> DO NOT support mock data in folder");
+                    fileDisplay(filedir);
+                }
+                Object.keys(fakeoriginalData).map(item => {
+                    localJsonDb[item] = fakeoriginalData[item];
+                })
+            }
+        })
+    })
+    setTimeout(() => {
+        // console.log(rewriter, "===rewriter", localJsonDb, "===localJsonDb", fileList, "===fileList");
+        // console.log(localJsonDb, "===localJsonDb");
+        serverRewrite(rewriter);
+        runServer(localJsonDb);
+    }, 100)
+}
+function getjsonContent(path) {
+    let newpath = `./src/app/mock/json/${path}.json`;
+    let result = JSON.parse(fs.readFileSync(newpath));
+    return result;
+}
+
+//only multi router data needs jsonServer.rewriter
+function serverRewrite(routerpath) {
+    let routerpathArr = routerpath;
+    //rewrite mock multiple routers here
+    Object.keys(fakeoriginalData).map(item => {
+        let newPath = item.split("_").join("/")
+        routerpathArr[`/${newPath}`] = `/${item}`;
+    })
+    //start to rewrite routers
+    server.use(jsonServer.rewriter(routerpathArr));
+}
+
+function runServer(db) {
+    server.use(jsonServer.router(db));
+}
+
+server.listen(3004, () => {
+    console.log('Mock Server is successfully running on port 3004 😁')
+});
index 778b739..d85076f 100644 (file)
@@ -16,7 +16,7 @@
 import { Injectable } from '@angular/core';
 import { HttpClient, HttpHeaders, HttpParams, HttpResponse } from '@angular/common/http';
 import { Observable } from 'rxjs/Observable';
-import { homeData, homeVmLineData, servicesSelectData, servicesTableData, creatensData, onboardTableData, onboardDataVNF, onboardDataPNF , baseUrl} from './dataInterface';
+import { homeData, homeVmLineData, servicesSelectData, servicesTableData, creatensData, onboardTableData, onboardDataVNF, onboardDataPNF, baseUrl } from './core/models/dataInterface';
 
 @Injectable()
 export class MyhttpService {
@@ -24,7 +24,7 @@ export class MyhttpService {
   constructor(private http: HttpClient) { }
   baseUrl = baseUrl.baseUrl;
   url = {
-    listSortMasters:this.baseUrl+"/listSortMasters",
+    listSortMasters: this.baseUrl + "/listSortMasters",
     customers: this.baseUrl + "/uui-lcm/customers",
     orchestrators: this.baseUrl + "/uui-lcm/orchestrators",
     serviceType: this.baseUrl + "/uui-lcm/customers/" + "*_*" + "/service-subscriptions",
@@ -47,7 +47,7 @@ export class MyhttpService {
     nsProgress: this.baseUrl + "/uui-lcm/jobs/getNsLcmJobStatus/" + "*_*" + "?responseId=0&serviceInstanceId=",
     e2eScale: this.baseUrl + "/services/scaleServices/",
     e2e_nsdata: this.baseUrl + "/getServiceInstanceById/customerId/",
-    updateccvpn:this.baseUrl + "/uui-lcm/services/updateService/",
+    updateccvpn: this.baseUrl + "/uui-lcm/services/updateService/",
 
     //The following api is about ccvpn details topology
     allottedResource: this.baseUrl + "/uui-sotn/getAllottedResources",
@@ -100,17 +100,17 @@ export class MyhttpService {
         inputs: ""
       };
       return this.http.post<any>(this.url.nstemplateParameters, body);
-    }else if(type == "e2e"){
-        let url = this.url.e2etemplateParameters.replace("*_*", template.uuid) + template.toscaModelURL;
-        return this.http.get<any>(url);
-    }else {
-        let body = {
-            csarId: template.uuid,
-            packageType: "Service",
-            inputs: ""
-        };
-        let url = this.url.templateParameters.replace("*_*", template.uuid);
-        return this.http.post<any>(url, body);
+    } else if (type == "e2e") {
+      let url = this.url.e2etemplateParameters.replace("*_*", template.uuid) + template.toscaModelURL;
+      return this.http.get<any>(url);
+    } else {
+      let body = {
+        csarId: template.uuid,
+        packageType: "Service",
+        inputs: ""
+      };
+      let url = this.url.templateParameters.replace("*_*", template.uuid);
+      return this.http.post<any>(url, body);
     }
   }
 
@@ -135,8 +135,8 @@ export class MyhttpService {
     return this.http.post<any>(this.url.ns_createService2 + params, requestBody);
   }
 
-  updateccvpn(id,requestBody){
-       return this.http.put<any>(this.url.updateccvpn + id,requestBody);// online
+  updateccvpn(id, requestBody) {
+    return this.http.put<any>(this.url.updateccvpn + id, requestBody);// online
   }
   // Delete interface
   deleteInstance(obj) {
@@ -178,11 +178,11 @@ export class MyhttpService {
 
   // Query progress interface
   getProgress(obj) {
-    let url = this.url.progress.replace("*_*", obj.serviceId) + obj.operationId + "?operationType="+obj.operationType;
+    let url = this.url.progress.replace("*_*", obj.serviceId) + obj.operationId + "?operationType=" + obj.operationType;
     return this.http.get<any>(url);
   }
-  getNsProgress(jobid,serviceId,operationType){
-    let url = this.url.nsProgress.replace("*_*",jobid) + serviceId + "&operationType="+operationType;
+  getNsProgress(jobid, serviceId, operationType) {
+    let url = this.url.nsProgress.replace("*_*", jobid) + serviceId + "&operationType=" + operationType;
     return this.http.get<any>(url);
   }
 
     limitations under the License.
 -->
 <div class="content">
-    <div class="chearts">
-        <div class="Cu">
-          <p> {{"i18nTextDefine_Instance_Count_of_Customer" | translate}} </p>
-          <app-pie [initData]="CUChartInit" [chartData]="CUChartData" *ngIf="serviceChart"></app-pie>
-          <div *ngIf="!serviceChart"  style="color: #ddd; font-weight: 700;font-size: 19px;height: 200px;text-align: center;line-height: 8;">No Service Instances </div>
-          <!-- <div class="legend"></div><span> {{"i18nTextDefine_users" | translate}} </span> -->
-        </div>
-        <div class="type">
-          <p> {{"i18nTextDefine_Instance_Count_of_ServiceType" | translate}} </p>
-          <app-bar [initData]="serviceInit" [chartData]="serviceData"></app-bar>
-          <div class="footname" style="width: 100%;height: 40px;line-height: 40px;text-align: center;color: #3C4F8C;">
-            <img src="./assets/images/customerBarUser.png" alt="customerName" style="margin-right: 5px;margin-bottom: 3px;">
-            {{this.serviceInit["customer"]}}
-          </div>
-        </div>
+  <div class="chearts">
+    <div class="Cu">
+      <p> {{"i18nTextDefine_Instance_Count_of_Customer" | translate}} </p>
+      <app-pie [initData]="CUChartInit" [chartData]="CUChartData" *ngIf="serviceChart"></app-pie>
+      <div *ngIf="!serviceChart"
+        style="color: #ddd; font-weight: 700;font-size: 19px;height: 200px;text-align: center;line-height: 8;">No
+        Service Instances </div>
+      <!-- <div class="legend"></div><span> {{"i18nTextDefine_users" | translate}} </span> -->
+    </div>
+    <div class="type">
+      <p> {{"i18nTextDefine_Instance_Count_of_ServiceType" | translate}} </p>
+      <app-bar [initData]="serviceInit" [chartData]="serviceData"></app-bar>
+      <div class="footname" style="width: 100%;height: 40px;line-height: 40px;text-align: center;color: #3C4F8C;">
+        <img src="../../../../assets/images/customerBarUser.png" alt="customerName"
+          style="margin-right: 5px;margin-bottom: 3px;">
+        {{this.serviceInit["customer"]}}
       </div>
+    </div>
+  </div>
   <div class="customer">
     <div class="customer_title">
       <div class="customers">
         <span> {{"i18nTextDefine_Customer" | translate}} </span>
-        <img  src="./assets/images/customer04.png" alt="" (click)="this.customeradd  = !this.customeradd" style="cursor: pointer">
+        <img src="../../../../assets/images/customer04.png" alt="" (click)="this.customeradd  = !this.customeradd"
+          style="cursor: pointer">
       </div>
     </div>
     <div class="customer_detail">
       <div class="customer_add" *ngIf="customeradd">
-        <input nz-input placeholder=" {{'i18nTextDefine_Input_customerName' | translate}} " class="customer_name" nzSize="default"  [(ngModel)]="addNewCustomer">
-        <button nz-button nzType="primary" class="customer_addbut" (click) = "createNewCustomer(notificationModel)">{{"i18nTextDefine_Add" | translate}}</button>
+        <input nz-input placeholder=" {{'i18nTextDefine_Input_customerName' | translate}} " class="customer_name"
+          nzSize="default" [(ngModel)]="addNewCustomer">
+        <button nz-button nzType="primary" class="customer_addbut"
+          (click)="createNewCustomer(notificationModel)">{{"i18nTextDefine_Add" | translate}}</button>
       </div>
       <div class="customer_list">
         <ul>
-          <li *ngFor ="let item of AllCustomersdata,let i = index"  [ngClass]="{active: chose ==i}" (click)="choseCustomer(i,item)">
-            <img src="./assets/images/customer05.png" alt="">
+          <li *ngFor="let item of AllCustomersdata,let i = index" [ngClass]="{active: chose ==i}"
+            (click)="choseCustomer(i,item)">
+            <img src="../../../../assets/images/customer05.png" alt="">
             <span>{{item.name}}</span>
             <i class="anticon anticon-delete" nzType="info" (click)="deleteCustomerModel(item)"></i>
           </li>
     <div class="services_type_title">
       <div class="servicess">
         <span> {{"i18nTextDefine_ServiceType" | translate}} </span>
-        <img src="./assets/images/customer03.png" alt="" (click)="this.servicesadd  = !this.servicesadd " style="cursor: pointer">
+        <img src="../../../../assets/images/customer03.png" alt="" (click)="this.servicesadd  = !this.servicesadd "
+          style="cursor: pointer">
       </div>
     </div>
     <div class="services_type_detail">
       <div class="services_add" *ngIf="servicesadd">
-        <input nz-input placeholder=" {{'i18nTextDefine_Input_ServicesType' | translate}} " class="services_name" nzSize="default" [(ngModel)]="addNewServiceType">
-        <button nz-button nzType="primary" class="services_addbut" (click) = "createNewServiceType(notificationModel)">{{"i18nTextDefine_Add" | translate}}</button>
+        <input nz-input placeholder=" {{'i18nTextDefine_Input_ServicesType' | translate}} " class="services_name"
+          nzSize="default" [(ngModel)]="addNewServiceType">
+        <button nz-button nzType="primary" class="services_addbut"
+          (click)="createNewServiceType(notificationModel)">{{"i18nTextDefine_Add" | translate}}</button>
       </div>
       <div class="services_list">
         <div class="border_size"></div>
         <div style="padding:0 20px;">
-            <ul>
-              <li *ngFor = "let item of AllServiceTypes" >
-                <span>{{item.type}}</span>
-                <i class="anticon anticon-delete" nzType="info" (click)="deleteServiceTypeModel(item)"></i>
-              </li>
-            </ul>
+          <ul>
+            <li *ngFor="let item of AllServiceTypes">
+              <span>{{item.type}}</span>
+              <i class="anticon anticon-delete" nzType="info" (click)="deleteServiceTypeModel(item)"></i>
+            </li>
+          </ul>
         </div>
       </div>
     </div>
   </div>
 
-  <nz-modal nzWidth="428"  [(nzVisible)]="deleteCustomerModelVisible" nzTitle=" {{'i18nTextDefine_delete' | translate}} " (nzOnCancel)="deleteCustomerCancel()"
-            (nzOnOk)="deleteCustomerOk(notificationModel)"  nzClassName="deleteModel"  nzCancelText=" {{'i18nTextDefine_Cancel' | translate}} " nzOkText=" {{'i18nTextDefine_modelOk' | translate}} ">
+  <nz-modal nzWidth="428" [(nzVisible)]="deleteCustomerModelVisible" nzTitle=" {{'i18nTextDefine_delete' | translate}} "
+    (nzOnCancel)="deleteCustomerCancel()" (nzOnOk)="deleteCustomerOk(notificationModel)" nzClassName="deleteModel"
+    nzCancelText=" {{'i18nTextDefine_Cancel' | translate}} " nzOkText=" {{'i18nTextDefine_modelOk' | translate}} ">
     <h3><span style="color: red">*&nbsp;</span> {{"i18nTextDefine_Input_Sure_deleteCustomer" | translate}} </h3>
     <div class="question">
       <h4> {{"i18nTextDefine_CustomerName" | translate}} :</h4>
       <div class="deleteModelContent">{{thisdeleteCustomer["id"]}}</div>
     </div>
   </nz-modal>
-  <nz-modal nzWidth="428" [(nzVisible)]="deleteServiceTypeModelVisible" nzTitle=" {{'i18nTextDefine_delete' | translate}} " (nzOnCancel)="deleteServiceTypeCancel()"
-            (nzOnOk)="deleteServiceTypeOk(notificationModel)"  nzClassName="deleteModel deleteServiceTypeModel"  nzCancelText=" {{'i18nTextDefine_Cancel' | translate}} " nzOkText=" {{'i18nTextDefine_modelOk' | translate}} ">
+  <nz-modal nzWidth="428" [(nzVisible)]="deleteServiceTypeModelVisible"
+    nzTitle=" {{'i18nTextDefine_delete' | translate}} " (nzOnCancel)="deleteServiceTypeCancel()"
+    (nzOnOk)="deleteServiceTypeOk(notificationModel)" nzClassName="deleteModel deleteServiceTypeModel"
+    nzCancelText=" {{'i18nTextDefine_Cancel' | translate}} " nzOkText=" {{'i18nTextDefine_modelOk' | translate}} ">
     <h3><span style="color: red">*&nbsp;</span> {{"i18nTextDefine_Input_Sure_deleteServiceType" | translate}} </h3>
     <div class="question">
       <h4> {{"i18nTextDefine_CustomerName" | translate}} :</h4>
     </div>
   </nz-modal>
   <!--2019.08.14 add notification-->
-  <ng-template #notificationModel >
+  <ng-template #notificationModel>
     <div class="ant-notification-notice-content">
       <div class="ant-notification-notice-with-icon">
-                        <span class="ant-notification-notice-icon">
-                            <img src="{{this.notificationAttributes.imgPath}}" alt="{{notificationAttributes.status}}">
-                        </span>
+        <span class="ant-notification-notice-icon">
+          <img src="{{this.notificationAttributes.imgPath}}" alt="{{notificationAttributes.status}}">
+        </span>
         <div class="ant-notification-notice-message" *ngIf="notificationAttributes.title == 'Customer'">
           {{"i18nTextDefine_"+notificationAttributes.title | translate}}&nbsp;
           {{"i18nTextDefine_"+notificationAttributes.action | translate}}&nbsp;&nbsp;{{"i18nTextDefine_"+notificationAttributes.status | translate}}
     See the License for the specific language governing permissions and
     limitations under the License.
 */
-import {Component, OnInit, TemplateRef} from '@angular/core';
-import { ManagemencsService } from '../../managemencs.service';
+import { Component, OnInit, TemplateRef } from '@angular/core';
+import { ManagemencsService } from '../../../core/services/managemencs.service';
 import { NzNotificationService } from 'ng-zorro-antd';
 @Component({
-  selector: 'app-customer',
-  templateUrl: './customer.component.html',
-  styleUrls: ['./customer.component.less']
+    selector: 'app-customer',
+    templateUrl: './customer.component.html',
+    styleUrls: ['./customer.component.less']
 })
 export class CustomerComponent implements OnInit {
-  public chose = '';
+    public chose = '';
+
     constructor(
         private managemencs: ManagemencsService,
         private notification: NzNotificationService
@@ -40,8 +40,8 @@ export class CustomerComponent implements OnInit {
     // Get all customers
     active;
     selectCustomer = {
-        name:null,
-        id:null
+        name: null,
+        id: null
     };
     addNewCustomer = null;
     addNewServiceType = null;
@@ -49,30 +49,30 @@ export class CustomerComponent implements OnInit {
     deleteServiceTypeModelVisible = false;
     //2019.08.14 add
     notificationAttributes = {
-        "title":"Customer",
-        "imgPath":"../../../../assets/images/execute-inproess.png",
-        "action":"Create",
-        "status":"InProgress",
-        "name":""
+        "title": "Customer",
+        "imgPath": "../../../../assets/images/execute-inproess.png",
+        "action": "Create",
+        "status": "InProgress",
+        "name": ""
     };
     notificationModelShow(template: TemplateRef<{}>): void {
-        console.log(this.notificationAttributes,"notificationModelShow show");
+        console.log(this.notificationAttributes, "notificationModelShow show");
         this.notification.template(template);
     }
-    notificationSuccess(notificationModel){
-        this.notificationAttributes.imgPath = "../../../assets/images/execute-success.png";
+    notificationSuccess(notificationModel) {
+        this.notificationAttributes.imgPath = "../../../../assets/images/execute-success.png";
         this.notificationAttributes.status = "Success";
         this.notificationModelShow(notificationModel);
     }
-    notificationFailed(notificationModel){
-        this.notificationAttributes.imgPath = "../../../assets/images/execute-faild.png";
+    notificationFailed(notificationModel) {
+        this.notificationAttributes.imgPath = "../../../../assets/images/execute-faild.png";
         this.notificationAttributes.status = "Failed";
         this.notificationModelShow(notificationModel);
     }
     getAllCustomers() {
         this.managemencs.getAllCustomers().subscribe((data) => {
             this.AllCustomersdata = data.map((item) => {
-                return {name: item["subscriber-name"], id: item["global-customer-id"]}
+                return { name: item["subscriber-name"], id: item["global-customer-id"] }
             });
             this.active = this.selectCustomer = this.AllCustomersdata[0];
             this.serviceInit["customer"] = this.AllCustomersdata[0].name;
@@ -87,7 +87,7 @@ export class CustomerComponent implements OnInit {
     getServiceTypes(item) {
         this.managemencs.getServiceTypes(item).subscribe((data) => {
             this.AllServiceTypes = data.map((item) => {
-                return {type: item["service-type"], id: item["global-customer-id"]}
+                return { type: item["service-type"], id: item["global-customer-id"] }
             });
         })
     }
@@ -139,7 +139,7 @@ export class CustomerComponent implements OnInit {
                 },
                 labelLine: {
                     normal: {
-                      show: false
+                        show: false
                     }
                 },
                 itemStyle: {
@@ -174,19 +174,19 @@ export class CustomerComponent implements OnInit {
     // get customers chart pie
     Pie_name = [];
     Pie_value = [];
-    serviceChart=true;
+    serviceChart = true;
     serviceNumber;
     getCustomersPie() {
         this.managemencs.getCustomersPie().subscribe((data) => {
             this.serviceNumber = data.serviceTotalNum;
-          if (this.serviceNumber>0) {
-              this.serviceChart = true;
-          } else {
-            this.serviceChart = false;
-          }
+            if (this.serviceNumber > 0) {
+                this.serviceChart = true;
+            } else {
+                this.serviceChart = false;
+            }
             this.CUChartData = {
                 series: [{
-                    data:data.customerServiceList
+                    data: data.customerServiceList
                 }]
             }
             console.log(this.CUChartData)
@@ -387,21 +387,21 @@ export class CustomerComponent implements OnInit {
     createNewCustomer(notificationModel) {
         let createParams = {
             customerId: this.addNewCustomer,
-            'global-customer-id':this.addNewCustomer,
-            'subscriber-name':this.addNewCustomer,
-            'subscriber-type':'INFRA'
+            'global-customer-id': this.addNewCustomer,
+            'subscriber-name': this.addNewCustomer,
+            'subscriber-type': 'INFRA'
         };
-       this.notificationAttributes = {
-            "title":"Customer",
-            "imgPath":"../../../../assets/images/execute-inproess.png",
-            "action":"Create",
-            "status":"InProgress",
-            "name":this.addNewCustomer
+        this.notificationAttributes = {
+            "title": "Customer",
+            "imgPath": "../../../../assets/images/execute-inproess.png",
+            "action": "Create",
+            "status": "InProgress",
+            "name": this.addNewCustomer
         };
         this.notificationModelShow(notificationModel);
         this.managemencs.createCustomer(this.addNewCustomer, createParams).subscribe((data) => {
             if (data["status"] == 'SUCCESS') {
-               this.notificationSuccess(notificationModel);
+                this.notificationSuccess(notificationModel);
                 this.getAllCustomers();
                 console.log(data, "Interface returned success")
             } else {
@@ -412,10 +412,10 @@ export class CustomerComponent implements OnInit {
     }
 
     // Customer delete model
-     thisdeleteCustomer={
-        name:null,
-         id:null
-     };
+    thisdeleteCustomer = {
+        name: null,
+        id: null
+    };
     deleteCustomerModel(itemCustomer) {
         this.thisdeleteCustomer = itemCustomer;
         this.deleteCustomerModelVisible = true;
@@ -425,31 +425,31 @@ export class CustomerComponent implements OnInit {
     }
     deleteCustomerOk(notificationModel) {
         this.deleteCustomerModelVisible = false;
-        this.getCustomerVersion(this.thisdeleteCustomer,notificationModel);
+        this.getCustomerVersion(this.thisdeleteCustomer, notificationModel);
         this.notificationAttributes = {
-            "title":"Customer",
-            "imgPath":"../../../../assets/images/execute-inproess.png",
-            "action":"delete",
-            "status":"InProgress",
-            "name":this.thisdeleteCustomer.name
+            "title": "Customer",
+            "imgPath": "../../../../assets/images/execute-inproess.png",
+            "action": "delete",
+            "status": "InProgress",
+            "name": this.thisdeleteCustomer.name
         };
         this.notificationModelShow(notificationModel);
     }
-    getCustomerVersion(thisdeleteCustomer,notificationModel){
+    getCustomerVersion(thisdeleteCustomer, notificationModel) {
         this.managemencs.getdeleteCustomerVersion(thisdeleteCustomer).subscribe((data) => {
             if (data["status"] == 'SUCCESS') {
                 let params = {
-                    customerId:thisdeleteCustomer.id,
-                    version:data["result"]["resource-version"]
+                    customerId: thisdeleteCustomer.id,
+                    version: data["result"]["resource-version"]
                 };
-                this.deleteCustomer(params,notificationModel);
+                this.deleteCustomer(params, notificationModel);
                 console.log(data, "Interface returned success")
             } else {
                 console.log(data, "Interface returned error")
             }
         })
     }
-    deleteCustomer(params,notificationModel){
+    deleteCustomer(params, notificationModel) {
         this.managemencs.deleteSelectCustomer(params).subscribe((data) => {
             if (data["status"] == 'SUCCESS') {
                 this.notificationSuccess(notificationModel);
@@ -466,17 +466,17 @@ export class CustomerComponent implements OnInit {
         let createParams = {
             customer: this.selectCustomer,
             ServiceType: this.addNewServiceType,
-            "service-type":this.addNewServiceType,
-            "temp-ub-sub-account-id":"sotnaccount"
+            "service-type": this.addNewServiceType,
+            "temp-ub-sub-account-id": "sotnaccount"
         };
-       this.notificationAttributes = {
-            "title":"ServiceType",
-            "imgPath":"../../../../assets/images/execute-inproess.png",
-            "action":"Create",
-            "status":"InProgress",
-            "name":this.addNewServiceType
+        this.notificationAttributes = {
+            "title": "ServiceType",
+            "imgPath": "../../../../assets/images/execute-inproess.png",
+            "action": "Create",
+            "status": "InProgress",
+            "name": this.addNewServiceType
         };
-       this.notificationModelShow(notificationModel);
+        this.notificationModelShow(notificationModel);
         this.managemencs.createServiceType(createParams).subscribe((data) => {
             if (data["status"] == 'SUCCESS') {
                 this.notificationSuccess(notificationModel);
@@ -491,8 +491,8 @@ export class CustomerComponent implements OnInit {
     }
 
     // ServiceType delete model
-    thisdeleteServiceType={
-        type:null
+    thisdeleteServiceType = {
+        type: null
     };
     deleteServiceTypeModel(itemServiceType) {
         this.thisdeleteServiceType = itemServiceType;
@@ -510,39 +510,39 @@ export class CustomerComponent implements OnInit {
             customerId: this.selectCustomer,
             ServiceType: this.thisdeleteServiceType["type"]
         };
-       this.notificationAttributes = {
-            "title":"ServiceType",
-            "imgPath":"../../../../assets/images/execute-inproess.png",
-            "action":"delete",
-            "status":"InProgress",
-            "name":this.thisdeleteServiceType["type"]
+        this.notificationAttributes = {
+            "title": "ServiceType",
+            "imgPath": "../../../../assets/images/execute-inproess.png",
+            "action": "delete",
+            "status": "InProgress",
+            "name": this.thisdeleteServiceType["type"]
         };
         this.notificationModelShow(notificationModel);
         this.managemencs.getdeleteServiceTypeVersion(paramss).subscribe((data) => {
             console.log(data)
             if (data["status"] == 'SUCCESS') {
                 let params = {
-                    customerId:this.selectCustomer,
-                    ServiceType:this.thisdeleteServiceType["type"],
-                    version:data["result"]["resource-version"]
+                    customerId: this.selectCustomer,
+                    ServiceType: this.thisdeleteServiceType["type"],
+                    version: data["result"]["resource-version"]
                 };
-                this.deleteServiceType(params,notificationModel);
+                this.deleteServiceType(params, notificationModel);
                 console.log(data, "Interface returned success")
             } else {
                 console.log(data, "Interface returned error")
             }
         })
     }
-    deleteServiceType(params,notificationModel){
+    deleteServiceType(params, notificationModel) {
         this.managemencs.deleteSelectServiceType(params).subscribe((data) => {
             if (data["status"] == 'SUCCESS') {
-               this.notificationSuccess(notificationModel);
+                this.notificationSuccess(notificationModel);
                 this.getServiceTypes(params.customerId);
                 this.getCustomersColumn(params.customerId);
                 this.getAllCustomers();
                 console.log(data, "Interface returned success")
             } else {
-               this.notificationFailed(notificationModel);     
+                this.notificationFailed(notificationModel);
                 console.log(data, "Interface returned error")
             }
         })
@@ -40,7 +40,7 @@
   width: 60px;
   height: 10px;
   transform: translate(-30px, 0);
-  background: url(../../../assets/images/tildeimg.png) no-repeat center center;
+  background: url(../../../../assets/images/tildeimg.png) no-repeat center center;
   background-color: #fff;
 }
 .content .header .headerlist {
   outline: none;
   cursor: pointer;
   background-color: #fff;
-  background: url(../../../assets/images/open-close2.png) no-repeat center -22px;
+  background: url(../../../../assets/images/open-close2.png) no-repeat center -22px;
 }
 .content button:hover {
-  background: url(../../../assets/images/open-close2.png) no-repeat center -66px;
+  background: url(../../../../assets/images/open-close2.png) no-repeat center -66px;
 }
 .content .buttonActive {
   transform: translate(-44px, -22px);
-  background: url(../../../assets/images/open-close2.png) no-repeat center 0px;
+  background: url(../../../../assets/images/open-close2.png) no-repeat center 0px;
 }
 .content .buttonActive:hover {
-  background: url(../../../assets/images/open-close2.png) no-repeat center -44px;
+  background: url(../../../../assets/images/open-close2.png) no-repeat center -44px;
 }
 .content h2.detailtitle {
   font: 700 24px/18px 'Times New Roman';
@@ -41,7 +41,7 @@
             width: 60px;
             height: 10px;
             transform: translate(-30px,0);
-            background: url(../../../assets/images/tildeimg.png) no-repeat center center;
+            background: url(../../../../assets/images/tildeimg.png) no-repeat center center;
             background-color: #fff;
         }
         .headerlist {
         outline: none;
         cursor: pointer;
         background-color: #fff;
-        background: url(../../../assets/images/open-close2.png) no-repeat center -22px;
+        background: url(../../../../assets/images/open-close2.png) no-repeat center -22px;
         &:hover {
-            background: url(../../../assets/images/open-close2.png) no-repeat center -66px;
+            background: url(../../../../assets/images/open-close2.png) no-repeat center -66px;
         }
     }
     .buttonActive {
         transform: translate(-44px,-22px);
-        background: url(../../../assets/images/open-close2.png) no-repeat center -0px;
+        background: url(../../../../assets/images/open-close2.png) no-repeat center -0px;
         &:hover {
-            background: url(../../../assets/images/open-close2.png) no-repeat center -44px;
+            background: url(../../../../assets/images/open-close2.png) no-repeat center -44px;
         }
     }
     h2.detailtitle {
         // transition: all 0.3s linear;
         overflow: hidden;
     }
-    .detailshow {
-
-    }
 }
\ No newline at end of file
@@ -14,8 +14,8 @@
     limitations under the License.
 */
 import { Component, OnInit, Input } from '@angular/core';
-import { slideUpDown } from '../../animates';
-import { HomesService } from '../../homes.service';
+import { slideUpDown } from '../../../animates';
+import { HomesService } from '../../../core/services/homes.service';
 
 @Component({
   selector: 'app-details',
@@ -13,6 +13,7 @@
     See the License for the specific language governing permissions and
     limitations under the License.
 -->
+<!--<h3 class="title"> Services List </h3>-->
 <div class="model creation-model">
     <!-- Create data -->
     <div class="top-title">
@@ -59,14 +59,14 @@ hr {
         display: inline-block;
         width: 35px;
         height: 35px;
-        background:url("../../../assets/images/Return-icon.png") no-repeat!important;
+        background:url("../../../../assets/images/Return-icon.png") no-repeat!important;
         background-size: 100%!important;
         border-radius:4px;
         color: #D7D7D7;
         cursor: pointer;
     }
     .back:hover{
-        background: url("../../../assets/images/Return-icon-active.png")!important;
+        background: url("../../../../assets/images/Return-icon-active.png")!important;
         background-size: 100%!important;
     }
     .top-title h3.title {
diff --git a/usecaseui-portal/src/app/shared/components/e2e-creation/e2e-creation.component.ts b/usecaseui-portal/src/app/shared/components/e2e-creation/e2e-creation.component.ts
new file mode 100644 (file)
index 0000000..068fb03
--- /dev/null
@@ -0,0 +1,357 @@
+/*
+    Copyright (C) 2019 CMCC, Inc. and others. All rights reserved.
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+            http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+*/
+import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';
+import { MyhttpService } from '../../../core/services/myhttp.service';
+import * as d3 from 'd3';
+
+@Component({
+  selector: 'app-e2e-creation',
+  templateUrl: './e2e-creation.component.html',
+  styleUrls: ['./e2e-creation.component.less']
+})
+export class E2eCreationComponent implements OnInit {
+
+  constructor(private myhttp: MyhttpService) { }
+
+  ngOnInit() {
+    this.gete2eTemParameters(this.e2e_ns_temParametersContent);
+    this.getVimInfo();
+    this.getSdnControllers();
+    console.log(this.createParams);
+  }
+
+  @Output() e2eCloseCreate = new EventEmitter();
+  @Output() nsCloseCreate = new EventEmitter();
+  @Input() createParams;
+  @Input() e2e_ns_temParametersContent;
+
+
+  // e2e serviceTemplateParameters
+  templateParameters = {
+    invariantUUID: "",
+    uuid: "",
+    name: "",
+    type: "",
+    version: "",
+    description: "",
+    category: "",
+    subcategory: "",
+    customizationUuid: "",
+    inputs: [],
+    nestedTemplates: []
+  };
+  // ns serviceTemplateParameters
+  nsTemplateParameters = {
+    inputs: {},
+    inputs2: [],
+    vnfs: []
+  }
+  roote2e = {
+    "name": "e2e",
+    "type": "e2e",
+    "children": []
+  };
+
+  rootns = {
+    "name": "ns",
+    "type": "ns",
+    "children": []
+  };
+
+  imgmap = {
+    '1': '../../../../assets/images/create-e2e.png',
+    '2': '../../../../assets/images/create-ns.png',
+    '3': '../../../../assets/images/create-vnf.png',
+  };
+  gete2eTemParameters(data) { //Get template parameters
+    let type = this.createParams.commonParams.templateType == "E2E Service" ? "e2e" : "ns";
+    console.log(this.createParams);
+    console.log(data);
+    if (type == "e2e") {
+      this.templateParameters = data;
+      this.templateParameters.nestedTemplates.forEach((item) => {
+        item.inputs = item.inputs.filter((input) => { return input.type !== "sdn_controller" });
+      })
+      this.templateParameters.nestedTemplates.map((item, index) => {
+        let nsIndex = {
+          "name": "ns",
+          "type": "ns",
+          "children": []
+        };
+        nsIndex.children = item.nestedTemplates.map((item, index) => {
+          return {
+            "name": "vnf",
+            "type": "vnf",
+          }
+        });
+        this.roote2e.children.push(nsIndex);
+      });
+      console.log(this.templateParameters);
+      console.log(this.roote2e)
+    } else if (type == "ns") {
+      if (data["model"] != undefined && typeof data["model"] == 'string') {
+        this.nsTemplateParameters = JSON.parse(data["model"]);
+        console.log(data["model"]);
+      } else {
+        this.nsTemplateParameters = data;
+      }
+      console.log(this.nsTemplateParameters);
+      this.nsTemplateParameters["inputs2"] = [];
+      let inputs = this.nsTemplateParameters.inputs;
+      for (let key in inputs) {
+        this.nsTemplateParameters["inputs2"].push({ name: key, type: inputs[key].type, value: inputs[key].value })
+      }
+      this.rootns.children = this.nsTemplateParameters.vnfs.map((item, index) => {
+        return {
+          "name": "vnf",
+          "type": "vnf",
+        }
+      });
+      console.log(this.nsTemplateParameters);
+    }
+
+    this.drawImage(type)
+
+  }
+  vimInfos = [];
+  getVimInfo() {
+    this.myhttp.getVimInfo()
+      .subscribe((data) => {
+        this.vimInfos = data.map((item) => { return { name: item['cloud-owner'], id: item['cloud-region-id'] } });
+      })
+  };
+  sdnControllers = [];
+  getSdnControllers() {
+    this.myhttp.getSdnControllers()
+      .subscribe((data) => {
+        this.sdnControllers = data.map((item) => { return { name: item['thirdparty-sdnc-id'], id: item['thirdparty-sdnc-id'] } });
+      })
+  }
+
+  // e2e requstbody
+  service = {
+    name: "",
+    description: "",
+    COS: "",
+    EBS: "",
+    serviceInvariantUuid: "",
+    serviceUuid: "", // uuid ??
+    globalSubscriberId: "",   // "customer.id",
+    serviceType: "",    // "serviceType.value",
+    parameters: {
+      locationConstraints: [
+
+      ],
+      resources: [],
+      requestInputs: {},
+    }
+
+  }
+
+  // ns requstbody
+  ns_service = {
+    csarId: "",
+    nsName: "",
+    description: "",
+    context: {
+      globalCustomerId: "",
+      serviceType: ""
+    }
+  }
+  ns_service2 = {
+    locationConstraints: [
+
+    ],
+    additionalParamForNs: {
+    }
+  }
+  submit() {
+    let type = this.createParams.commonParams.templateType == "E2E Service" ? "e2e" : "ns";
+    if (type == "e2e") {
+      this.service.serviceInvariantUuid = this.templateParameters.invariantUUID;
+      this.service.serviceUuid = this.templateParameters.uuid;
+      this.service.globalSubscriberId = this.createParams.commonParams.customer.id;
+      this.service.serviceType = this.createParams.commonParams.serviceType.name;
+
+      this.templateParameters.inputs.forEach((ipnut) => {
+        this.service.parameters.requestInputs[ipnut.name] = ipnut.value == undefined ? ipnut.defaultValue : ipnut.value;
+      })
+
+      this.templateParameters.nestedTemplates.forEach((item) => {
+        let nsService = {
+          resourceName: item.name,
+          resourceInvariantUuid: item.invariantUUID,
+          resourceUuid: item.uuid,
+          resourceCustomizationUuid: item.customizationUuid,
+          parameters: {
+            locationConstraints: [],
+            resources: [],
+            requestInputs: {}
+          }
+        }
+        item.inputs.forEach((input) => {
+          if (input.type == "vf_location") {
+            let location = {
+              vnfProfileId: input.name,
+              locationConstraints: {
+                cloudOwner: input.value.name,
+                cloudRegionId: input.value.id
+              }
+            }
+            nsService.parameters.locationConstraints.push(location);
+          } else {
+            nsService.parameters.requestInputs[input.name] = input.value == undefined ? input.defaultValue : input.value;
+          }
+        })
+        this.service.parameters.resources.push(nsService);
+      })
+      console.log(this.service)
+      this.service.parameters.requestInputs['orchestrator'] = this.createParams.orchestrator.name;
+      if (this.createParams.isSol005Interface) {
+        this.service.parameters.requestInputs['isSol005Interface'] = this.createParams.isSol005Interface;
+      }
+      this.e2eCloseCreate.emit({ service: this.service });
+
+    } else if (type == "ns") {
+      //create ns instance
+      this.ns_service.csarId = this.createParams.template.id;
+      this.ns_service.context.globalCustomerId = this.createParams.commonParams.customer.id;
+      this.ns_service.context.serviceType = this.createParams.commonParams.serviceType.name;
+
+      this.nsTemplateParameters.inputs2.forEach((input) => {
+        this.ns_service2.additionalParamForNs[input.name] = input.value == undefined ? input.defaultValue : input.value;
+      })
+      this.nsTemplateParameters.vnfs.forEach((vnf) => {
+        let vnfparams = {
+          vnfProfileId: vnf.properties.id,
+          locationConstraints: {
+            cloudOwner: vnf.value.name,
+            cloudRegionId: vnf.value.id
+          }
+        }
+        this.ns_service2.locationConstraints.push(vnfparams);
+      })
+      console.log(this.ns_service2);
+
+      let requstbody = {
+        step1: this.ns_service,
+        step2: this.ns_service2
+      }
+      this.nsCloseCreate.emit(requstbody);
+    }
+
+  }
+  goback() {
+    this.e2eCloseCreate.emit();
+  }
+
+
+
+  drawImage(type) {
+    if (type == "e2e") {
+      this.render(this.roote2e, this.imgmap)
+    } else if (type == "ns") {
+      this.render(this.rootns, this.imgmap)
+    }
+
+
+  }
+
+  render(data, imgmap) {
+    var width = document.getElementById("createChart").clientWidth,
+      height = document.getElementById("createChart").clientHeight;
+    var cluster = d3.layout.tree()
+      .size([width, height]);
+    var diagonal = d3.svg.diagonal()
+      .projection(function (d) {
+        return [d.x - 18, d.y + 40];
+      });
+    var svg = d3.select("svg");
+
+    //marker
+    var marker =
+      svg.append("marker")
+        .attr("id", "resolved")
+        .attr("markerUnits", "strokeWidth")
+        .attr("markerUnits", "userSpaceOnUse")
+        .attr("viewBox", "0 -5 10 10")
+        .attr("refX", 22)
+        .attr("refY", 0)
+        .attr("markerWidth", 20)
+        .attr("markerHeight", 20)
+        .attr("orient", "auto")
+        .attr("stroke-width", 1)
+        .append("circle")
+        .attr("cx", 5)
+        .attr("cy", 0)
+        .attr("r", 2)
+        .attr("stroke-width", 1)
+        .style("stroke", "#2F8BF7")
+        .attr('fill', 'white');
+    var i = 0;
+    var nodes = cluster.nodes(data).reverse();
+    nodes.forEach(function (d) {
+      d.y = d.depth * 200 + 100;
+
+    });
+
+    var links = cluster.links(nodes);
+
+    var linkEnter = svg.selectAll("path.link")
+      .data(links);
+
+    linkEnter.enter().append("path")
+      .attr("class", "link")
+      .attr("d", diagonal)
+      .style("stroke", "#2F8BF7")
+      .style('stroke-width', '1px')
+      .attr("marker-end", "url(#resolved)")
+      .style("fill", "none")
+      // .style("fill-opacity", 1)
+      .attr("id", function (d, i) {
+        return "mypath" + i;
+      });
+
+    var node = svg.selectAll(".node")
+      .data(nodes)
+      .enter()
+      .append("g")
+      .attr("class", "node")
+      .attr("transform", function (d) {
+        return "translate(" + (d.x + -50) + "," + (d.y) + ")";
+      });
+
+    node.append('image')
+      .attr('xlink:href', function (d) {
+        if (d.type == "e2e") {
+          return imgmap[1];
+        } else if (d.type == "ns") {
+          return imgmap[2];
+        } else if (d.type == "vnf") {
+          return imgmap[3];
+        }
+
+      })
+      .style('width', '12%')
+      .style("cursor", "pointer")
+      .attr("x", 0)
+      .attr("y", 0)
+      .attr("rx", 3);
+
+
+  }
+
+}
@@ -13,7 +13,7 @@
     See the License for the specific language governing permissions and
     limitations under the License.
 -->
-
+<!--<h3 class="title"> Services List </h3>-->
 <div class="model creation-model">
 
   <div class="top-title">
@@ -23,7 +23,6 @@
     </div>
   </div>
   <div class="detaildata fl">
-      <!--e2e detail data demonstration-->
     <div *ngIf="detailParams.serviceDomain == 'E2E Service'" class="baseparms clearfix">
       <div class="vnf-box">
         <h3> {{"i18nTextDefine_Base" | translate}} </h3>
@@ -57,7 +56,7 @@
         </ul>
       </div>
     </div>
-      <!--e2e detail data demonstration-->
+
     <div *ngIf="detailParams.serviceDomain=='Network Service'" class="baseparms clearfix">
       <div class="vnf-box">
         <h3> {{"i18nTextDefine_Base" | translate}} </h3>
@@ -94,7 +93,7 @@
     </div>
   </div>
 
-  <!--topo chart -->
+  <!-- chart -->
   <div class="chart fr">
     <div id="createChart">
       <svg width="100%" height="100%">
@@ -45,14 +45,14 @@ hr {
     display: inline-block;
     width: 35px;
     height: 35px;
-    background:url("../../../assets/images/Return-icon.png") no-repeat!important;
+    background:url("../../../../assets/images/Return-icon.png") no-repeat!important;
     background-size: 100%!important;
     border-radius:4px;
     color: #D7D7D7;
     cursor: pointer;
   }
   .back:hover{
-    background: url("../../../assets/images/Return-icon-active.png")!important;
+    background: url("../../../../assets/images/Return-icon-active.png")!important;
     background-size: 100%!important;
   }
   .top-title h3.title {
diff --git a/usecaseui-portal/src/app/shared/components/e2e-detail/e2e-detail.component.ts b/usecaseui-portal/src/app/shared/components/e2e-detail/e2e-detail.component.ts
new file mode 100644 (file)
index 0000000..7618c98
--- /dev/null
@@ -0,0 +1,246 @@
+/*
+    Copyright (C) 2019 CMCC, Inc. and others. All rights reserved.
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+            http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+*/
+
+import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';
+import { MyhttpService } from '../../../core/services/myhttp.service';
+import * as d3 from 'd3';
+
+@Component({
+  selector: 'app-e2e-detail',
+  templateUrl: './e2e-detail.component.html',
+  styleUrls: ['./e2e-detail.component.less']
+})
+export class E2eDetailComponent implements OnInit {
+
+  constructor(private myhttp: MyhttpService) {
+  }
+
+  ngOnInit() {
+    // this.getDetails();
+    this.dataInit();
+  }
+
+  @Input() detailParams;
+
+  @Output() closeDetail = new EventEmitter();
+  serviceInstanceName: any;
+  serviceType: any;
+  input_parameters: any;
+  nsinput_parameters: any;
+
+  // e2e
+  service = {
+    name: "",
+    description: "",
+  };
+  e2e_nestedTemplates = [];
+  e2e_requestInputs: any;
+
+  ns_service = {
+    name: "",
+    description: ""
+  }
+  ns_nestedTemplates = [];
+  ns_requestInputs = {};
+  roote2e = {
+    "name": "e2e",
+    "type": "e2e",
+    "children": []
+  };
+
+  rootns = {
+    "name": "ns",
+    "type": "ns",
+    "children": []
+  };
+
+  imgmap = {
+    '1': '../../../../assets/images/create-e2e.png',
+    '2': '../../../../assets/images/create-ns.png',
+    '3': '../../../../assets/images/create-vnf.png',
+  };
+
+  getKeys(item) {
+    return Object.keys(item);
+  }
+
+  dataInit() {
+    console.log(this.detailParams);
+    this.serviceInstanceName = this.detailParams['service-instance-name'] || this.detailParams["nsName"];
+    if (this.detailParams.serviceDomain == 'E2E Service') {
+      this.input_parameters = JSON.stringify(this.detailParams['input-parameters']);
+      this.input_parameters = JSON.parse(this.input_parameters);
+      console.log(this.input_parameters);
+      this.service = {
+        name: this.input_parameters.service.name,
+        description: this.input_parameters.service.description,
+      };
+      if (this.input_parameters.service.parameters.requestInputs != undefined && Object.keys(this.input_parameters.service.parameters.requestInputs).length > 0) {
+        this.e2e_requestInputs = this.input_parameters.service.parameters.requestInputs;
+      }
+      if (this.input_parameters.service.parameters.resources != undefined && this.input_parameters.service.parameters.resources.length > 0) {
+        this.input_parameters.service.parameters.resources.map((item, i) => {
+          let nestedTemplates = {
+            name: null,
+            vnfs: []
+          };
+          nestedTemplates.name = item.resourceName;
+          item.parameters.locationConstraints.map((its, k) => {
+            nestedTemplates.vnfs.push({
+              "vf_location": its.locationConstraints.cloudOwner
+            })
+          });
+          this.e2e_nestedTemplates.push(nestedTemplates);
+
+          let nsIndex = {
+            "name": "ns",
+            "type": "ns",
+            "children": []
+          };
+          nsIndex.children = item.parameters.locationConstraints.map((itemits, index) => {
+            return {
+              "name": "vnf",
+              "type": "vnf",
+            }
+          });
+          this.roote2e.children.push(nsIndex);
+        });
+        console.log(this.e2e_nestedTemplates);
+        console.log(this.e2e_requestInputs);
+        console.log(this.roote2e)
+      }
+    } else if (this.detailParams.serviceDomain == 'Network Service') {
+      this.ns_service = {
+        name: this.detailParams.name || this.detailParams['service-instance-name'],
+        description: this.detailParams.description || null
+      };
+      if (this.detailParams.requestInputs != undefined && Object.keys(this.detailParams.requestInputs).length > 0) {
+        this.ns_requestInputs = this.detailParams.requestInputs;
+      }
+      this.ns_nestedTemplates = this.detailParams.childServiceInstances;
+      this.rootns.children = this.ns_nestedTemplates.map((item, index) => {
+        return {
+          "name": "vnf",
+          "type": "vnf"
+        }
+      });
+      console.log(this.ns_nestedTemplates);
+      console.log(this.ns_requestInputs);
+      console.log(this.rootns)
+    }
+    this.drawImage(this.detailParams.serviceDomain)
+  }
+
+  goback() {
+    this.closeDetail.emit();
+  }
+
+  drawImage(type) {
+    if (type == "E2E Service") {
+      this.render(this.roote2e, this.imgmap)
+    } else if (type == "Network Service") {
+      this.render(this.rootns, this.imgmap)
+    }
+
+
+  }
+
+  render(data, imgmap) {
+    var width = document.getElementById("createChart").clientWidth,
+      height = document.getElementById("createChart").clientHeight;
+    var cluster = d3.layout.tree()
+      .size([width, height]);
+    var diagonal = d3.svg.diagonal()
+      .projection(function (d) {
+        return [d.x - 18, d.y + 40];
+      });
+    var svg = d3.select("svg");
+
+    //marker
+    var marker =
+      svg.append("marker")
+        .attr("id", "resolved")
+        .attr("markerUnits", "strokeWidth")
+        .attr("markerUnits", "userSpaceOnUse")
+        .attr("viewBox", "0 -5 10 10")
+        .attr("refX", 22)
+        .attr("refY", 0)
+        .attr("markerWidth", 20)
+        .attr("markerHeight", 20)
+        .attr("orient", "auto")
+        .attr("stroke-width", 1)
+        .append("circle")
+        .attr("cx", 5)
+        .attr("cy", 0)
+        .attr("r", 2)
+        .attr("stroke-width", 1)
+        .style("stroke", "#2F8BF7")
+        .attr('fill', 'white');
+    var i = 0;
+    var nodes = cluster.nodes(data).reverse();
+    nodes.forEach(function (d) {
+      d.y = d.depth * 200 + 100;
+
+    });
+
+    var links = cluster.links(nodes);
+
+    var linkEnter = svg.selectAll("path.link")
+      .data(links);
+
+    linkEnter.enter().append("path")
+      .attr("class", "link")
+      .attr("d", diagonal)
+      .style("stroke", "#2F8BF7")
+      .style('stroke-width', '1px')
+      .attr("marker-end", "url(#resolved)")
+      .style("fill", "none")
+      // .style("fill-opacity", 1)
+      .attr("id", function (d, i) {
+        return "mypath" + i;
+      });
+
+    var node = svg.selectAll(".node")
+      .data(nodes)
+      .enter()
+      .append("g")
+      .attr("class", "node")
+      .attr("transform", function (d) {
+        return "translate(" + (d.x + -50) + "," + (d.y) + ")";
+      });
+
+    node.append('image')
+      .attr('xlink:href', function (d) {
+        if (d.type == "e2e") {
+          return imgmap[1];
+        } else if (d.type == "ns") {
+          return imgmap[2];
+        } else if (d.type == "vnf") {
+          return imgmap[3];
+        }
+
+      })
+      .style('width', '12%')
+      .style("cursor", "pointer")
+      .attr("x", 0)
+      .attr("y", 0)
+      .attr("rx", 3);
+
+
+  }
+
+
+}
@@ -84,8 +84,8 @@
   display: inline-block;
   width: 16px;
   height: 16px;
-  background: url(../../../assets/images/icon.png) center -113px;
+  background: url(../../../../assets/images/icon.png) center -113px;
 }
 .content .tablelist .action .details:hover {
-  background: url(../../../assets/images/icon.png) no-repeat center -128px;
+  background: url(../../../../assets/images/icon.png) no-repeat center -128px;
 }
                 display: inline-block;
                 width: 16px;
                 height: 16px;
-                background: url(../../../assets/images/icon.png) center -113px;
+                background: url(../../../../assets/images/icon.png) center -113px;
                 &:hover {
-                    background: url(../../../assets/images/icon.png) no-repeat center -128px;
+                    background: url(../../../../assets/images/icon.png) no-repeat center -128px;
                 }
             }
         }
@@ -14,7 +14,7 @@
     limitations under the License.
 */
 import { Component, OnInit, Input, Output, EventEmitter, HostBinding } from '@angular/core';
-import { HomesService } from '../../homes.service';
+import { HomesService } from '../../../core/services/homes.service';
 import * as addDays from 'date-fns/add_days';
 import { DatePipe } from "@angular/common"
 
@@ -40,7 +40,7 @@
   width: 60px;
   height: 10px;
   transform: translate(-30px, 0);
-  background: url(../../../assets/images/tildeimg.png) no-repeat center center;
+  background: url(../../../../assets/images/tildeimg.png) no-repeat center center;
   background-color: #fff;
 }
 .content .header .headerlist {
   outline: none;
   cursor: pointer;
   background-color: #fff;
-  background: url(../../../assets/images/open-close2.png) no-repeat center -22px;
+  background: url(../../../../assets/images/open-close2.png) no-repeat center -22px;
 }
 .content button:hover {
-  background: url(../../../assets/images/open-close2.png) no-repeat center -66px;
+  background: url(../../../../assets/images/open-close2.png) no-repeat center -66px;
 }
 .content .buttonActive {
   transform: translate(-44px, -22px);
-  background: url(../../../assets/images/open-close2.png) no-repeat center 0px;
+  background: url(../../../../assets/images/open-close2.png) no-repeat center 0px;
 }
 .content .buttonActive:hover {
-  background: url(../../../assets/images/open-close2.png) no-repeat center -44px;
+  background: url(../../../../assets/images/open-close2.png) no-repeat center -44px;
 }
 .content h2.detailtitle {
   font: 700 24px/18px 'Times New Roman';
@@ -40,7 +40,7 @@
             width: 60px;
             height: 10px;
             transform: translate(-30px,0);
-            background: url(../../../assets/images/tildeimg.png) no-repeat center center;
+            background: url(../../../../assets/images/tildeimg.png) no-repeat center center;
             background-color: #fff;
         }
         .headerlist {
         outline: none;
         cursor: pointer;
         background-color: #fff;
-        background: url(../../../assets/images/open-close2.png) no-repeat center -22px;
+        background: url(../../../../assets/images/open-close2.png) no-repeat center -22px;
         &:hover {
-            background: url(../../../assets/images/open-close2.png) no-repeat center -66px;
+            background: url(../../../../assets/images/open-close2.png) no-repeat center -66px;
         }
     }
     .buttonActive {
         transform: translate(-44px,-22px);
-        background: url(../../../assets/images/open-close2.png) no-repeat center -0px;
+        background: url(../../../../assets/images/open-close2.png) no-repeat center -0px;
         &:hover {
-            background: url(../../../assets/images/open-close2.png) no-repeat center -44px;
+            background: url(../../../../assets/images/open-close2.png) no-repeat center -44px;
         }
     }
     h2.detailtitle {
@@ -14,8 +14,8 @@
     limitations under the License.
 */
 import { Component, OnInit, Input } from '@angular/core';
-import { slideUpDown } from '../../animates';
-import { HomesService } from '../../homes.service';
+import { slideUpDown } from '../../../animates';
+import { HomesService } from '../../../core/services/homes.service';
 
 @Component({
   selector: 'app-performance-details',
diff --git a/usecaseui-portal/src/app/test/test.component.html b/usecaseui-portal/src/app/test/test.component.html
new file mode 100644 (file)
index 0000000..200be4e
--- /dev/null
@@ -0,0 +1,25 @@
+<div class="test-holder">
+  <h1>Mock data works!</h1>
+  <nz-table #basicTable [nzData]="tableData">
+    <thead>
+      <tr>
+        <th>Name</th>
+        <th>Phone</th>
+        <th>Address</th>
+        <th>Action</th>
+      </tr>
+    </thead>
+    <tbody>
+      <tr *ngFor="let data of tableData">
+        <td>{{data.name}}</td>
+        <td>{{data.phone}}</td>
+        <td>{{data.address}}</td>
+        <td>
+          <a>Action 一 {{data.name}}</a>
+          <nz-divider nzType="vertical"></nz-divider>
+          <a>Delete</a>
+        </td>
+      </tr>
+    </tbody>
+  </nz-table>
+</div>
\ No newline at end of file
diff --git a/usecaseui-portal/src/app/test/test.component.less b/usecaseui-portal/src/app/test/test.component.less
new file mode 100644 (file)
index 0000000..a44f4e7
--- /dev/null
@@ -0,0 +1,3 @@
+.test-holder{
+    margin:20px;
+}
\ No newline at end of file
diff --git a/usecaseui-portal/src/app/test/test.component.spec.ts b/usecaseui-portal/src/app/test/test.component.spec.ts
new file mode 100644 (file)
index 0000000..ef4e38c
--- /dev/null
@@ -0,0 +1,25 @@
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { TestComponent } from './test.component';
+
+describe('TestComponent', () => {
+  let component: TestComponent;
+  let fixture: ComponentFixture<TestComponent>;
+
+  beforeEach(async(() => {
+    TestBed.configureTestingModule({
+      declarations: [ TestComponent ]
+    })
+    .compileComponents();
+  }));
+
+  beforeEach(() => {
+    fixture = TestBed.createComponent(TestComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});
diff --git a/usecaseui-portal/src/app/test/test.component.ts b/usecaseui-portal/src/app/test/test.component.ts
new file mode 100644 (file)
index 0000000..30fdedc
--- /dev/null
@@ -0,0 +1,34 @@
+import { Component, OnInit } from '@angular/core';
+import { TextService } from '../core/services/text.service';
+
+@Component({
+  selector: 'app-test',
+  templateUrl: './test.component.html',
+  styleUrls: ['./test.component.less']
+})
+export class TestComponent implements OnInit {
+  constructor(
+    private TextService: TextService,
+  ) {
+  }
+
+  ngOnInit() {
+    this.getMockData();
+    this.getjsonData();
+
+  }
+  tableData = []
+  getMockData() {
+    this.TextService.getfakeData().subscribe(res => {
+      console.log(res, "======fake data")
+      this.tableData = res;
+    })
+  }
+  getjsonData() {
+    this.TextService.getjsonData().subscribe(res => {
+      console.log(res, "======json data")
+    })
+  }
+
+
+}
@@ -134,16 +134,16 @@ hr {
   outline: none;
   cursor: pointer;
   background-color: #fff;
-  background: url(../../assets/images/open-close.png) no-repeat center -27px;
+  background: url(../../../assets/images/open-close.png) no-repeat center -27px;
 }
 .content .chart .open-close:hover {
-  background: url(../../assets/images/open-close.png) no-repeat center -79px;
+  background: url(../../../assets/images/open-close.png) no-repeat center -79px;
 }
 .content .chart .open-close-active {
-  background: url(../../assets/images/open-close.png) center -1px;
+  background: url(../../../assets/images/open-close.png) center -1px;
 }
 .content .chart .open-close-active:hover {
-  background: url(../../assets/images/open-close.png) no-repeat center -53px;
+  background: url(../../../assets/images/open-close.png) no-repeat center -53px;
 }
 .content .tablelist {
   background-color: #fff;
@@ -157,8 +157,8 @@ hr {
   display: inline-block;
   width: 16px;
   height: 16px;
-  background: url(../../assets/images/icon.png) center -113px;
+  background: url(../../../assets/images/icon.png) center -113px;
 }
 .content .tablelist .action .details:hover {
-  background: url(../../assets/images/icon.png) no-repeat center -128px;
+  background: url(../../../assets/images/icon.png) no-repeat center -128px;
 }
@@ -207,15 +207,15 @@ hr {
             outline: none;
             cursor: pointer;
             background-color: #fff;
-            background: url(../../assets/images/open-close.png) no-repeat center -27px;
+            background: url(../../../assets/images/open-close.png) no-repeat center -27px;
             &:hover {
-                background: url(../../assets/images/open-close.png) no-repeat center -79px;
+                background: url(../../../assets/images/open-close.png) no-repeat center -79px;
             }
         }
         .open-close-active {
-            background: url(../../assets/images/open-close.png) center -1px;
+            background: url(../../../assets/images/open-close.png) center -1px;
             &:hover {
-                background: url(../../assets/images/open-close.png) no-repeat center -53px;
+                background: url(../../../assets/images/open-close.png) no-repeat center -53px;
             }
         }
     }
@@ -229,9 +229,9 @@ hr {
                 display: inline-block;
                 width: 16px;
                 height: 16px;
-                background: url(../../assets/images/icon.png) center -113px;
+                background: url(../../../assets/images/icon.png) center -113px;
                 &:hover {
-                    background: url(../../assets/images/icon.png) no-repeat center -128px;
+                    background: url(../../../assets/images/icon.png) no-repeat center -128px;
                 }
             }
         }
diff --git a/usecaseui-portal/src/app/views/alarm/alarm.component.spec.ts b/usecaseui-portal/src/app/views/alarm/alarm.component.spec.ts
new file mode 100644 (file)
index 0000000..9f01597
--- /dev/null
@@ -0,0 +1,66 @@
+import { async, ComponentFixture, TestBed, inject, fakeAsync } from '@angular/core/testing';
+import { NO_ERRORS_SCHEMA, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
+import { NgxEchartsModule } from 'ngx-echarts';
+import { NgZorroAntdModule } from 'ng-zorro-antd';
+import { TranslateModule, TranslateLoader, TranslateService, TranslateFakeLoader } from '@ngx-translate/core';
+import { HttpClientModule } from '@angular/common/http';
+import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing';
+import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
+import { NZ_I18N, en_US } from 'ng-zorro-antd';
+
+import { AlarmComponent } from './alarm.component';
+import { DetailsComponent } from '../../shared/components/details/details.component';
+import { LineComponent } from '../../shared/components/charts/line/line.component';
+import { HomesService } from '../../core/services/homes.service';
+
+fdescribe('AlarmComponent', () => {
+  let component: AlarmComponent;
+  let fixture: ComponentFixture<AlarmComponent>;
+
+  beforeEach(async(() => {
+    TestBed.configureTestingModule({
+      declarations: [AlarmComponent, DetailsComponent, LineComponent],
+      imports: [TranslateModule.forRoot({ loader: { provide: TranslateLoader, useClass: TranslateFakeLoader } }),
+      NgZorroAntdModule.forRoot(),
+        NgxEchartsModule,
+        HttpClientModule,
+        BrowserAnimationsModule,
+        HttpClientTestingModule],
+      providers: [TranslateService, HomesService,
+        { provide: NZ_I18N, useValue: en_US }],
+      schemas: [
+        CUSTOM_ELEMENTS_SCHEMA,
+        NO_ERRORS_SCHEMA
+      ]
+    })
+      .compileComponents();
+  }));
+
+  beforeEach(() => {
+    fixture = TestBed.createComponent(AlarmComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create', inject([HttpTestingController, HomesService],
+    (httpMock: HttpTestingController, service: HomesService) => {
+      expect(component).toBeTruthy();
+    }));
+
+  it('expects service to fetch data with proper sorting',
+    inject([HttpTestingController, HomesService],
+      (httpMock: HttpTestingController, service: HomesService) => {
+        // We call the service
+        service.getqueryAllSourceNames().subscribe(data => {
+          expect(data.pageInfo.totalRecordCount).toBe(21);
+          expect(data.pageInfo.pageNumber).toBe(0);
+          expect(data.data.length).toBe(7);
+        });
+        // We set the expectations for the HttpClient mock
+        const req = httpMock.expectOne('http://.../data/contacts');
+        expect(req.request.method).toEqual('GET');
+        // Then we set the fake data to be returned by the mock
+        req.flush({ data: ...});
+      })
+  );
+});
@@ -14,8 +14,8 @@
     limitations under the License.
 */
 import { Component, OnInit, Input, Output, EventEmitter, HostBinding, Pipe, PipeTransform } from '@angular/core';
-import { HomesService } from '../homes.service';
-import { showHideAnimate, slideToRight } from '../animates';
+import { HomesService } from '../../core/services/homes.service';
+import { showHideAnimate, slideToRight } from '../../animates';
 import { DatePipe } from '@angular/common';
 @Component({
   selector: 'app-alarm',
@@ -199,12 +199,12 @@ export class AlarmComponent implements OnInit {
   alarmShow = false;
   alarmChartData: Object;
   alarmChartInit: Object = {
-    height:  200,
+    height: 200,
     option: {
       legend: {
-        icon: "circle", 
-        itemWidth:10,
-        itemHeight:10,
+        icon: "circle",
+        itemWidth: 10,
+        itemHeight: 10,
         bottom: '-5px',
         data: ['Active', 'Fixed']
       },
@@ -218,7 +218,7 @@ export class AlarmComponent implements OnInit {
           start: 1,
           height: 10,
           end: 60,
-          bottom:'9%'
+          bottom: '9%'
         }
       ],
       xAxis: {
@@ -241,7 +241,7 @@ export class AlarmComponent implements OnInit {
                 x2: 0,
                 y2: 1,
                 colorStops: [{
-                  offset: 0, color: '#FB7788' 
+                  offset: 0, color: '#FB7788'
                 }, {
                   offset: 1, color: '#FB93C2'
                 }],
@@ -278,7 +278,7 @@ export class AlarmComponent implements OnInit {
       ]
     }
   };
-  sort(e){
+  sort(e) {
 
   }
   //Detail page title display
@@ -44,14 +44,14 @@ hr {
     display: inline-block;
     width: 35px;
     height: 35px;
-    background:url("../../assets/images/Return-icon.png") no-repeat!important;
+    background:url("../../../assets/images/Return-icon.png") no-repeat!important;
     background-size: 100%!important;
     border-radius:4px;
     color: #D7D7D7;
     cursor: pointer;    
 }
 .model .back:hover{
-    background: url("../../assets/images/Return-icon-active.png")!important;
+    background: url("../../../assets/images/Return-icon-active.png")!important;
     background-size: 100%!important;
 }
 .top-title h3.title {
diff --git a/usecaseui-portal/src/app/views/ccvpn-creation/ccvpn-creation.component.html b/usecaseui-portal/src/app/views/ccvpn-creation/ccvpn-creation.component.html
new file mode 100644 (file)
index 0000000..1fc9a50
--- /dev/null
@@ -0,0 +1,275 @@
+<!--
+    Copyright (C) 2019 CMCC, Inc. and others. All rights reserved.
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+            http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+<div class="model creation-model">
+
+    <div class="top-title">
+        <h3 class="title fl">{{createParams.commonParams.templateType}}
+            {{"i18nTextDefine_InstanceCreation" | translate}} </h3>
+        <div class="fl" style="width: 20%">
+            <button class="submit" nz-button (click)="submit()"><span> {{"i18nTextDefine_Create" | translate}} </span>
+            </button>
+            <button class="back" nz-button (click)="goback()"></button>
+        </div>
+    </div>
+    <!-- chart -->
+    <div class="chart">
+        <span style="padding: 25px;display: inline-block;">
+            {{"i18nTextDefine_InstanceTopology" | translate}}
+        </span>
+        <div id="createChart">
+            <svg width="100%" height="100%">
+                <image id="domain" xlink:href="assets/images/domain1.png" style="width: 15%" x="40%" y="0" />
+            </svg>
+        </div>
+    </div>
+    <!--Template resolution : Three major items-->
+    <div class="creation">
+        <nz-tabset [nzTabPosition]="'top'" [nzShowPagination]=false [nzTabBarGutter]="'2'" [nzTabBarStyle]=tabBarStyle>
+            <nz-tab nzTitle="Service Info">
+                <div class="service-title" style="clear: both">
+                    <span style="color: red;">*</span><span class="lable" style="width: 60px">name:</span>
+                    <input nz-input [(ngModel)]="this.templateParameters.service['name']" required="required">
+                    <span style="color: red;">*</span><span class="lable">description:</span>
+                    <input nz-input [(ngModel)]="this.templateParameters.service['description']">
+                </div>
+            </nz-tab>
+            <nz-tab nzTitle="Sdwanvpnresource List">
+                <div class="sotnvpn clearfix">
+                    <div style="clear: both;height: 10px">
+                        <h3 style="float: left;color: #3C4F8C">sdwanVPN List</h3>
+                        <button nz-button (click)="addSotnvpn()" class="addListBtn"
+                            style="float: right;margin-right: 10px"><i class="anticon anticon-plus"
+                                style="transform: scale(1.2);font-weight: 700"></i> {{"i18nTextDefine_Add" | translate}}
+                        </button>
+                    </div>
+                    <nz-table #sotnVpnTable [nzData]="sotnVpnTableData" [nzShowPagination]="false" nzSize="small">
+                        <thead>
+                            <tr>
+                                <th width="30%"> NO.</th>
+                                <th *ngFor="let key of getKeys(this.sotnInfo)">{{key.split("_")[1] || key}}</th>
+                                <th width="10%"> Action</th>
+                            </tr>
+                        </thead>
+                        <tbody>
+                            <tr *ngFor="let item of sotnVpnTable.data; let i = index; ">
+                                <td>{{i+1}}</td>
+                                <td *ngFor="let keys of getKeys(this.sotnInfo);let a = index;">
+                                    {{item[keys]}}
+                                </td>
+                                <td>
+                                    <span class="action" (click)="editSotnVpn(i+1)"><i
+                                            class="anticon anticon-edit"></i></span>
+                                    &nbsp;
+                                    <span class="action" (click)="deleteSotnVpn(i+1)"><i
+                                            class="anticon anticon-delete"></i></span>
+                                </td>
+                            </tr>
+                        </tbody>
+                    </nz-table>
+                </div>
+            </nz-tab>
+            <nz-tab nzTitle="Sdwansiteresource List">
+                <div class="site">
+                    <div style="height: 10px">
+                        <h3 style="float: left;color: #3C4F8C">Site List</h3>
+                        <button nz-button (click)="addSite()" class="addListBtn"
+                            style="float: right;margin-right: 10px"><i class="anticon anticon-plus"
+                                style="transform: scale(1.2);font-weight: 700"></i>{{"i18nTextDefine_Add" | translate}}
+                        </button>
+                    </div>
+                    <nz-table #siteTable [nzData]="siteTableData" [nzShowPagination]="false" nzSize="small">
+                        <thead>
+                            <tr>
+                                <th nzWidth="10%"> NO.</th>
+                                <th *ngFor="let key of getKeys(this.siteBaseData)">{{key.split("_")[1] || key}}</th>
+                                <th nzWidth="20%" style="text-align: center"> Action</th>
+                            </tr>
+                        </thead>
+                        <tbody>
+                            <tr *ngFor="let item of siteTable.data; let i = index; ">
+                                <td>{{i+1}}</td>
+                                <td *ngFor="let keys of getKeys(this.siteBaseData);let a = index;">
+                                    {{item[keys]}}
+                                </td>
+                                <td style="text-align: center">
+                                    <span class="action" (click)="editSite(i+1)"><i
+                                            class="anticon anticon-edit"></i></span>
+                                    &nbsp;
+                                    <span class="action" (click)="deleteSite(i+1)"><i
+                                            class="anticon anticon-delete"></i></span>
+                                </td>
+                            </tr>
+                        </tbody>
+                    </nz-table>
+                </div>
+            </nz-tab>
+        </nz-tabset>
+    </div>
+    <!-- sotnVpnmodel -->
+    <div class="sotnnpnmodel" *ngIf="sotnVpnModelShow">
+        <h3> {{"i18nTextDefine_Base" | translate}} </h3>
+        <div class="inputs">
+            <ul>
+                <li *ngFor="let item of this.templateParameters.sotnvpn.sdwanvpnresource_list">
+                    <span *ngIf="item.required"
+                        style="color: red;margin: 0;margin-right: -5px;">*</span><span>{{item.lableShow}}:</span>
+                    <input nz-input [(ngModel)]="sotnInfo[item.lable]"
+                        title="{{item.description ? item.description:null }}"
+                        required="{{item.required==true ? 'required':null}}"></li>
+            </ul>
+        </div>
+        <div>
+            <h3>Sdwansitelan List</h3>
+            <div>
+                <div style="width: 100%;text-align: right">
+                    <button nz-button (click)="addSotnSdwansitelan()" class="addListBtn"><i class="anticon anticon-plus"
+                            style="transform: scale(1.2);font-weight: 700;"></i>{{"i18nTextDefine_Add" | translate}}
+                    </button>
+                </div>
+                <table class="siteWanTab">
+                    <thead>
+                        <tr>
+                            <th width="4%"> NO.</th>
+                            <th *ngFor="let key of getKeys(this.sotnSdwansitelanParams)">{{key}}</th>
+                            <th width="7%"> Action</th>
+                        </tr>
+                    </thead>
+                    <tbody>
+                        <tr *ngFor="let item of sotnSdwansitelanData; let i = index;"
+                            [ngClass]="{'tr-border':item.tabInputShowSdwansitelan ==false}">
+                            <td>{{i+1}}</td>
+                            <td *ngFor="let key of getKeys(item);let a = index;">
+                                <span *ngIf="!tabInputShowSdwansitelan[i]"
+                                    title="{{this.templateParameters.sotnvpn.sdwansitelan_list[a]['lable']==getKeys(item)[a] ? this.templateParameters.site.sdwansitewan_list[a].description:null}}">{{item[key]}}</span>
+                                <input nz-input [(ngModel)]="item[key]" *ngIf="tabInputShowSdwansitelan[i] "
+                                    title="{{this.templateParameters.sotnvpn.sdwansitelan_list[a]['lable']==getKeys(item)[a] ? this.templateParameters.site.sdwansitewan_list[a].description:null}}"
+                                    required="{{item.required==true ? 'required':null}}">
+                            </td>
+                            <td>
+                                <span class="action" (click)="editSotnSdwansitelan(i+1,item,sotnSdwansitelanData)"><i
+                                        class="anticon anticon-edit" style="margin: 0 5px;"></i></span>
+                                <span class="action" (click)="deleteSotnSdwansitelan(i+1,item,sotnSdwansitelanData)"><i
+                                        class="anticon anticon-delete"></i></span>
+                            </td>
+                        </tr>
+                    </tbody>
+                </table>
+            </div>
+        </div>
+
+        <div class="action">
+            <button nz-button nzType="primary"
+                (click)="addSotnVpn_cancel()">{{"i18nTextDefine_Cancel" | translate}}</button>
+            <button nz-button nzType="primary" (click)="addSotnVpn_OK()">{{"i18nTextDefine_Add" | translate}}</button>
+        </div>
+    </div>
+    <!-- sitemodel -->
+    <div class="sitemodel" *ngIf="siteModelShow">
+        <h3> {{"i18nTextDefine_Base" | translate}} </h3>
+        <div class="inputs">
+            <ul>
+                <li *ngFor="let item of this.templateParameters.site.sdwansiteresource_list">
+                    <span *ngIf="item.required"
+                        style="color: red;margin: 0;margin-right: -5px;">*</span><span>{{item.lableShow}}:</span>
+                    <input nz-input [(ngModel)]="siteBaseData[item.lable]" title="{{item.description}}"
+                        required="{{item.required==true ? 'required':null}}"></li>
+            </ul>
+        </div>
+        <div>
+            <h3>Sdwandevice</h3>
+            <div>
+                <div style="width: 100%;text-align: right">
+                    <button nz-button (click)="addSdwanDevice()" class="addListBtn"><i class="anticon anticon-plus"
+                            style="transform: scale(1.2);font-weight: 700;"></i>{{"i18nTextDefine_Add" | translate}}
+                    </button>
+                </div>
+                <table class="siteWanTab">
+                    <thead>
+                        <tr>
+                            <th width="4%"> NO.</th>
+                            <th *ngFor="let key of getKeys(this.siteCpeData)">{{key}}</th>
+                            <th width="7%"> Action</th>
+                        </tr>
+                    </thead>
+                    <tbody>
+                        <tr *ngFor="let item of siteSdwanDevice; let i = index;"
+                            [ngClass]="{'tr-border':item.tabInputShowDevice ==false}">
+                            <td>{{i+1}}</td>
+                            <td *ngFor="let key of getKeys(item);let a = index;">
+                                <span *ngIf="!tabInputShowDevice[i]"
+                                    title="{{this.templateParameters.site.sdwandevice_list[a]['lable']==getKeys(item)[a] ? this.templateParameters.site.sdwandevice_list[a].description:null}}">{{item[key]}}</span>
+                                <input nz-input [(ngModel)]="item[key]" *ngIf="tabInputShowDevice[i] "
+                                    title="{{this.templateParameters.site.sdwandevice_list[a]['lable']==getKeys(item)[a] ? this.templateParameters.site.sdwandevice_list[a].description:null}}"
+                                    required="{{item.required==true ? 'required':null}}">
+                            </td>
+                            <td>
+                                <span class="action" (click)="editDevicePort(i+1,item,siteSdwanDevice)"><i
+                                        class="anticon anticon-edit" style="margin: 0 5px;"></i></span>
+                                <span class="action" (click)="deleteDevicePort(i+1,item,siteSdwanDevice)"><i
+                                        class="anticon anticon-delete"></i></span>
+                            </td>
+                        </tr>
+                    </tbody>
+                </table>
+            </div>
+
+
+            <h3>Sdwansitewan List</h3>
+            <div>
+                <div style="width: 100%;text-align: right">
+                    <button nz-button (click)="addSiteWan()" class="addListBtn"><i class="anticon anticon-plus"
+                            style="transform: scale(1.2);font-weight: 700;"></i>{{"i18nTextDefine_Add" | translate}}
+                    </button>
+                </div>
+                <table class="siteWanTab">
+                    <thead>
+                        <tr>
+                            <th width="4%"> NO.</th>
+                            <th *ngFor="let key of getKeys(this.siteWanParams)">{{key}}</th>
+                            <th width="7%"> Action</th>
+                        </tr>
+                    </thead>
+                    <tbody>
+                        <tr *ngFor="let item of siteWanData; let i = index;"
+                            [ngClass]="{'tr-border':item.tabInputShowWanPort ==false}">
+                            <td>{{i+1}}</td>
+                            <td *ngFor="let key of getKeys(item);let a = index;">
+                                <span *ngIf="!tabInputShowWanPort[i]"
+                                    title="{{this.templateParameters.site.sdwansitewan_list[a]['lable']==getKeys(item)[a] ? this.templateParameters.site.sdwansitewan_list[a].description:null}}">{{item[key]}}</span>
+                                <input nz-input [(ngModel)]="item[key]" *ngIf="tabInputShowWanPort[i] "
+                                    title="{{this.templateParameters.site.sdwansitewan_list[a]['lable']==getKeys(item)[a] ? this.templateParameters.site.sdwansitewan_list[a].description:null}}"
+                                    required="{{item.required==true ? 'required':null}}">
+                            </td>
+                            <td>
+                                <span class="action" (click)="editWanPort(i+1,item,siteWanData)"><i
+                                        class="anticon anticon-edit" style="margin: 0 5px;"></i></span>
+                                <span class="action" (click)="deleteWanPort(i+1,item,siteWanData)"><i
+                                        class="anticon anticon-delete"></i></span>
+                            </td>
+                        </tr>
+                    </tbody>
+                </table>
+            </div>
+        </div>
+
+        <div class="action">
+            <button nz-button nzType="primary"
+                (click)="addsite_cancel()">{{"i18nTextDefine_Cancel" | translate}}</button>
+            <button nz-button nzType="primary" (click)="addsite_OK()">{{"i18nTextDefine_Add" | translate}}</button>
+        </div>
+    </div>
+    <div class="mask" *ngIf="siteModelShow || sotnVpnModelShow"></div>
+</div>
\ No newline at end of file
@@ -16,7 +16,7 @@
 import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';
 import * as d3 from 'd3';
 import * as $ from 'jquery';
-import { MyhttpService } from '../myhttp.service';
+import { MyhttpService } from '../../core/services/myhttp.service';
 import { el } from "@angular/platform-browser/testing/src/browser_util";
 
 @Component({
@@ -135,7 +135,7 @@ export class CcvpnCreationComponent implements OnInit {
         });
         this.showTemParametersSotnVpn();
         this.showTemParametersSite();
-        console.log(this.bodyTemplateParameter,this.templateParameters)
+        console.log(this.bodyTemplateParameter, this.templateParameters)
     }
 
     //sotnVpn data, after combining the structure, rendering the template data to the page
@@ -223,7 +223,7 @@ export class CcvpnCreationComponent implements OnInit {
         this.siteSdwanDevice.push(this.siteCpeData);
         this.siteWanData.push(this.siteWanParams);
         this.siteWanData.map((item, index) => {
-        this.tabInputShowDevice[index] = true;
+            this.tabInputShowDevice[index] = true;
         });
         this.siteWanData.map((item, index) => {
             this.tabInputShowWanPort[index] = true;
@@ -519,8 +519,8 @@ export class CcvpnCreationComponent implements OnInit {
     siteImage = [];
     tpImage = [];
     imgmap = {
-        '1': './assets/images/domain1.png',
-        '2': './assets/images/site.png'
+        '1': '../../../assets/images/domain1.png',
+        '2': '../../../assets/images/site.png'
     };
 
     drawImage(sitelist) {
@@ -58,14 +58,14 @@ hr {
     display: inline-block;
     width: 35px;
     height: 35px;
-    background:url("../../assets/images/Return-icon.png") no-repeat!important;
+    background:url("../../../assets/images/Return-icon.png") no-repeat!important;
     background-size: 100%!important;
     border-radius:4px;
     color: #D7D7D7;
     cursor: pointer;
 }
 .model .back:hover{
-    background: url("../../assets/images/Return-icon-active.png")!important;
+    background: url("../../../assets/images/Return-icon-active.png")!important;
     background-size: 100%!important;
 }
 .top-title h3.title {
@@ -19,7 +19,8 @@
   <div class="top-title">
     <h3 class="title fl">{{detailParams['service-instance-name']}} Instance Detail</h3>
     <div class="fl" style="width: 20%">
-      <button class="submit" nz-button (click)="submitUpdate()" *ngIf="upDateShow"><span> {{"i18nTextDefine_Update" | translate}} </span>
+      <button class="submit" nz-button (click)="submitUpdate()" *ngIf="upDateShow"><span>
+          {{"i18nTextDefine_Update" | translate}} </span>
       </button>
       <button class="back" nz-button (click)="goback()"></button>
     </div>
       <svg width="100%" height="100%" style="position: relative">
         <!--local domain-->
         <g class="clouds" *ngIf="vpns[0].domain!=''">
-          <image xlink:href="./assets/images/domain1.png"
-                 id="domain1"
-                 width="14%"
-                 x="17%" y="14%"
-          ></image>
+          <image xlink:href="assets/images/domain1.png" id="domain1" width="14%" x="17%" y="14%"></image>
           <text dx="24%" dy="51%" style="font-size: 14px; fill:#ffffff;width: 20px;">
             {{vpns[0].domain}}
           </text>
         </g>
         <g *ngIf="vpns[1]" class="clouds">
-          <image xlink:href="./assets/images/domain1.png"
-                 id="domain2"
-                 width="14%"
-                 x="40%" y="40%"
-          ></image>
+          <image xlink:href="assets/images/domain1.png" id="domain2" width="14%" x="40%" y="40%"></image>
           <text dx="43%" dy="19%" style="font-size: 14px; fill: #ffffff;width: 20px;">
             {{vpns[1].domain}}
           </text>
         </g>
         <!--domain1 tp-->
         <g class="clouds" *ngIf="vpns[0].sitetpname!=''">
-          <image xlink:href="./assets/images/tp.png"
-                 class="tp"
-                 id="tp1"
-                 height="16" width="20"
-                 x="21%" y="37%"
-          ></image>
+          <image xlink:href="assets/images/tp.png" class="tp" id="tp1" height="16" width="20" x="21%" y="37%"></image>
           <text dx="21%" dy="34%" style="font-size: 14px; fill: #666;width: 20px;">
             {{vpns[0].sitetpname}}
           </text>
         </g>
         <g class="clouds" *ngIf="vpns[0].othertpname!=''">
-          <image xlink:href="./assets/images/tp.png"
-                 class="tp"
-                 id="tp2"
-                 height="16" width="20"
-                 x="29%" y="52%"
-          ></image>
+          <image xlink:href="assets/images/tp.png" class="tp" id="tp2" height="16" width="20" x="29%" y="52%"></image>
           <text dx="29%" dy="49%" style="font-size: 14px; fill: #666;width: 20px;">
             {{vpns[0].othertpname}}
           </text>
         </g>
         <!--domain2 tp-->
         <g *ngIf="vpns[1]" class="clouds">
-          <image xlink:href="./assets/images/tp.png"
-                 class="tp"
-                 id="tp3"
-                 height="16" width="20"
-                 x="44%" y="52%"
-          ></image>
+          <image xlink:href="assets/images/tp.png" class="tp" id="tp3" height="16" width="20" x="44%" y="52%"></image>
           <text dx="44%" dy="49%" style="font-size: 14px; fill: #666;width: 20px;">
             {{vpns[1].othertpname}}
           </text>
         </g>
         <g *ngIf="vpns[1]" class="clouds">
-          <image xlink:href="./assets/images/tp.png"
-                 class="tp"
-                 id="tp4"
-                 height="16" width="20"
-                 x="51%" y="78%"
-          ></image>
+          <image xlink:href="assets/images/tp.png" class="tp" id="tp4" height="16" width="20" x="51%" y="78%"></image>
           <text dx="51%" dy="75%" style="font-size: 14px; fill: #666;width: 20px;">
             {{vpns[1].sitetpname}}
           </text>
         </g>
         <!--clouds-->
         <g class="clouds">
-          <image xlink:href="./assets/images/cloud-out.png"
-                 id="extent-cloud"
-                 width="14%"
-                 x="70%" y="11%"
-          ></image>
+          <image xlink:href="assets/images/cloud-out.png" id="extent-cloud" width="14%" x="70%" y="11%"></image>
           <text dx="75%" dy="39%" style="font-size: 14px; fill: #666;width: 20px;">
             SP Partent Network
           </text>
         </g>
         <!--local site-->
         <g class="clouds" *ngIf="localSite.length>0">
-          <image xlink:href="./assets/images/site.png"
-                 id="site1"
-                 height="59" width="100"
-                 x="6%" y="29%"
-          ></image>
+          <image xlink:href="assets/images/site.png" id="site1" height="59" width="100" x="6%" y="29%"></image>
           <text dx="8%" dy="26%" style="font-size: 14px; fill: #666;width: 20px;">
             {{localSite[0] && localSite[0]["service-instance-name"]}}
           </text>
         </g>
         <g *ngIf="!detailSites && localSite.length>0" class="clouds">
-          <image xlink:href="./assets/images/site.png"
-                 id="site2"
-                 height="59" width="100"
-                 x="61%" y="70%"
-                 *ngIf="this.vpns.length == 2"
-          ></image>
-          <text dx="62%" dy="66%" style="font-size: 14px; fill: #666;width: 20px;"  *ngIf="this.vpns.length == 2">
+          <image xlink:href="assets/images/site.png" id="site2" height="59" width="100" x="61%" y="70%"
+            *ngIf="this.vpns.length == 2"></image>
+          <text dx="62%" dy="66%" style="font-size: 14px; fill: #666;width: 20px;" *ngIf="this.vpns.length == 2">
             {{ localSite[1] && localSite[1]["service-instance-name"]}}
           </text>
-          <image xlink:href="./assets/images/site.png"
-                 id="site2"
-                 height="59" width="100"
-                 x="40%" y="44%"
-                 *ngIf="this.vpns.length == 1"
-          ></image>
-          <text dx="41%" dy="40%" style="font-size: 14px; fill: #666;width: 20px;"  *ngIf="this.vpns.length == 1">
+          <image xlink:href="assets/images/site.png" id="site2" height="59" width="100" x="40%" y="44%"
+            *ngIf="this.vpns.length == 1"></image>
+          <text dx="41%" dy="40%" style="font-size: 14px; fill: #666;width: 20px;" *ngIf="this.vpns.length == 1">
             {{ localSite[1] && localSite[1]["service-instance-name"]}}
           </text>
         </g>
         <!--cloud site-->
         <g *ngIf="!detailSites && outerSite.length>0" class="clouds">
-          <image xlink:href="./assets/images/site.png"
-                 id="site3"
-                 height="59" width="100"
-                 x="89%" y="10%"
-          ></image>
+          <image xlink:href="assets/images/site.png" id="site3" height="59" width="100" x="89%" y="10%"></image>
           <text dx="90%" dy="7%" style="font-size: 14px; fill: #666;width: 20px;">
             {{outerSite[1] && outerSite[1]["service-instance-name"]}}
           </text>
         </g>
         <g class="clouds" *ngIf="outerSite.length>0">
-          <image xlink:href="./assets/images/site.png"
-                 id="site4"
-                 height="59" width="100"
-                 x="89%" y="40%"
-          ></image>
+          <image xlink:href="assets/images/site.png" id="site4" height="59" width="100" x="89%" y="40%"></image>
           <text dx="90%" dy="37%" style="font-size: 14px; fill: #666;width: 20px;">
             {{outerSite[0] && outerSite[0]["service-instance-name"]}}
           </text>
         </g>
         <!--tp,site,domain---line -->
-        <line *ngFor="let item of detailLines" [attr.x1]="item.x1" [attr.y1]="item.y1" [attr.x2]="item.x2" [attr.y2]="item.y2" style="stroke:#2F8BF7; stroke-width:2"></line>
+        <line *ngFor="let item of detailLines" [attr.x1]="item.x1" [attr.y1]="item.y1" [attr.x2]="item.x2"
+          [attr.y2]="item.y2" style="stroke:#2F8BF7; stroke-width:2"></line>
         <line *ngIf="detailSites" x1="45%" y1="30%" x2="75%" y2="20%" style="stroke:#FFC000; stroke-width:2"></line>
       </svg>
     </div>
   </div>
   <div class="detaildata">
-    <nz-tabset [nzTabPosition]="'top'" [nzShowPagination]=false [nzTabBarGutter]="'2'" [nzTabBarStyle]=tabBarStyle [nzSelectedIndex]="upDateShow == false?0:1">
+    <nz-tabset [nzTabPosition]="'top'" [nzShowPagination]=false [nzTabBarGutter]="'2'" [nzTabBarStyle]=tabBarStyle
+      [nzSelectedIndex]="upDateShow == false?0:1">
       <nz-tab nzTitle="Service Info">
         <div class="service-title" style="clear: both">
           <span class="lable" style="width: 60px">name:</span>
           <div style="clear: both;height: 10px">
             <h3 style="float: left;color: #3C4F8C">sdwanVPN List</h3>
             <button nz-button *ngIf="upDateShow" (click)="updateSotnvpn()" class="addListBtn"
-                    style="float: right;margin-right: 10px"><i class="anticon anticon-plus"
-                                                               style="transform: scale(1.2);font-weight: 700"></i> {{"i18nTextDefine_Add" | translate}}
+              style="float: right;margin-right: 10px"><i class="anticon anticon-plus"
+                style="transform: scale(1.2);font-weight: 700"></i> {{"i18nTextDefine_Add" | translate}}
             </button>
           </div>
-          <nz-table #sotnVpnTable [nzData]="sotnVpnTableData"
-                    [nzShowPagination]="false"
-                    nzSize="small">
+          <nz-table #sotnVpnTable [nzData]="sotnVpnTableData" [nzShowPagination]="false" nzSize="small">
             <thead>
-            <tr>
-              <th width="30%"> NO.</th>
-              <th width="30%"> Name</th>
-              <th width="30%"> topology</th>
-              <th nzWidth="10%"> Action </th>
-            </tr>
+              <tr>
+                <th width="30%"> NO.</th>
+                <th width="30%"> Name</th>
+                <th width="30%"> topology</th>
+                <th nzWidth="10%"> Action </th>
+              </tr>
             </thead>
             <tbody>
-            <tr *ngFor="let item of sotnVpnTable.data; let i = index; ">
-              <td>{{i+1}}</td>
-              <td>{{item.sdwanvpn_name}}</td>
-              <td>{{item.sdwanvpn_topology}}</td>
-              <td>
-                <span class="action" (click)="showstonVpnDetail(i+1)"><i class="anticon anticon-bars"></i></span>
-                <span class="action" (click)="editUpdateSotnVpn(i+1)" *ngIf="sotnvpnnum[i]"><i class="anticon anticon-edit"></i></span>
-                &nbsp;
-                <span class="action" (click)="deleteUpdateSotnVpn(i+1)" *ngIf="upDateShow"><i
-                        class="anticon anticon-delete"></i></span>
-              </td>
-            </tr>
+              <tr *ngFor="let item of sotnVpnTable.data; let i = index; ">
+                <td>{{i+1}}</td>
+                <td>{{item.sdwanvpn_name}}</td>
+                <td>{{item.sdwanvpn_topology}}</td>
+                <td>
+                  <span class="action" (click)="showstonVpnDetail(i+1)"><i class="anticon anticon-bars"></i></span>
+                  <span class="action" (click)="editUpdateSotnVpn(i+1)" *ngIf="sotnvpnnum[i]"><i
+                      class="anticon anticon-edit"></i></span>
+                  &nbsp;
+                  <span class="action" (click)="deleteUpdateSotnVpn(i+1)" *ngIf="upDateShow"><i
+                      class="anticon anticon-delete"></i></span>
+                </td>
+              </tr>
             </tbody>
           </nz-table>
         </div>
           <div style="height: 10px">
             <h3 style="float: left;color: #3C4F8C">Site List</h3>
             <button nz-button *ngIf="upDateShow" (click)="updateSite()" class="addListBtn"
-                    style="float: right;margin-right: 10px"><i class="anticon anticon-plus"
-                                                               style="transform: scale(1.2);font-weight: 700"></i>{{"i18nTextDefine_Add" | translate}}
+              style="float: right;margin-right: 10px"><i class="anticon anticon-plus"
+                style="transform: scale(1.2);font-weight: 700"></i>{{"i18nTextDefine_Add" | translate}}
             </button>
           </div>
-          <nz-table #nzTable [nzData]="siteTableData"
-                    [nzShowPagination]="false"
-                    nzSize="small">
+          <nz-table #nzTable [nzData]="siteTableData" [nzShowPagination]="false" nzSize="small">
             <thead>
-            <tr>
-              <th nzWidth="10%"> NO. </th>
-              <th nzWidth="15%"> Name </th>
-              <th nzWidth="20%"> Description </th>
-              <th nzWidth="15%"> Post Code </th>
-              <th nzWidth="15%"> Address </th>
-              <th nzWidth="15%"> VLAN </th>
-              <th nzWidth="10%"> Action </th>
-            </tr>
+              <tr>
+                <th nzWidth="10%"> NO. </th>
+                <th nzWidth="15%"> Name </th>
+                <th nzWidth="20%"> Description </th>
+                <th nzWidth="15%"> Post Code </th>
+                <th nzWidth="15%"> Address </th>
+                <th nzWidth="15%"> VLAN </th>
+                <th nzWidth="10%"> Action </th>
+              </tr>
             </thead>
             <tbody>
 
-            <tr *ngFor="let item of nzTable.data; let i = index; ">
-              <td>{{i+1}}</td>
-              <td>{{item.sdwandevice_list[0].name}}</td>
-              <td>{{item.sdwansite_description}}</td>
-              <td>{{item.sdwansite_postcode}}</td>
-              <td>{{item.sdwansite_address}}</td>
-              <td>{{item.sdwansite_emails}}</td>
-              <td>
-                <span class="action" (click)="showSiteDetail(i+1)"><i class="anticon anticon-bars"></i></span>
-                &nbsp;
-                <span class="action" (click)="editUpdateSite(i+1)" *ngIf="sitenum[i]"><i class="anticon anticon-edit"></i></span>
-                &nbsp;
-                <span class="action" (click)="deleteUpdateSite(i+1)" *ngIf="upDateShow"><i class="anticon anticon-delete"></i></span>
-              </td>
-            </tr>
+              <tr *ngFor="let item of nzTable.data; let i = index; ">
+                <td>{{i+1}}</td>
+                <td>{{item.sdwandevice_list[0].name}}</td>
+                <td>{{item.sdwansite_description}}</td>
+                <td>{{item.sdwansite_postcode}}</td>
+                <td>{{item.sdwansite_address}}</td>
+                <td>{{item.sdwansite_emails}}</td>
+                <td>
+                  <span class="action" (click)="showSiteDetail(i+1)"><i class="anticon anticon-bars"></i></span>
+                  &nbsp;
+                  <span class="action" (click)="editUpdateSite(i+1)" *ngIf="sitenum[i]"><i
+                      class="anticon anticon-edit"></i></span>
+                  &nbsp;
+                  <span class="action" (click)="deleteUpdateSite(i+1)" *ngIf="upDateShow"><i
+                      class="anticon anticon-delete"></i></span>
+                </td>
+              </tr>
 
             </tbody>
           </nz-table>
         </div>
         <table class="siteWanTab">
           <thead>
-          <tr>
-            <th width="4%"> NO.</th>
-            <th *ngFor="let key of getKeys(this.sotnSdwansitelanParams)">{{key}}</th>
-          </tr>
+            <tr>
+              <th width="4%"> NO.</th>
+              <th *ngFor="let key of getKeys(this.sotnSdwansitelanParams)">{{key}}</th>
+            </tr>
           </thead>
           <tbody>
-          <tr *ngFor="let item of sotnSdwansitelanData; let i = index;" class="tr-border">
-            <td>{{i+1}}</td>
-            <td *ngFor="let key of getKeys(item);let a = index;">
-                            <span *ngIf="key != 'lable' ">{{item[key]}}</span>
-            </td>
-          </tr>
+            <tr *ngFor="let item of sotnSdwansitelanData; let i = index;" class="tr-border">
+              <td>{{i+1}}</td>
+              <td *ngFor="let key of getKeys(item);let a = index;">
+                <span *ngIf="key != 'lable' ">{{item[key]}}</span>
+              </td>
+            </tr>
           </tbody>
         </table>
       </div>
     </div>
     <div class="action">
-      <button nz-button nzType="primary" (click)="detailSotnVpn_cancel()">{{"i18nTextDefine_Cancel" | translate}}</button>
+      <button nz-button nzType="primary"
+        (click)="detailSotnVpn_cancel()">{{"i18nTextDefine_Cancel" | translate}}</button>
     </div>
   </div>
   <!-- site model -->
         <li *ngFor="let item of this.templateParameters.site.sdwansiteresource_list">
           <span>{{item.lableShow}}:</span>
           <span class="input-info">{{siteBaseData[item.lable]}}</span>
-          </li>
+        </li>
       </ul>
     </div>
     <div>
       <div>
         <table class="siteWanTab">
           <thead>
-          <tr>
-            <th width="4%"> NO.</th>
-            <th *ngFor="let key of getKeys(this.siteCpeData)">{{key}}</th>
-          </tr>
+            <tr>
+              <th width="4%"> NO.</th>
+              <th *ngFor="let key of getKeys(this.siteCpeData)">{{key}}</th>
+            </tr>
           </thead>
           <tbody>
-          <tr *ngFor="let item of siteSdwanDevice; let i = index;" class="tr-border">
-            <td>{{i+1}}</td>
-            <td *ngFor="let key of getKeys(item);">
-              <span *ngIf="key != 'lable' ">{{item[key]}}</span>
-            </td>
-          </tr>   
+            <tr *ngFor="let item of siteSdwanDevice; let i = index;" class="tr-border">
+              <td>{{i+1}}</td>
+              <td *ngFor="let key of getKeys(item);">
+                <span *ngIf="key != 'lable' ">{{item[key]}}</span>
+              </td>
+            </tr>
           </tbody>
         </table>
       </div>
       <div>
         <table class="siteWanTab">
           <thead>
-          <tr>
-            <th width="4%"> NO.</th>
-            <th *ngFor="let key of getKeys(this.siteWanParams)">{{key}}</th>
-          </tr>
+            <tr>
+              <th width="4%"> NO.</th>
+              <th *ngFor="let key of getKeys(this.siteWanParams)">{{key}}</th>
+            </tr>
           </thead>
           <tbody>
-          <tr *ngFor="let item of siteWanData; let i = index;" class="tr-border">
-            <td>{{i+1}}</td>
-            <td *ngFor="let key of getKeys(item);">
-                            <span *ngIf="key != 'lable' ">{{item[key]}}</span>
-            </td>
-          </tr>
+            <tr *ngFor="let item of siteWanData; let i = index;" class="tr-border">
+              <td>{{i+1}}</td>
+              <td *ngFor="let key of getKeys(item);">
+                <span *ngIf="key != 'lable' ">{{item[key]}}</span>
+              </td>
+            </tr>
           </tbody>
         </table>
       </div>
       <div>
         <div style="width: 100%;text-align: right">
           <button nz-button (click)="updateSotnSdwansitelan()" class="addListBtn"><i class="anticon anticon-plus"
-                                                                                  style="transform: scale(1.2);font-weight: 700;"></i>{{"i18nTextDefine_Add" | translate}}
+              style="transform: scale(1.2);font-weight: 700;"></i>{{"i18nTextDefine_Add" | translate}}
           </button>
         </div>
         <table class="siteWanTab">
           <thead>
-          <tr>
-            <th width="4%"> NO.</th>
-            <th *ngFor="let key of getKeys(this.sotnSdwansitelanParams)">{{key}}</th>
-            <th width="7%"> Action</th>
-          </tr>
+            <tr>
+              <th width="4%"> NO.</th>
+              <th *ngFor="let key of getKeys(this.sotnSdwansitelanParams)">{{key}}</th>
+              <th width="7%"> Action</th>
+            </tr>
           </thead>
           <tbody>
-          <tr *ngFor="let item of sotnSdwansitelanData; let i = index;"
+            <tr *ngFor="let item of sotnSdwansitelanData; let i = index;"
               [ngClass]="{'tr-border':item.tabInputShowSdwansitelan ==false}">
-            <td>{{i+1}}</td>
-            <td *ngFor="let key of getKeys(item);let a = index;">
-                            <span *ngIf="!tabInputShowSdwansitelan[i]">{{item[key]}}</span>
-              <input nz-input [(ngModel)]="item[key]" *ngIf="tabInputShowSdwansitelan[i] ">
-            </td>
-            <td>
-                            <span class="action" (click)="editUpdateSotnSdwansitelan(i+1,item,sotnSdwansitelanData)"><i
-                                    class="anticon anticon-edit" style="margin: 0 5px;"></i></span>
-              <span class="action" (click)="deleteUpdateSotnSdwansitelan(i+1,item,sotnSdwansitelanData)"><i
-                      class="anticon anticon-delete"></i></span>
-            </td>
-          </tr>
+              <td>{{i+1}}</td>
+              <td *ngFor="let key of getKeys(item);let a = index;">
+                <span *ngIf="!tabInputShowSdwansitelan[i]">{{item[key]}}</span>
+                <input nz-input [(ngModel)]="item[key]" *ngIf="tabInputShowSdwansitelan[i] ">
+              </td>
+              <td>
+                <span class="action" (click)="editUpdateSotnSdwansitelan(i+1,item,sotnSdwansitelanData)"><i
+                    class="anticon anticon-edit" style="margin: 0 5px;"></i></span>
+                <span class="action" (click)="deleteUpdateSotnSdwansitelan(i+1,item,sotnSdwansitelanData)"><i
+                    class="anticon anticon-delete"></i></span>
+              </td>
+            </tr>
           </tbody>
         </table>
       </div>
     </div>
 
     <div class="action">
-      <button nz-button nzType="primary" (click)="updateSotnVpn_cancel()">{{"i18nTextDefine_Cancel" | translate}}</button>
+      <button nz-button nzType="primary"
+        (click)="updateSotnVpn_cancel()">{{"i18nTextDefine_Cancel" | translate}}</button>
       <button nz-button nzType="primary" (click)="updateSotnVpn_OK()">{{"i18nTextDefine_Add" | translate}}</button>
     </div>
   </div>
       <div>
         <div style="width: 100%;text-align: right">
           <button nz-button (click)="updateSiteWan()" class="addListBtn"><i class="anticon anticon-plus"
-                                                                         style="transform: scale(1.2);font-weight: 700;"></i>{{"i18nTextDefine_Add" | translate}}
+              style="transform: scale(1.2);font-weight: 700;"></i>{{"i18nTextDefine_Add" | translate}}
           </button>
         </div>
         <table class="siteWanTab">
           <thead>
-          <tr>
-            <th width="4%"> NO.</th>
-            <th *ngFor="let key of getKeys(this.siteWanParams)">{{key}}</th>
-            <th width="7%"> Action</th>
-          </tr>
+            <tr>
+              <th width="4%"> NO.</th>
+              <th *ngFor="let key of getKeys(this.siteWanParams)">{{key}}</th>
+              <th width="7%"> Action</th>
+            </tr>
           </thead>
           <tbody>
-          <tr *ngFor="let item of siteWanData; let i = index;"
+            <tr *ngFor="let item of siteWanData; let i = index;"
               [ngClass]="{'tr-border':item.tabInputShowWanPort ==false}">
-            <td>{{i+1}}</td>
-            <td *ngFor="let key of getKeys(item);let a = index;">
-                            <span *ngIf="!tabInputShowWanPort[i]">{{item[key]}}</span>
-              <input nz-input [(ngModel)]="item[key]" *ngIf="tabInputShowWanPort[i] ">
-            </td>
-            <td>
-                            <span class="action" (click)="editUpdateWanPort(i+1,item,siteWanData)"><i
-                                    class="anticon anticon-edit" style="margin: 0 5px;"></i></span>
-              <span class="action" (click)="deleteUpdateWanPort(i+1,item,siteWanData)"><i
-                      class="anticon anticon-delete"></i></span>
-            </td>
-          </tr>
+              <td>{{i+1}}</td>
+              <td *ngFor="let key of getKeys(item);let a = index;">
+                <span *ngIf="!tabInputShowWanPort[i]">{{item[key]}}</span>
+                <input nz-input [(ngModel)]="item[key]" *ngIf="tabInputShowWanPort[i] ">
+              </td>
+              <td>
+                <span class="action" (click)="editUpdateWanPort(i+1,item,siteWanData)"><i class="anticon anticon-edit"
+                    style="margin: 0 5px;"></i></span>
+                <span class="action" (click)="deleteUpdateWanPort(i+1,item,siteWanData)"><i
+                    class="anticon anticon-delete"></i></span>
+              </td>
+            </tr>
           </tbody>
         </table>
       </div>
       <button nz-button nzType="primary" (click)="updatesite_OK()">{{"i18nTextDefine_Add" | translate}}</button>
     </div>
   </div>
-  <div class="mask" *ngIf="sotnVpnDetailShow || siteDetail || sotnVpnAddModelShow || siteAddModelShow" (click)="hiddenModel()"></div>
-</div>
+  <div class="mask" *ngIf="sotnVpnDetailShow || siteDetail || sotnVpnAddModelShow || siteAddModelShow"
+    (click)="hiddenModel()"></div>
+</div>
\ No newline at end of file
@@ -20,7 +20,7 @@ import { NZ_I18N, en_US } from 'ng-zorro-antd';
 import { TranslateModule, TranslateLoader, TranslateService, TranslateFakeLoader } from '@ngx-translate/core';
 
 import { CcvpnDetailComponent } from './ccvpn-detail.component';
-import { MyhttpService } from '../myhttp.service';
+import { MyhttpService } from '../../core/services/myhttp.service';
 
 describe('CcvpnDetailComponent', () => {
     let component: CcvpnDetailComponent;
@@ -14,7 +14,7 @@
     limitations under the License.
 */
 import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';
-import { MyhttpService } from '../myhttp.service';
+import { MyhttpService } from '../../core/services/myhttp.service';
 import * as d3 from 'd3';
 
 @Component({
@@ -136,7 +136,7 @@ export class CcvpnDetailComponent implements OnInit {
                 let sdwansiteresource_list = inputs[items][0];
                 Object.keys(sdwansiteresource_list).forEach((its) => {
                     let input2 = {};
-                    if(its.search("device") != -1 && sdwansiteresource_list[its] instanceof Array === true){
+                    if (its.search("device") != -1 && sdwansiteresource_list[its] instanceof Array === true) {
                         this.templateParameters["site"]["sdwandevice_list"][0] = sdwansiteresource_list[its][0];
                         let sitelanKey = {};
                         sitelanKey[its] = [];
@@ -461,7 +461,7 @@ export class CcvpnDetailComponent implements OnInit {
             "sdwansitewan_list": []
         };
         inputs = Object.assign(inputs, this.siteBaseData);
-        inputs["sdwandevice_list"]= this.siteSdwanDevice.map((item) => {
+        inputs["sdwandevice_list"] = this.siteSdwanDevice.map((item) => {
             return Object.assign({}, item);
         });
         inputs["sdwansitewan_list"] = this.siteWanData.map((item) => {
@@ -16,7 +16,7 @@
 import { Component, EventEmitter, OnInit, Output } from '@angular/core';
 import * as d3 from 'd3';
 import * as $ from 'jquery';
-import { networkHttpservice } from '../networkHttpservice.service';
+import { networkHttpservice } from '../../core/services/networkHttpservice.service';
 
 @Component({
     selector: 'app-ccvpn-network',
@@ -131,9 +131,9 @@ export class CcvpnNetworkComponent implements OnInit {
     charge = -300;
 
     imgmap = {
-        '1': './assets/images/cloud-county1.png',
-        '2': './assets/images/tp.png',
-        '3': './assets/images/cloud-out.png',
+        '1': 'assets/images/cloud-county1.png',
+        '2': 'assets/images/tp.png',
+        '3': 'assets/images/cloud-out.png',
     };
     tpoption = {
         container: '#tpContainer',
@@ -7,10 +7,10 @@ import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
 import { RouterTestingModule } from '@angular/router/testing';
 
 import { HomeComponent } from './home.component';
-import { PieComponent } from '../components/charts/pie/pie.component'; 
-import { BarComponent } from '../components/charts/bar/bar.component'; 
-import { LineComponent } from '../components/charts/line/line.component';
-import { HomesService } from '../homes.service';
+import { PieComponent } from '../../shared/components/charts/pie/pie.component'; 
+import { BarComponent } from '../../shared/components/charts/bar/bar.component'; 
+import { LineComponent } from '../../shared/components/charts/line/line.component';
+import { HomesService } from '../../core/services/homes.service';
 
 describe('HomeComponent', () => {
   let component: HomeComponent;
@@ -14,8 +14,8 @@
     limitations under the License.
 */
 import { Component, OnInit, Input, Output, EventEmitter, HostBinding } from '@angular/core';
-import { HomesService } from '../homes.service';
-import { slideToRight } from '../animates';
+import { HomesService } from '../../core/services/homes.service';
+import { slideToRight } from '../../animates';
 import { TranslateService } from "@ngx-translate/core";
 import { Router } from '@angular/router';
 
@@ -99,7 +99,7 @@ export class HomeComponent implements OnInit {
   getHomeServiceData() {
     this.myhttp.getHomeServiceData()
       .subscribe(
-        (data) => {          
+        (data) => {
           this.serviceNumber = data.serviceTotalNum;
           if (this.serviceNumber > 0) {
             this.serviceChart = true;
@@ -108,10 +108,10 @@ export class HomeComponent implements OnInit {
           }
           this.serviceChartData = {
             series: [{ data: data.customerServiceList }]
-          };         
+          };
         },
         (err) => {
-          console.log(err);
+          console.error(err);
         }
       )
   }
@@ -121,134 +121,134 @@ export class HomeComponent implements OnInit {
   VMAlarmChartInit: Object = {
     height: 180,
     option: {
-            tooltip: {
-                trigger: 'item',
-                formatter: '{b}\n{c},{d}%'
-            },
-            color: [
-                {
-                    type: 'linear',
-                    x: 0,
-                    y: 0,
-                    x2: 0,
-                    y2: 1,
-                    colorStops: [{
-                        offset: 0, color: '#FB93C2' // 0% color
-                    }, {
-                        offset: 1, color: '#FB7788' // 100% color
-                    }],
-                    globalCoord: false 
-                }, {
-                    type: 'linear',
-                    x: 0,
-                    y: 0,
-                    x2: 0,
-                    y2: 1,
-                    colorStops: [{
-                        offset: 0, color: '#A6BFE4' // 0% color
-                    }, {
-                        offset: 1, color: '#7A8BAE' // 100% color
-                    }],
-                    globalCoord: false 
-                }],
-            series: [{
-                name: "告警信息",
-                radius: ['50%', '70%'],
-                center: ['50%', '45%'],
-                label: {
-                    normal: {
-                        show: false,
-                    },
-                    emphasis: {
-                        show: true,
-                        formatter: '{b}\n{c},{d}%',
-                        color: "#3C4F8C"
-                    }
-                },
-                 
-            }]
-        }
-    };
+      tooltip: {
+        trigger: 'item',
+        formatter: '{b}\n{c},{d}%'
+      },
+      color: [
+        {
+          type: 'linear',
+          x: 0,
+          y: 0,
+          x2: 0,
+          y2: 1,
+          colorStops: [{
+            offset: 0, color: '#FB93C2' // 0% color
+          }, {
+            offset: 1, color: '#FB7788' // 100% color
+          }],
+          globalCoord: false
+        }, {
+          type: 'linear',
+          x: 0,
+          y: 0,
+          x2: 0,
+          y2: 1,
+          colorStops: [{
+            offset: 0, color: '#A6BFE4' // 0% color
+          }, {
+            offset: 1, color: '#7A8BAE' // 100% color
+          }],
+          globalCoord: false
+        }],
+      series: [{
+        name: "告警信息",
+        radius: ['50%', '70%'],
+        center: ['50%', '45%'],
+        label: {
+          normal: {
+            show: false,
+          },
+          emphasis: {
+            show: true,
+            formatter: '{b}\n{c},{d}%',
+            color: "#3C4F8C"
+          }
+        },
+
+      }]
+    }
+  };
 
   // alarm bar
   alarmChartData: Object;
   alarmChartInit: Object = {
     height: 180,
     option: {
-            tooltip: {
-                trigger: 'item',
-                formatter: '{b}\n{c},{d}%'
-            },
-            legend: {
-                orient: 'vertical',
-                left: '0px',
-                bottom: '0px',
-                itemWidth: 10,
-                itemHeight: 10,
-                textStyle: {
-                    color: "#3C4F8C"
-                },
-                data: ['Active', 'Fixed']
-            },
-            color: [
-                {
-                    type: 'linear',
-                    x: 0,
-                    y: 0,
-                    x2: 0,
-                    y2: 1,
-                    colorStops: [{
-                        offset: 0, color: '#FB93C2' // 0% color
-                    }, {
-                        offset: 1, color: '#FB7788' // 100% color
-                    }],
-                    globalCoord: false 
-                }, {
-                    type: 'linear',
-                    x: 0,
-                    y: 0,
-                    x2: 0,
-                    y2: 1,
-                    colorStops: [{
-                        offset: 0, color: '#A6BFE4' // 0% 
-                    }, {
-                        offset: 1, color: '#7A8BAE' // 100% 
-                    }],
-                    globalCoord: false 
-                }],
-            series: [{
-                name: "告警信息",
-                radius: '55%',
-                center: ['50%', '45%'],
-                label: {
-                    normal: {
-                        show: false,
-                    },
-                    emphasis: {
-                        show: true,
-                        formatter: '{b}\n{c},{d}%',
-                        color: "#3C4F8C"
-                    }
-                }
-            }]
+      tooltip: {
+        trigger: 'item',
+        formatter: '{b}\n{c},{d}%'
+      },
+      legend: {
+        orient: 'vertical',
+        left: '0px',
+        bottom: '0px',
+        itemWidth: 10,
+        itemHeight: 10,
+        textStyle: {
+          color: "#3C4F8C"
+        },
+        data: ['Active', 'Fixed']
+      },
+      color: [
+        {
+          type: 'linear',
+          x: 0,
+          y: 0,
+          x2: 0,
+          y2: 1,
+          colorStops: [{
+            offset: 0, color: '#FB93C2' // 0% color
+          }, {
+            offset: 1, color: '#FB7788' // 100% color
+          }],
+          globalCoord: false
+        }, {
+          type: 'linear',
+          x: 0,
+          y: 0,
+          x2: 0,
+          y2: 1,
+          colorStops: [{
+            offset: 0, color: '#A6BFE4' // 0% 
+          }, {
+            offset: 1, color: '#7A8BAE' // 100% 
+          }],
+          globalCoord: false
+        }],
+      series: [{
+        name: "告警信息",
+        radius: '55%',
+        center: ['50%', '45%'],
+        label: {
+          normal: {
+            show: false,
+          },
+          emphasis: {
+            show: true,
+            formatter: '{b}\n{c},{d}%',
+            color: "#3C4F8C"
+          }
         }
-    };
-
-    getHomeAlarmData() {
-        this.myhttp.getHomeAlarmData()
-            .subscribe((data) => {
-                this.alarmChartData = {
-                    series: [{
-                        data: [{name: "Active", value: data[0]}, {name: "Fixed", value: data[1]}]
-                    }]
-                };
-                this.VMAlarmChartData = {
-                    series: [{
-                        data: [{name: "Active", value: data[0]}, {name: "Fixed", value: data[1]}]
-                    }]
-                };
-            })
+      }]
     }
+  };
+
+  getHomeAlarmData() {
+    this.myhttp.getHomeAlarmData()
+      .subscribe((data) => {
+        this.alarmChartData = {
+          series: [{
+            data: [{ name: "Active", value: data[0] }, { name: "Fixed", value: data[1] }]
+          }]
+        };
+        this.VMAlarmChartData = {
+          series: [{
+            data: [{ name: "Active", value: data[0] }, { name: "Fixed", value: data[1] }]
+          }]
+        };
+      })
+  }
 
   // alarm line
   alarmLineChartData: Object;
@@ -393,7 +393,7 @@ export class HomeComponent implements OnInit {
           ]
         }
       }, (err) => {
-        console.log(err);
+        console.error(err);
       })
   }
 
@@ -427,7 +427,7 @@ export class HomeComponent implements OnInit {
           ]
         }
       }, (err) => {
-        console.log(err);
+        console.error(err);
       })
   }
 
@@ -461,14 +461,14 @@ export class HomeComponent implements OnInit {
           ]
         }
       }, (err) => {
-        console.log(err);
+        console.error(err);
       })
   }
   // sourceName 
   sourceNameList = ['performanceNameOne'];
   sourceNameSelected = null;
 
-  
+
   listSortMasters = null;
 
   getListSortMasters() {
@@ -477,7 +477,7 @@ export class HomeComponent implements OnInit {
     }
     this.myhttp.getListSortMasters()
       .subscribe((data) => {
-        this.listSortMasters = JSON.stringify(data);        
+        this.listSortMasters = JSON.stringify(data);
         sessionStorage.setItem('listSortMasters', this.listSortMasters)
       })
   }
@@ -489,7 +489,7 @@ export class HomeComponent implements OnInit {
       })
   }
   sourceNameSelect(item) {
-    if (this.sourceNameSelected != item) {      
+    if (this.sourceNameSelected != item) {
       this.sourceNameSelected = item;
       this.getHomeAlarmChartData()
     }
@@ -503,7 +503,7 @@ export class HomeComponent implements OnInit {
       endTime: nowTime,
       format: "day"
     }
-   
+
     this.myhttp.getHomeAlarmChartData(obj)
       .subscribe((data) => {
         this.alarmLineChartData = {
@@ -517,7 +517,7 @@ export class HomeComponent implements OnInit {
           ]
         }
       }, (err) => {
-        console.log(err);
+        console.error(err);
       })
   }
 
     limitations under the License.
 -->
 <div class="content" style="padding: 20px 20px;height: 100vh">
-  <div class="management"  *ngIf="nocuster" >
+  <div class="management" *ngIf="nocuster">
     <div class="title">
       <p> {{"i18nTextDefine_Create_initial_customer" | translate}} </p>
       <span> {{"i18nTextDefine_Customer_not_in_ONAP" | translate}} </span>
       <span> {{"i18nTextDefine_CreateCustomer" | translate}} </span>
-      <img src="./assets/images/customer01.png" alt="">
-      <input nz-input placeholder=" {{'i18nTextDefine_Input_customerName' | translate}} " nzSize="large" style="height: 50px" [(ngModel)]="firstCustomer">
+      <img src="../../../assets/images/customer01.png" alt="">
+      <input nz-input placeholder=" {{'i18nTextDefine_Input_customerName' | translate}} " nzSize="large"
+        style="height: 50px" [(ngModel)]="firstCustomer">
       <div class="action">
-        <button nz-button nzType="primary" class="cancel" (click) = "clearCustomerInput()"> {{"i18nTextDefine_Cancel" | translate}} </button>
-        <button nz-button nzType="primary" class="add" (click) = "createNewCustomer(firstCustomer)"> {{"i18nTextDefine_Add" | translate}} </button>
+        <button nz-button nzType="primary" class="cancel" (click)="clearCustomerInput()">
+          {{"i18nTextDefine_Cancel" | translate}} </button>
+        <button nz-button nzType="primary" class="add" (click)="createNewCustomer(firstCustomer)">
+          {{"i18nTextDefine_Add" | translate}} </button>
       </div>
     </div>
     <div class="image">
-      <img src="./assets/images/customer02.png" alt="">
+      <img src="../../../assets/images/customer02.png" alt="">
     </div>
   </div>
   <div *ngIf="!nocuster" style="height: 100%">
     <app-customer></app-customer>
   </div>
-</div>
+</div>
\ No newline at end of file
@@ -14,8 +14,8 @@
     limitations under the License.
 */
 import { Component, OnInit , HostBinding} from '@angular/core';
-import { showHideAnimate, slideToRight } from '../animates';
-import { ManagemencsService } from '../managemencs.service';
+import { showHideAnimate, slideToRight } from '../../animates';
+import { ManagemencsService } from '../../core/services/managemencs.service';
 
 @Component({
   selector: 'app-management',
@@ -1,5 +1,5 @@
 import { Component, OnInit, HostBinding } from '@angular/core';
-import { slideToRight, showHideAnimate } from '../../animates';
+import { slideToRight, showHideAnimate } from '../../../animates';
 
 @Component({
   selector: 'app-performance-vm',
@@ -14,9 +14,9 @@
     limitations under the License.
 -->
 <h3 class="title">
-    <span (click)="performanceShow()" style="cursor:pointer;" *ngIf="graphicshow" >Performance VNF</span> 
-    <span (click)="graphicShow()" *ngIf="graphicshow">/ Graphic list </span> 
-    <span *ngIf="detailshow">/ Details </span> 
+    <span (click)="performanceShow()" style="cursor:pointer;" *ngIf="graphicshow">Performance VNF</span>
+    <span (click)="graphicShow()" *ngIf="graphicshow">/ Graphic list </span>
+    <span *ngIf="detailshow">/ Details </span>
 </h3>
 <div class="select" [@showHideAnimate]="state">
     <span>Source Name: </span>
             </li>
         </ul>
     </nz-dropdown>
-    <button class="search" nz-button [nzType]="'primary'"><i class="anticon anticon-search"></i><span>Search</span></button>
+    <button class="search" nz-button [nzType]="'primary'"><i
+            class="anticon anticon-search"></i><span>Search</span></button>
     <!-- <button class="search" nz-button [nzType]="'primary'" (click)="getperformanceSsourceNames()"><i class="anticon anticon-search"></i><span>Search</span></button> -->
 </div>
 <div class="content" [@showHideAnimate]="state">
     <div class="vnfs">
         <div class="vnf" *ngFor="let item of totalRecords">
-            <img src="../../../assets/images/vnf01.png" title="VNF" (click)="graphicShow2(item)">
+            <img src="../../../../assets/images/vnf01.png" title="VNF" (click)="graphicShow2(item)">
             <!-- <h3>{{item.name}}</h3> -->
-            <div class="intro"> 
-              {{item.name}}
+            <div class="intro">
+                {{item.name}}
             </div>
         </div>
         <div class="vnf" *ngFor="let item of totalpnfs">
-            <img src="../../../assets/images/pnf01.png" alt="PNF" (click)="graphicShow2(item)">
-            <div class="intro"> 
+            <img src="../../../../assets/images/pnf01.png" alt="PNF" (click)="graphicShow2(item)">
+            <div class="intro">
                 {{item.name}}
             </div>
         </div>
-        <div class="empty" *ngFor="let empty of emptys"></div>   
+        <div class="empty" *ngFor="let empty of emptys"></div>
     </div>
     <div class="pages">
-        <nz-pagination [(nzPageIndex)]="currentPage"  [nzTotal]="vnfsdataTotal"  [nzSize]="'small'" [(nzPageSize)]="pageSize" [nzPageSizeOptions]="[10,15,20,25,30]" nzShowSizeChanger nzShowQuickJumper></nz-pagination>
+        <nz-pagination [(nzPageIndex)]="currentPage" [nzTotal]="vnfsdataTotal" [nzSize]="'small'"
+            [(nzPageSize)]="pageSize" [nzPageSizeOptions]="[10,15,20,25,30]" nzShowSizeChanger nzShowQuickJumper>
+        </nz-pagination>
     </div>
 </div>
 <div [@showHideAnimate]="state2">
-    <app-graphiclist  (detailData)="detailShow($event)" [vnfname] = "vnfname"></app-graphiclist>
+    <app-graphiclist (detailData)="detailShow($event)" [vnfname]="vnfname"></app-graphiclist>
 </div>
 <div [@showHideAnimate]="state3">
     <app-performance-details [detailId]="detailId"></app-performance-details>
-</div>
+</div>
\ No newline at end of file
@@ -7,10 +7,10 @@ import { NZ_I18N, en_US } from 'ng-zorro-antd';
 import { HttpClientModule } from '@angular/common/http';
 import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
 
-import { PerformanceDetailsComponent } from '../../components/performance-details/performance-details.component';
-import { GraphiclistComponent } from '../../components/graphiclist/graphiclist.component';
+import { PerformanceDetailsComponent } from '../../../shared/components/performance-details/performance-details.component';
+import { GraphiclistComponent } from '../../../shared/components/graphiclist/graphiclist.component';
 import { PerformanceVnfComponent } from './performance-vnf.component';
-import { HomesService } from '../../homes.service';
+import { HomesService } from '../../../core/services/homes.service';
 
 describe('PerformanceVnfComponent', () => {
   let component: PerformanceVnfComponent;
@@ -14,8 +14,8 @@
     limitations under the License.
 */
 import { Component, OnInit, HostBinding } from '@angular/core';
-import { slideToRight, showHideAnimate } from '../../animates';
-import { HomesService } from '../../homes.service';
+import { slideToRight, showHideAnimate } from '../../../animates';
+import { HomesService } from '../../../core/services/homes.service';
 
 @Component({
   selector: 'app-performance-vnf',
@@ -43,22 +43,22 @@ export class PerformanceVnfComponent implements OnInit {
     let _this = this;
     setTimeout(function(){
       _this.totalRecords = [    
-        {name:"Mfvs_MMEManagedElem entdElementMfvs_MMEM anagedELement¡­",text:"oahgieango"},
-        {name:"Mfvs_MMEManagedElem entdElementMfvs_MMEM anagedELement¡­",text:"oahgieango"},
-        {name:"Mfvs_MMEManagedElem entdElementMfvs_MMEM anagedELement¡­",text:"oahgieango"},
-        {name:"Mfvs_MMEManagedElem entdElementMfvs_MMEM anagedELement¡­",text:"oahgieango"},
-        {name:"Mfvs_MMEManagedElem entdElementMfvs_MMEM anagedELement¡­",text:"oahgieango"},
-        {name:"Mfvs_MMEManagedElem entdElementMfvs_MMEM anagedELement¡­",text:"oahgieango"},
-        {name:"Mfvs_MMEManagedElem entdElementMfvs_MMEM anagedELement¡­",text:"oahgieango"},
-        {name:"Mfvs_MMEManagedElem entdElementMfvs_MMEM anagedELement¡­",text:"oahgieango"},
-        {name:"Mfvs_MMEManagedElem entdElementMfvs_MMEM anagedELement¡­",text:"oahgieango"},
-        {name:"Mfvs_MMEManagedElem entdElementMfvs_MMEM anagedELement¡­",text:"oahgieango"},
-        {name:"Mfvs_MMEManagedElem entdElementMfvs_MMEM anagedELement¡­",text:"oahgieango"}
+        {name:"Mfvs_MMEManagedElem entdElementMfvs_MMEM anagedELement��",text:"oahgieango"},
+        {name:"Mfvs_MMEManagedElem entdElementMfvs_MMEM anagedELement��",text:"oahgieango"},
+        {name:"Mfvs_MMEManagedElem entdElementMfvs_MMEM anagedELement��",text:"oahgieango"},
+        {name:"Mfvs_MMEManagedElem entdElementMfvs_MMEM anagedELement��",text:"oahgieango"},
+        {name:"Mfvs_MMEManagedElem entdElementMfvs_MMEM anagedELement��",text:"oahgieango"},
+        {name:"Mfvs_MMEManagedElem entdElementMfvs_MMEM anagedELement��",text:"oahgieango"},
+        {name:"Mfvs_MMEManagedElem entdElementMfvs_MMEM anagedELement��",text:"oahgieango"},
+        {name:"Mfvs_MMEManagedElem entdElementMfvs_MMEM anagedELement��",text:"oahgieango"},
+        {name:"Mfvs_MMEManagedElem entdElementMfvs_MMEM anagedELement��",text:"oahgieango"},
+        {name:"Mfvs_MMEManagedElem entdElementMfvs_MMEM anagedELement��",text:"oahgieango"},
+        {name:"Mfvs_MMEManagedElem entdElementMfvs_MMEM anagedELement��",text:"oahgieango"}
       ];
       _this.totalpnfs = [
-        {name:"Mfvs_MMEManagedElem entdElementMfvs_MMEM anagedELement¡­",text:"oahgieango"},
-        {name:"Mfvs_MMEManagedElem entdElementMfvs_MMEM anagedELement¡­",text:"oahgieango"},
-        {name:"Mfvs_MMEManagedElem entdElementMfvs_MMEM anagedELement¡­",text:"oahgieango"}
+        {name:"Mfvs_MMEManagedElem entdElementMfvs_MMEM anagedELement��",text:"oahgieango"},
+        {name:"Mfvs_MMEManagedElem entdElementMfvs_MMEM anagedELement��",text:"oahgieango"},
+        {name:"Mfvs_MMEManagedElem entdElementMfvs_MMEM anagedELement��",text:"oahgieango"}
       ]
       _this.emptys = new Array(12-_this.totalRecords.length);
     },300)
@@ -17,13 +17,11 @@ import { HttpClient, HttpRequest, HttpResponse } from '@angular/common/http';
 import { Component, OnInit, HostBinding, TemplateRef } from '@angular/core';
 import { NzNotificationService } from 'ng-zorro-antd';
 // import { MyhttpService } from '../../myhttp.service';
-import { onboardService } from '../../onboard.service';
-import { slideToRight } from '../../animates';
+import { onboardService } from '../../../core/services/onboard.service';
+import { slideToRight } from '../../../animates';
 import { NzMessageService, UploadFile, NzModalRef, NzModalService } from 'ng-zorro-antd';
 import { filter } from 'rxjs/operators';
 import { Title } from '@angular/platform-browser';
-import * as $ from 'jquery';
-
 
 @Component({
   selector: 'app-onboard-vnf-vm',
@@ -109,12 +107,12 @@ export class OnboardVnfVmComponent implements OnInit {
     this.notification.template(template);
   }
   notificationSuccess(notificationModel) {
-    this.notificationAttributes.imgPath = "../../../assets/images/execute-success.png";
+    this.notificationAttributes.imgPath = "../../../../assets/images/execute-success.png";
     this.notificationAttributes.status = "Success";
     this.notificationModelShow(notificationModel);
   }
   notificationFailed(notificationModel) {
-    this.notificationAttributes.imgPath = "../../../assets/images/execute-faild.png";
+    this.notificationAttributes.imgPath = "../../../../assets/images/execute-faild.png";
     this.notificationAttributes.status = "Failed";
     this.notificationModelShow(notificationModel);
   }
 -->
 <div class="action ant-tabs-bar">
 
-    <span>
-        <i class="icon">
-            <img src="../../../assets/images/customer.png" alt="">
-        </i>
-         {{"i18nTextDefine_Customer" | translate}} : 
-    </span>
+    <span><i style="margin-right: 10px"><img src="assets/images/customer.png" alt=""></i>
+        {{"i18nTextDefine_Customer" | translate}} : </span>
     <nz-dropdown [nzTrigger]="'click'" [nzPlacement]="'bottomLeft'">
         <button nz-button nz-dropdown><span>{{customerSelected.name}}</span> <i class="anticon anticon-down"></i>
         </button>
-        <ul nz-menu>
+        <ul nz-menu style="min-height:40px;max-height: 200px; overflow: auto;">
             <li nz-menu-item (click)="choseCustomer(item)" *ngFor="let item of customerList">
-                <a title="{{item.name}}">{{item.name}}</a>
+                <a title="{{item.name}}"
+                    style="max-width: 165px; overflow: hidden; text-overflow: ellipsis;">{{item.name}}</a>
             </li>
         </ul>
     </nz-dropdown>
 
-    <span>
-        <i class="icon">
-            <img src="../../../assets/images/service-type.png"alt="">
-        </i> 
-        {{"i18nTextDefine_ServiceType" | translate}} : 
-    </span>
+    <span style="margin-left:40px"><i style="margin-right: 10px"><img src="assets/images/service-type.png" alt=""></i>
+        {{"i18nTextDefine_ServiceType" | translate}} : </span>
     <nz-dropdown [nzTrigger]="'click'" [nzPlacement]="'bottomLeft'">
         <button nz-button nz-dropdown><span>{{serviceTypeSelected.name}}</span> <i class="anticon anticon-down"></i>
         </button>
-        <ul nz-menu>
+        <ul nz-menu style="min-height:40px;max-height: 200px; overflow: auto;">
             <li nz-menu-item (click)="choseServiceType(item)" *ngFor="let item of serviceTypeList">
-                <a title="{{item.name}}">{{item.name}}</a>
+                <a title="{{item.name}}"
+                    style="max-width: 165px; overflow: hidden; text-overflow: ellipsis;">{{item.name}}</a>
             </li>
         </ul>
     </nz-dropdown>
 
-    <button class="create" nz-button [nzType]="'primary'" (click)="createModal()">
-        <i *ngIf="width>1200" class="anticon anticon-plus"></i>
-        <span> {{"i18nTextDefine_Create" | translate}} </span>
+    <button class="create" nz-button [nzType]="'primary'" (click)="createModal()"><i class="anticon anticon-plus"
+            style="transform: scale(1.5);line-height: 15px;margin-right: 5px;"></i><span>
+            {{"i18nTextDefine_Create" | translate}} </span>
     </button>
     <nz-modal nzWidth="428" [(nzVisible)]="isVisible" nzTitle=" {{'i18nTextDefine_ServiceCreation' | translate}} "
-              (nzOnCancel)="handleCancel()"
-              (nzOnOk)="handleOk()" nzClassName="serviceCreationModel"
-              nzCancelText=" {{'i18nTextDefine_Cancel' | translate}} "
-              nzOkText=" {{'i18nTextDefine_modelOk' | translate}} ">
+        (nzOnCancel)="handleCancel()" (nzOnOk)="handleOk()" nzClassName="serviceCreationModel"
+        nzCancelText=" {{'i18nTextDefine_Cancel' | translate}} " nzOkText=" {{'i18nTextDefine_modelOk' | translate}} ">
         <div class="select-list">
             <span style="display:inline-block;"> {{"i18nTextDefine_Customer" | translate}} : </span>
             <nz-select style="width: 176px;float: right;" [(ngModel)]="customerSelected2.name" nzAllowClear
-                       (ngModelChange)="customerChange()">
+                (ngModelChange)="customerChange()">
                 <nz-option *ngFor="let item of customerList2" [nzValue]="item.name" [nzLabel]="item.name"></nz-option>
             </nz-select>
         </div>
         <div class="select-list">
             <span style="display:inline-block;"> {{"i18nTextDefine_ServiceType" | translate}} : </span>
             <nz-select style="width: 176px;float: right;" [(ngModel)]="serviceTypeSelectedName" nzAllowClear
-                       (ngModelChange)="serviceTypeChange()">
-                <nz-option *ngFor="let item of serviceTypeList2" [nzValue]="item.name"
-                           [nzLabel]="item.name"></nz-option>
+                (ngModelChange)="serviceTypeChange()">
+                <nz-option *ngFor="let item of serviceTypeList2" [nzValue]="item.name" [nzLabel]="item.name">
+                </nz-option>
             </nz-select>
         </div>
         <div class="select-list">
             <span style="display:inline-block;"> {{"i18nTextDefine_UseCase" | translate}} : </span>
             <nz-select style="width: 176px;float: right;" [(ngModel)]="templateTypeSelected" nzAllowClear
-                       (ngModelChange)="choseTemplateType()">
+                (ngModelChange)="choseTemplateType()">
                 <!-- <nz-option *ngFor="let item of templateType" [nzValue]="item" [nzLabel]="item"></nz-option> -->
                 <nz-option nzValue="SOTN" nzLabel="SOTN"></nz-option>
                 <nz-option nzValue="CCVPN" nzLabel="CCVPN"></nz-option>
         <div *ngIf="templateTypeSelected == 'E2E Service'">
             <div class="check-box" style="margin:30px; height: 50px">
                 <input class="check-box-style" style="zoom: 1.8; width: 70px" type="checkbox"
-                       [(ngModel)]="isSol005Interface" value="true" nzAllowClear>
+                    [(ngModel)]="isSol005Interface" value="true" nzAllowClear>
                 <label class="label" style="font-size: 20px; color: rgb(60,79,140,0.5)">Sol005</label>
             </div>
         </div>
         </li>
     </ul>
     <div class="list" id="services-list" [ngClass]="{'listdisplay':listDisplay == true}">
-        <nz-table *ngIf="1"
-                  #nzTable [nzData]="tableData"
-                  nzShowSizeChanger
-                  [nzFrontPagination]="false"
-                  [nzShowQuickJumper]="true"
-                  [nzPageSizeOptions]="[5,10,15,20]"
-                  [nzTotal]='total'
-                  [(nzPageSize)]="pageSize"
-                  [(nzPageIndex)]='pageIndex'
-                  [nzLoading]="loading"
-                  [nzSize]="'middle'"
-                  [nzScroll]="{ y: '58vh' }"
-                  (nzPageIndexChange)="searchData()"
-                  (nzPageSizeChange)="searchData(true)">
+        <nz-table *ngIf="1" #nzTable [nzData]="tableData" nzShowSizeChanger [nzFrontPagination]="false"
+            [nzShowQuickJumper]="true" [nzPageSizeOptions]="[5,10,15,20]" [nzTotal]='total' [(nzPageSize)]="pageSize"
+            [(nzPageIndex)]='pageIndex' [nzLoading]="loading" [nzSize]="'middle'" [nzScroll]="{ y: '58vh' }"
+            (nzPageIndexChange)="searchData()" (nzPageSizeChange)="searchData(true)">
             <thead>
-            <tr>
-                <th nzWidth="5%"> {{"i18nTextDefine_NO" | translate}}</th>
-                <th nzWidth="5%"></th>
-                <th nzWidth="20%"> {{"i18nTextDefine_Name" | translate}}</th>
-                <th nzWidth="20%"> {{"i18nTextDefine_InstanceID" | translate}}</th>
-                <th nzWidth="15%"> {{"i18nTextDefine_UseCase" | translate}}</th>
-                <th nzWidth="20%"> {{"i18nTextDefine_Status" | translate}}</th>
-                <th nzWidth="15%"> {{"i18nTextDefine_Action" | translate}}</th>
-            </tr>
+                <tr>
+                    <th nzWidth="5%"> {{"i18nTextDefine_NO" | translate}}</th>
+                    <th nzWidth="5%"></th>
+                    <th nzWidth="20%"> {{"i18nTextDefine_Name" | translate}}</th>
+                    <th nzWidth="20%"> {{"i18nTextDefine_InstanceID" | translate}}</th>
+                    <th nzWidth="15%"> {{"i18nTextDefine_UseCase" | translate}}</th>
+                    <th nzWidth="20%"> {{"i18nTextDefine_Status" | translate}}</th>
+                    <th nzWidth="15%"> {{"i18nTextDefine_Action" | translate}}</th>
+                </tr>
             </thead>
             <tbody>
-            <ng-template ngFor let-data [ngForOf]="nzTable.data" let-i="index">
-                <tr>
-                    <td>{{pageSize*(pageIndex-1) + i+1}}</td>
-                    <td [nzShowExpand]="data.childServiceInstances[0]" [(nzExpand)]="data.expand"></td>
-                    <td>{{data["service-instance-name"] || data.nsName}}</td>
-                    <td>{{data["service-instance-id"] || data.nsInstanceId}}</td>
-                    <td>
-                        <p [ngClass]="{'e2eColor':data.serviceDomain=='E2E Service','nsColor':data.serviceDomain=='Network Service','ccvpnColor':data.serviceDomain=='CCVPN','sotnColor':data.serviceDomain=='SOTN','voLTEColor':data.serviceDomain=='voLTE type'}">
-                            {{data.serviceDomain}}
-                        </p>
-                    </td>
-                    <td>
-              <span [ngClass]="{'active':data.statusClass=='2001','closed':data.statusClass=='Closed','onboarding':data.statusClass=='Onboarding',
+                <ng-template ngFor let-data [ngForOf]="nzTable.data" let-i="index">
+                    <tr>
+                        <td>{{pageSize*(pageIndex-1) + i+1}}</td>
+                        <td [nzShowExpand]="data.childServiceInstances[0]" [(nzExpand)]="data.expand"></td>
+                        <td>{{data["service-instance-name"] || data.nsName}}</td>
+                        <td>{{data["service-instance-id"] || data.nsInstanceId}}</td>
+                        <td>
+                            <p
+                                [ngClass]="{'e2eColor':data.serviceDomain=='E2E Service','nsColor':data.serviceDomain=='Network Service','ccvpnColor':data.serviceDomain=='CCVPN','sotnColor':data.serviceDomain=='SOTN','voLTEColor':data.serviceDomain=='voLTE type'}">
+                                {{data.serviceDomain}}
+                            </p>
+                        </td>
+                        <td>
+                            <span [ngClass]="{'active':data.statusClass=='2001','closed':data.statusClass=='Closed','onboarding':data.statusClass=='Onboarding',
                     'updating':data.statusClass=='Updating','deleting':data.statusClass=='1002','creating':data.statusClass=='1001',
                     'scaling':data.statusClass=='1003','healing':data.statusClass=='1004'}"
-                    *ngIf="data.tips != 'Available' && data.tips != 'Unavailable'">{{data.tips}}</span>
-                        <span *ngIf="data.tips == 'Available' " style="margin-left: 10px">
-                            <img src="assets/images/wancheng-icon.png" alt="Available">
-                        </span>
-                        <span *ngIf="data.tips == 'Unavailable' " style="margin-left: 10px">
-                            <img src="assets/images/shibai-icon.png" alt="Unavailable">
-                        </span>
-                        <nz-progress *ngIf="data.status == 'In Progress'" [nzPercent]="data.rate" [nzShowInfo]="false"
-                                     nzStatus="active"></nz-progress>
-                    </td>
-                    <td>
-                        <i [ngClass]="{'cannotclick':data.status == 'In Progress'||(data.status=='Failed' && data.operationType=='1001')||(data.status=='Failed' && data.operationType=='1002')}"
-                           class="anticon anticon-bars" (click)="serviceDetail(data,1)"></i>
-                        <i [ngClass]="{'cannotclick':data.status == 'In Progress'}" class="anticon anticon-delete"
-                           (click)="deleteModel(data)"></i>
-                        <i [ngClass]="{'cannotclick':data.status == 'In Progress'}" class="anticon anticon-ellipsis"
-                           (click)="iconMoreShow(data,tableData)" style="transform: rotate(90deg);"></i>
+                                *ngIf="data.tips != 'Available' && data.tips != 'Unavailable'">{{data.tips}}</span>
+                            <span *ngIf="data.tips == 'Available' " style="margin-left: 10px">
+                                <img src="assets/images/wancheng-icon.png" alt="Available">
+                            </span>
+                            <span *ngIf="data.tips == 'Unavailable' " style="margin-left: 10px">
+                                <img src="assets/images/shibai-icon.png" alt="Unavailable">
+                            </span>
+                            <nz-progress *ngIf="data.status == 'In Progress'" [nzPercent]="data.rate"
+                                [nzShowInfo]="false" nzStatus="active"></nz-progress>
+                        </td>
+                        <td>
+                            <i [ngClass]="{'cannotclick':data.status == 'In Progress'||(data.status=='Failed' && data.operationType=='1001')||(data.status=='Failed' && data.operationType=='1002')}"
+                                class="anticon anticon-bars" (click)="serviceDetail(data,1)"></i>
+                            <i [ngClass]="{'cannotclick':data.status == 'In Progress'}" class="anticon anticon-delete"
+                                (click)="deleteModel(data)"></i>
+                            <i [ngClass]="{'cannotclick':data.status == 'In Progress'}" class="anticon anticon-ellipsis"
+                                (click)="iconMoreShow(data,tableData)" style="transform: rotate(90deg);"></i>
 
-                        <ul *ngIf="data.iconMore==true " class="icon-more">
-                            <li (click)="scaleService(data)"
-                                [ngClass]="{'cannotclick':data.serviceDomain!='E2E Service' || data.status == 'In Progress'||(data.status=='Failed' && data.operationType=='1001')||(data.status=='Failed' && data.operationType=='1002')}">
-                                <i class="anticon anticon-scale"></i>
-                                <span> {{"i18nTextDefine_Scale" | translate}} </span>
-                            </li>
-                            <li (click)="serviceDetail(data,2)"
-                                [ngClass]="{'cannotclick':data.serviceDomain!='CCVPN' || data.status == 'In Progress'||(data.status=='Failed' && data.operationType=='1001')||(data.status=='Failed' && data.operationType=='1002')}">
-                                <i class="anticon anticon-update"></i>
-                                <span> {{"i18nTextDefine_Update" | translate}} </span>
-                            </li>
-                        </ul>
-                        <!-- <i *ngIf="data.serviceDomain=='E2E Service'||data.serviceDomain=='Network Service' " class="anticon anticon-cloud-upload-o" (click)="updataService(data)"></i> -->
-                        <!-- <i [ngClass]="{'cannotclick':data.status == 'processing'||data.status=='Deleting'||data.status=='Creating'||data.status=='Healing'}"
+                            <ul *ngIf="data.iconMore==true " class="icon-more">
+                                <li (click)="scaleService(data)"
+                                    [ngClass]="{'cannotclick':data.serviceDomain!='E2E Service' || data.status == 'In Progress'||(data.status=='Failed' && data.operationType=='1001')||(data.status=='Failed' && data.operationType=='1002')}">
+                                    <i class="anticon anticon-scale"></i>
+                                    <span> {{"i18nTextDefine_Scale" | translate}} </span>
+                                </li>
+                                <li (click)="serviceDetail(data,2)"
+                                    [ngClass]="{'cannotclick':data.serviceDomain!='CCVPN' || data.status == 'In Progress'||(data.status=='Failed' && data.operationType=='1001')||(data.status=='Failed' && data.operationType=='1002')}">
+                                    <i class="anticon anticon-update"></i>
+                                    <span> {{"i18nTextDefine_Update" | translate}} </span>
+                                </li>
+                            </ul>
+                            <!-- <i *ngIf="data.serviceDomain=='E2E Service'||data.serviceDomain=='Network Service' " class="anticon anticon-cloud-upload-o" (click)="updataService(data)"></i> -->
+                            <!-- <i [ngClass]="{'cannotclick':data.status == 'processing'||data.status=='Deleting'||data.status=='Creating'||data.status=='Healing'}"
                           *ngIf="data.serviceDomain=='Network Service' " class="anticon anticon-reload" (click)="healService(data)"></i> -->
-                    </td>
-                </tr>
-                <tr class="childtr" [nzExpand]="data.expand" *ngFor="let item of data.childServiceInstances">
-                    <td></td>
-                    <td></td>
-                    <td>{{item["service-instance-id"] || item.nsInstanceId || item.vnfInstanceId}}</td>
-                    <td>{{item["service-instance-name"] || item.nsName || item.vnfInstanceName}}</td>
-                    <td>
-                        <p [ngClass]="{'vnfColor':item.serviceDomain=='vnf','siteColor':item.serviceDomain=='SITE','SDWANColor':item.serviceDomain=='SDWAN'}">
-                            {{item.serviceDomain}}
-                        </p>
-                    </td>
-                    <td>
-                        <span [ngClass]="{'healing':data.statusClass=='1004'}">{{item.tips}}</span>
-                        <nz-progress *ngIf=" item.status == 'In Progress' " [nzPercent]="item.rate"></nz-progress>
-                    </td>
-                    <td>
-                        <i [ngClass]="{'cannotclick':data.serviceDomain!='Network Service' || data.status == 'In Progress'||(data.status=='Failed' && data.operationType=='1001')||(data.status=='Failed' && data.operationType=='1002')}"
-                           class="anticon anticon-reload" (click)="healService(item)"></i>
-                    </td>
-                </tr>
-            </ng-template>
+                        </td>
+                    </tr>
+                    <tr class="childtr" [nzExpand]="data.expand" *ngFor="let item of data.childServiceInstances">
+                        <td></td>
+                        <td></td>
+                        <td>{{item["service-instance-id"] || item.nsInstanceId || item.vnfInstanceId}}</td>
+                        <td>{{item["service-instance-name"] || item.nsName || item.vnfInstanceName}}</td>
+                        <td>
+                            <p
+                                [ngClass]="{'vnfColor':item.serviceDomain=='vnf','siteColor':item.serviceDomain=='SITE','SDWANColor':item.serviceDomain=='SDWAN'}">
+                                {{item.serviceDomain}}
+                            </p>
+                        </td>
+                        <td>
+                            <span [ngClass]="{'healing':data.statusClass=='1004'}">{{item.tips}}</span>
+                            <nz-progress *ngIf=" item.status == 'In Progress' " [nzPercent]="item.rate"></nz-progress>
+                        </td>
+                        <td>
+                            <i [ngClass]="{'cannotclick':data.serviceDomain!='Network Service' || data.status == 'In Progress'||(data.status=='Failed' && data.operationType=='1001')||(data.status=='Failed' && data.operationType=='1002')}"
+                                class="anticon anticon-reload" (click)="healService(item)"></i>
+                        </td>
+                    </tr>
+                </ng-template>
             </tbody>
         </nz-table>
 
         <nz-modal nzWidth="428" [nzVisible]="scaleModelVisible" nzTitle=" {{'i18nTextDefine_Scale' | translate}} "
-                  (nzOnCancel)="scaleCancel()"
-                  (nzOnOk)="scaleOk(templatescalestarting,templateScaleSuccessFaild)" nzClassName="scaleModel"
-                  nzCancelText=" {{'i18nTextDefine_Cancel' | translate}} "
-                  nzOkText=" {{'i18nTextDefine_modelOk' | translate}} ">
+            (nzOnCancel)="scaleCancel()" (nzOnOk)="scaleOk(templatescalestarting,templateScaleSuccessFaild)"
+            nzClassName="scaleModel" nzCancelText=" {{'i18nTextDefine_Cancel' | translate}} "
+            nzOkText=" {{'i18nTextDefine_modelOk' | translate}} ">
             <h3><span style="color: red">*&nbsp;</span> {{"i18nTextDefine_SureScale" | translate}} </h3>
             <div class="question">
                 <h4> {{"i18nTextDefine_InstanceID" | translate}} :</h4>
                 <div class="e2eScaleContent">
                     <span class="e2eScaleLable"> {{"i18nTextDefine_Number_Of_Steps" | translate}} :</span>
                     <nz-input-number style="width: 165px;" [(ngModel)]="item.numberOfSteps" [nzMin]="1" [nzMax]="100"
-                                     nzPrecision=0 [nzStep]="1" nzPlaceHolder="number"></nz-input-number>
+                        nzPrecision=0 [nzStep]="1" nzPlaceHolder="number"></nz-input-number>
                 </div>
                 <div class="e2eScaleContent">
                     <span class="e2eScaleLable"> {{"i18nTextDefine_ScalingDirection" | translate}} :</span>
         </nz-modal>
 
         <nz-modal nzWidth="428" [(nzVisible)]="deleteModelVisible" nzTitle=" {{'i18nTextDefine_delete' | translate}} "
-                  (nzOnCancel)="deleteCancel()"
-                  (nzOnOk)="deleteOk(templatedeletestarting,templateDeleteSuccessFaild)"
-                  nzClassName="{{thisService['serviceDomain'] == 'Network Service'?'nsdeleteModel':'deleteModel'}}"
-                  nzCancelText=" {{'i18nTextDefine_Cancel' | translate}} "
-                  nzOkText=" {{'i18nTextDefine_modelOk' | translate}} ">
+            (nzOnCancel)="deleteCancel()" (nzOnOk)="deleteOk(templatedeletestarting,templateDeleteSuccessFaild)"
+            nzClassName="{{thisService['serviceDomain'] == 'Network Service'?'nsdeleteModel':'deleteModel'}}"
+            nzCancelText=" {{'i18nTextDefine_Cancel' | translate}} "
+            nzOkText=" {{'i18nTextDefine_modelOk' | translate}} ">
             <h3><span style="color: red">*&nbsp;</span> {{"i18nTextDefine_SureDelete" | translate}} </h3>
             <div class="question">
                 <h4> {{"i18nTextDefine_InstanceName" | translate}} :</h4>
                     <h4 *ngIf="terminationType=='graceful'"> {{"i18nTextDefine_gracefulTerminationTimeout" | translate}}
                         :</h4>
                     <input *ngIf="terminationType=='graceful'" style="width: 306px;" nz-input
-                           [(ngModel)]="gracefulTerminationTimeout">
+                        [(ngModel)]="gracefulTerminationTimeout">
                 </div>
             </div>
 
                             <img src="assets/images/execute-inproess.png" alt="instance temination is starting">
                         </span>
                         <div class="ant-notification-notice-message"
-                             *ngIf="thisService['serviceDomain'] == 'CCVPN' || thisService['serviceDomain'] == 'SOTN'">
+                            *ngIf="thisService['serviceDomain'] == 'CCVPN' || thisService['serviceDomain'] == 'SOTN'">
                             {{ thisService['serviceDomain'] }} &nbsp; {{"i18nTextDefine_InstanceTeminationStarting" |
                             translate}}
                         </div>
                         <div class="ant-notification-notice-message"
-                             *ngIf="thisService['serviceDomain'] == 'E2E Service'">E2E &nbsp;
+                            *ngIf="thisService['serviceDomain'] == 'E2E Service'">E2E &nbsp;
                             {{"i18nTextDefine_InstanceTeminationStarting" | translate}}
                         </div>
                         <div class="ant-notification-notice-message"
-                             *ngIf="thisService['serviceDomain'] == 'Network Service'">NS &nbsp;
+                            *ngIf="thisService['serviceDomain'] == 'Network Service'">NS &nbsp;
                             {{"i18nTextDefine_InstanceTeminationStarting" | translate}}
                         </div>
                         <div class="ant-notification-notice-description">
         </nz-modal>
 
         <nz-modal nzWidth="428" [nzVisible]="healModelVisible" nzTitle=" {{'i18nTextDefine_Heal' | translate}} "
-                  (nzOnCancel)="healCancel()"
-                  (nzOnOk)="healOk(templatehealstarting,templatehealSuccessFaild)" nzClassName="healModel"
-                  nzCancelText=" {{'i18nTextDefine_Cancel' | translate}} "
-                  nzOkText=" {{'i18nTextDefine_modelOk' | translate}} ">
+            (nzOnCancel)="healCancel()" (nzOnOk)="healOk(templatehealstarting,templatehealSuccessFaild)"
+            nzClassName="healModel" nzCancelText=" {{'i18nTextDefine_Cancel' | translate}} "
+            nzOkText=" {{'i18nTextDefine_modelOk' | translate}} ">
             <h3><span style="color: red">*&nbsp;</span> {{"i18nTextDefine_SureHeal" | translate}} </h3>
             <div class="heal-question">
                 <p class="heal-label"> {{"i18nTextDefine_InstanceID" | translate}} : </p>
                 <div class="question">
                     <p class="heal-label"> {{"i18nTextDefine_degreeHealing" | translate}} :</p>
                     <nz-select style="width: 200px;height:42px;margin-left: 15px;border-radius: 6px"
-                               [(ngModel)]="nsParams.degreeHealing">
+                        [(ngModel)]="nsParams.degreeHealing">
                         <nz-option nzValue="HEAL_RESTORE" nzLabel="HEAL_RESTORE"></nz-option>
                         <nz-option nzValue="HEAL_QOS" nzLabel="HEAL_QOS"></nz-option>
                         <nz-option nzValue="HEAL_RESET" nzLabel="HEAL_RESET"></nz-option>
                 <div class="heal-question">
                     <p class="heal-label"> {{"i18nTextDefine_actionvminfo" | translate}}:</p>
                     <nz-select
-                            style=" float: right;width: 200px;margin-left: 15px;border-radius: 6px;margin-right: 30px"
-                            [(ngModel)]="vmSelected">
+                        style=" float: right;width: 200px;margin-left: 15px;border-radius: 6px;margin-right: 30px"
+                        [(ngModel)]="vmSelected">
                         <nz-option *ngFor="let item of vnfVms" [nzValue]="item" [nzLabel]="item.vmName"></nz-option>
                     </nz-select>
                 </div>
         <ng-template #templateCreatestarting>
             <div class="ant-notification-notice-content">
                 <div class="ant-notification-notice-with-icon">
-                        <span class="ant-notification-notice-icon">
-                            <img src="assets/images/execute-inproess.png" alt="instance temination is starting">
-                        </span>
+                    <span class="ant-notification-notice-icon">
+                        <img src="assets/images/execute-inproess.png" alt="instance temination is starting">
+                    </span>
                     <div class="ant-notification-notice-message"
-                         *ngIf="thisCreateService['serviceDomain'] == 'CCVPN' || thisService['serviceDomain'] == 'SOTN'">
+                        *ngIf="thisCreateService['serviceDomain'] == 'CCVPN' || thisService['serviceDomain'] == 'SOTN'">
                         {{ thisService['serviceDomain'] }} &nbsp; {{"i18nTextDefine_InstanceCreationStarting" |
                         translate}}
                     </div>
                     <div class="ant-notification-notice-message"
-                         *ngIf="thisCreateService['serviceDomain'] == 'E2E Service'">E2E &nbsp;
+                        *ngIf="thisCreateService['serviceDomain'] == 'E2E Service'">E2E &nbsp;
                         {{"i18nTextDefine_InstanceCreationStarting" | translate}}
                     </div>
                     <div class="ant-notification-notice-message"
-                         *ngIf="thisCreateService['serviceDomain'] == 'Network Service'">NS &nbsp;
+                        *ngIf="thisCreateService['serviceDomain'] == 'Network Service'">NS &nbsp;
                         {{"i18nTextDefine_InstanceCreationStarting" | translate}}
                     </div>
                     <div class="ant-notification-notice-description">
                         <div class="notificationlist">
                             <p> {{"i18nTextDefine_InstanceName" | translate}} :</p>
                             <span>{{ thisCreateService["service-instance-name"] }}
-                                </span>
+                            </span>
                         </div>
                         <div class="notificationlist">
                             <p> {{"i18nTextDefine_Customer" | translate}} :</p>
         <ng-template #templateCreateSuccessFaild>
             <div class="ant-notification-notice-content">
                 <div class="ant-notification-notice-with-icon">
-                        <span class="ant-notification-notice-icon">
-                            <img src="assets/images/execute-success.png" alt="instance temination is starting"
-                                 *ngIf="thisCreateService.status == 'Successful'">
-                            <img src="assets/images/execute-faild.png" alt="instance temination is starting"
-                                 *ngIf="thisCreateService.status == 'Failed'">
-                        </span>
+                    <span class="ant-notification-notice-icon">
+                        <img src="assets/images/execute-success.png" alt="instance temination is starting"
+                            *ngIf="thisCreateService.status == 'Successful'">
+                        <img src="assets/images/execute-faild.png" alt="instance temination is starting"
+                            *ngIf="thisCreateService.status == 'Failed'">
+                    </span>
                     <div class="ant-notification-notice-message"
-                         *ngIf="(thisCreateService['serviceDomain'] == 'CCVPN' || thisCreateService['serviceDomain'] == 'SOTN') && thisCreateService.status == 'Successful'">
+                        *ngIf="(thisCreateService['serviceDomain'] == 'CCVPN' || thisCreateService['serviceDomain'] == 'SOTN') && thisCreateService.status == 'Successful'">
                         {{ thisCreateService['serviceDomain'] }} &nbsp; {{"i18nTextDefine_InstanceCreatedSuccessfully" |
                         translate}}
                     </div>
                     <div class="ant-notification-notice-message"
-                         *ngIf="(thisCreateService['serviceDomain'] == 'E2E Service') && thisCreateService.status == 'Successful'">
+                        *ngIf="(thisCreateService['serviceDomain'] == 'E2E Service') && thisCreateService.status == 'Successful'">
                         E2E &nbsp; {{"i18nTextDefine_InstanceCreatedSuccessfully" | translate}}
                     </div>
                     <div class="ant-notification-notice-message"
-                         *ngIf="(thisCreateService['serviceDomain'] == 'Network Service') && thisCreateService.status == 'Successful'">
+                        *ngIf="(thisCreateService['serviceDomain'] == 'Network Service') && thisCreateService.status == 'Successful'">
                         NS &nbsp; {{"i18nTextDefine_InstanceCreatedSuccessfully" | translate}}
                     </div>
                     <div class="ant-notification-notice-message"
-                         *ngIf="(thisCreateService['serviceDomain'] == 'CCVPN' || thisCreateService['serviceDomain'] == 'SOTN') && thisCreateService.status == 'Failed'">
+                        *ngIf="(thisCreateService['serviceDomain'] == 'CCVPN' || thisCreateService['serviceDomain'] == 'SOTN') && thisCreateService.status == 'Failed'">
                         {{ thisCreateService['serviceDomain'] }} &nbsp; {{"i18nTextDefine_InstanceCreationFailed" |
                         translate}}
                     </div>
                     <div class="ant-notification-notice-message"
-                         *ngIf="(thisCreateService['serviceDomain'] == 'E2E Service') && thisCreateService.status == 'Failed'">
+                        *ngIf="(thisCreateService['serviceDomain'] == 'E2E Service') && thisCreateService.status == 'Failed'">
                         E2E &nbsp; {{"i18nTextDefine_InstanceCreationFailed" | translate}}
                     </div>
                     <div class="ant-notification-notice-message"
-                         *ngIf="(thisCreateService['serviceDomain'] == 'Network Service') && thisCreateService.status == 'Failed'">
+                        *ngIf="(thisCreateService['serviceDomain'] == 'Network Service') && thisCreateService.status == 'Failed'">
                         NS &nbsp; {{"i18nTextDefine_InstanceCreationFailed" | translate}}
                     </div>
                     <div class="ant-notification-notice-description">
                             <p> {{"i18nTextDefine_InstanceName" | translate}} :</p>
                             <span>{{ thisCreateService["service-instance-name"] ||
                                     thisCreateService["nsInstanceName"] }}
-                                </span>
+                            </span>
                         </div>
                         <div class="notificationlist">
                             <p> {{"i18nTextDefine_Customer" | translate}} :</p>
         <ng-template #templateDeleteSuccessFaild>
             <div class="ant-notification-notice-content">
                 <div class="ant-notification-notice-with-icon">
-                        <span class="ant-notification-notice-icon">
-                            <img src="assets/images/execute-success.png" alt="instance temination is starting"
-                                 *ngIf="thisService.status == 'Successful'">
-                            <img src="assets/images/execute-faild.png" alt="instance temination is starting"
-                                 *ngIf="thisService.status == 'Failed'">
-                        </span>
+                    <span class="ant-notification-notice-icon">
+                        <img src="assets/images/execute-success.png" alt="instance temination is starting"
+                            *ngIf="thisService.status == 'Successful'">
+                        <img src="assets/images/execute-faild.png" alt="instance temination is starting"
+                            *ngIf="thisService.status == 'Failed'">
+                    </span>
                     <div class="ant-notification-notice-message"
-                         *ngIf="(thisService['serviceDomain'] == 'CCVPN' || thisService['serviceDomain'] == 'SOTN') && thisService.status == 'Successful'">
+                        *ngIf="(thisService['serviceDomain'] == 'CCVPN' || thisService['serviceDomain'] == 'SOTN') && thisService.status == 'Successful'">
                         {{ thisService['serviceDomain'] }} &nbsp; {{"i18nTextDefine_InstanceTeminatedSuccessfully" |
                         translate}}
                     </div>
                     <div class="ant-notification-notice-message"
-                         *ngIf="(thisService['serviceDomain'] == 'E2E Service') && thisService.status == 'Successful'">
+                        *ngIf="(thisService['serviceDomain'] == 'E2E Service') && thisService.status == 'Successful'">
                         E2E &nbsp; {{"i18nTextDefine_InstanceTeminatedSuccessfully" | translate}}
                     </div>
                     <div class="ant-notification-notice-message"
-                         *ngIf="(thisService['serviceDomain'] == 'Network Service') && thisService.status == 'Successful'">
+                        *ngIf="(thisService['serviceDomain'] == 'Network Service') && thisService.status == 'Successful'">
                         NS &nbsp; {{"i18nTextDefine_InstanceTeminatedSuccessfully" | translate}}
                     </div>
                     <div class="ant-notification-notice-message"
-                         *ngIf="(thisService['serviceDomain'] == 'CCVPN' || thisService['serviceDomain'] == 'SOTN') && thisService.status == 'Failed'">
+                        *ngIf="(thisService['serviceDomain'] == 'CCVPN' || thisService['serviceDomain'] == 'SOTN') && thisService.status == 'Failed'">
                         {{ thisService['serviceDomain'] }} &nbsp; {{"i18nTextDefine_InstanceTeminationFailed" |
                         translate}}
                     </div>
                     <div class="ant-notification-notice-message"
-                         *ngIf="(thisService['serviceDomain'] == 'E2E Service') && thisService.status == 'Failed'">E2E
+                        *ngIf="(thisService['serviceDomain'] == 'E2E Service') && thisService.status == 'Failed'">E2E
                         &nbsp; {{"i18nTextDefine_InstanceTeminationFailed" | translate}}
                     </div>
                     <div class="ant-notification-notice-message"
-                         *ngIf="(thisService['serviceDomain'] == 'Network Service') && thisService.status == 'Failed'">
+                        *ngIf="(thisService['serviceDomain'] == 'Network Service') && thisService.status == 'Failed'">
                         NS &nbsp; {{"i18nTextDefine_InstanceTeminationFailed" | translate}}
                     </div>
                     <div class="ant-notification-notice-description">
                             <p> {{"i18nTextDefine_InstanceName" | translate}} :</p>
                             <span>{{ thisService["service-instance-name"] ||
                                     thisService["nsInstanceName"] }}
-                                </span>
+                            </span>
                         </div>
                         <div class="notificationlist">
                             <p> {{"i18nTextDefine_Customer" | translate}} :</p>
         <ng-template #templateScaleSuccessFaild>
             <div class="ant-notification-notice-content">
                 <div class="ant-notification-notice-with-icon">
-                        <span class="ant-notification-notice-icon">
-                            <img src="assets/images/execute-success.png" alt="instance temination is starting"
-                                 *ngIf="thisService.status == 'Successful'">
-                            <img src="assets/images/execute-faild.png" alt="instance temination is starting"
-                                 *ngIf="thisService.status == 'Failed'">
-                        </span>
+                    <span class="ant-notification-notice-icon">
+                        <img src="assets/images/execute-success.png" alt="instance temination is starting"
+                            *ngIf="thisService.status == 'Successful'">
+                        <img src="assets/images/execute-faild.png" alt="instance temination is starting"
+                            *ngIf="thisService.status == 'Failed'">
+                    </span>
                     <div class="ant-notification-notice-message" *ngIf="thisService.status == 'Successful'">E2E &nbsp;
                         {{"i18nTextDefine_InstanceScaledSuccessfully" | translate}}
                     </div>
                             <p> {{"i18nTextDefine_InstanceName" | translate}} :</p>
                             <span>{{ thisService["service-instance-name"] ||
                                     thisService["nsInstanceName"] }}
-                                </span>
+                            </span>
                         </div>
                         <div class="notificationlist">
                             <p> {{"i18nTextDefine_Customer" | translate}} :</p>
         <ng-template #templatehealSuccessFaild>
             <div class="ant-notification-notice-content">
                 <div class="ant-notification-notice-with-icon">
-                          <span class="ant-notification-notice-icon">
-                            <img src="assets/images/execute-success.png" alt="instance temination is starting"
-                                 *ngIf="thisService.status == 'Successful'">
-                            <img src="assets/images/execute-faild.png" alt="instance temination is starting"
-                                 *ngIf="thisService.status == 'Failed'">
-                        </span>
+                    <span class="ant-notification-notice-icon">
+                        <img src="assets/images/execute-success.png" alt="instance temination is starting"
+                            *ngIf="thisService.status == 'Successful'">
+                        <img src="assets/images/execute-faild.png" alt="instance temination is starting"
+                            *ngIf="thisService.status == 'Failed'">
+                    </span>
                     <div class="ant-notification-notice-message" *ngIf="thisService.status == 'Successful'">NS &nbsp;
                         {{"i18nTextDefine_InstanceHealedSuccessfully" | translate}}
                     </div>
                             <p> {{"i18nTextDefine_InstanceName" | translate}} :</p>
                             <span>{{ thisService["service-instance-name"] ||
                                     thisService["nsInstanceName"] }}
-                                </span>
+                            </span>
                         </div>
                         <div class="notificationlist">
                             <p> {{"i18nTextDefine_Customer" | translate}} :</p>
             <div class="ant-notification-notice-content">
                 <div class="ant-notification-notice-with-icon">
                     <span class="ant-notification-notice-icon">
-                            <img src="assets/images/execute-success.png" alt="instance temination is starting"
-                                 *ngIf="thisService.status == 'Successful'">
-                            <img src="assets/images/execute-faild.png" alt="instance temination is starting"
-                                 *ngIf="thisService.status == 'Failed'">
-                        </span>
+                        <img src="assets/images/execute-success.png" alt="instance temination is starting"
+                            *ngIf="thisService.status == 'Successful'">
+                        <img src="assets/images/execute-faild.png" alt="instance temination is starting"
+                            *ngIf="thisService.status == 'Failed'">
+                    </span>
                     <div class="ant-notification-notice-message" *ngIf="thisService.status == 'Successful'">CCVPN &nbsp;
                         {{"i18nTextDefine_InstanceUpdatedSuccessfully" | translate}}
                     </div>
                             <p> {{"i18nTextDefine_InstanceName" | translate}} :</p>
                             <span>{{ thisService["service-instance-name"] ||
                                     thisService["nsInstanceName"] }}
-                                </span>
+                            </span>
                         </div>
                         <div class="notificationlist">
                             <p> {{"i18nTextDefine_Customer" | translate}} :</p>
         </ng-template>
     </div>
     <div class="detailComponent" *ngIf="detailshow">
-        <app-ccvpn-detail [detailParams]="detailData"
-                          [upDateShow]="upDateShow"
-                          (closeUpdate)="closeCCVPNUpdate($event,templateUpdateSuccessFaild)"
-                          (closeDetail)="detailshow = false;listDisplay = false;"></app-ccvpn-detail>
+        <app-ccvpn-detail [detailParams]="detailData" [upDateShow]="upDateShow"
+            (closeUpdate)="closeCCVPNUpdate($event,templateUpdateSuccessFaild)"
+            (closeDetail)="detailshow = false;listDisplay = false;"></app-ccvpn-detail>
     </div>
     <div class="detailComponent" *ngIf="detailshow2">
-        <app-e2e-detail [detailParams]="detailData"
-                        (closeDetail)="detailshow2 = false;listDisplay = false;"></app-e2e-detail>
+        <app-e2e-detail [detailParams]="detailData" (closeDetail)="detailshow2 = false;listDisplay = false;">
+        </app-e2e-detail>
     </div>
     <div class="createComponent" *ngIf="createshow">
-        <app-ccvpn-creation
-                [createParams]="createData"
-                [ccvpn_temParametersContent]="ccvpn_temParametersContent"
-                (closeCreate)="closeCreate($event,templateCreatestarting,templateCreateSuccessFaild)">
+        <app-ccvpn-creation [createParams]="createData" [ccvpn_temParametersContent]="ccvpn_temParametersContent"
+            (closeCreate)="closeCreate($event,templateCreatestarting,templateCreateSuccessFaild)">
         </app-ccvpn-creation>
     </div>
     <div class="createComponent" *ngIf="createshow2">
-        <app-e2e-creation
-                [createParams]="createData"
-                [e2e_ns_temParametersContent]="e2e_ns_temParametersContent"
-                (nsCloseCreate)="nsCloseCreate($event,templateCreatestarting,templateCreateSuccessFaild)"
-                (e2eCloseCreate)="e2eCloseCreate($event,templateCreatestarting,templateCreateSuccessFaild)">
+        <app-e2e-creation [createParams]="createData" [e2e_ns_temParametersContent]="e2e_ns_temParametersContent"
+            (nsCloseCreate)="nsCloseCreate($event,templateCreatestarting,templateCreateSuccessFaild)"
+            (e2eCloseCreate)="e2eCloseCreate($event,templateCreatestarting,templateCreateSuccessFaild)">
         </app-e2e-creation>
     </div>
     <!--</div>-->
 </nz-layout>
 <div class="loading" *ngIf="loadingAnimateShow">
-    <img src="./assets/images/loading-animate2.gif" alt="loading">
+    <img src="assets/images/loading-animate2.gif" alt="loading">
     <p>Please wating……</p>
-</div>
+</div>
\ No newline at end of file
     See the License for the specific language governing permissions and
     limitations under the License.
 */
-@media screen and (min-width: 1050px){
-    .action{
-        span:nth-of-type(2){
-            margin-left: 40px;
-        }
-    }
-    
-}
-@media screen and (max-width: 1050px){
-    .action{
-        span:nth-of-type(2){
-            margin-left: 20px;
-        }
-    }
-    
-}
-@media screen and (max-width: 1300px){
-    .top-list-text{
-        p{
-            width: 200px;
-        }
-    }
-}
-@media screen and (min-width: 1200px){
-    .round{
-        top:45%;
-        left: 50px;
-        margin-top: -40px;
-    }
-    
-}
-
-@media screen and (max-width: 1200px){
-    .round{
-        top:12%;
-        left: 12%;
-    }
-    .top-list-text{
-        p{
-            width: 170px;
-        }
-    }
-    
-}
-
-
 .title {
     font: 700 18px/18px "思源黑体";
     color: #4c5e70;
@@ -73,18 +27,6 @@ hr {
 .ant-tabs-bar{
     margin-bottom: 0!important;
 }
-.ant-dropdown-menu{
-    min-height:40px;
-    max-height: 200px;
-    overflow: auto;
-}
-.ant-dropdown-menu-item{
-    a{
-        max-width: 165px;
-        overflow: hidden;
-        text-overflow: ellipsis;
-    }
-}
 .mask{
     width: 100%;
     height: 100%;
@@ -135,20 +77,15 @@ hr {
         font: 700 14px "Arial";
         color: #3C4F8C;
         margin-right: 5px;
-        .icon{
-            margin-right: 10px;
-        }
     }
     nz-dropdown {
-        width: 20%;
         vertical-align: middle;
         background-color:#ffffff;
         :hover{
             border-color: #48C6EF;
         }
         button {
-            width: 100%;
-            max-width:165px;
+            width: 165px;
             height: 42px;
             background-color:#ffffff;
             text-align: left;
@@ -174,15 +111,11 @@ hr {
         position: absolute;
         right: 3%;
         top:50%;
+        width:116px;
         height:42px;
         background:#0DA9E2;
         border-radius:6px;
         margin-top: -15px;
-        i{
-            transform: scale(1.5);
-            line-height: 15px;
-            margin-right: 5px;
-        }
         span {
             color: #fff;
             font-weight: 400;
@@ -200,76 +133,90 @@ hr {
     }
 
 }
-nz-layout{
-    padding: 20px 32px;
-    .top-num{
-
-        width: 100%;
-        display: flex;
-        justify-content: space-around;
-        .top-list{
-            position: relative;
-            width:32%;
-            max-width:400px;
-            height:170px;
-            background:url("../../../assets/images/servicelist-e2e.png") no-repeat;
-            background-size: 100% 100%;
-            border-radius:2px;
-            .round{
-                position: absolute;
-                width: 60px;
-                height: 60px;
-                line-height: 60px;
-                text-align: center;               
-                background:#E0EDFF;
-                border:2px solid rgba(224,237,255,1);
-                border-radius: 50%;
-                font-size:16px;
-                font-family:ArialMT;
-                color:#3C4F8C;
-                transition: .5s;    
-            }
-            .top-list-text{
-                position: absolute;
+.top-num{
+    overflow: auto;
+    width: 100%;
+}
+.top-list{
+    position: relative;
+    width:29%;
+    height:170px;
+    margin: 10px 1%;
+    float: left;
+    background:url("../../../../assets/images/servicelist-e2e.png") no-repeat;
+    background-size: 100% 100%;
+    border-radius:2px;
+}
+.top-num .top-list:nth-child(2){
+    background:url("../../../../assets/images/servicelist-e2e.png") no-repeat;
+    background-size: 100% 100%;
+}
+.top-num .top-list:nth-child(3){
+    background:url("../../../../assets/images/servicelist-e2e.png") no-repeat;
+    background-size: 100% 100%;
+}
+.top-num .top-list:nth-child(4){
+    background:url("../../../../assets/images/servicelist-sotn.png") no-repeat;
+    background-size: 100% 100%;
+}
+.top-list .round{
+    position: absolute;
+    width: 60px;
+    height: 60px;
+    line-height: 60px;
+  text-align: center;
+    top:45%;
+    left: 50px;
+    margin-top: -30px;
+    background:#E0EDFF;
+    border:2px solid rgba(224,237,255,1);
+    border-radius: 50%;
+    font-size:16px;
+    font-family:ArialMT;
+    color:#3C4F8C;
+}
+.top-list {
+    .top-list-text {
+        position: absolute;
+        text-align: right;
+        height: 40px;
+        line-height: 20px;
+        right: 50px;
+        color: #fff;
+        p {
+            font-size: 14px;
+            width: 250px;
+            margin: 15px 0 0 0;
+            height: 13px;
+            clear: both;
+            span {
+                display: inline-block;
+                font-weight: 500;
                 text-align: right;
-                line-height: 20px;
-                right: 12%;
-                color: #fff;
-                p{
-                    height: 28px;
-                    margin-bottom: 0;
-                    padding-left: 5px;
-                    font-size: 14px;
-                    clear: both;
-                    span{
-                        display: inline-block;
-                        float: right;
-                        font-weight: 500;
-                        text-align: right;
-                    }
-                    span:nth-child(1){
-                        font-size: 18px;
-                        margin-left: 15px;
-                    }
-                    span:nth-child(2){
-                        width: 85px;
-                        font-size: 16px;
-                    }
-                }
-                p:nth-child(1){
-                    margin-top: 25px;
-                }
-                .service-description{
-                    
-                    white-space: nowrap;
-                    overflow: hidden;
-                    text-overflow: ellipsis;
-                    color: #3C4F8C;
-
-                }
+                float: right;
+            }
+            span:nth-child(1) {
+                font-size: 18px;
+                width: 40px;
+                min-width: 40px;
+            }
+            span:nth-child(2) {
+                width: 85px;
+                font-size: 16px;
             }
         }
-        
+        p:nth-child(1) {
+            margin-top: 25px;
+        }
+    }
+    .service-description{
+        font-size: 14px;
+        width: 250px;
+        height: 13px;
+        position: absolute;
+        bottom: 30px;
+        left: 50px;
+        color: #3C4F8C;
     }
 }
 .list {
@@ -343,10 +290,10 @@ nz-layout{
                         .anticon{
                             width: 18px;
                             height: 18px;
-                            background: url("../../../assets/images/scale.png") no-repeat;
+                            background: url("../../../../assets/images/scale.png") no-repeat;
                         }
                         .anticon.anticon-update{
-                            background: url("../../../assets/images/update.png") no-repeat;
+                            background: url("../../../../assets/images/update.png") no-repeat;
                         }
                         span{
                             margin-left: 5px;
@@ -355,10 +302,10 @@ nz-layout{
                     li:hover{
                         color: #0DA9E2;
                         .anticon{
-                            background: url("../../../assets/images/scale-active.png") no-repeat;
+                            background: url("../../../../assets/images/scale-active.png") no-repeat;
                         }
                         .anticon.anticon-update{
-                            background: url("../../../assets/images/update-active.png") no-repeat;
+                            background: url("../../../../assets/images/update-active.png") no-repeat;
                         }
                     }
                 }
     limitations under the License.
 */
 import { Component, OnInit, HostBinding, TemplateRef } from '@angular/core';
-import { MyhttpService } from '../../myhttp.service';
-import { slideToRight } from '../../animates';
+import { MyhttpService } from '../../../core/services/myhttp.service';
+import { slideToRight } from '../../../animates';
 import { NzModalService } from 'ng-zorro-antd';
 import { NzNotificationService } from 'ng-zorro-antd';
-import { Observable } from 'rxjs/Rx';
 
 @Component({
     selector: 'app-services-list',
@@ -29,16 +28,11 @@ import { Observable } from 'rxjs/Rx';
 export class ServicesListComponent implements OnInit {
     @HostBinding('@routerAnimate') routerAnimateState;
 
-    public width:number = document.documentElement.clientWidth;
-
     constructor(private myhttp: MyhttpService, private modalService: NzModalService, private notification: NzNotificationService) {
     }
 
     ngOnInit() {
         this.getallCustomers();
-        Observable.fromEvent(window, 'resize').subscribe((event) => {
-            this.width = document.documentElement.clientWidth
-        });
     }
 
     // customer servicetype
@@ -1279,6 +1273,19 @@ export class ServicesListComponent implements OnInit {
 
     queryProgress(obj, callback) {
         let mypromise = new Promise((res, rej) => {
+            // let data = {
+            //   operationStatus:{
+            //     "operationId": "XXXXXX",
+            //     "operation": "create|delete|update|scale",
+            //     "result": "finished|error|processing",
+            //     "reason": "",
+            //     "userId": "",
+            //     "operationContent": "Be creating pop.",
+            //     "progress": 0,
+            //     "operateAt": "",
+            //     "finishedAt": ""
+            //   }
+            // }
             let errorNums = 180;
             let requery = () => {
                 this.myhttp.getProgress(obj)
@@ -1312,6 +1319,17 @@ export class ServicesListComponent implements OnInit {
                             res(data.operationStatus);
                         }
                     })
+                // setTimeout(()=>{
+                //   console.log(data.operationStatus.progress)
+                //   data.operationStatus.progress++;
+                //   if(data.operationStatus.progress<100){
+                //     callback(data.operationStatus);
+                //     requery()
+                //   }else{
+                //     callback(data.operationStatus);
+                //     res(data.operationStatus)
+                //   }
+                // },100)
             }
             requery();
         })
@@ -1320,7 +1338,25 @@ export class ServicesListComponent implements OnInit {
 
     queryNsProgress(jobid, id, callback, operationType) {
         let mypromise = new Promise((res, rej) => {
-           
+            // let data = {
+            //   "jobId": "string",
+            //   "responseDescriptor": {
+            //     "status": "string",
+            //     "progress": 0,
+            //     "statusDescription": "string",
+            //     "errorCode": "string",
+            //     "responseId": "string",
+            //     "responseHistoryList": [
+            //       {
+            //         "status": "string",
+            //         "progress": "string",
+            //         "statusDescription": "string",
+            //         "errorCode": "string",
+            //         "responseId": "string"
+            //       }
+            //     ]
+            //   }
+            // }
             let errorNums = 180;
             let requery = () => {
                 this.myhttp.getNsProgress(jobid, id, operationType)
@@ -1330,6 +1366,7 @@ export class ServicesListComponent implements OnInit {
                             return false;
                         }
                         if (data.responseDescriptor == null || data.responseDescriptor.progress == undefined) {
+                            // console.log(data);
                             errorNums--;
                             if (errorNums == 0) {
                                 callback({ progress: 255, status: "time over" });
@@ -1353,7 +1390,17 @@ export class ServicesListComponent implements OnInit {
                             res(data);
                         }
                     })
-              
+                // setTimeout(()=>{
+                //   console.log(data.responseDescriptor.progress)
+                //   data.responseDescriptor.progress++;
+                //   if(data.responseDescriptor.progress<100){
+                //     callback(data.responseDescriptor);
+                //     requery()
+                //   }else{
+                //     callback(data);
+                //     res(data)
+                //   }
+                // },100)
             };
             requery();
         });
diff --git a/usecaseui-portal/src/app/views/services/services.component.less b/usecaseui-portal/src/app/views/services/services.component.less
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/usecaseui-portal/src/assets/json/allotted-resources.json b/usecaseui-portal/src/assets/json/allotted-resources.json
deleted file mode 100644 (file)
index 0b39894..0000000
+++ /dev/null
@@ -1,122 +0,0 @@
-{
-    "allotted-resource": [
-        {
-            "id": "1114feec-1aef-4890-abba-f8f3a906935f",
-            "description": "1114feec-1aef-4890-abba-f8f3a906935f",
-            "selflink": "",
-            "model-invariant-id": "f714feec-1aef-4890-abba-f8f3a906935f",
-            "model-version-id": "709919b7-75fd-4e49-8398-67853323ff55",
-            "resource-version": "1535708424249",
-            "orchestration-status": "",
-            "operational-status": "",
-            "type": "",
-            "role": "spoke",
-            "allotted-resource-name": "sdwan ar",
-            "access-provider-id": "",
-            "access-client-id": "",
-            "access-topology-id": "",
-            "access-node-id": "",
-            "access-ltp-id": "",
-            "cvlan": "",
-            "vpn-name": "SDWANVPNInfra",
-            "relationship-list": {
-                "relationship": [
-                    {
-                        "related-to": "service-instance",
-                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                        "related-link": "/aai/v13/business/customers/customer/Democcy/service-subscriptions/service-subscription/CCVPN/service-instances/service-instance/35e88f8e-473f-4d88-92f8-6739a42baa23",
-                        "relationship-data": [
-                            {
-                                "relationship-key": "customer.global-customer-id",
-                                "relationship-value": "Democcy"
-                            },
-                            {
-                                "relationship-key": "service-subscription.service-type",
-                                "relationship-value": "CCVPN"
-                            },
-                            {
-                                "relationship-key": "service-instance.service-instance-id",
-                                "relationship-value": "35e88f8e-473f-4d88-92f8-6739a42baa23"
-                            }
-                        ],
-                        "related-to-property": [
-                            {
-                                "property-key": "service-instance.service-instance-name",
-                                "property-value": "SDWANVPNInfra1"
-                            }
-                        ]
-                    }
-                ]
-            }
-        },
-        {
-            "id": "aa14feec-1aef-4890-abba-f8f3a906935f",
-            "description": "aa14feec-1aef-4890-abba-f8f3a906935f",
-            "selflink": "",
-            "model-invariant-id": "97c4a3c6-2943-41af-8717-2f3183f944be",
-            "model-version-id": "44b777ee-9793-465d-8053-d8e86d2e2362",
-            "resource-version": "1536135116833",
-            "orchestration-status": "",
-            "operational-status": "",
-            "type": "",
-            "role": "",
-            "allotted-resource-name": "ston ar",
-            "access-provider-id": "1000",
-            "access-client-id": "3333",
-            "access-topology-id": "100",
-            "access-node-id": "10.10.10.10",
-            "access-ltp-id": "1",
-            "cvlan": "",
-            "vpn-name": "SOTNVPNInfra",
-            "relationship-list": {
-                "relationship": [
-                    {
-                        "related-to": "service-instance",
-                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                        "related-link": "/aai/v13/business/customers/customer/Democcy/service-subscriptions/service-subscription/CCVPN/service-instances/service-instance/32cd906f-ee7a-4ecf-b1c3-2fce4d59f8c0",
-                        "relationship-data": [
-                            {
-                                "relationship-key": "customer.global-customer-id",
-                                "relationship-value": "Democcy"
-                            },
-                            {
-                                "relationship-key": "service-subscription.service-type",
-                                "relationship-value": "CCVPN"
-                            },
-                            {
-                                "relationship-key": "service-instance.service-instance-id",
-                                "relationship-value": "32cd906f-ee7a-4ecf-b1c3-2fce4d59f8c0"
-                            }
-                        ],
-                        "related-to-property": [
-                            {
-                                "property-key": "service-instance.service-instance-name",
-                                "property-value": "SOTNVPNInfra"
-                            }
-                        ]
-                    },
-                    {
-                        "related-to": "p-interface",
-                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                        "related-link": "/aai/v13/network/pnfs/pnf/pnf1000/p-interfaces/p-interface/nodeId-79.79.79.79-ltpId-2",
-                        "relationship-data": [
-                            {
-                                "relationship-key": "pnf.pnf-name",
-                                "relationship-value": "pnf1000"
-                            },
-                            {
-                                "relationship-key": "p-interface.interface-name",
-                                "relationship-value": "nodeId-79.79.79.79-ltpId-2"
-                            }
-                        ],
-                        "related-to-property": [
-                            {
-                                "property-key": "p-interface.prov-status"
-                            }
-                        ]
-                    }
-                ]
-            }
-        }
-    ]
-}
\ No newline at end of file
diff --git a/usecaseui-portal/src/assets/json/configuration_files/inputNamesTranslate.json b/usecaseui-portal/src/assets/json/configuration_files/inputNamesTranslate.json
deleted file mode 100644 (file)
index 9a91307..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-{
-    "sotnNameTranslate":{
-        "name":"sotnconnectivity_name",
-        "description":"sotnconnectivity_description",
-        "startTime":"sotnconnectivity_startTime",
-        "endTime":"sotnconnectivity_endTime",
-        "COS":"sotnconnectivity_COS",
-        "reroute":"sotnconnectivity_reroute",
-        "SLS":"sotnconnectivity_SLS",
-        "dualLink":"sotnconnectivity_dualLink",
-        "CIR":"sotnconnectivity_cir",
-        "EIR":"sotnconnectivity_eir",
-        "CBS":"sotnconnectivity_cbs",
-        "EBS":"sotnconnectivity_ebs",
-        "colorAware":"sotnconnectivity_colorAware",
-        "couplingFlag":"sotnconnectivity_couplingFlag"
-    },
-    "siteNameTranslate":{
-        "baseNames":{
-            "name":"site_name",
-            "description":"site_description",
-            "type":"site_type",
-            "role":"site_role",
-            "postcode":"site_postcode",
-            "address":"site_address",
-            "vlan":"sotncondition_cVLAN",
-            "sotnVpnName":"sotncondition_sotnVpnName", 
-            "controlPoint":"site_controlPoint", 
-            "groupRole":"sdwancondition_role", 
-            "groupName":"sdwancondition_sdwanVpnName",
-            "emails":"site_emails",
-            "latitude":"site_latitude",
-            "longitude":"site_longitude",
-            "clientSignal":"sotncondition_clientSignal"
-        },
-        "cpeNames":{
-            "device_name":"device_name",
-            "device_version":"device_version",
-            "device_esn":"device_esn",
-            "device_class":"device_class",
-            "device_systemIp":"device_systemIp",
-            "device_vendor":"device_vendor",
-            "device_type":"device_type"
-        },
-        "wanportNames":{
-            "sitewanport_name":"sitewanport_name",
-            "sitewanport_deviceName":"sitewanport_deviceName",
-            "sitewanport_description":"sitewanport_description",
-            "sitewanport_portType":"sitewanport_portType",
-            "sitewanport_portNumber":"sitewanport_portNumber",
-            "sitewanport_ipAddress":"sitewanport_ipAddress",
-            "sitewanport_providerIpAddress":"sitewanport_providerIpAddress",
-            "sitewanport_transportNetworkName":"sitewanport_transportNetworkName",
-            "sitewanport_inputBandwidth":"sitewanport_inputBandwidth",
-            "sitewanport_outputBandwidth":"sitewanport_outputBandwidth"
-        }
-    },
-    "siteGroupNameTranslate":{
-        "name":"sdwanconnectivity_name",
-        "topology":"sdwanconnectivity_topology"
-    }
-
-}
\ No newline at end of file
diff --git a/usecaseui-portal/src/assets/json/configuration_files/servicesCategory.json b/usecaseui-portal/src/assets/json/configuration_files/servicesCategory.json
deleted file mode 100644 (file)
index 574a8bb..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-
-{
-    "SOTN":{
-        "sotnvpn":[
-            {"model-invariant-id": "21886a96-0664-47a3-beae-766952f2059f","model-version-id": "4ca96a53-2e18-4297-8dc7-5776fdf6871b"}
-        ],
-        "site":[
-            {"model-invariant-id": "342ff5e8-5592-4455-a537-a81172c9d541","model-version-id": "ea8bb4d2-00ea-4aeb-ad76-20ac8cb1c99c"},
-            {"model-invariant-id": "a7029145-4294-4664-b619-00dc959a1ff6","model-version-id": "cb756ffb-8d91-49fb-86f7-12ceb2b13158"}
-        ]
-    },
-    "CCVPN":{
-        "sotnvpn":[
-            {"model-invariant-id": "21886a96-0664-47a3-beae-766952f2059f","model-version-id": "54836196-c411-4690-af98-900c1c3aadd7"},
-            {"model-invariant-id": "21886a96-0664-47a3-beae-766952f2059f","model-version-id": "4ca96a53-2e18-4297-8dc7-5776fdf6871b"},
-            {"model-invariant-id": "35661c6e-4a15-4990-8d8a-d247ddcf0110","model-version-id": "f38e13a7-6ba6-4f06-901d-02206faa2687"},
-            {"model-invariant-id": "bafa365f-4056-4ad3-a039-d6b3e3e0fd35","model-version-id": "fdbb8ddd-3325-4840-a156-9ad601b9366c"}
-        ],
-        "site":[
-            {"model-invariant-id": "5c13f3fb-2744-4635-9f1f-c59c92dc8f70","model-version-id": "3a76b1f5-fb0d-4b6b-82d5-0e8a4ebc3838"},
-            {"model-invariant-id": "5c13f3fb-2744-4635-9f1f-c59c92dc8f70","model-version-id": "4b4b3ef8-6747-4111-b9e0-81cf251c0068"},
-            {"model-invariant-id": "a7029145-4294-4664-b619-00dc959a1ff6","model-version-id": "cb756ffb-8d91-49fb-86f7-12ceb2b13158"},
-            {"model-invariant-id": "313abb16-d454-4a64-a39d-2ed4bb7713a3","model-version-id": "95f9c7aa-8a0e-4568-86f7-ab980a4556a1"},
-            {"model-invariant-id": "499e5e60-c8b2-4ea6-8c4e-7739420673a9","model-version-id": "8ec97da1-1e0a-4198-9c9a-3da2c60d7974"}
-        ],
-        "sdwan":[
-            {"model-invariant-id": "88dcb2f0-085b-4548-8b93-0882e37d25d8","model-version-id": "462f84e5-f0e5-44c5-ab95-38fb4bf77064"},
-            {"model-invariant-id": "88dcb2f0-085b-4548-8b93-0882e37d25d8","model-version-id": "d0a4af63-570c-40b3-a26f-ef11366f0a03"},
-            {"model-invariant-id": "2cefdc20-a29d-4792-a151-3653a6a20d45","model-version-id": "a306b8d6-3873-46fe-921a-623e279d5548"},
-            {"model-invariant-id": "e2b217d6-7cac-4156-9f44-f9b010b350a6","model-version-id": "20d9e7dc-f030-4230-af79-ba0bde7cbe2e"}
-        ]
-    }
-}
-
diff --git a/usecaseui-portal/src/assets/json/configuration_files/templateCategory.json b/usecaseui-portal/src/assets/json/configuration_files/templateCategory.json
deleted file mode 100644 (file)
index dca4279..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-{
-    "sotnvpntypes":["uuidxxx","uuidxxxx"],
-    "sitetypes":["uuidaaa","uuidaaaa"],
-    "sdwantypes":["uuidbbb","uuidbbbb"]
-}
-
diff --git a/usecaseui-portal/src/assets/json/instanceTableData4.json b/usecaseui-portal/src/assets/json/instanceTableData4.json
deleted file mode 100644 (file)
index ad8767e..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"service-instance":[{"service-instance-id":"8e07f832-3f50-4657-9b44-010049e8b488","service-instance-name":"SOTNVPNInfra","service-type":"E2E Service","service-role":"E2E Service","model-invariant-id":"bafa365f-4056-4ad3-a039-d6b3e3e0fd35","model-version-id":"fdbb8ddd-3325-4840-a156-9ad601b9366c","resource-version":"1537769390960","input-parameters":"{\n    \"service\":{\n        \"name\":\"SOTNVPNInfra\",\n        \"description\":\"SOTNVPNInfra\",\n        \"serviceInvariantUuid\":\"bafa365f-4056-4ad3-a039-d6b3e3e0fd35\",\n        \"serviceUuid\":\"fdbb8ddd-3325-4840-a156-9ad601b9366c\",\n        \"globalSubscriberId\":\"demo\",\n        \"serviceType\":\"ccvpn\",\n        \"parameters\":{\n            \"locationConstraints\":[\n\n            ],\n            \"resources\":[\n                {\n                    \"resourceName\":\"SOTNConnectivity 0\",\n                    \"resourceInvariantUuid\":\"1b9c677d-fddf-4b70-938b-925a7fa57d43\",\n                    \"resourceUuid\":\"218df3c3-50dd-4c26-9e36-4771387bb771\",\n                    \"resourceCustomizationUuid\":\"b44071c8-04fd-4d6b-b6af-772cbfaa1129\",\n                    \"parameters\":{\n                        \"locationConstraints\":[\n\n                        ],\n                        \"resources\":[\n\n                        ],\n                        \"requestInputs\":{\n\n                        }\n                    }\n                },\n                {\n                    \"resourceName\":\"SPPartnerVF 0\",\n                    \"resourceInvariantUuid\":\"072f9238-15b0-4bc5-a5f5-f18548739470\",\n                    \"resourceUuid\":\"81b9430b-8abe-45d6-8bf9-f41a8f5c735f\",\n                    \"resourceCustomizationUuid\":\"c3612284-6c67-4d8c-8b41-b699cc90e76d\",\n                    \"parameters\":{\n                        \"locationConstraints\":[\n\n                        ],\n                        \"resources\":[\n\n                        ],\n                        \"requestInputs\":{\n\n                        }\n                    }\n                }\n            ],\n            \"requestInputs\":{\n                \"sotnconnectivity0_eir\":\"1000\",\n                \"sotnconnectivity0_cir\":\"1000\",\n                \"sotnconnectivity0_endTime\":\"2018-8-8 10:00\",\n                \"sotnconnectivity0_ebs\":\"1000\",\n                \"sotnconnectivity0_startTime\":\"2018-8-1 10:00\",\n                \"sotnconnectivity0_dualLink\":\"true\",\n                \"sotnconnectivity0_reroute\":\"false\",\n                \"sotnconnectivity0_cbs\":\"1000\",\n                \"sotnconnectivity0_name\":\"SOTN L2\",\n                \"sotnconnectivity0_SLS\":\"\",\n                \"sotnconnectivity0_description\":\"\",\n                \"sotnconnectivity0_couplingFlag\":\"\",\n                \"sotnconnectivity0_colorAware\":\"\",\n                \"sotnconnectivity0_COS\":\"standard\"\n            }\n        }\n    }\n}","relationship-list":{"relationship":[{"related-to":"connectivity","relationship-label":"org.onap.relationships.inventory.PartOf","related-link":"/aai/v13/network/connectivities/connectivity/2e359c75-2af3-4fea-9550-a893edeab8b5","relationship-data":[{"relationship-key":"connectivity.connectivity-id","relationship-value":"2e359c75-2af3-4fea-9550-a893edeab8b5"}],"related-to-property":[{"property-key":"connectivity.etht-svc-name","property-value":"vpn1"}]},{"related-to":"sp-partner","relationship-label":"org.onap.relationships.inventory.PartOf","related-link":"/aai/v13/business/sp-partners/sp-partner/32cd906f-ee7a-4ecf-b1c3-2fce4d59f8c0","relationship-data":[{"relationship-key":"sp-partner.sp-partner-id","relationship-value":"32cd906f-ee7a-4ecf-b1c3-2fce4d59f8c0"}],"related-to-property":[{"property-key":"sp-partner.sp-partner-id","property-value":"32cd906f-ee7a-4ecf-b1c3-2fce4d59f8c0"}]},{"related-to":"allotted-resource","relationship-label":"org.onap.relationships.inventory.Uses","related-link":"/aai/v13/business/customers/customer/demo/service-subscriptions/service-subscription/ccvpn/service-instances/service-instance/2d55a540-f6d3-4108-9bb4-290574b87a6c/allotted-resources/allotted-resource/666085a7-132e-4a32-b9de-e58ecea3476a","relationship-data":[{"relationship-key":"customer.global-customer-id","relationship-value":"demo"},{"relationship-key":"service-subscription.service-type","relationship-value":"ccvpn"},{"relationship-key":"service-instance.service-instance-id","relationship-value":"2d55a540-f6d3-4108-9bb4-290574b87a6c"},{"relationship-key":"allotted-resource.id","relationship-value":"666085a7-132e-4a32-b9de-e58ecea3476a"}],"related-to-property":[{"property-key":"allotted-resource.description","property-value":"sotn-attachment"},{"property-key":"allotted-resource.allotted-resource-name","property-value":"sotn ar"}]},{"related-to":"allotted-resource","relationship-label":"org.onap.relationships.inventory.Uses","related-link":"/aai/v13/business/customers/customer/demo/service-subscriptions/service-subscription/ccvpn/service-instances/service-instance/a6d69c62-75b5-4f04-8cd7-9ca5dfcc4205/allotted-resources/allotted-resource/562adc96-7fbe-435e-bd6d-ff4b8a0a7920","relationship-data":[{"relationship-key":"customer.global-customer-id","relationship-value":"demo"},{"relationship-key":"service-subscription.service-type","relationship-value":"ccvpn"},{"relationship-key":"service-instance.service-instance-id","relationship-value":"a6d69c62-75b5-4f04-8cd7-9ca5dfcc4205"},{"relationship-key":"allotted-resource.id","relationship-value":"562adc96-7fbe-435e-bd6d-ff4b8a0a7920"}],"related-to-property":[{"property-key":"allotted-resource.description","property-value":"sotn-attachment"},{"property-key":"allotted-resource.allotted-resource-name","property-value":"sotn ar"}]}]}},{"service-instance-id":"a6d69c62-75b5-4f04-8cd7-9ca5dfcc4205","service-instance-name":"DcLondon","service-type":"E2E Service","service-role":"E2E Service","model-invariant-id":"499e5e60-c8b2-4ea6-8c4e-7739420673a9","model-version-id":"8ec97da1-1e0a-4198-9c9a-3da2c60d7974","resource-version":"1537866016457","input-parameters":"{\n    \"service\":{\n        \"name\":\"DcLondon\",\n        \"description\":\"SiteService\",\n        \"serviceInvariantUuid\":\"499e5e60-c8b2-4ea6-8c4e-7739420673a9\",\n        \"serviceUuid\":\"8ec97da1-1e0a-4198-9c9a-3da2c60d7974\",\n        \"globalSubscriberId\":\"demo\",\n        \"serviceType\":\"ccvpn\",\n        \"parameters\":{\n            \"locationConstraints\":[\n\n            ],\n            \"resources\":[\n                {\n                    \"resourceName\":\"SiteVF\",\n                    \"resourceInvariantUuid\":\"0c0e1cbe-6e01-4f9e-8c45-a9700ebc14df\",\n                    \"resourceUuid\":\"4ad2d390-5c51-45f5-9710-b467a4ec7a73\",\n                    \"resourceCustomizationUuid\":\"66590e07-0777-415c-af44-36347cf3ddd3\",\n                    \"parameters\":{\n                        \"locationConstraints\":[\n\n                        ],\n                        \"resources\":[\n\n                        ],\n                        \"requestInputs\":{\n\n                        }\n                    }\n                },\n                {\n                    \"resourceName\":\"mpls\",\n                    \"resourceInvariantUuid\":\"97a3e552-08c4-4697-aeeb-d8d3e09ce58e\",\n                    \"resourceUuid\":\"63d8e1af-32dc-4c71-891d-e3f7b6a976d2\",\n                    \"resourceCustomizationUuid\":\"205456e7-3dc0-40c4-8cb0-28e6c1877042\",\n                    \"parameters\":{\n                        \"locationConstraints\":[\n\n                        ],\n                        \"resources\":[\n\n                        ],\n                        \"requestInputs\":{\n\n                        }\n                    }\n                },\n                {\n                    \"resourceName\":\"deviceVF\",\n                    \"resourceInvariantUuid\":\"c726490a-0ce2-4bc7-abea-dade66bfb13d\",\n                    \"resourceUuid\":\"0e2de9d8-d76b-4134-b5f1-41e79056adbe\",\n                    \"resourceCustomizationUuid\":\"5bc1373e-9a36-4a00-8c62-784e0bc417ad\",\n                    \"parameters\":{\n                        \"locationConstraints\":[\n\n                        ],\n                        \"resources\":[\n\n                        ],\n                        \"requestInputs\":{\n\n                        }\n                    }\n                },\n                {\n                    \"resourceName\":\"sdwanvpnattachmentVF\",\n                    \"resourceInvariantUuid\":\"f714feec-1aef-4890-abba-f8f3a906935f\",\n                    \"resourceUuid\":\"709919b7-75fd-4e49-8398-67853323ff55\",\n                    \"resourceCustomizationUuid\":\"debd988f-fe04-4940-a5cb-37f61d84eab4\",\n                    \"parameters\":{\n                        \"locationConstraints\":[\n\n                        ],\n                        \"resources\":[\n\n                        ],\n                        \"requestInputs\":{\n\n                        }\n                    }\n                },\n                {\n                    \"resourceName\":\"internet\",\n                    \"resourceInvariantUuid\":\"97a3e552-08c4-4697-aeeb-d8d3e09ce58e\",\n                    \"resourceUuid\":\"63d8e1af-32dc-4c71-891d-e3f7b6a976d2\",\n                    \"resourceCustomizationUuid\":\"64b8e8ba-62b9-4db6-b420-1ca7067d63e0\",\n                    \"parameters\":{\n                        \"locationConstraints\":[\n\n                        ],\n                        \"resources\":[\n\n                        ],\n                        \"requestInputs\":{\n\n                        }\n                    }\n                },\n                {\n                    \"resourceName\":\"sotnvpnattachmentvF\",\n                    \"resourceInvariantUuid\":\"97c4a3c6-2943-41af-8717-2f3183f944be\",\n                    \"resourceUuid\":\"44b777ee-9793-465d-8053-d8e86d2e2362\",\n                    \"resourceCustomizationUuid\":\"37aeb073-c75d-4cf6-a7fa-a1af862ef58a\",\n                    \"parameters\":{\n                        \"locationConstraints\":[\n\n                        ],\n                        \"resources\":[\n\n                        ],\n                        \"requestInputs\":{\n\n                        }\n                    }\n                },\n                {\n                    \"resourceName\":\"SPPartnerVF\",\n                    \"resourceInvariantUuid\":\"072f9238-15b0-4bc5-a5f5-f18548739470\",\n                    \"resourceUuid\":\"81b9430b-8abe-45d6-8bf9-f41a8f5c735f\",\n                    \"resourceCustomizationUuid\":\"cd0b4b9c-66c6-49c5-b346-7580e4b6c394\",\n                    \"parameters\":{\n                        \"locationConstraints\":[\n\n                        ],\n                        \"resources\":[\n\n                        ],\n                        \"requestInputs\":{\n\n                        }\n                    }\n                }\n            ],\n            \"requestInputs\":{\n                \"devicevf_device_class\":\"PNF\",\n                \"devicevf_device_esn\":\"2102351BTJ10HB000075\",\n                \"devicevf_device_name\":\"50.47\",\n                \"devicevf_device_systemIp\":\"192.168.1.47\",\n                \"devicevf_device_type\":\"AR161EW\",\n                \"devicevf_device_vendor\":\"huawei\",\n                \"devicevf_device_version\":\"1.0\",\n                \"internet_sitewanport_description\":\"internet\",\n                \"internet_sitewanport_deviceName\":\"50.47\",\n                \"internet_sitewanport_inputBandwidth\":\"100\",\n                \"internet_sitewanport_ipAddress\":\"100.2.30.9\",\n                \"internet_sitewanport_name\":\"internet\",\n                \"internet_sitewanport_outputBandwidth\":\"100\",\n                \"internet_sitewanport_portNumber\":\"0/0/2\",\n                \"internet_sitewanport_portType\":\"GE\",\n                \"internet_sitewanport_providerIpAddress\":\"100.2.30.10\",\n                \"internet_sitewanport_transportNetworkName\":\"internet\",\n                \"mpls_sitewanport_description\":\"mpls\",\n                \"mpls_sitewanport_deviceName\":\"50.47\",\n                \"mpls_sitewanport_inputBandwidth\":\"100\",\n                \"mpls_sitewanport_ipAddress\":\"10.2.30.7\",\n                \"mpls_sitewanport_name\":\"mpls\",\n                \"mpls_sitewanport_outputBandwidth\":\"100\",\n                \"mpls_sitewanport_portNumber\":\"0/0/1\",\n                \"mpls_sitewanport_portType\":\"GE\",\n                \"mpls_sitewanport_providerIpAddress\":\"10.2.30.8\",\n                \"mpls_sitewanport_transportNetworkName\":\"internet\",\n                \"sdwanvpnattachmentvf_sdwancondition_role\":\"spoke\",\n                \"sdwanvpnattachmentvf_sdwancondition_sdwanVpnName\":\"SDWANVPNInfra\",\n                \"sitevf_site_address\":\"University College London,Gower Street,London\",\n                \"sitevf_site_controlPoint\":\"VDF_VCPE\",\n                \"sitevf_site_description\":\"VDF_vGW\",\n                \"sitevf_site_emails\":\"\",\n                \"sitevf_site_latitude\":\"\",\n                \"sitevf_site_longitude\":\"\",\n                \"sitevf_site_name\":\"DcLondon\",\n                \"sitevf_site_postcode\":\"N200095\",\n                \"sitevf_site_role\":\"sd-wan-edge\",\n                \"sitevf_site_type\":\"single-gateway\",\n                \"sotnvpnattachmentvf_sotncondition_clientSignal\":\"\",\n                \"sotnvpnattachmentvf_sotncondition_cVLAN\":\"\",\n                \"sotnvpnattachmentvf_sotncondition_sotnVpnName\":\"SOTN L2\"\n            }\n        }\n    }\n}","relationship-list":{"relationship":[{"related-to":"device","relationship-label":"org.onap.relationships.inventory.PartOf","related-link":"/aai/v13/network/devices/device/2cacf49c-7c09-4155-b18a-4468dce34083","relationship-data":[{"relationship-key":"device.device-id","relationship-value":"2cacf49c-7c09-4155-b18a-4468dce34083"}],"related-to-property":[{"property-key":"device.device-name","property-value":"TravelDevice"}]},{"related-to":"site-resource","relationship-label":"org.onap.relationships.inventory.PartOf","related-link":"/aai/v13/network/site-resources/site-resource/f288d54e-be09-46d3-bb1f-38729ec74bb5","relationship-data":[{"relationship-key":"site-resource.site-resource-id","relationship-value":"f288d54e-be09-46d3-bb1f-38729ec74bb5"}],"related-to-property":[{"property-key":"site-resource.site-resource-name","property-value":"travelSite"}]},{"related-to":"wan-port-config","relationship-label":"org.onap.relationships.inventory.PartOf","related-link":"/aai/v13/network/wan-port-configs/wan-port-config/99866f05-9749-456e-8909-61eebf08373e","relationship-data":[{"relationship-key":"wan-port-config.wan-port-config-id","relationship-value":"99866f05-9749-456e-8909-61eebf08373e"}],"related-to-property":[{"property-key":"wan-port-config.wan-port-config-name","property-value":"intenet"}]},{"related-to":"wan-port-config","relationship-label":"org.onap.relationships.inventory.PartOf","related-link":"/aai/v13/network/wan-port-configs/wan-port-config/afab2cc0-28c9-4fd3-bf03-01c8034f8191","relationship-data":[{"relationship-key":"wan-port-config.wan-port-config-id","relationship-value":"afab2cc0-28c9-4fd3-bf03-01c8034f8191"}],"related-to-property":[{"property-key":"wan-port-config.wan-port-config-name","property-value":"mpls"}]},{"related-to":"sp-partner","relationship-label":"org.onap.relationships.inventory.PartOf","related-link":"/aai/v13/business/sp-partners/sp-partner/167a285b-0875-41ff-8ed1-1178db6f3133","relationship-data":[{"relationship-key":"sp-partner.sp-partner-id","relationship-value":"167a285b-0875-41ff-8ed1-1178db6f3133"}],"related-to-property":[{"property-key":"sp-partner.sp-partner-id","property-value":"167a285b-0875-41ff-8ed1-1178db6f3133"}]},{"related-to":"allotted-resource","relationship-label":"org.onap.relationships.inventory.Uses","related-link":"/aai/v13/business/customers/customer/demo/service-subscriptions/service-subscription/ccvpn/service-instances/service-instance/0ea94797-3772-40ff-b6fb-69f06c533be3/allotted-resources/allotted-resource/d519761d-c89c-4164-86c7-8f74952eea65","relationship-data":[{"relationship-key":"customer.global-customer-id","relationship-value":"demo"},{"relationship-key":"service-subscription.service-type","relationship-value":"ccvpn"},{"relationship-key":"service-instance.service-instance-id","relationship-value":"0ea94797-3772-40ff-b6fb-69f06c533be3"},{"relationship-key":"allotted-resource.id","relationship-value":"d519761d-c89c-4164-86c7-8f74952eea65"}],"related-to-property":[{"property-key":"allotted-resource.description","property-value":"sdwan-attachment"},{"property-key":"allotted-resource.allotted-resource-name","property-value":"sdwan ar"}]},{"related-to":"allotted-resource","relationship-label":"org.onap.relationships.inventory.Uses","related-link":"/aai/v13/business/customers/customer/demo/service-subscriptions/service-subscription/ccvpn/service-instances/service-instance/8e07f832-3f50-4657-9b44-010049e8b488/allotted-resources/allotted-resource/65f21c28-8b19-4769-8f08-174e2afa5488","relationship-data":[{"relationship-key":"customer.global-customer-id","relationship-value":"demo"},{"relationship-key":"service-subscription.service-type","relationship-value":"ccvpn"},{"relationship-key":"service-instance.service-instance-id","relationship-value":"8e07f832-3f50-4657-9b44-010049e8b488"},{"relationship-key":"allotted-resource.id","relationship-value":"65f21c28-8b19-4769-8f08-174e2afa5488"}],"related-to-property":[{"property-key":"allotted-resource.description","property-value":"sotn attachment"},{"property-key":"allotted-resource.allotted-resource-name","property-value":"ston ar"}]}]}},{"service-instance-id":"0ea94797-3772-40ff-b6fb-69f06c533be3","service-instance-name":"SDWANVPNInfra","service-type":"E2E Service","service-role":"E2E Service","model-invariant-id":"e2b217d6-7cac-4156-9f44-f9b010b350a6","model-version-id":"20d9e7dc-f030-4230-af79-ba0bde7cbe2e","resource-version":"1537864894560","input-parameters":"{\n    \"service\":{\n        \"name\":\"SDWANVPNInfra\",\n        \"description\":\"SDWANVPNInfra\",\n        \"serviceInvariantUuid\":\"e2b217d6-7cac-4156-9f44-f9b010b350a6\",\n        \"serviceUuid\":\"20d9e7dc-f030-4230-af79-ba0bde7cbe2e\",\n        \"globalSubscriberId\":\"demo\",\n        \"serviceType\":\"ccvpn\",\n        \"parameters\":{\n            \"locationConstraints\":[\n\n            ],\n            \"resources\":[\n                {\n                    \"resourceName\":\"SDWANConnectivity 0\",\n                    \"resourceInvariantUuid\":\"f99a9a23-c88e-44ff-a4dc-22b88675d278\",\n                    \"resourceUuid\":\"7baa7742-3a13-4288-8330-868015adc340\",\n                    \"resourceCustomizationUuid\":\"94ec574b-2306-4cbd-8214-09662b040f73\",\n                    \"parameters\":{\n                        \"locationConstraints\":[\n\n                        ],\n                        \"resources\":[\n\n                        ],\n                        \"requestInputs\":{\n\n                        }\n                    }\n                },\n                {\n                    \"resourceName\":\"SPPartnerVF 0\",\n                    \"resourceInvariantUuid\":\"072f9238-15b0-4bc5-a5f5-f18548739470\",\n                    \"resourceUuid\":\"81b9430b-8abe-45d6-8bf9-f41a8f5c735f\",\n                    \"resourceCustomizationUuid\":\"a7baba5d-6ac3-42b5-b47d-070841303ab1\",\n                    \"parameters\":{\n                        \"locationConstraints\":[\n\n                        ],\n                        \"resources\":[\n\n                        ],\n                        \"requestInputs\":{\n\n                        }\n                    }\n                }\n            ],\n            \"requestInputs\":{\n                \"sdwanconnectivity0_name\":\"SDWANVPNInfra\",\n                \"sdwanconnectivity0_topology\":\"hub-spoke\"\n            }\n        }\n    }\n}","relationship-list":{"relationship":[{"related-to":"sdwan-vpn","relationship-label":"org.onap.relationships.inventory.PartOf","related-link":"/aai/v13/network/sdwan-vpns/sdwan-vpn/0d8707cd-9d27-4503-a0b0-e9b1b1a83b1e","relationship-data":[{"relationship-key":"sdwan-vpn.sdwan-vpn-id","relationship-value":"0d8707cd-9d27-4503-a0b0-e9b1b1a83b1e"}],"related-to-property":[{"property-key":"sdwan-vpn.sdwan-vpn-name"}]},{"related-to":"sp-partner","relationship-label":"org.onap.relationships.inventory.PartOf","related-link":"/aai/v13/business/sp-partners/sp-partner/15e88f8e-473f-4d88-92f8-6739a42baa2g","relationship-data":[{"relationship-key":"sp-partner.sp-partner-id","relationship-value":"15e88f8e-473f-4d88-92f8-6739a42baa2g"}],"related-to-property":[{"property-key":"sp-partner.sp-partner-id","property-value":"15e88f8e-473f-4d88-92f8-6739a42baa2g"}]},{"related-to":"allotted-resource","relationship-label":"org.onap.relationships.inventory.Uses","related-link":"/aai/v13/business/customers/customer/demo/service-subscriptions/service-subscription/ccvpn/service-instances/service-instance/2d55a540-f6d3-4108-9bb4-290574b87a6c/allotted-resources/allotted-resource/c797bba9-eb90-4825-b1c2-adbd1a31101f","relationship-data":[{"relationship-key":"customer.global-customer-id","relationship-value":"demo"},{"relationship-key":"service-subscription.service-type","relationship-value":"ccvpn"},{"relationship-key":"service-instance.service-instance-id","relationship-value":"2d55a540-f6d3-4108-9bb4-290574b87a6c"},{"relationship-key":"allotted-resource.id","relationship-value":"c797bba9-eb90-4825-b1c2-adbd1a31101f"}],"related-to-property":[{"property-key":"allotted-resource.description","property-value":"sdwan-attachment"},{"property-key":"allotted-resource.allotted-resource-name","property-value":"sdwan ar"}]},{"related-to":"allotted-resource","relationship-label":"org.onap.relationships.inventory.Uses","related-link":"/aai/v13/business/customers/customer/demo/service-subscriptions/service-subscription/ccvpn/service-instances/service-instance/a6d69c62-75b5-4f04-8cd7-9ca5dfcc4205/allotted-resources/allotted-resource/9a7329e6-8961-4008-9dbe-adeacfcd20da","relationship-data":[{"relationship-key":"customer.global-customer-id","relationship-value":"demo"},{"relationship-key":"service-subscription.service-type","relationship-value":"ccvpn"},{"relationship-key":"service-instance.service-instance-id","relationship-value":"a6d69c62-75b5-4f04-8cd7-9ca5dfcc4205"},{"relationship-key":"allotted-resource.id","relationship-value":"9a7329e6-8961-4008-9dbe-adeacfcd20da"}],"related-to-property":[{"property-key":"allotted-resource.description","property-value":"sdwan-attachment"},{"property-key":"allotted-resource.allotted-resource-name","property-value":"sdwan ar"}]}]}},{"service-instance-id":"f08067b8-a07b-4c41-b750-5f9b35281e67","service-instance-name":"siteFangshanQu","service-type":"E2E Service","service-role":"E2E Service","model-invariant-id":"499e5e60-c8b2-4ea6-8c4e-7739420673a9","model-version-id":"8ec97da1-1e0a-4198-9c9a-3da2c60d7974","resource-version":"1537867265890","selflink":"restconf/config/GENERIC-RESOURCE-API:services/service/506b87a5-72fe-4197-a307-6929c3871ab2/service-data/service-topology/","input-parameters":"{\n    \"service\":{\n        \"name\":\"siteFangshanQu\",\n        \"description\":\"SiteService\",\n        \"serviceInvariantUuid\":\"499e5e60-c8b2-4ea6-8c4e-7739420673a9\",\n        \"serviceUuid\":\"8ec97da1-1e0a-4198-9c9a-3da2c60d7974\",\n        \"globalSubscriberId\":\"demo\",\n        \"serviceType\":\"ccvpn\",\n        \"parameters\":{\n            \"locationConstraints\":[\n\n            ],\n            \"resources\":[\n                {\n                    \"resourceName\":\"SiteVF\",\n                    \"resourceInvariantUuid\":\"0c0e1cbe-6e01-4f9e-8c45-a9700ebc14df\",\n                    \"resourceUuid\":\"4ad2d390-5c51-45f5-9710-b467a4ec7a73\",\n                    \"resourceCustomizationUuid\":\"66590e07-0777-415c-af44-36347cf3ddd3\",\n                    \"parameters\":{\n                        \"locationConstraints\":[\n\n                        ],\n                        \"resources\":[\n\n                        ],\n                        \"requestInputs\":{\n\n                        }\n                    }\n                },\n                {\n                    \"resourceName\":\"mpls\",\n                    \"resourceInvariantUuid\":\"97a3e552-08c4-4697-aeeb-d8d3e09ce58e\",\n                    \"resourceUuid\":\"63d8e1af-32dc-4c71-891d-e3f7b6a976d2\",\n                    \"resourceCustomizationUuid\":\"205456e7-3dc0-40c4-8cb0-28e6c1877042\",\n                    \"parameters\":{\n                        \"locationConstraints\":[\n\n                        ],\n                        \"resources\":[\n\n                        ],\n                        \"requestInputs\":{\n\n                        }\n                    }\n                },\n                {\n                    \"resourceName\":\"deviceVF\",\n                    \"resourceInvariantUuid\":\"c726490a-0ce2-4bc7-abea-dade66bfb13d\",\n                    \"resourceUuid\":\"0e2de9d8-d76b-4134-b5f1-41e79056adbe\",\n                    \"resourceCustomizationUuid\":\"5bc1373e-9a36-4a00-8c62-784e0bc417ad\",\n                    \"parameters\":{\n                        \"locationConstraints\":[\n\n                        ],\n                        \"resources\":[\n\n                        ],\n                        \"requestInputs\":{\n\n                        }\n                    }\n                },\n                {\n                    \"resourceName\":\"sdwanvpnattachmentVF\",\n                    \"resourceInvariantUuid\":\"f714feec-1aef-4890-abba-f8f3a906935f\",\n                    \"resourceUuid\":\"709919b7-75fd-4e49-8398-67853323ff55\",\n                    \"resourceCustomizationUuid\":\"debd988f-fe04-4940-a5cb-37f61d84eab4\",\n                    \"parameters\":{\n                        \"locationConstraints\":[\n\n                        ],\n                        \"resources\":[\n\n                        ],\n                        \"requestInputs\":{\n\n                        }\n                    }\n                },\n                {\n                    \"resourceName\":\"internet\",\n                    \"resourceInvariantUuid\":\"97a3e552-08c4-4697-aeeb-d8d3e09ce58e\",\n                    \"resourceUuid\":\"63d8e1af-32dc-4c71-891d-e3f7b6a976d2\",\n                    \"resourceCustomizationUuid\":\"64b8e8ba-62b9-4db6-b420-1ca7067d63e0\",\n                    \"parameters\":{\n                        \"locationConstraints\":[\n\n                        ],\n                        \"resources\":[\n\n                        ],\n                        \"requestInputs\":{\n\n                        }\n                    }\n                },\n                {\n                    \"resourceName\":\"sotnvpnattachmentvF\",\n                    \"resourceInvariantUuid\":\"97c4a3c6-2943-41af-8717-2f3183f944be\",\n                    \"resourceUuid\":\"44b777ee-9793-465d-8053-d8e86d2e2362\",\n                    \"resourceCustomizationUuid\":\"37aeb073-c75d-4cf6-a7fa-a1af862ef58a\",\n                    \"parameters\":{\n                        \"locationConstraints\":[\n\n                        ],\n                        \"resources\":[\n\n                        ],\n                        \"requestInputs\":{\n\n                        }\n                    }\n                },\n                {\n                    \"resourceName\":\"SPPartnerVF\",\n                    \"resourceInvariantUuid\":\"072f9238-15b0-4bc5-a5f5-f18548739470\",\n                    \"resourceUuid\":\"81b9430b-8abe-45d6-8bf9-f41a8f5c735f\",\n                    \"resourceCustomizationUuid\":\"cd0b4b9c-66c6-49c5-b346-7580e4b6c394\",\n                    \"parameters\":{\n                        \"locationConstraints\":[\n\n                        ],\n                        \"resources\":[\n\n                        ],\n                        \"requestInputs\":{\n\n                        }\n                    }\n                }\n            ],\n            \"requestInputs\":{\n                \"devicevf_device_class\":\"PNF\",\n                \"devicevf_device_esn\":\"2102351BTJ10HB000075\",\n                \"devicevf_device_name\":\"50.47\",\n                \"devicevf_device_systemIp\":\"192.168.1.47\",\n                \"devicevf_device_type\":\"AR161EW\",\n                \"devicevf_device_vendor\":\"huawei\",\n                \"devicevf_device_version\":\"1.0\",\n                \"internet_sitewanport_description\":\"internet\",\n                \"internet_sitewanport_deviceName\":\"50.47\",\n                \"internet_sitewanport_inputBandwidth\":\"100\",\n                \"internet_sitewanport_ipAddress\":\"100.2.30.9\",\n                \"internet_sitewanport_name\":\"internet\",\n                \"internet_sitewanport_outputBandwidth\":\"100\",\n                \"internet_sitewanport_portNumber\":\"0/0/2\",\n                \"internet_sitewanport_portType\":\"GE\",\n                \"internet_sitewanport_providerIpAddress\":\"100.2.30.10\",\n                \"internet_sitewanport_transportNetworkName\":\"internet\",\n                \"mpls_sitewanport_description\":\"mpls\",\n                \"mpls_sitewanport_deviceName\":\"50.47\",\n                \"mpls_sitewanport_inputBandwidth\":\"100\",\n                \"mpls_sitewanport_ipAddress\":\"10.2.30.7\",\n                \"mpls_sitewanport_name\":\"mpls\",\n                \"mpls_sitewanport_outputBandwidth\":\"100\",\n                \"mpls_sitewanport_portNumber\":\"0/0/1\",\n                \"mpls_sitewanport_portType\":\"GE\",\n                \"mpls_sitewanport_providerIpAddress\":\"10.2.30.8\",\n                \"mpls_sitewanport_transportNetworkName\":\"internet\",\n                \"sdwanvpnattachmentvf_sdwancondition_role\":\"spoke\",\n                \"sdwanvpnattachmentvf_sdwancondition_sdwanVpnName\":\"SDWANVPNInfra-2\",\n                \"sitevf_site_address\":\"CMCC International Data Center,Hongkong\",\n                \"sitevf_site_controlPoint\":\"CMCC_VCPE\",\n                \"sitevf_site_description\":\"CMCC_vGW\",\n                \"sitevf_site_emails\":\"\",\n                \"sitevf_site_latitude\":\"\",\n                \"sitevf_site_longitude\":\"\",\n                \"sitevf_site_name\":\"siteFangshanQu\",\n                \"sitevf_site_postcode\":\"999077\",\n                \"sitevf_site_role\":\"sd-wan-edge\",\n                \"sitevf_site_type\":\"single-gateway\",\n                \"sotnvpnattachmentvf_sotncondition_clientSignal\":\"\",\n                \"sotnvpnattachmentvf_sotncondition_cVLAN\":\"\",\n                \"sotnvpnattachmentvf_sotncondition_sotnVpnName\":\"SOTN L2\"\n            }\n        }\n    }\n}","relationship-list":{"relationship":[{"related-to":"sp-partner","relationship-label":"org.onap.relationships.inventory.PartOf","related-link":"/aai/v13/business/sp-partners/sp-partner/506b87a5-72fe-4197-a307-6929c3871ab2","relationship-data":[{"relationship-key":"sp-partner.sp-partner-id","relationship-value":"506b87a5-72fe-4197-a307-6929c3871ab2"}],"related-to-property":[{"property-key":"sp-partner.sp-partner-id","property-value":"506b87a5-72fe-4197-a307-6929c3871ab2"}]}]}},{"service-instance-id":"6a6478d1-f62f-439c-8f16-6038a44af8c3","service-instance-name":"SDWANVPNInfra-2","service-type":"E2E Service","service-role":"E2E Service","model-invariant-id":"e2b217d6-7cac-4156-9f44-f9b010b350a6","model-version-id":"20d9e7dc-f030-4230-af79-ba0bde7cbe2e","resource-version":"1537779569094","input-parameters":"{\n    \"service\":{\n        \"name\":\"SDWANVPNInfra-2\",\n        \"description\":\"SDWANVPNInfra\",\n        \"serviceInvariantUuid\":\"e2b217d6-7cac-4156-9f44-f9b010b350a6\",\n        \"serviceUuid\":\"20d9e7dc-f030-4230-af79-ba0bde7cbe2e\",\n        \"globalSubscriberId\":\"demo\",\n        \"serviceType\":\"ccvpn\",\n        \"parameters\":{\n            \"locationConstraints\":[\n\n            ],\n            \"resources\":[\n                {\n                    \"resourceName\":\"SDWANConnectivity 0\",\n                    \"resourceInvariantUuid\":\"f99a9a23-c88e-44ff-a4dc-22b88675d278\",\n                    \"resourceUuid\":\"7baa7742-3a13-4288-8330-868015adc340\",\n                    \"resourceCustomizationUuid\":\"94ec574b-2306-4cbd-8214-09662b040f73\",\n                    \"parameters\":{\n                        \"locationConstraints\":[\n\n                        ],\n                        \"resources\":[\n\n                        ],\n                        \"requestInputs\":{\n\n                        }\n                    }\n                },\n                {\n                    \"resourceName\":\"SPPartnerVF 0\",\n                    \"resourceInvariantUuid\":\"072f9238-15b0-4bc5-a5f5-f18548739470\",\n                    \"resourceUuid\":\"81b9430b-8abe-45d6-8bf9-f41a8f5c735f\",\n                    \"resourceCustomizationUuid\":\"a7baba5d-6ac3-42b5-b47d-070841303ab1\",\n                    \"parameters\":{\n                        \"locationConstraints\":[\n\n                        ],\n                        \"resources\":[\n\n                        ],\n                        \"requestInputs\":{\n\n                        }\n                    }\n                }\n            ],\n            \"requestInputs\":{\n                \"sdwanconnectivity0_name\":\"CMCCVPN\",\n                \"sdwanconnectivity0_topology\":\"hub-spoke\"\n            }\n        }\n    }\n}","relationship-list":{"relationship":[{"related-to":"sp-partner","relationship-label":"org.onap.relationships.inventory.PartOf","related-link":"/aai/v13/business/sp-partners/sp-partner/de888731-eac8-454c-bbb2-927a85ba2d1c","relationship-data":[{"relationship-key":"sp-partner.sp-partner-id","relationship-value":"de888731-eac8-454c-bbb2-927a85ba2d1c"}],"related-to-property":[{"property-key":"sp-partner.sp-partner-id","property-value":"de888731-eac8-454c-bbb2-927a85ba2d1c"}]}]}},{"service-instance-id":"fd0b9f0a-0d5c-4f69-a3dc-fb9cabde9db8","service-instance-name":"DcXichengQuBeijing","service-type":"E2E Service","service-role":"E2E Service","model-invariant-id":"499e5e60-c8b2-4ea6-8c4e-7739420673a9","model-version-id":"8ec97da1-1e0a-4198-9c9a-3da2c60d7974","resource-version":"1537867379064","selflink":"restconf/config/GENERIC-RESOURCE-API:services/service/289b87a5-72fe-4197-a307-6929c3831f82/service-data/service-topology/","input-parameters":"{\n    \"service\":{\n        \"name\":\"DcXichengQuBeijing\",\n        \"description\":\"SiteService\",\n        \"serviceInvariantUuid\":\"499e5e60-c8b2-4ea6-8c4e-7739420673a9\",\n        \"serviceUuid\":\"8ec97da1-1e0a-4198-9c9a-3da2c60d7974\",\n        \"globalSubscriberId\":\"demo\",\n        \"serviceType\":\"ccvpn\",\n        \"parameters\":{\n            \"locationConstraints\":[\n\n            ],\n            \"resources\":[\n                {\n                    \"resourceName\":\"SiteVF\",\n                    \"resourceInvariantUuid\":\"0c0e1cbe-6e01-4f9e-8c45-a9700ebc14df\",\n                    \"resourceUuid\":\"4ad2d390-5c51-45f5-9710-b467a4ec7a73\",\n                    \"resourceCustomizationUuid\":\"66590e07-0777-415c-af44-36347cf3ddd3\",\n                    \"parameters\":{\n                        \"locationConstraints\":[\n\n                        ],\n                        \"resources\":[\n\n                        ],\n                        \"requestInputs\":{\n\n                        }\n                    }\n                },\n                {\n                    \"resourceName\":\"mpls\",\n                    \"resourceInvariantUuid\":\"97a3e552-08c4-4697-aeeb-d8d3e09ce58e\",\n                    \"resourceUuid\":\"63d8e1af-32dc-4c71-891d-e3f7b6a976d2\",\n                    \"resourceCustomizationUuid\":\"205456e7-3dc0-40c4-8cb0-28e6c1877042\",\n                    \"parameters\":{\n                        \"locationConstraints\":[\n\n                        ],\n                        \"resources\":[\n\n                        ],\n                        \"requestInputs\":{\n\n                        }\n                    }\n                },\n                {\n                    \"resourceName\":\"deviceVF\",\n                    \"resourceInvariantUuid\":\"c726490a-0ce2-4bc7-abea-dade66bfb13d\",\n                    \"resourceUuid\":\"0e2de9d8-d76b-4134-b5f1-41e79056adbe\",\n                    \"resourceCustomizationUuid\":\"5bc1373e-9a36-4a00-8c62-784e0bc417ad\",\n                    \"parameters\":{\n                        \"locationConstraints\":[\n\n                        ],\n                        \"resources\":[\n\n                        ],\n                        \"requestInputs\":{\n\n                        }\n                    }\n                },\n                {\n                    \"resourceName\":\"sdwanvpnattachmentVF\",\n                    \"resourceInvariantUuid\":\"f714feec-1aef-4890-abba-f8f3a906935f\",\n                    \"resourceUuid\":\"709919b7-75fd-4e49-8398-67853323ff55\",\n                    \"resourceCustomizationUuid\":\"debd988f-fe04-4940-a5cb-37f61d84eab4\",\n                    \"parameters\":{\n                        \"locationConstraints\":[\n\n                        ],\n                        \"resources\":[\n\n                        ],\n                        \"requestInputs\":{\n\n                        }\n                    }\n                },\n                {\n                    \"resourceName\":\"internet\",\n                    \"resourceInvariantUuid\":\"97a3e552-08c4-4697-aeeb-d8d3e09ce58e\",\n                    \"resourceUuid\":\"63d8e1af-32dc-4c71-891d-e3f7b6a976d2\",\n                    \"resourceCustomizationUuid\":\"64b8e8ba-62b9-4db6-b420-1ca7067d63e0\",\n                    \"parameters\":{\n                        \"locationConstraints\":[\n\n                        ],\n                        \"resources\":[\n\n                        ],\n                        \"requestInputs\":{\n\n                        }\n                    }\n                },\n                {\n                    \"resourceName\":\"sotnvpnattachmentvF\",\n                    \"resourceInvariantUuid\":\"97c4a3c6-2943-41af-8717-2f3183f944be\",\n                    \"resourceUuid\":\"44b777ee-9793-465d-8053-d8e86d2e2362\",\n                    \"resourceCustomizationUuid\":\"37aeb073-c75d-4cf6-a7fa-a1af862ef58a\",\n                    \"parameters\":{\n                        \"locationConstraints\":[\n\n                        ],\n                        \"resources\":[\n\n                        ],\n                        \"requestInputs\":{\n\n                        }\n                    }\n                },\n                {\n                    \"resourceName\":\"SPPartnerVF\",\n                    \"resourceInvariantUuid\":\"072f9238-15b0-4bc5-a5f5-f18548739470\",\n                    \"resourceUuid\":\"81b9430b-8abe-45d6-8bf9-f41a8f5c735f\",\n                    \"resourceCustomizationUuid\":\"cd0b4b9c-66c6-49c5-b346-7580e4b6c394\",\n                    \"parameters\":{\n                        \"locationConstraints\":[\n\n                        ],\n                        \"resources\":[\n\n                        ],\n                        \"requestInputs\":{\n\n                        }\n                    }\n                }\n            ],\n            \"requestInputs\":{\n                \"devicevf_device_class\":\"PNF\",\n                \"devicevf_device_esn\":\"2102351BTJ10HB000075\",\n                \"devicevf_device_name\":\"50.47\",\n                \"devicevf_device_systemIp\":\"192.168.1.47\",\n                \"devicevf_device_type\":\"AR161EW\",\n                \"devicevf_device_vendor\":\"huawei\",\n                \"devicevf_device_version\":\"1.0\",\n                \"internet_sitewanport_description\":\"internet\",\n                \"internet_sitewanport_deviceName\":\"50.47\",\n                \"internet_sitewanport_inputBandwidth\":\"100\",\n                \"internet_sitewanport_ipAddress\":\"100.2.30.9\",\n                \"internet_sitewanport_name\":\"internet\",\n                \"internet_sitewanport_outputBandwidth\":\"100\",\n                \"internet_sitewanport_portNumber\":\"0/0/2\",\n                \"internet_sitewanport_portType\":\"GE\",\n                \"internet_sitewanport_providerIpAddress\":\"100.2.30.10\",\n                \"internet_sitewanport_transportNetworkName\":\"internet\",\n                \"mpls_sitewanport_description\":\"mpls\",\n                \"mpls_sitewanport_deviceName\":\"50.47\",\n                \"mpls_sitewanport_inputBandwidth\":\"100\",\n                \"mpls_sitewanport_ipAddress\":\"10.2.30.7\",\n                \"mpls_sitewanport_name\":\"mpls\",\n                \"mpls_sitewanport_outputBandwidth\":\"100\",\n                \"mpls_sitewanport_portNumber\":\"0/0/1\",\n                \"mpls_sitewanport_portType\":\"GE\",\n                \"mpls_sitewanport_providerIpAddress\":\"10.2.30.8\",\n                \"mpls_sitewanport_transportNetworkName\":\"internet\",\n                \"sdwanvpnattachmentvf_sdwancondition_role\":\"spoke\",\n                \"sdwanvpnattachmentvf_sdwancondition_sdwanVpnName\":\"SDWANVPNInfra\",\n                \"sitevf_site_address\":\"Chuangxin Building,Tianningsi,Xicheng,Beijing\",\n                \"sitevf_site_controlPoint\":\"CMCC_VCPE\",\n                \"sitevf_site_description\":\"CMCC_vGW\",\n                \"sitevf_site_emails\":\"\",\n                \"sitevf_site_latitude\":\"\",\n                \"sitevf_site_longitude\":\"\",\n                \"sitevf_site_name\":\"DcXichengQuBeijing\",\n                \"sitevf_site_postcode\":\"100095\",\n                \"sitevf_site_role\":\"sd-wan-edge\",\n                \"sitevf_site_type\":\"single-gateway\",\n                \"sotnvpnattachmentvf_sotncondition_clientSignal\":\"\",\n                \"sotnvpnattachmentvf_sotncondition_cVLAN\":\"\",\n                \"sotnvpnattachmentvf_sotncondition_sotnVpnName\":\"SOTN L2\"\n            }\n        }\n    }\n}","relationship-list":{"relationship":[{"related-to":"sp-partner","relationship-label":"org.onap.relationships.inventory.PartOf","related-link":"/aai/v13/business/sp-partners/sp-partner/289b87a5-72fe-4197-a307-6929c3831f82","relationship-data":[{"relationship-key":"sp-partner.sp-partner-id","relationship-value":"289b87a5-72fe-4197-a307-6929c3831f82"}],"related-to-property":[{"property-key":"sp-partner.sp-partner-id","property-value":"289b87a5-72fe-4197-a307-6929c3831f82"}]}]}},{"service-instance-id":"2d55a540-f6d3-4108-9bb4-290574b87a6c","service-instance-name":"siteLondon","service-type":"E2E Service","service-role":"E2E Service","model-invariant-id":"499e5e60-c8b2-4ea6-8c4e-7739420673a9","model-version-id":"8ec97da1-1e0a-4198-9c9a-3da2c60d7974","resource-version":"1537866122803","input-parameters":"{\n    \"service\":{\n        \"name\":\"siteLondon\",\n        \"description\":\"SiteService\",\n        \"serviceInvariantUuid\":\"499e5e60-c8b2-4ea6-8c4e-7739420673a9\",\n        \"serviceUuid\":\"8ec97da1-1e0a-4198-9c9a-3da2c60d7974\",\n        \"globalSubscriberId\":\"demo\",\n        \"serviceType\":\"ccvpn\",\n        \"parameters\":{\n            \"locationConstraints\":[\n\n            ],\n            \"resources\":[\n                {\n                    \"resourceName\":\"SiteVF\",\n                    \"resourceInvariantUuid\":\"0c0e1cbe-6e01-4f9e-8c45-a9700ebc14df\",\n                    \"resourceUuid\":\"4ad2d390-5c51-45f5-9710-b467a4ec7a73\",\n                    \"resourceCustomizationUuid\":\"66590e07-0777-415c-af44-36347cf3ddd3\",\n                    \"parameters\":{\n                        \"locationConstraints\":[\n\n                        ],\n                        \"resources\":[\n\n                        ],\n                        \"requestInputs\":{\n\n                        }\n                    }\n                },\n                {\n                    \"resourceName\":\"mpls\",\n                    \"resourceInvariantUuid\":\"97a3e552-08c4-4697-aeeb-d8d3e09ce58e\",\n                    \"resourceUuid\":\"63d8e1af-32dc-4c71-891d-e3f7b6a976d2\",\n                    \"resourceCustomizationUuid\":\"205456e7-3dc0-40c4-8cb0-28e6c1877042\",\n                    \"parameters\":{\n                        \"locationConstraints\":[\n\n                        ],\n                        \"resources\":[\n\n                        ],\n                        \"requestInputs\":{\n\n                        }\n                    }\n                },\n                {\n                    \"resourceName\":\"deviceVF\",\n                    \"resourceInvariantUuid\":\"c726490a-0ce2-4bc7-abea-dade66bfb13d\",\n                    \"resourceUuid\":\"0e2de9d8-d76b-4134-b5f1-41e79056adbe\",\n                    \"resourceCustomizationUuid\":\"5bc1373e-9a36-4a00-8c62-784e0bc417ad\",\n                    \"parameters\":{\n                        \"locationConstraints\":[\n\n                        ],\n                        \"resources\":[\n\n                        ],\n                        \"requestInputs\":{\n\n                        }\n                    }\n                },\n                {\n                    \"resourceName\":\"sdwanvpnattachmentVF\",\n                    \"resourceInvariantUuid\":\"f714feec-1aef-4890-abba-f8f3a906935f\",\n                    \"resourceUuid\":\"709919b7-75fd-4e49-8398-67853323ff55\",\n                    \"resourceCustomizationUuid\":\"debd988f-fe04-4940-a5cb-37f61d84eab4\",\n                    \"parameters\":{\n                        \"locationConstraints\":[\n\n                        ],\n                        \"resources\":[\n\n                        ],\n                        \"requestInputs\":{\n\n                        }\n                    }\n                },\n                {\n                    \"resourceName\":\"internet\",\n                    \"resourceInvariantUuid\":\"97a3e552-08c4-4697-aeeb-d8d3e09ce58e\",\n                    \"resourceUuid\":\"63d8e1af-32dc-4c71-891d-e3f7b6a976d2\",\n                    \"resourceCustomizationUuid\":\"64b8e8ba-62b9-4db6-b420-1ca7067d63e0\",\n                    \"parameters\":{\n                        \"locationConstraints\":[\n\n                        ],\n                        \"resources\":[\n\n                        ],\n                        \"requestInputs\":{\n\n                        }\n                    }\n                },\n                {\n                    \"resourceName\":\"sotnvpnattachmentvF\",\n                    \"resourceInvariantUuid\":\"97c4a3c6-2943-41af-8717-2f3183f944be\",\n                    \"resourceUuid\":\"44b777ee-9793-465d-8053-d8e86d2e2362\",\n                    \"resourceCustomizationUuid\":\"37aeb073-c75d-4cf6-a7fa-a1af862ef58a\",\n                    \"parameters\":{\n                        \"locationConstraints\":[\n\n                        ],\n                        \"resources\":[\n\n                        ],\n                        \"requestInputs\":{\n\n                        }\n                    }\n                },\n                {\n                    \"resourceName\":\"SPPartnerVF\",\n                    \"resourceInvariantUuid\":\"072f9238-15b0-4bc5-a5f5-f18548739470\",\n                    \"resourceUuid\":\"81b9430b-8abe-45d6-8bf9-f41a8f5c735f\",\n                    \"resourceCustomizationUuid\":\"cd0b4b9c-66c6-49c5-b346-7580e4b6c394\",\n                    \"parameters\":{\n                        \"locationConstraints\":[\n\n                        ],\n                        \"resources\":[\n\n                        ],\n                        \"requestInputs\":{\n\n                        }\n                    }\n                }\n            ],\n            \"requestInputs\":{\n                \"devicevf_device_class\":\"PNF\",\n                \"devicevf_device_esn\":\"2102351BTJ10HB000075\",\n                \"devicevf_device_name\":\"50.47\",\n                \"devicevf_device_systemIp\":\"192.168.1.47\",\n                \"devicevf_device_type\":\"AR161EW\",\n                \"devicevf_device_vendor\":\"huawei\",\n                \"devicevf_device_version\":\"1.0\",\n                \"internet_sitewanport_description\":\"internet\",\n                \"internet_sitewanport_deviceName\":\"50.47\",\n                \"internet_sitewanport_inputBandwidth\":\"100\",\n                \"internet_sitewanport_ipAddress\":\"100.2.30.9\",\n                \"internet_sitewanport_name\":\"internet\",\n                \"internet_sitewanport_outputBandwidth\":\"100\",\n                \"internet_sitewanport_portNumber\":\"0/0/2\",\n                \"internet_sitewanport_portType\":\"GE\",\n                \"internet_sitewanport_providerIpAddress\":\"100.2.30.10\",\n                \"internet_sitewanport_transportNetworkName\":\"internet\",\n                \"mpls_sitewanport_description\":\"mpls\",\n                \"mpls_sitewanport_deviceName\":\"50.47\",\n                \"mpls_sitewanport_inputBandwidth\":\"100\",\n                \"mpls_sitewanport_ipAddress\":\"10.2.30.7\",\n                \"mpls_sitewanport_name\":\"mpls\",\n                \"mpls_sitewanport_outputBandwidth\":\"100\",\n                \"mpls_sitewanport_portNumber\":\"0/0/1\",\n                \"mpls_sitewanport_portType\":\"GE\",\n                \"mpls_sitewanport_providerIpAddress\":\"10.2.30.8\",\n                \"mpls_sitewanport_transportNetworkName\":\"internet\",\n                \"sdwanvpnattachmentvf_sdwancondition_role\":\"spoke\",\n                \"sdwanvpnattachmentvf_sdwancondition_sdwanVpnName\":\"SDWANVPNInfra-2\",\n                \"sitevf_site_address\":\"VDF International Data Center,Hongkong\",\n                \"sitevf_site_controlPoint\":\"VDF_VCPE\",\n                \"sitevf_site_description\":\"VDF_vGW\",\n                \"sitevf_site_emails\":\"\",\n                \"sitevf_site_latitude\":\"\",\n                \"sitevf_site_longitude\":\"\",\n                \"sitevf_site_name\":\"siteLondon\",\n                \"sitevf_site_postcode\":\"999077\",\n                \"sitevf_site_role\":\"sd-wan-edge\",\n                \"sitevf_site_type\":\"single-gateway\",\n                \"sotnvpnattachmentvf_sotncondition_clientSignal\":\"\",\n                \"sotnvpnattachmentvf_sotncondition_cVLAN\":\"\",\n                \"sotnvpnattachmentvf_sotncondition_sotnVpnName\":\"SOTN L2\"\n            }\n        }\n    }\n}","relationship-list":{"relationship":[{"related-to":"wan-port-config","relationship-label":"org.onap.relationships.inventory.PartOf","related-link":"/aai/v13/network/wan-port-configs/wan-port-config/52ae7944-12b3-4766-848e-e43088947af9","relationship-data":[{"relationship-key":"wan-port-config.wan-port-config-id","relationship-value":"52ae7944-12b3-4766-848e-e43088947af9"}],"related-to-property":[{"property-key":"wan-port-config.wan-port-config-name","property-value":"intenet"}]},{"related-to":"site-resource","relationship-label":"org.onap.relationships.inventory.PartOf","related-link":"/aai/v13/network/site-resources/site-resource/a22193fc-d1b5-41a7-9033-14339838b0c5","relationship-data":[{"relationship-key":"site-resource.site-resource-id","relationship-value":"a22193fc-d1b5-41a7-9033-14339838b0c5"}],"related-to-property":[{"property-key":"site-resource.site-resource-name","property-value":"travelSite"}]},{"related-to":"wan-port-config","relationship-label":"org.onap.relationships.inventory.PartOf","related-link":"/aai/v13/network/wan-port-configs/wan-port-config/9fc7c231-1b71-49e6-8390-e92b707e7615","relationship-data":[{"relationship-key":"wan-port-config.wan-port-config-id","relationship-value":"9fc7c231-1b71-49e6-8390-e92b707e7615"}],"related-to-property":[{"property-key":"wan-port-config.wan-port-config-name","property-value":"mpls"}]},{"related-to":"device","relationship-label":"org.onap.relationships.inventory.PartOf","related-link":"/aai/v13/network/devices/device/f0cf1e06-7be8-4602-83cb-60d87d8e7ef3","relationship-data":[{"relationship-key":"device.device-id","relationship-value":"f0cf1e06-7be8-4602-83cb-60d87d8e7ef3"}],"related-to-property":[{"property-key":"device.device-name","property-value":"CentSpokeDevice"}]},{"related-to":"sp-partner","relationship-label":"org.onap.relationships.inventory.PartOf","related-link":"/aai/v13/business/sp-partners/sp-partner/3addd6b9-b05f-4841-881c-1ce2c753513f","relationship-data":[{"relationship-key":"sp-partner.sp-partner-id","relationship-value":"3addd6b9-b05f-4841-881c-1ce2c753513f"}],"related-to-property":[{"property-key":"sp-partner.sp-partner-id","property-value":"3addd6b9-b05f-4841-881c-1ce2c753513f"}]},{"related-to":"allotted-resource","relationship-label":"org.onap.relationships.inventory.Uses","related-link":"/aai/v13/business/customers/customer/demo/service-subscriptions/service-subscription/ccvpn/service-instances/service-instance/0ea94797-3772-40ff-b6fb-69f06c533be3/allotted-resources/allotted-resource/f1523ca9-6b56-482e-b3a4-a2f8dcbfba12","relationship-data":[{"relationship-key":"customer.global-customer-id","relationship-value":"demo"},{"relationship-key":"service-subscription.service-type","relationship-value":"ccvpn"},{"relationship-key":"service-instance.service-instance-id","relationship-value":"0ea94797-3772-40ff-b6fb-69f06c533be3"},{"relationship-key":"allotted-resource.id","relationship-value":"f1523ca9-6b56-482e-b3a4-a2f8dcbfba12"}],"related-to-property":[{"property-key":"allotted-resource.description","property-value":"sdwan-attachment"},{"property-key":"allotted-resource.allotted-resource-name","property-value":"sdwan ar"}]},{"related-to":"allotted-resource","relationship-label":"org.onap.relationships.inventory.Uses","related-link":"/aai/v13/business/customers/customer/demo/service-subscriptions/service-subscription/ccvpn/service-instances/service-instance/8e07f832-3f50-4657-9b44-010049e8b488/allotted-resources/allotted-resource/d1a6b573-0595-4468-bab9-02465c295618","relationship-data":[{"relationship-key":"customer.global-customer-id","relationship-value":"demo"},{"relationship-key":"service-subscription.service-type","relationship-value":"ccvpn"},{"relationship-key":"service-instance.service-instance-id","relationship-value":"8e07f832-3f50-4657-9b44-010049e8b488"},{"relationship-key":"allotted-resource.id","relationship-value":"d1a6b573-0595-4468-bab9-02465c295618"}],"related-to-property":[{"property-key":"allotted-resource.description","property-value":"sotn attachment"},{"property-key":"allotted-resource.allotted-resource-name","property-value":"sotn ar"}]}]}}]}
\ No newline at end of file
diff --git a/usecaseui-portal/src/assets/json/status2.json b/usecaseui-portal/src/assets/json/status2.json
deleted file mode 100644 (file)
index 05e0a4f..0000000
+++ /dev/null
@@ -1 +0,0 @@
-"fail"
index a2d2186..efc279d 100644 (file)
@@ -15,6 +15,7 @@
 -->
 <!doctype html>
 <html lang="en">
+
 <head>
   <meta charset="utf-8">
   <title>UUI</title>
@@ -23,7 +24,9 @@
   <meta name="viewport" content="width=device-width, initial-scale=1">
   <link rel="icon" type="image/x-icon" href="favicon.ico">
 </head>
+
 <body>
   <app-root></app-root>
 </body>
-</html>
+
+</html>
\ No newline at end of file
index 4dcc0f3..63c911e 100644 (file)
@@ -465,7 +465,7 @@ nz-modal .serviceCreationModel.ant-modal,nz-modal .deleteModel.ant-modal, nz-mod
           }
           .ant-table-placeholder{
             margin-top: 30px;
-            background:url("./assets/images/noDatalist.png") no-repeat 50% 0;
+            background:url("assets/images/noDatalist.png") no-repeat 50% 0;
             span{
               display: inline-block;
               padding-top: 60px;
@@ -515,7 +515,7 @@ nz-modal .serviceCreationModel.ant-modal,nz-modal .deleteModel.ant-modal, nz-mod
     .ant-table-placeholder{
       margin-top: 30px;
       font-size: 16px;
-      background:url("./assets/images/noDatalist.png") no-repeat 50% 0;
+      background:url("assets/images/noDatalist.png") no-repeat 50% 0;
       span {
         display: inline-block;
         padding-top: 50px;