From fbfe2f70e4ba0e67fe1242624c71a1afdee4d813 Mon Sep 17 00:00:00 2001 From: Hunlongyu Date: Mon, 16 Nov 2020 17:12:29 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E6=9E=84=E9=A1=B9=E7=9B=AE,=20?= =?UTF-8?q?=E7=A7=BB=E9=99=A4=E5=86=97=E4=BD=99=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- App.vue | 25 +- README.md | 1 - common/classify.data.js | 1087 - common/demo.scss | 86 - common/http.api.js | 22 - common/http.interceptor.js | 46 - common/index.list.js | 585 - common/locales/en.js | 21 - common/locales/zh.js | 21 - common/vue-i18n.min.js | 6 - components/page-nav/page-nav.vue | 98 - i18n.zip | Bin 594534 -> 0 bytes main.js | 66 +- manifest.json | 100 +- node_modules/.bin/xml2js | 15 + node_modules/.bin/xml2js.cmd | 17 + node_modules/.bin/xml2js.ps1 | 18 + node_modules/axios/CHANGELOG.md | 662 + {uview-ui => node_modules/axios}/LICENSE | 12 +- node_modules/axios/README.md | 798 + node_modules/axios/UPGRADE_GUIDE.md | 162 + node_modules/axios/dist/axios.js | 1736 + node_modules/axios/dist/axios.map | 1 + node_modules/axios/dist/axios.min.js | 3 + node_modules/axios/dist/axios.min.map | 1 + node_modules/axios/index.d.ts | 160 + node_modules/axios/index.js | 1 + node_modules/axios/lib/adapters/README.md | 37 + node_modules/axios/lib/adapters/http.js | 287 + node_modules/axios/lib/adapters/xhr.js | 179 + node_modules/axios/lib/axios.js | 53 + node_modules/axios/lib/cancel/Cancel.js | 19 + node_modules/axios/lib/cancel/CancelToken.js | 57 + node_modules/axios/lib/cancel/isCancel.js | 5 + node_modules/axios/lib/core/Axios.js | 95 + .../axios/lib/core/InterceptorManager.js | 52 + node_modules/axios/lib/core/README.md | 7 + node_modules/axios/lib/core/buildFullPath.js | 20 + node_modules/axios/lib/core/createError.js | 18 + .../axios/lib/core/dispatchRequest.js | 79 + node_modules/axios/lib/core/enhanceError.js | 42 + node_modules/axios/lib/core/mergeConfig.js | 87 + node_modules/axios/lib/core/settle.js | 25 + node_modules/axios/lib/core/transformData.js | 20 + node_modules/axios/lib/defaults.js | 98 + node_modules/axios/lib/helpers/README.md | 7 + node_modules/axios/lib/helpers/bind.js | 11 + node_modules/axios/lib/helpers/buildURL.js | 70 + node_modules/axios/lib/helpers/combineURLs.js | 14 + node_modules/axios/lib/helpers/cookies.js | 53 + .../axios/lib/helpers/deprecatedMethod.js | 24 + .../axios/lib/helpers/isAbsoluteURL.js | 14 + .../axios/lib/helpers/isURLSameOrigin.js | 68 + .../axios/lib/helpers/normalizeHeaderName.js | 12 + .../axios/lib/helpers/parseHeaders.js | 53 + node_modules/axios/lib/helpers/spread.js | 27 + node_modules/axios/lib/utils.js | 351 + node_modules/axios/package.json | 114 + node_modules/fast-xml-parser/LICENSE | 23 + node_modules/fast-xml-parser/README.md | 350 + node_modules/fast-xml-parser/cli.js | 101 + node_modules/fast-xml-parser/package.json | 127 + node_modules/fast-xml-parser/src/json2xml.js | 268 + node_modules/fast-xml-parser/src/nimndata.js | 144 + node_modules/fast-xml-parser/src/node2json.js | 53 + .../fast-xml-parser/src/node2json_str.js | 63 + node_modules/fast-xml-parser/src/parser.d.ts | 72 + node_modules/fast-xml-parser/src/parser.js | 67 + node_modules/fast-xml-parser/src/read.js | 92 + node_modules/fast-xml-parser/src/util.js | 87 + node_modules/fast-xml-parser/src/validator.js | 396 + node_modules/fast-xml-parser/src/xmlNode.js | 17 + .../fast-xml-parser/src/xmlstr2xmlnode.js | 341 + .../fast-xml-parser/tasks/postinstall.js | 5 + node_modules/fast-xml-parser/yarn.lock | 4953 ++ .../{vue-i18n => follow-redirects}/LICENSE | 20 +- node_modules/follow-redirects/README.md | 148 + node_modules/follow-redirects/debug.js | 9 + node_modules/follow-redirects/http.js | 1 + node_modules/follow-redirects/https.js | 1 + node_modules/follow-redirects/index.js | 498 + node_modules/follow-redirects/package.json | 90 + LICENSE => node_modules/uview-ui/LICENSE | 0 {uview-ui => node_modules/uview-ui}/README.md | 0 .../u-action-sheet/u-action-sheet.vue | 0 .../components/u-alert-tips/u-alert-tips.vue | 0 .../u-avatar-cropper/u-avatar-cropper.vue | 0 .../components/u-avatar-cropper/weCropper.js | 0 .../components/u-avatar/u-avatar.vue | 0 .../components/u-back-top/u-back-top.vue | 0 .../uview-ui}/components/u-badge/u-badge.vue | 0 .../components/u-button/u-button.vue | 0 .../components/u-calendar/u-calendar.vue | 0 .../u-car-keyboard/u-car-keyboard.vue | 0 .../uview-ui}/components/u-card/u-card.vue | 0 .../components/u-cell-group/u-cell-group.vue | 0 .../components/u-cell-item/u-cell-item.vue | 0 .../u-checkbox-group/u-checkbox-group.vue | 0 .../components/u-checkbox/u-checkbox.vue | 0 .../u-circle-progress/u-circle-progress.vue | 0 .../uview-ui}/components/u-col/u-col.vue | 0 .../u-collapse-item/u-collapse-item.vue | 0 .../components/u-collapse/u-collapse.vue | 0 .../u-column-notice/u-column-notice.vue | 0 .../components/u-count-down/u-count-down.vue | 0 .../components/u-count-to/u-count-to.vue | 0 .../components/u-divider/u-divider.vue | 0 .../u-dropdown-item/u-dropdown-item.vue | 0 .../components/u-dropdown/u-dropdown.vue | 0 .../uview-ui}/components/u-empty/u-empty.vue | 0 .../uview-ui}/components/u-field/u-field.vue | 0 .../components/u-form-item/u-form-item.vue | 0 .../uview-ui}/components/u-form/u-form.vue | 0 .../u-full-screen/u-full-screen.vue | 0 .../uview-ui}/components/u-gap/u-gap.vue | 0 .../components/u-grid-item/u-grid-item.vue | 0 .../uview-ui}/components/u-grid/u-grid.vue | 0 .../uview-ui}/components/u-icon/u-icon.vue | 0 .../uview-ui}/components/u-image/u-image.vue | 0 .../u-index-anchor/u-index-anchor.vue | 0 .../components/u-index-list/u-index-list.vue | 0 .../uview-ui}/components/u-input/u-input.vue | 0 .../components/u-keyboard/u-keyboard.vue | 0 .../components/u-lazy-load/u-lazy-load.vue | 0 .../u-line-progress/u-line-progress.vue | 0 .../uview-ui}/components/u-line/u-line.vue | 0 .../uview-ui}/components/u-link/u-link.vue | 0 .../u-loading-page/u-loading-page.vue | 0 .../components/u-loading/u-loading.vue | 0 .../components/u-loadmore/u-loadmore.vue | 0 .../uview-ui}/components/u-mask/u-mask.vue | 0 .../u-message-input/u-message-input.vue | 0 .../uview-ui}/components/u-modal/u-modal.vue | 0 .../components/u-navbar/u-navbar.vue | 0 .../components/u-no-network/u-no-network.vue | 0 .../components/u-notice-bar/u-notice-bar.vue | 0 .../components/u-number-box/u-number-box.vue | 0 .../u-number-keyboard/u-number-keyboard.vue | 0 .../components/u-parse/libs/CssHandler.js | 0 .../components/u-parse/libs/MpHtmlParser.js | 0 .../components/u-parse/libs/config.js | 0 .../components/u-parse/libs/handler.wxs | 0 .../components/u-parse/libs/trees.vue | 0 .../uview-ui}/components/u-parse/u-parse.vue | 0 .../components/u-picker/u-picker.vue | 0 .../uview-ui}/components/u-popup/u-popup.vue | 0 .../u-radio-group/u-radio-group.vue | 0 .../uview-ui}/components/u-radio/u-radio.vue | 0 .../uview-ui}/components/u-rate/u-rate.vue | 0 .../components/u-read-more/u-read-more.vue | 0 .../components/u-row-notice/u-row-notice.vue | 0 .../uview-ui}/components/u-row/u-row.vue | 0 .../components/u-search/u-search.vue | 0 .../components/u-section/u-section.vue | 0 .../components/u-select/u-select.vue | 0 .../components/u-skeleton/u-skeleton.vue | 0 .../components/u-slider/u-slider.vue | 0 .../uview-ui}/components/u-steps/u-steps.vue | 0 .../components/u-sticky/u-sticky.vue | 0 .../components/u-subsection/u-subsection.vue | 0 .../u-swipe-action/u-swipe-action.vue | 0 .../components/u-swiper/u-swiper.vue | 0 .../components/u-switch/u-switch.vue | 0 .../components/u-tabbar/u-tabbar.vue | 0 .../uview-ui}/components/u-table/u-table.vue | 0 .../u-tabs-swiper/u-tabs-swiper.vue | 0 .../uview-ui}/components/u-tabs/u-tabs.vue | 0 .../uview-ui}/components/u-tag/u-tag.vue | 0 .../uview-ui}/components/u-td/u-td.vue | 0 .../uview-ui}/components/u-th/u-th.vue | 0 .../u-time-line-item/u-time-line-item.vue | 0 .../components/u-time-line/u-time-line.vue | 0 .../uview-ui}/components/u-toast/u-toast.vue | 0 .../components/u-top-tips/u-top-tips.vue | 0 .../uview-ui}/components/u-tr/u-tr.vue | 0 .../components/u-upload/u-upload.vue | 0 .../u-verification-code.vue | 0 .../components/u-waterfall/u-waterfall.vue | 0 .../uview-ui}/iconfont.css | 0 {uview-ui => node_modules/uview-ui}/index.js | 0 .../uview-ui}/index.scss | 0 .../uview-ui}/libs/config/config.js | 4 +- .../uview-ui}/libs/config/zIndex.js | 0 .../uview-ui}/libs/css/color.scss | 0 .../uview-ui}/libs/css/common.scss | 0 .../uview-ui}/libs/css/style.components.scss | 0 .../uview-ui}/libs/css/style.h5.scss | 0 .../uview-ui}/libs/css/style.mp.scss | 0 .../uview-ui}/libs/css/style.nvue.scss | 0 .../uview-ui}/libs/css/style.vue.scss | 0 .../uview-ui}/libs/function/$parent.js | 0 .../uview-ui}/libs/function/addUnit.js | 0 .../uview-ui}/libs/function/bem.js | 0 .../uview-ui}/libs/function/color.js | 0 .../uview-ui}/libs/function/colorGradient.js | 0 .../uview-ui}/libs/function/debounce.js | 0 .../uview-ui}/libs/function/deepClone.js | 0 .../uview-ui}/libs/function/deepMerge.js | 0 .../uview-ui}/libs/function/getParent.js | 0 .../uview-ui}/libs/function/guid.js | 0 .../uview-ui}/libs/function/md5.js | 0 .../uview-ui}/libs/function/queryParams.js | 0 .../uview-ui}/libs/function/random.js | 0 .../uview-ui}/libs/function/randomArray.js | 0 .../uview-ui}/libs/function/route.js | 26 +- .../uview-ui}/libs/function/sys.js | 0 .../uview-ui}/libs/function/test.js | 0 .../uview-ui}/libs/function/throttle.js | 0 .../uview-ui}/libs/function/timeFormat.js | 0 .../uview-ui}/libs/function/timeFrom.js | 0 .../uview-ui}/libs/function/toast.js | 0 .../uview-ui}/libs/function/trim.js | 0 .../uview-ui}/libs/function/type2icon.js | 0 .../uview-ui}/libs/mixin/mixin.js | 0 .../uview-ui}/libs/mixin/mpShare.js | 0 .../uview-ui}/libs/request/index.js | 0 .../uview-ui}/libs/store/index.js | 0 .../uview-ui}/libs/util/area.js | 0 .../uview-ui}/libs/util/async-validator.js | 0 .../uview-ui}/libs/util/city.js | 0 .../uview-ui}/libs/util/emitter.js | 0 .../uview-ui}/libs/util/province.js | 0 node_modules/uview-ui/package.json | 67 + .../uview-ui}/theme.scss | 0 node_modules/vue-i18n/CHANGELOG.md | 1631 - node_modules/vue-i18n/README.md | 73 - node_modules/vue-i18n/decls/i18n.js | 155 - node_modules/vue-i18n/decls/module.js | 30 - node_modules/vue-i18n/dist/vue-i18n.common.js | 2132 - .../vue-i18n/dist/vue-i18n.esm.browser.js | 2085 - .../vue-i18n/dist/vue-i18n.esm.browser.min.js | 1 - node_modules/vue-i18n/dist/vue-i18n.esm.js | 2130 - node_modules/vue-i18n/dist/vue-i18n.js | 2138 - node_modules/vue-i18n/dist/vue-i18n.min.js | 6 - node_modules/vue-i18n/package.json | 174 - .../vue-i18n/src/components/interpolation.js | 101 - .../vue-i18n/src/components/number.js | 70 - node_modules/vue-i18n/src/directive.js | 112 - node_modules/vue-i18n/src/extend.js | 33 - node_modules/vue-i18n/src/format.js | 114 - node_modules/vue-i18n/src/index.js | 1049 - node_modules/vue-i18n/src/install.js | 40 - node_modules/vue-i18n/src/mixin.js | 139 - node_modules/vue-i18n/src/path.js | 302 - node_modules/vue-i18n/src/util.js | 165 - node_modules/vue-i18n/types/index.d.ts | 269 - node_modules/vue-i18n/vetur/attributes.json | 34 - node_modules/vue-i18n/vetur/tags.json | 20 - package-lock.json | 28 +- package.json | 23 +- pages.json | 941 +- pages/componentsA/avatar/index.vue | 90 - pages/componentsA/avatarCropper/index.vue | 110 - pages/componentsA/backTop/index.vue | 105 - pages/componentsA/calendar/index.vue | 111 - pages/componentsA/empty/index.vue | 115 - pages/componentsA/field/index.vue | 103 - pages/componentsA/form/index.vue | 454 - pages/componentsA/fullScreen/index.vue | 49 - pages/componentsA/icon/index.vue | 652 - pages/componentsA/indexList/index.vue | 43 - pages/componentsA/keyboard/index.vue | 113 - pages/componentsA/lazyLoad/index.vue | 253 - pages/componentsA/modal/index.vue | 91 - pages/componentsA/navbar/index.vue | 258 - pages/componentsA/noNetwork/index.vue | 51 - pages/componentsA/parse/index.vue | 70 - pages/componentsA/select/index.vue | 211 - pages/componentsA/slider/index.vue | 127 - pages/componentsA/tabs/index.vue | 147 - pages/componentsA/tag/index.vue | 91 - pages/componentsA/test/index.vue | 90 - pages/componentsA/timeLine/index.vue | 144 - pages/componentsA/toast/index.vue | 83 - pages/componentsA/topTips/index.vue | 57 - pages/componentsA/verificationCode/index.vue | 98 - pages/componentsB/card/index.vue | 106 - pages/componentsB/checkbox/index.vue | 161 - pages/componentsB/divider/index.vue | 81 - pages/componentsB/dropdown/index.vue | 167 - pages/componentsB/image/index.vue | 96 - pages/componentsB/line/index.vue | 68 - pages/componentsB/loading/index.vue | 77 - pages/componentsB/noticeBar/index.vue | 144 - pages/componentsB/picker/index.vue | 199 - pages/componentsB/radio/index.vue | 142 - pages/componentsB/rate/index.vue | 123 - pages/componentsB/readMore/index.vue | 67 - pages/componentsB/search/index.vue | 96 - pages/componentsB/skeleton/index.vue | 128 - pages/componentsB/steps/index.vue | 77 - pages/componentsB/sticky/index.vue | 87 - pages/componentsB/swipeAction/index.vue | 153 - pages/componentsB/swiper/index.vue | 89 - pages/componentsB/switch/index.vue | 113 - pages/componentsB/tabbar/index.vue | 133 - pages/componentsB/table/index.vue | 83 - pages/componentsB/upload/index.vue | 224 - pages/componentsB/waterfall/index.vue | 224 - pages/componentsC/actionSheet/index.vue | 82 - pages/componentsC/alertTips/index.vue | 90 - pages/componentsC/badge/index.vue | 83 - pages/componentsC/button/index.vue | 121 - pages/componentsC/cell/index.vue | 113 - pages/componentsC/circleProgress/index.vue | 65 - pages/componentsC/collapse/index.vue | 142 - pages/componentsC/color/index.vue | 364 - pages/componentsC/countDown/index.vue | 100 - pages/componentsC/countTo/index.vue | 132 - pages/componentsC/gap/index.vue | 63 - pages/componentsC/grid/index.vue | 180 - pages/componentsC/layout/index.vue | 145 - pages/componentsC/link/index.vue | 54 - pages/componentsC/loadmore/index.vue | 96 - pages/componentsC/mask/index.vue | 89 - pages/componentsC/messageInput/index.vue | 97 - pages/componentsC/numberBox/index.vue | 77 - pages/componentsC/popup/index.vue | 103 - pages/componentsC/progress/index.vue | 102 - pages/componentsC/section/index.vue | 71 - pages/componentsC/subsection/index.vue | 88 - pages/componentsC/test/index.vue | 3 - pages/detail/detail.vue | 149 +- pages/example/components.config.js | 389 - pages/example/components.vue | 73 - pages/example/js.config.js | 120 - pages/example/js.vue | 69 - pages/example/template.config.js | 78 - pages/example/template.vue | 69 - pages/film/film.vue | 9 +- pages/index/index.vue | 52 + pages/library/color/index.vue | 54 - pages/library/colorSwitch/index.vue | 62 - pages/library/debounce/index.vue | 94 - pages/library/deepClone/index.vue | 37 - pages/library/deepMerge/index.vue | 74 - pages/library/getRect/index.vue | 98 - pages/library/globalVariable/globalData.vue | 49 - pages/library/globalVariable/index.vue | 82 - pages/library/globalVariable/prototype.vue | 48 - pages/library/globalVariable/vuex.vue | 40 - pages/library/guid/index.vue | 66 - pages/library/http/index.vue | 61 - pages/library/md5/index.vue | 46 - pages/library/mpShare/index.vue | 19 - pages/library/queryParams/index.vue | 53 - pages/library/random/index.vue | 60 - pages/library/randomArray/index.vue | 47 - pages/library/route/index.vue | 86 - pages/library/route/routeTo.vue | 51 - pages/library/test/index.vue | 96 - pages/library/timeFormat/index.vue | 58 - pages/library/timeFrom/index.vue | 62 - pages/library/trim/index.vue | 62 - pages/play/play.vue | 67 + pages/player/player.vue | 22 - pages/template/address/addSite.vue | 173 - pages/template/address/index.vue | 139 - pages/template/citySelect/index.vue | 48 - pages/template/citySelect/u-city-select.vue | 231 - pages/template/comment/index.vue | 207 - pages/template/comment/reply.vue | 228 - pages/template/coupon/index.vue | 374 - pages/template/douyin/index.nvue | 11 - pages/template/keyboardPay/index.vue | 113 - pages/template/login/code.vue | 112 - pages/template/login/index.vue | 130 - pages/template/mallMenu/index1.vue | 206 - pages/template/mallMenu/index2.vue | 291 - pages/template/order/index.vue | 506 - pages/template/submitBar/index.vue | 73 - pages/template/wxCenter/index.vue | 82 - static/common/js/touch-emulator.js | 363 - static/uview/common/favicon.ico | Bin 4286 -> 0 bytes static/uview/common/logo.png | Bin 15558 -> 0 bytes static/uview/example/component.png | Bin 3074 -> 0 bytes static/uview/example/component_select.png | Bin 1521 -> 0 bytes static/uview/example/js.png | Bin 4236 -> 0 bytes static/uview/example/js_bak.png | Bin 3212 -> 0 bytes static/uview/example/js_select.png | Bin 4278 -> 0 bytes static/uview/example/js_select_bak.png | Bin 2248 -> 0 bytes static/uview/example/min_button.png | Bin 2962 -> 0 bytes static/uview/example/min_button_select.png | Bin 2936 -> 0 bytes static/uview/example/template.png | Bin 4097 -> 0 bytes static/uview/example/template_select.png | Bin 4641 -> 0 bytes store/$u.mixin.js | 27 - store/index.js | 85 - template.h5.html | 42 - uni.scss | 8 +- .../dev/.automator/app-plus/.automator.json | 0 .../dev/app-plus/__uniappchooselocation.js | 1 - unpackage/dist/dev/app-plus/__uniappes6.js | 1 - .../dist/dev/app-plus/__uniappopenlocation.js | 1 - unpackage/dist/dev/app-plus/__uniapppicker.js | 1 - unpackage/dist/dev/app-plus/__uniappquill.js | 8 - .../dev/app-plus/__uniappquillimageresize.js | 1 - unpackage/dist/dev/app-plus/__uniappscan.js | 1 - .../dist/dev/app-plus/__uniappsuccess.png | Bin 2021 -> 0 bytes unpackage/dist/dev/app-plus/__uniappview.html | 25 - .../dist/dev/app-plus/app-config-service.js | 8 - unpackage/dist/dev/app-plus/app-config.js | 154 - unpackage/dist/dev/app-plus/app-service.js | 21264 ------ unpackage/dist/dev/app-plus/app-view.js | 60545 ---------------- unpackage/dist/dev/app-plus/manifest.json | 1 - .../pages/componentsA/app-sub-service.js | 6471 -- .../pages/componentsB/app-sub-service.js | 6221 -- .../pages/componentsC/app-sub-service.js | 5966 -- .../app-plus/pages/library/app-sub-service.js | 3944 - .../pages/template/app-sub-service.js | 5326 -- .../static/common/js/touch-emulator.js | 363 - .../app-plus/static/uview/common/favicon.ico | Bin 4286 -> 0 bytes .../dev/app-plus/static/uview/common/logo.png | Bin 15558 -> 0 bytes .../static/uview/example/component.png | Bin 3074 -> 0 bytes .../static/uview/example/component_select.png | Bin 1521 -> 0 bytes .../dev/app-plus/static/uview/example/js.png | Bin 4236 -> 0 bytes .../app-plus/static/uview/example/js_bak.png | Bin 3212 -> 0 bytes .../static/uview/example/js_select.png | Bin 4278 -> 0 bytes .../static/uview/example/js_select_bak.png | Bin 2248 -> 0 bytes .../static/uview/example/min_button.png | Bin 2962 -> 0 bytes .../uview/example/min_button_select.png | Bin 2936 -> 0 bytes .../static/uview/example/template.png | Bin 4097 -> 0 bytes .../static/uview/example/template_select.png | Bin 4641 -> 0 bytes unpackage/dist/dev/app-plus/view.css | 1 - unpackage/dist/dev/app-plus/view.umd.min.js | 6 - unpackage/res/icons/1024x1024.png | Bin 0 -> 197579 bytes unpackage/res/icons/120x120.png | Bin 0 -> 9303 bytes unpackage/res/icons/144x144.png | Bin 0 -> 11537 bytes unpackage/res/icons/152x152.png | Bin 0 -> 12356 bytes unpackage/res/icons/167x167.png | Bin 0 -> 13893 bytes unpackage/res/icons/180x180.png | Bin 0 -> 15427 bytes unpackage/res/icons/192x192.png | Bin 0 -> 16229 bytes unpackage/res/icons/20x20.png | Bin 0 -> 1138 bytes unpackage/res/icons/29x29.png | Bin 0 -> 1801 bytes unpackage/res/icons/40x40.png | Bin 0 -> 2608 bytes unpackage/res/icons/58x58.png | Bin 0 -> 3976 bytes unpackage/res/icons/60x60.png | Bin 0 -> 4135 bytes unpackage/res/icons/72x72.png | Bin 0 -> 5146 bytes unpackage/res/icons/76x76.png | Bin 0 -> 5396 bytes unpackage/res/icons/80x80.png | Bin 0 -> 5840 bytes unpackage/res/icons/87x87.png | Bin 0 -> 6338 bytes unpackage/res/icons/96x96.png | Bin 0 -> 6990 bytes uview-ui/package.json | 39 - vue.config.js | 10 - 443 files changed, 13942 insertions(+), 141147 deletions(-) delete mode 100644 README.md delete mode 100644 common/classify.data.js delete mode 100644 common/demo.scss delete mode 100644 common/http.api.js delete mode 100644 common/http.interceptor.js delete mode 100644 common/index.list.js delete mode 100644 common/locales/en.js delete mode 100644 common/locales/zh.js delete mode 100644 common/vue-i18n.min.js delete mode 100644 components/page-nav/page-nav.vue delete mode 100644 i18n.zip create mode 100644 node_modules/.bin/xml2js create mode 100644 node_modules/.bin/xml2js.cmd create mode 100644 node_modules/.bin/xml2js.ps1 create mode 100644 node_modules/axios/CHANGELOG.md rename {uview-ui => node_modules/axios}/LICENSE (87%) create mode 100644 node_modules/axios/README.md create mode 100644 node_modules/axios/UPGRADE_GUIDE.md create mode 100644 node_modules/axios/dist/axios.js create mode 100644 node_modules/axios/dist/axios.map create mode 100644 node_modules/axios/dist/axios.min.js create mode 100644 node_modules/axios/dist/axios.min.map create mode 100644 node_modules/axios/index.d.ts create mode 100644 node_modules/axios/index.js create mode 100644 node_modules/axios/lib/adapters/README.md create mode 100644 node_modules/axios/lib/adapters/http.js create mode 100644 node_modules/axios/lib/adapters/xhr.js create mode 100644 node_modules/axios/lib/axios.js create mode 100644 node_modules/axios/lib/cancel/Cancel.js create mode 100644 node_modules/axios/lib/cancel/CancelToken.js create mode 100644 node_modules/axios/lib/cancel/isCancel.js create mode 100644 node_modules/axios/lib/core/Axios.js create mode 100644 node_modules/axios/lib/core/InterceptorManager.js create mode 100644 node_modules/axios/lib/core/README.md create mode 100644 node_modules/axios/lib/core/buildFullPath.js create mode 100644 node_modules/axios/lib/core/createError.js create mode 100644 node_modules/axios/lib/core/dispatchRequest.js create mode 100644 node_modules/axios/lib/core/enhanceError.js create mode 100644 node_modules/axios/lib/core/mergeConfig.js create mode 100644 node_modules/axios/lib/core/settle.js create mode 100644 node_modules/axios/lib/core/transformData.js create mode 100644 node_modules/axios/lib/defaults.js create mode 100644 node_modules/axios/lib/helpers/README.md create mode 100644 node_modules/axios/lib/helpers/bind.js create mode 100644 node_modules/axios/lib/helpers/buildURL.js create mode 100644 node_modules/axios/lib/helpers/combineURLs.js create mode 100644 node_modules/axios/lib/helpers/cookies.js create mode 100644 node_modules/axios/lib/helpers/deprecatedMethod.js create mode 100644 node_modules/axios/lib/helpers/isAbsoluteURL.js create mode 100644 node_modules/axios/lib/helpers/isURLSameOrigin.js create mode 100644 node_modules/axios/lib/helpers/normalizeHeaderName.js create mode 100644 node_modules/axios/lib/helpers/parseHeaders.js create mode 100644 node_modules/axios/lib/helpers/spread.js create mode 100644 node_modules/axios/lib/utils.js create mode 100644 node_modules/axios/package.json create mode 100644 node_modules/fast-xml-parser/LICENSE create mode 100644 node_modules/fast-xml-parser/README.md create mode 100644 node_modules/fast-xml-parser/cli.js create mode 100644 node_modules/fast-xml-parser/package.json create mode 100644 node_modules/fast-xml-parser/src/json2xml.js create mode 100644 node_modules/fast-xml-parser/src/nimndata.js create mode 100644 node_modules/fast-xml-parser/src/node2json.js create mode 100644 node_modules/fast-xml-parser/src/node2json_str.js create mode 100644 node_modules/fast-xml-parser/src/parser.d.ts create mode 100644 node_modules/fast-xml-parser/src/parser.js create mode 100644 node_modules/fast-xml-parser/src/read.js create mode 100644 node_modules/fast-xml-parser/src/util.js create mode 100644 node_modules/fast-xml-parser/src/validator.js create mode 100644 node_modules/fast-xml-parser/src/xmlNode.js create mode 100644 node_modules/fast-xml-parser/src/xmlstr2xmlnode.js create mode 100644 node_modules/fast-xml-parser/tasks/postinstall.js create mode 100644 node_modules/fast-xml-parser/yarn.lock rename node_modules/{vue-i18n => follow-redirects}/LICENSE (50%) create mode 100644 node_modules/follow-redirects/README.md create mode 100644 node_modules/follow-redirects/debug.js create mode 100644 node_modules/follow-redirects/http.js create mode 100644 node_modules/follow-redirects/https.js create mode 100644 node_modules/follow-redirects/index.js create mode 100644 node_modules/follow-redirects/package.json rename LICENSE => node_modules/uview-ui/LICENSE (100%) rename {uview-ui => node_modules/uview-ui}/README.md (100%) rename {uview-ui => node_modules/uview-ui}/components/u-action-sheet/u-action-sheet.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-alert-tips/u-alert-tips.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-avatar-cropper/u-avatar-cropper.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-avatar-cropper/weCropper.js (100%) rename {uview-ui => node_modules/uview-ui}/components/u-avatar/u-avatar.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-back-top/u-back-top.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-badge/u-badge.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-button/u-button.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-calendar/u-calendar.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-car-keyboard/u-car-keyboard.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-card/u-card.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-cell-group/u-cell-group.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-cell-item/u-cell-item.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-checkbox-group/u-checkbox-group.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-checkbox/u-checkbox.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-circle-progress/u-circle-progress.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-col/u-col.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-collapse-item/u-collapse-item.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-collapse/u-collapse.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-column-notice/u-column-notice.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-count-down/u-count-down.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-count-to/u-count-to.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-divider/u-divider.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-dropdown-item/u-dropdown-item.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-dropdown/u-dropdown.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-empty/u-empty.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-field/u-field.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-form-item/u-form-item.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-form/u-form.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-full-screen/u-full-screen.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-gap/u-gap.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-grid-item/u-grid-item.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-grid/u-grid.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-icon/u-icon.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-image/u-image.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-index-anchor/u-index-anchor.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-index-list/u-index-list.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-input/u-input.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-keyboard/u-keyboard.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-lazy-load/u-lazy-load.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-line-progress/u-line-progress.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-line/u-line.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-link/u-link.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-loading-page/u-loading-page.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-loading/u-loading.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-loadmore/u-loadmore.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-mask/u-mask.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-message-input/u-message-input.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-modal/u-modal.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-navbar/u-navbar.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-no-network/u-no-network.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-notice-bar/u-notice-bar.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-number-box/u-number-box.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-number-keyboard/u-number-keyboard.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-parse/libs/CssHandler.js (100%) rename {uview-ui => node_modules/uview-ui}/components/u-parse/libs/MpHtmlParser.js (100%) rename {uview-ui => node_modules/uview-ui}/components/u-parse/libs/config.js (100%) rename {uview-ui => node_modules/uview-ui}/components/u-parse/libs/handler.wxs (100%) rename {uview-ui => node_modules/uview-ui}/components/u-parse/libs/trees.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-parse/u-parse.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-picker/u-picker.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-popup/u-popup.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-radio-group/u-radio-group.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-radio/u-radio.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-rate/u-rate.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-read-more/u-read-more.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-row-notice/u-row-notice.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-row/u-row.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-search/u-search.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-section/u-section.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-select/u-select.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-skeleton/u-skeleton.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-slider/u-slider.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-steps/u-steps.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-sticky/u-sticky.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-subsection/u-subsection.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-swipe-action/u-swipe-action.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-swiper/u-swiper.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-switch/u-switch.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-tabbar/u-tabbar.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-table/u-table.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-tabs-swiper/u-tabs-swiper.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-tabs/u-tabs.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-tag/u-tag.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-td/u-td.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-th/u-th.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-time-line-item/u-time-line-item.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-time-line/u-time-line.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-toast/u-toast.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-top-tips/u-top-tips.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-tr/u-tr.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-upload/u-upload.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-verification-code/u-verification-code.vue (100%) rename {uview-ui => node_modules/uview-ui}/components/u-waterfall/u-waterfall.vue (100%) rename {uview-ui => node_modules/uview-ui}/iconfont.css (100%) rename {uview-ui => node_modules/uview-ui}/index.js (100%) rename {uview-ui => node_modules/uview-ui}/index.scss (100%) rename {uview-ui => node_modules/uview-ui}/libs/config/config.js (71%) rename {uview-ui => node_modules/uview-ui}/libs/config/zIndex.js (100%) rename {uview-ui => node_modules/uview-ui}/libs/css/color.scss (100%) rename {uview-ui => node_modules/uview-ui}/libs/css/common.scss (100%) rename {uview-ui => node_modules/uview-ui}/libs/css/style.components.scss (100%) rename {uview-ui => node_modules/uview-ui}/libs/css/style.h5.scss (100%) rename {uview-ui => node_modules/uview-ui}/libs/css/style.mp.scss (100%) rename {uview-ui => node_modules/uview-ui}/libs/css/style.nvue.scss (100%) rename {uview-ui => node_modules/uview-ui}/libs/css/style.vue.scss (100%) rename {uview-ui => node_modules/uview-ui}/libs/function/$parent.js (100%) rename {uview-ui => node_modules/uview-ui}/libs/function/addUnit.js (100%) rename {uview-ui => node_modules/uview-ui}/libs/function/bem.js (100%) rename {uview-ui => node_modules/uview-ui}/libs/function/color.js (100%) rename {uview-ui => node_modules/uview-ui}/libs/function/colorGradient.js (100%) rename {uview-ui => node_modules/uview-ui}/libs/function/debounce.js (100%) rename {uview-ui => node_modules/uview-ui}/libs/function/deepClone.js (100%) rename {uview-ui => node_modules/uview-ui}/libs/function/deepMerge.js (100%) rename {uview-ui => node_modules/uview-ui}/libs/function/getParent.js (100%) rename {uview-ui => node_modules/uview-ui}/libs/function/guid.js (100%) rename {uview-ui => node_modules/uview-ui}/libs/function/md5.js (100%) rename {uview-ui => node_modules/uview-ui}/libs/function/queryParams.js (100%) rename {uview-ui => node_modules/uview-ui}/libs/function/random.js (100%) rename {uview-ui => node_modules/uview-ui}/libs/function/randomArray.js (100%) rename {uview-ui => node_modules/uview-ui}/libs/function/route.js (88%) rename {uview-ui => node_modules/uview-ui}/libs/function/sys.js (100%) rename {uview-ui => node_modules/uview-ui}/libs/function/test.js (100%) rename {uview-ui => node_modules/uview-ui}/libs/function/throttle.js (100%) rename {uview-ui => node_modules/uview-ui}/libs/function/timeFormat.js (100%) rename {uview-ui => node_modules/uview-ui}/libs/function/timeFrom.js (100%) rename {uview-ui => node_modules/uview-ui}/libs/function/toast.js (100%) rename {uview-ui => node_modules/uview-ui}/libs/function/trim.js (100%) rename {uview-ui => node_modules/uview-ui}/libs/function/type2icon.js (100%) rename {uview-ui => node_modules/uview-ui}/libs/mixin/mixin.js (100%) rename {uview-ui => node_modules/uview-ui}/libs/mixin/mpShare.js (100%) rename {uview-ui => node_modules/uview-ui}/libs/request/index.js (100%) rename {uview-ui => node_modules/uview-ui}/libs/store/index.js (100%) rename {uview-ui => node_modules/uview-ui}/libs/util/area.js (100%) rename {uview-ui => node_modules/uview-ui}/libs/util/async-validator.js (100%) rename {uview-ui => node_modules/uview-ui}/libs/util/city.js (100%) rename {uview-ui => node_modules/uview-ui}/libs/util/emitter.js (100%) rename {uview-ui => node_modules/uview-ui}/libs/util/province.js (100%) create mode 100644 node_modules/uview-ui/package.json rename {uview-ui => node_modules/uview-ui}/theme.scss (100%) delete mode 100644 node_modules/vue-i18n/CHANGELOG.md delete mode 100644 node_modules/vue-i18n/README.md delete mode 100644 node_modules/vue-i18n/decls/i18n.js delete mode 100644 node_modules/vue-i18n/decls/module.js delete mode 100644 node_modules/vue-i18n/dist/vue-i18n.common.js delete mode 100644 node_modules/vue-i18n/dist/vue-i18n.esm.browser.js delete mode 100644 node_modules/vue-i18n/dist/vue-i18n.esm.browser.min.js delete mode 100644 node_modules/vue-i18n/dist/vue-i18n.esm.js delete mode 100644 node_modules/vue-i18n/dist/vue-i18n.js delete mode 100644 node_modules/vue-i18n/dist/vue-i18n.min.js delete mode 100644 node_modules/vue-i18n/package.json delete mode 100644 node_modules/vue-i18n/src/components/interpolation.js delete mode 100644 node_modules/vue-i18n/src/components/number.js delete mode 100644 node_modules/vue-i18n/src/directive.js delete mode 100644 node_modules/vue-i18n/src/extend.js delete mode 100644 node_modules/vue-i18n/src/format.js delete mode 100644 node_modules/vue-i18n/src/index.js delete mode 100644 node_modules/vue-i18n/src/install.js delete mode 100644 node_modules/vue-i18n/src/mixin.js delete mode 100644 node_modules/vue-i18n/src/path.js delete mode 100644 node_modules/vue-i18n/src/util.js delete mode 100644 node_modules/vue-i18n/types/index.d.ts delete mode 100644 node_modules/vue-i18n/vetur/attributes.json delete mode 100644 node_modules/vue-i18n/vetur/tags.json delete mode 100644 pages/componentsA/avatar/index.vue delete mode 100644 pages/componentsA/avatarCropper/index.vue delete mode 100644 pages/componentsA/backTop/index.vue delete mode 100644 pages/componentsA/calendar/index.vue delete mode 100644 pages/componentsA/empty/index.vue delete mode 100644 pages/componentsA/field/index.vue delete mode 100644 pages/componentsA/form/index.vue delete mode 100644 pages/componentsA/fullScreen/index.vue delete mode 100644 pages/componentsA/icon/index.vue delete mode 100644 pages/componentsA/indexList/index.vue delete mode 100644 pages/componentsA/keyboard/index.vue delete mode 100644 pages/componentsA/lazyLoad/index.vue delete mode 100644 pages/componentsA/modal/index.vue delete mode 100644 pages/componentsA/navbar/index.vue delete mode 100644 pages/componentsA/noNetwork/index.vue delete mode 100644 pages/componentsA/parse/index.vue delete mode 100644 pages/componentsA/select/index.vue delete mode 100644 pages/componentsA/slider/index.vue delete mode 100644 pages/componentsA/tabs/index.vue delete mode 100644 pages/componentsA/tag/index.vue delete mode 100644 pages/componentsA/test/index.vue delete mode 100644 pages/componentsA/timeLine/index.vue delete mode 100644 pages/componentsA/toast/index.vue delete mode 100644 pages/componentsA/topTips/index.vue delete mode 100644 pages/componentsA/verificationCode/index.vue delete mode 100644 pages/componentsB/card/index.vue delete mode 100644 pages/componentsB/checkbox/index.vue delete mode 100644 pages/componentsB/divider/index.vue delete mode 100644 pages/componentsB/dropdown/index.vue delete mode 100644 pages/componentsB/image/index.vue delete mode 100644 pages/componentsB/line/index.vue delete mode 100644 pages/componentsB/loading/index.vue delete mode 100644 pages/componentsB/noticeBar/index.vue delete mode 100644 pages/componentsB/picker/index.vue delete mode 100644 pages/componentsB/radio/index.vue delete mode 100644 pages/componentsB/rate/index.vue delete mode 100644 pages/componentsB/readMore/index.vue delete mode 100644 pages/componentsB/search/index.vue delete mode 100644 pages/componentsB/skeleton/index.vue delete mode 100644 pages/componentsB/steps/index.vue delete mode 100644 pages/componentsB/sticky/index.vue delete mode 100644 pages/componentsB/swipeAction/index.vue delete mode 100644 pages/componentsB/swiper/index.vue delete mode 100644 pages/componentsB/switch/index.vue delete mode 100644 pages/componentsB/tabbar/index.vue delete mode 100644 pages/componentsB/table/index.vue delete mode 100644 pages/componentsB/upload/index.vue delete mode 100644 pages/componentsB/waterfall/index.vue delete mode 100644 pages/componentsC/actionSheet/index.vue delete mode 100644 pages/componentsC/alertTips/index.vue delete mode 100644 pages/componentsC/badge/index.vue delete mode 100644 pages/componentsC/button/index.vue delete mode 100644 pages/componentsC/cell/index.vue delete mode 100644 pages/componentsC/circleProgress/index.vue delete mode 100644 pages/componentsC/collapse/index.vue delete mode 100644 pages/componentsC/color/index.vue delete mode 100644 pages/componentsC/countDown/index.vue delete mode 100644 pages/componentsC/countTo/index.vue delete mode 100644 pages/componentsC/gap/index.vue delete mode 100644 pages/componentsC/grid/index.vue delete mode 100644 pages/componentsC/layout/index.vue delete mode 100644 pages/componentsC/link/index.vue delete mode 100644 pages/componentsC/loadmore/index.vue delete mode 100644 pages/componentsC/mask/index.vue delete mode 100644 pages/componentsC/messageInput/index.vue delete mode 100644 pages/componentsC/numberBox/index.vue delete mode 100644 pages/componentsC/popup/index.vue delete mode 100644 pages/componentsC/progress/index.vue delete mode 100644 pages/componentsC/section/index.vue delete mode 100644 pages/componentsC/subsection/index.vue delete mode 100644 pages/componentsC/test/index.vue delete mode 100644 pages/example/components.config.js delete mode 100644 pages/example/components.vue delete mode 100644 pages/example/js.config.js delete mode 100644 pages/example/js.vue delete mode 100644 pages/example/template.config.js delete mode 100644 pages/example/template.vue create mode 100644 pages/index/index.vue delete mode 100644 pages/library/color/index.vue delete mode 100644 pages/library/colorSwitch/index.vue delete mode 100644 pages/library/debounce/index.vue delete mode 100644 pages/library/deepClone/index.vue delete mode 100644 pages/library/deepMerge/index.vue delete mode 100644 pages/library/getRect/index.vue delete mode 100644 pages/library/globalVariable/globalData.vue delete mode 100644 pages/library/globalVariable/index.vue delete mode 100644 pages/library/globalVariable/prototype.vue delete mode 100644 pages/library/globalVariable/vuex.vue delete mode 100644 pages/library/guid/index.vue delete mode 100644 pages/library/http/index.vue delete mode 100644 pages/library/md5/index.vue delete mode 100644 pages/library/mpShare/index.vue delete mode 100644 pages/library/queryParams/index.vue delete mode 100644 pages/library/random/index.vue delete mode 100644 pages/library/randomArray/index.vue delete mode 100644 pages/library/route/index.vue delete mode 100644 pages/library/route/routeTo.vue delete mode 100644 pages/library/test/index.vue delete mode 100644 pages/library/timeFormat/index.vue delete mode 100644 pages/library/timeFrom/index.vue delete mode 100644 pages/library/trim/index.vue create mode 100644 pages/play/play.vue delete mode 100644 pages/player/player.vue delete mode 100644 pages/template/address/addSite.vue delete mode 100644 pages/template/address/index.vue delete mode 100644 pages/template/citySelect/index.vue delete mode 100644 pages/template/citySelect/u-city-select.vue delete mode 100644 pages/template/comment/index.vue delete mode 100644 pages/template/comment/reply.vue delete mode 100644 pages/template/coupon/index.vue delete mode 100644 pages/template/douyin/index.nvue delete mode 100644 pages/template/keyboardPay/index.vue delete mode 100644 pages/template/login/code.vue delete mode 100644 pages/template/login/index.vue delete mode 100644 pages/template/mallMenu/index1.vue delete mode 100644 pages/template/mallMenu/index2.vue delete mode 100644 pages/template/order/index.vue delete mode 100644 pages/template/submitBar/index.vue delete mode 100644 pages/template/wxCenter/index.vue delete mode 100644 static/common/js/touch-emulator.js delete mode 100644 static/uview/common/favicon.ico delete mode 100644 static/uview/common/logo.png delete mode 100644 static/uview/example/component.png delete mode 100644 static/uview/example/component_select.png delete mode 100644 static/uview/example/js.png delete mode 100644 static/uview/example/js_bak.png delete mode 100644 static/uview/example/js_select.png delete mode 100644 static/uview/example/js_select_bak.png delete mode 100644 static/uview/example/min_button.png delete mode 100644 static/uview/example/min_button_select.png delete mode 100644 static/uview/example/template.png delete mode 100644 static/uview/example/template_select.png delete mode 100644 store/$u.mixin.js delete mode 100644 store/index.js delete mode 100644 template.h5.html delete mode 100644 unpackage/dist/dev/.automator/app-plus/.automator.json delete mode 100644 unpackage/dist/dev/app-plus/__uniappchooselocation.js delete mode 100644 unpackage/dist/dev/app-plus/__uniappes6.js delete mode 100644 unpackage/dist/dev/app-plus/__uniappopenlocation.js delete mode 100644 unpackage/dist/dev/app-plus/__uniapppicker.js delete mode 100644 unpackage/dist/dev/app-plus/__uniappquill.js delete mode 100644 unpackage/dist/dev/app-plus/__uniappquillimageresize.js delete mode 100644 unpackage/dist/dev/app-plus/__uniappscan.js delete mode 100644 unpackage/dist/dev/app-plus/__uniappsuccess.png delete mode 100644 unpackage/dist/dev/app-plus/__uniappview.html delete mode 100644 unpackage/dist/dev/app-plus/app-config-service.js delete mode 100644 unpackage/dist/dev/app-plus/app-config.js delete mode 100644 unpackage/dist/dev/app-plus/app-service.js delete mode 100644 unpackage/dist/dev/app-plus/app-view.js delete mode 100644 unpackage/dist/dev/app-plus/manifest.json delete mode 100644 unpackage/dist/dev/app-plus/pages/componentsA/app-sub-service.js delete mode 100644 unpackage/dist/dev/app-plus/pages/componentsB/app-sub-service.js delete mode 100644 unpackage/dist/dev/app-plus/pages/componentsC/app-sub-service.js delete mode 100644 unpackage/dist/dev/app-plus/pages/library/app-sub-service.js delete mode 100644 unpackage/dist/dev/app-plus/pages/template/app-sub-service.js delete mode 100644 unpackage/dist/dev/app-plus/static/common/js/touch-emulator.js delete mode 100644 unpackage/dist/dev/app-plus/static/uview/common/favicon.ico delete mode 100644 unpackage/dist/dev/app-plus/static/uview/common/logo.png delete mode 100644 unpackage/dist/dev/app-plus/static/uview/example/component.png delete mode 100644 unpackage/dist/dev/app-plus/static/uview/example/component_select.png delete mode 100644 unpackage/dist/dev/app-plus/static/uview/example/js.png delete mode 100644 unpackage/dist/dev/app-plus/static/uview/example/js_bak.png delete mode 100644 unpackage/dist/dev/app-plus/static/uview/example/js_select.png delete mode 100644 unpackage/dist/dev/app-plus/static/uview/example/js_select_bak.png delete mode 100644 unpackage/dist/dev/app-plus/static/uview/example/min_button.png delete mode 100644 unpackage/dist/dev/app-plus/static/uview/example/min_button_select.png delete mode 100644 unpackage/dist/dev/app-plus/static/uview/example/template.png delete mode 100644 unpackage/dist/dev/app-plus/static/uview/example/template_select.png delete mode 100644 unpackage/dist/dev/app-plus/view.css delete mode 100644 unpackage/dist/dev/app-plus/view.umd.min.js create mode 100644 unpackage/res/icons/1024x1024.png create mode 100644 unpackage/res/icons/120x120.png create mode 100644 unpackage/res/icons/144x144.png create mode 100644 unpackage/res/icons/152x152.png create mode 100644 unpackage/res/icons/167x167.png create mode 100644 unpackage/res/icons/180x180.png create mode 100644 unpackage/res/icons/192x192.png create mode 100644 unpackage/res/icons/20x20.png create mode 100644 unpackage/res/icons/29x29.png create mode 100644 unpackage/res/icons/40x40.png create mode 100644 unpackage/res/icons/58x58.png create mode 100644 unpackage/res/icons/60x60.png create mode 100644 unpackage/res/icons/72x72.png create mode 100644 unpackage/res/icons/76x76.png create mode 100644 unpackage/res/icons/80x80.png create mode 100644 unpackage/res/icons/87x87.png create mode 100644 unpackage/res/icons/96x96.png delete mode 100644 uview-ui/package.json delete mode 100644 vue.config.js diff --git a/App.vue b/App.vue index d8c41ed..7947eb5 100644 --- a/App.vue +++ b/App.vue @@ -1,23 +1,18 @@ \ No newline at end of file + /*每个页面公共css */ + @import "uview-ui/index.scss"; + diff --git a/README.md b/README.md deleted file mode 100644 index 7d53723..0000000 --- a/README.md +++ /dev/null @@ -1 +0,0 @@ -## 进行中 \ No newline at end of file diff --git a/common/classify.data.js b/common/classify.data.js deleted file mode 100644 index cb4f75a..0000000 --- a/common/classify.data.js +++ /dev/null @@ -1,1087 +0,0 @@ -export default[ - { - "name": "女装", - "foods": [ - { - "name": "A字裙", - "key": "A字裙", - "icon": "https://cdn.uviewui.com/uview/common/classify/1/1.jpg", - "cat": 10 - }, - { - "name": "T恤", - "key": "T恤", - "icon": "https://cdn.uviewui.com/uview/common/classify/1/2.jpg", - "cat": 10 - }, - { - "name": "半身裙", - "key": "半身裙", - "icon": "https://cdn.uviewui.com/uview/common/classify/1/3.jpg", - "cat": 10 - }, - { - "name": "衬衫", - "key": "衬衫", - "icon": "https://cdn.uviewui.com/uview/common/classify/1/4.jpg", - "cat": 10 - }, - { - "name": "短裙", - "key": "短裙", - "icon": "https://cdn.uviewui.com/uview/common/classify/1/5.jpg", - "cat": 10 - }, - { - "name": "阔腿裤", - "key": "阔腿裤", - "icon": "https://cdn.uviewui.com/uview/common/classify/1/6.jpg", - "cat": 10 - }, - { - "name": "连衣裙", - "key": "连衣裙", - "icon": "https://cdn.uviewui.com/uview/common/classify/1/7.jpg", - "cat": 10 - }, - { - "name": "妈妈装", - "key": "妈妈装", - "icon": "https://cdn.uviewui.com/uview/common/classify/1/8.jpg", - "cat": 10 - }, - { - "name": "牛仔裤", - "key": "牛仔裤", - "icon": "https://cdn.uviewui.com/uview/common/classify/1/9.jpg", - "cat": 10 - }, - { - "name": "情侣装", - "key": "情侣装", - "icon": "https://cdn.uviewui.com/uview/common/classify/1/10.jpg", - "cat": 10 - }, - { - "name": "休闲裤", - "key": "休闲裤", - "icon": "https://cdn.uviewui.com/uview/common/classify/1/11.jpg", - "cat": 10 - }, - { - "name": "雪纺衫", - "key": "雪纺衫", - "icon": "https://cdn.uviewui.com/uview/common/classify/1/12.jpg", - "cat": 10 - }, - { - "name": "防晒衣", - "key": "防晒衣", - "icon": "https://cdn.uviewui.com/uview/common/classify/1/13.jpg", - "cat": 10 - }, - { - "name": "礼服/婚纱", - "key": "礼服婚纱", - "icon": "https://cdn.uviewui.com/uview/common/classify/1/14.jpg", - "cat": 10 - } - ] - }, - { - "name": "美食", - "foods": [ - { - "name": "火锅", - "key": "火锅", - "icon": "https://cdn.uviewui.com/uview/common/classify/2/1.jpg", - "cat": 6 - }, - { - "name": "糕点饼干", - "key": "糕点饼干", - "icon": "https://cdn.uviewui.com/uview/common/classify/2/2.jpg", - "cat": 6 - }, - { - "name": "坚果果干", - "key": "坚果果干", - "icon": "https://cdn.uviewui.com/uview/common/classify/2/3.jpg", - "cat": 6 - }, - { - "name": "酒类", - "key": "酒类", - "icon": "https://cdn.uviewui.com/uview/common/classify/2/4.jpg", - "cat": 6 - }, - { - "name": "辣条", - "key": "辣条", - "icon": "https://cdn.uviewui.com/uview/common/classify/2/5.jpg", - "cat": 6 - }, - { - "name": "大礼包", - "key": "大礼包", - "icon": "https://cdn.uviewui.com/uview/common/classify/2/6.jpg", - "cat": 6 - }, - { - "name": "精品茗茶", - "key": "茶", - "icon": "https://cdn.uviewui.com/uview/common/classify/2/7.jpg", - "cat": 6 - }, - { - "name": "休闲食品", - "key": "休闲食品", - "icon": "https://cdn.uviewui.com/uview/common/classify/2/8.jpg", - "cat": 6 - }, - { - "name": "糖果巧克力", - "key": "糖果巧克力", - "icon": "https://cdn.uviewui.com/uview/common/classify/2/9.jpg", - "cat": 6 - }, - { - "name": "方便速食", - "key": "方便速食", - "icon": "https://cdn.uviewui.com/uview/common/classify/2/10.jpg", - "cat": 6 - }, - { - "name": "营养代餐", - "key": "营养代餐", - "icon": "https://cdn.uviewui.com/uview/common/classify/2/11.jpg", - "cat": 6 - }, - { - "name": "粮油副食", - "key": "粮油", - "icon": "https://cdn.uviewui.com/uview/common/classify/2/12.jpg", - "cat": 6 - }, - { - "name": "生鲜水果", - "key": "水果", - "icon": "https://cdn.uviewui.com/uview/common/classify/2/13.jpg", - "cat": 6 - }, - { - "name": "饮品", - "key": "饮品", - "icon": "https://cdn.uviewui.com/uview/common/classify/2/14.jpg", - "cat": 6 - } - ] - }, - { - "name": "美妆", - "foods": [ - { - "name": "化妆刷", - "key": "化妆刷", - "icon": "https://cdn.uviewui.com/uview/common/classify/3/1.jpg", - "cat": 3 - }, - { - "name": "粉底", - "key": "粉底", - "icon": "https://cdn.uviewui.com/uview/common/classify/3/2.jpg", - "cat": 3 - }, - { - "name": "洗发护发", - "key": "洗发护发", - "icon": "https://cdn.uviewui.com/uview/common/classify/3/3.jpg", - "cat": 3 - }, - { - "name": "美容工具", - "key": "美容工具", - "icon": "https://cdn.uviewui.com/uview/common/classify/3/4.jpg", - "cat": 3 - }, - { - "name": "眼部护理", - "key": "眼部护理", - "icon": "https://cdn.uviewui.com/uview/common/classify/3/5.jpg", - "cat": 3 - }, - { - "name": "眉妆", - "key": "眉妆", - "icon": "https://cdn.uviewui.com/uview/common/classify/3/6.jpg", - "cat": 3 - }, - { - "name": "卸妆品", - "key": "卸妆品", - "icon": "https://cdn.uviewui.com/uview/common/classify/3/7.jpg", - "cat": 3 - }, - { - "name": "基础护肤", - "key": "基础护肤", - "icon": "https://cdn.uviewui.com/uview/common/classify/3/8.jpg", - "cat": 3 - }, - { - "name": "眼妆", - "key": "眼妆", - "icon": "https://cdn.uviewui.com/uview/common/classify/3/9.jpg", - "cat": 3 - }, - { - "name": "唇妆", - "key": "唇妆", - "icon": "https://cdn.uviewui.com/uview/common/classify/3/10.jpg", - "cat": 3 - }, - { - "name": "面膜", - "key": "面膜", - "icon": "https://cdn.uviewui.com/uview/common/classify/3/11.jpg", - "cat": 3 - }, - { - "name": "沐浴用品", - "key": "沐浴用品", - "icon": "https://cdn.uviewui.com/uview/common/classify/3/12.jpg", - "cat": 3 - }, - { - "name": "护肤套装", - "key": "护肤套装", - "icon": "https://cdn.uviewui.com/uview/common/classify/3/13.jpg", - "cat": 3 - }, - { - "name": "防晒品", - "key": "防晒品", - "icon": "https://cdn.uviewui.com/uview/common/classify/3/14.jpg", - "cat": 3 - }, - { - "name": "美甲", - "key": "美甲", - "icon": "https://cdn.uviewui.com/uview/common/classify/3/15.jpg", - "cat": 3 - } - - ] - }, - { - "name": "居家日用", - "foods": [ - { - "name": "垃圾袋", - "key": "垃圾袋", - "icon": "https://cdn.uviewui.com/uview/common/classify/4/1.jpg", - "cat": 4 - }, - { - "name": "纸巾", - "key": "纸巾", - "icon": "https://cdn.uviewui.com/uview/common/classify/4/2.jpg", - "cat": 4 - }, - { - "name": "驱蚊用品", - "key": "驱蚊用品", - "icon": "https://cdn.uviewui.com/uview/common/classify/4/3.jpg", - "cat": 4 - }, - { - "name": "收纳神器", - "key": "收纳神器", - "icon": "https://cdn.uviewui.com/uview/common/classify/4/4.jpg", - "cat": 4 - }, - { - "name": "厨房用品", - "key": "厨房用品", - "icon": "https://cdn.uviewui.com/uview/common/classify/4/5.jpg", - "cat": 4 - }, - { - "name": "厨房烹饪", - "key": "烹饪", - "icon": "https://cdn.uviewui.com/uview/common/classify/4/6.jpg", - "cat": 4 - }, - { - "name": "衣物晾晒", - "key": "衣物晾晒", - "icon": "https://cdn.uviewui.com/uview/common/classify/4/7.jpg", - "cat": 4 - }, - { - "name": "衣物护理", - "key": "衣物护理", - "icon": "https://cdn.uviewui.com/uview/common/classify/4/8.jpg", - "cat": 4 - }, - { - "name": "宠物用品", - "key": "宠物用品", - "icon": "https://cdn.uviewui.com/uview/common/classify/4/9.jpg", - "cat": 4 - }, - { - "name": "医药保健", - "key": "医药", - "icon": "https://cdn.uviewui.com/uview/common/classify/4/10.jpg", - "cat": 4 - }, - { - "name": "日用百货", - "key": "百货", - "icon": "https://cdn.uviewui.com/uview/common/classify/4/11.jpg", - "cat": 4 - }, - { - "name": "清洁用品", - "key": "清洁", - "icon": "https://cdn.uviewui.com/uview/common/classify/4/12.jpg", - "cat": 4 - }, - { - "name": "绿植园艺", - "key": "绿植", - "icon": "https://cdn.uviewui.com/uview/common/classify/4/13.jpg", - "cat": 4 - } - ] - }, - { - "name": "男装", - "foods": [ - { - "name": "爸爸装", - "key": "爸爸装", - "icon": "https://cdn.uviewui.com/uview/common/classify/5/1.jpg", - "cat": 12 - }, - { - "name": "牛仔裤", - "key": "牛仔裤", - "icon": "https://cdn.uviewui.com/uview/common/classify/5/2.jpg", - "cat": 12 - }, - { - "name": "衬衫", - "key": "衬衫", - "icon": "https://cdn.uviewui.com/uview/common/classify/5/3.jpg", - "cat": 12 - }, - { - "name": "休闲裤", - "key": "休闲裤", - "icon": "https://cdn.uviewui.com/uview/common/classify/5/4.jpg", - "cat": 12 - }, - { - "name": "外套", - "key": "外套", - "icon": "https://cdn.uviewui.com/uview/common/classify/5/5.jpg", - "cat": 12 - }, - { - "name": "T恤", - "key": "T恤", - "icon": "https://cdn.uviewui.com/uview/common/classify/5/6.jpg", - "cat": 12 - }, - { - "name": "套装", - "key": "套装", - "icon": "https://cdn.uviewui.com/uview/common/classify/5/7.jpg", - "cat": 12 - }, - { - "name": "运动裤", - "key": "运动裤", - "icon": "https://cdn.uviewui.com/uview/common/classify/5/8.jpg", - "cat": 12 - }, - { - "name": "马甲/背心", - "key": "马甲背心", - "icon": "https://cdn.uviewui.com/uview/common/classify/5/9.jpg", - "cat": 12 - }, - { - "name": "POLO衫", - "key": "POLO衫", - "icon": "https://cdn.uviewui.com/uview/common/classify/5/10.jpg", - "cat": 12 - }, - { - "name": "商务装", - "key": "商务装", - "icon": "https://cdn.uviewui.com/uview/common/classify/5/11.jpg", - "cat": 12 - } - ] - }, - { - "name": "鞋品", - "foods": [ - { - "name": "单鞋", - "key": "单鞋", - "icon": "https://cdn.uviewui.com/uview/common/classify/6/1.jpg", - "cat": 5 - }, - { - "name": "皮鞋", - "key": "皮鞋", - "icon": "https://cdn.uviewui.com/uview/common/classify/6/2.jpg", - "cat": 5 - }, - { - "name": "帆布鞋", - "key": "帆布鞋", - "icon": "https://cdn.uviewui.com/uview/common/classify/6/3.jpg", - "cat": 5 - }, - { - "name": "北京老布鞋", - "key": "北京老布鞋", - "icon": "https://cdn.uviewui.com/uview/common/classify/6/4.jpg", - "cat": 5 - }, - { - "name": "运动鞋", - "key": "运动鞋", - "icon": "https://cdn.uviewui.com/uview/common/classify/6/5.jpg", - "cat": 5 - }, - { - "name": "拖鞋", - "key": "拖鞋", - "icon": "https://cdn.uviewui.com/uview/common/classify/6/6.jpg", - "cat": 5 - }, - { - "name": "凉鞋", - "key": "凉鞋", - "icon": "https://cdn.uviewui.com/uview/common/classify/6/7.jpg", - "cat": 5 - }, - { - "name": "休闲鞋", - "key": "休闲鞋", - "icon": "https://cdn.uviewui.com/uview/common/classify/6/8.jpg", - "cat": 5 - }, - { - "name": "高跟鞋", - "key": "高跟鞋", - "icon": "https://cdn.uviewui.com/uview/common/classify/6/9.jpg", - "cat": 5 - }, - { - "name": "老人鞋", - "key": "老人鞋", - "icon": "https://cdn.uviewui.com/uview/common/classify/6/10.jpg", - "cat": 5 - }, - { - "name": "懒人鞋", - "key": "懒人鞋", - "icon": "https://cdn.uviewui.com/uview/common/classify/6/11.jpg", - "cat": 5 - } - ] - }, - { - "name": "数码家电", - "foods": [ - { - "name": "数据线", - "key": "数据线", - "icon": "https://cdn.uviewui.com/uview/common/classify/7/1.jpg", - "cat": 8 - }, - { - "name": "耳机", - "key": "耳机", - "icon": "https://cdn.uviewui.com/uview/common/classify/7/2.jpg", - "cat": 8 - }, - { - "name": "生活家电", - "key": "家电", - "icon": "https://cdn.uviewui.com/uview/common/classify/7/3.jpg", - "cat": 8 - }, - { - "name": "电风扇", - "key": "电风扇", - "icon": "https://cdn.uviewui.com/uview/common/classify/7/4.jpg", - "cat": 8 - }, - { - "name": "电吹风", - "key": "电吹风", - "icon": "https://cdn.uviewui.com/uview/common/classify/7/5.jpg", - "cat": 8 - }, - { - "name": "手机壳", - "key": "手机壳", - "icon": "https://cdn.uviewui.com/uview/common/classify/7/6.jpg", - "cat": 8 - }, - { - "name": "榨汁机", - "key": "榨汁机", - "icon": "https://cdn.uviewui.com/uview/common/classify/7/7.jpg", - "cat": 8 - }, - { - "name": "小家电", - "key": "小家电", - "icon": "https://cdn.uviewui.com/uview/common/classify/7/8.jpg", - "cat": 8 - }, - { - "name": "数码电子", - "key": "数码", - "icon": "https://cdn.uviewui.com/uview/common/classify/7/9.jpg", - "cat": 8 - }, - { - "name": "电饭锅", - "key": "电饭锅", - "icon": "https://cdn.uviewui.com/uview/common/classify/7/10.jpg", - "cat": 8 - }, - { - "name": "手机支架", - "key": "手机支架", - "icon": "https://cdn.uviewui.com/uview/common/classify/7/11.jpg", - "cat": 8 - }, - { - "name": "剃须刀", - "key": "剃须刀", - "icon": "https://cdn.uviewui.com/uview/common/classify/7/12.jpg", - "cat": 8 - }, - { - "name": "充电宝", - "key": "充电宝", - "icon": "https://cdn.uviewui.com/uview/common/classify/7/13.jpg", - "cat": 8 - }, - { - "name": "手机配件", - "key": "手机配件", - "icon": "https://cdn.uviewui.com/uview/common/classify/7/14.jpg", - "cat": 8 - } - ] - }, - { - "name": "母婴", - "foods": [ - { - "name": "婴童服饰", - "key": "衣服", - "icon": "https://cdn.uviewui.com/uview/common/classify/8/1.jpg", - "cat": 2 - }, - { - "name": "玩具乐器", - "key": "玩具乐器", - "icon": "https://cdn.uviewui.com/uview/common/classify/8/2.jpg", - "cat": 2 - }, - { - "name": "尿不湿", - "key": "尿不湿", - "icon": "https://cdn.uviewui.com/uview/common/classify/8/3.jpg", - "cat": 2 - }, - { - "name": "安抚牙胶", - "key": "安抚牙胶", - "icon": "https://cdn.uviewui.com/uview/common/classify/8/4.jpg", - "cat": 2 - }, - { - "name": "奶瓶奶嘴", - "key": "奶瓶奶嘴", - "icon": "https://cdn.uviewui.com/uview/common/classify/8/5.jpg", - "cat": 2 - }, - { - "name": "孕妈用品", - "key": "孕妈用品", - "icon": "https://cdn.uviewui.com/uview/common/classify/8/6.jpg", - "cat": 2 - }, - { - "name": "宝宝用品", - "key": "宝宝用品", - "icon": "https://cdn.uviewui.com/uview/common/classify/8/7.jpg", - "cat": 2 - }, - { - "name": "婴童湿巾", - "key": "湿巾", - "icon": "https://cdn.uviewui.com/uview/common/classify/8/8.jpg", - "cat": 2 - }, - { - "name": "喂养洗护", - "key": "洗护", - "icon": "https://cdn.uviewui.com/uview/common/classify/8/9.jpg", - "cat": 2 - }, - { - "name": "婴童鞋靴", - "key": "童鞋", - "icon": "https://cdn.uviewui.com/uview/common/classify/8/10.jpg", - "cat": 2 - }, - { - "name": "口水巾", - "key": "口水巾", - "icon": "https://cdn.uviewui.com/uview/common/classify/8/11.jpg", - "cat": 2 - }, - { - "name": "营养辅食", - "key": "营养", - "icon": "https://cdn.uviewui.com/uview/common/classify/8/12.jpg", - "cat": 2 - }, - { - "name": "婴幼书籍", - "key": "书籍", - "icon": "https://cdn.uviewui.com/uview/common/classify/8/13.jpg", - "cat": 2 - }, - { - "name": "婴儿车", - "key": "婴儿车", - "icon": "https://cdn.uviewui.com/uview/common/classify/8/14.jpg", - "cat": 2 - } - ] - }, - { - "name": "箱包", - "foods": [ - { - "name": "单肩包", - "key": "单肩包", - "icon": "https://cdn.uviewui.com/uview/common/classify/9/1.jpg", - "cat": 0 - }, - { - "name": "斜挎包", - "key": "斜挎包", - "icon": "https://cdn.uviewui.com/uview/common/classify/9/2.jpg", - "cat": 0 - }, - { - "name": "女包", - "key": "女包", - "icon": "https://cdn.uviewui.com/uview/common/classify/9/3.jpg", - "cat": 0 - }, - { - "name": "男包", - "key": "男包", - "icon": "https://cdn.uviewui.com/uview/common/classify/9/4.jpg", - "cat": 0 - }, - { - "name": "双肩包", - "key": "双肩包", - "icon": "https://cdn.uviewui.com/uview/common/classify/9/5.jpg", - "cat": 0 - }, - { - "name": "小方包", - "key": "小方包", - "icon": "https://cdn.uviewui.com/uview/common/classify/9/6.jpg", - "cat": 0 - }, - { - "name": "钱包", - "key": "钱包", - "icon": "https://cdn.uviewui.com/uview/common/classify/9/7.jpg", - "cat": 0 - }, - { - "name": "旅行箱包", - "key": "旅行箱包", - "icon": "https://cdn.uviewui.com/uview/common/classify/9/8.jpg", - "cat": 0 - }, - { - "name": "零钱包", - "key": "零钱包", - "icon": "https://cdn.uviewui.com/uview/common/classify/9/9.jpg", - "cat": 0 - }, - { - "name": "手提包", - "key": "手提包", - "icon": "https://cdn.uviewui.com/uview/common/classify/9/10.jpg", - "cat": 0 - }, - { - "name": "胸包", - "key": "胸包", - "icon": "https://cdn.uviewui.com/uview/common/classify/9/11.jpg", - "cat": 0 - } - ] - }, - { - "name": "内衣", - "foods": [ - { - "name": "袜子", - "key": "袜子", - "icon": "https://cdn.uviewui.com/uview/common/classify/10/1.jpg", - "cat": 11 - }, - { - "name": "吊带背心", - "key": "吊带背心", - "icon": "https://cdn.uviewui.com/uview/common/classify/10/2.jpg", - "cat": 11 - }, - { - "name": "抹胸", - "key": "抹胸", - "icon": "https://cdn.uviewui.com/uview/common/classify/10/3.jpg", - "cat": 11 - }, - { - "name": "内裤", - "key": "内裤", - "icon": "https://cdn.uviewui.com/uview/common/classify/10/4.jpg", - "cat": 11 - }, - { - "name": "文胸", - "key": "文胸", - "icon": "https://cdn.uviewui.com/uview/common/classify/10/5.jpg", - "cat": 11 - }, - { - "name": "文胸套装", - "key": "文胸套装", - "icon": "https://cdn.uviewui.com/uview/common/classify/10/6.jpg", - "cat": 11 - }, - { - "name": "打底塑身", - "key": "打底塑身", - "icon": "https://cdn.uviewui.com/uview/common/classify/10/7.jpg", - "cat": 11 - }, - { - "name": "家居服", - "key": "家居服", - "icon": "https://cdn.uviewui.com/uview/common/classify/10/8.jpg", - "cat": 11 - }, - { - "name": "船袜", - "key": "船袜", - "icon": "https://cdn.uviewui.com/uview/common/classify/10/9.jpg", - "cat": 11 - }, - { - "name": "情侣睡衣", - "key": "情侣睡衣", - "icon": "https://cdn.uviewui.com/uview/common/classify/10/10.jpg", - "cat": 11 - }, - { - "name": "丝袜", - "key": "丝袜", - "icon": "https://cdn.uviewui.com/uview/common/classify/10/11.jpg", - "cat": 11 - } - ] - }, - { - "name": "文娱车品", - "foods": [ - { - "name": "车市车品", - "key": "车市车品", - "icon": "https://cdn.uviewui.com/uview/common/classify/11/1.jpg", - "cat": 7 - }, - { - "name": "办公文具", - "key": "办公文具", - "icon": "https://cdn.uviewui.com/uview/common/classify/11/2.jpg", - "cat": 7 - }, - { - "name": "考试必备", - "key": "考试必备", - "icon": "https://cdn.uviewui.com/uview/common/classify/11/3.jpg", - "cat": 7 - }, - { - "name": "笔记本", - "key": "笔记本", - "icon": "https://cdn.uviewui.com/uview/common/classify/11/4.jpg", - "cat": 7 - }, - { - "name": "艺术礼品", - "key": "礼品", - "icon": "https://cdn.uviewui.com/uview/common/classify/11/5.jpg", - "cat": 7 - }, - { - "name": "书写工具", - "key": "书写工具", - "icon": "https://cdn.uviewui.com/uview/common/classify/11/6.jpg", - "cat": 7 - }, - { - "name": "车载电器", - "key": "车载电器", - "icon": "https://cdn.uviewui.com/uview/common/classify/11/7.jpg", - "cat": 7 - }, - { - "name": "图书音像", - "key": "图书音像", - "icon": "https://cdn.uviewui.com/uview/common/classify/11/8.jpg", - "cat": 7 - }, - { - "name": "画具画材", - "key": "画具画材", - "icon": "https://cdn.uviewui.com/uview/common/classify/11/9.jpg", - "cat": 7 - } - ] - }, - { - "name": "配饰", - "foods": [ - { - "name": "太阳镜", - "key": "太阳镜", - "icon": "https://cdn.uviewui.com/uview/common/classify/12/1.jpg", - "cat": 0 - }, - { - "name": "皮带", - "key": "皮带", - "icon": "https://cdn.uviewui.com/uview/common/classify/12/2.jpg", - "cat": 0 - }, - { - "name": "棒球帽", - "key": "棒球帽", - "icon": "https://cdn.uviewui.com/uview/common/classify/12/3.jpg", - "cat": 0 - }, - { - "name": "手表", - "key": "手表", - "icon": "https://cdn.uviewui.com/uview/common/classify/12/4.jpg", - "cat": 0 - }, - { - "name": "发饰", - "key": "发饰", - "icon": "https://cdn.uviewui.com/uview/common/classify/12/5.jpg", - "cat": 0 - }, - { - "name": "项链", - "key": "项链", - "icon": "https://cdn.uviewui.com/uview/common/classify/12/6.jpg", - "cat": 0 - }, - { - "name": "手饰", - "key": "手饰", - "icon": "https://cdn.uviewui.com/uview/common/classify/12/7.jpg", - "cat": 0 - }, - { - "name": "耳环", - "key": "耳环", - "icon": "https://cdn.uviewui.com/uview/common/classify/12/8.jpg", - "cat": 0 - }, - { - "name": "帽子丝巾", - "key": "帽子丝巾", - "icon": "https://cdn.uviewui.com/uview/common/classify/12/9.jpg", - "cat": 0 - }, - { - "name": "眼镜墨镜", - "key": "眼镜墨镜", - "icon": "https://cdn.uviewui.com/uview/common/classify/12/10.jpg", - "cat": 0 - }, - { - "name": "发带发箍", - "key": "发带发箍", - "icon": "https://cdn.uviewui.com/uview/common/classify/12/11.jpg", - "cat": 0 - } - ] - }, - { - "name": "家装家纺", - "foods": [ - { - "name": "家居饰品", - "key": "家居饰品", - "icon": "https://cdn.uviewui.com/uview/common/classify/13/1.jpg", - "cat": 0 - }, - { - "name": "凉席", - "key": "凉席", - "icon": "https://cdn.uviewui.com/uview/common/classify/13/2.jpg", - "cat": 0 - }, - { - "name": "背枕靠枕", - "key": "靠枕", - "icon": "https://cdn.uviewui.com/uview/common/classify/13/3.jpg", - "cat": 0 - }, - { - "name": "床上用品", - "key": "床上用品", - "icon": "https://cdn.uviewui.com/uview/common/classify/13/4.jpg", - "cat": 0 - }, - { - "name": "摆件", - "key": "摆件", - "icon": "https://cdn.uviewui.com/uview/common/classify/13/5.jpg", - "cat": 0 - }, - { - "name": "四件套", - "key": "四件套", - "icon": "https://cdn.uviewui.com/uview/common/classify/13/6.jpg", - "cat": 0 - }, - { - "name": "装饰品", - "key": "装饰品", - "icon": "https://cdn.uviewui.com/uview/common/classify/13/7.jpg", - "cat": 0 - }, - { - "name": "卫浴用品", - "key": "卫浴", - "icon": "https://cdn.uviewui.com/uview/common/classify/13/8.jpg", - "cat": 0 - }, - { - "name": "家居家装", - "key": "家具", - "icon": "https://cdn.uviewui.com/uview/common/classify/13/9.jpg", - "cat": 0 - }, - { - "name": "蚊帐", - "key": "蚊帐", - "icon": "https://cdn.uviewui.com/uview/common/classify/13/10.jpg", - "cat": 0 - }, - { - "name": "墙纸贴纸", - "key": "墙纸", - "icon": "https://cdn.uviewui.com/uview/common/classify/13/11.jpg", - "cat": 0 - }, - { - "name": "空调被", - "key": "空调被", - "icon": "https://cdn.uviewui.com/uview/common/classify/13/12.jpg", - "cat": 0 - } - ] - }, - { - "name": "户外运动", - "foods": [ - { - "name": "游泳装备", - "key": "游泳", - "icon": "https://cdn.uviewui.com/uview/common/classify/14/1.jpg", - "cat": 0 - }, - { - "name": "泳镜", - "key": "泳镜", - "icon": "https://cdn.uviewui.com/uview/common/classify/14/2.jpg", - "cat": 0 - }, - { - "name": "户外装备", - "key": "户外", - "icon": "https://cdn.uviewui.com/uview/common/classify/14/3.jpg", - "cat": 0 - }, - { - "name": "健身服饰", - "key": "健身", - "icon": "https://cdn.uviewui.com/uview/common/classify/14/4.jpg", - "cat": 0 - }, - { - "name": "泳衣", - "key": "泳衣", - "icon": "https://cdn.uviewui.com/uview/common/classify/14/5.jpg", - "cat": 0 - }, - { - "name": "瑜伽垫", - "key": "瑜伽垫", - "icon": "https://cdn.uviewui.com/uview/common/classify/14/6.jpg", - "cat": 0 - }, - { - "name": "瑜伽用品", - "key": "瑜伽", - "icon": "https://cdn.uviewui.com/uview/common/classify/14/7.jpg", - "cat": 0 - }, - { - "name": "健身装备", - "key": "健身", - "icon": "https://cdn.uviewui.com/uview/common/classify/14/8.jpg", - "cat": 0 - }, - { - "name": "球迷用品", - "key": "球迷", - "icon": "https://cdn.uviewui.com/uview/common/classify/14/9.jpg", - "cat": 0 - } - ] - } -] \ No newline at end of file diff --git a/common/demo.scss b/common/demo.scss deleted file mode 100644 index 547d5d9..0000000 --- a/common/demo.scss +++ /dev/null @@ -1,86 +0,0 @@ -/* #ifndef APP-NVUE */ -view, -text { - box-sizing: border-box; -} -/* #endif */ - -/* start--演示页面使用的统一样式--start */ -.u-demo { - padding: 25px 20px; -} - -.u-demo-wrap { - border-width: 1px; - border-color: #ddd; - border-style: dashed; - background-color: rgb(250, 250, 250); - padding: 20px 10px; - border-radius: 3px; -} - -.u-demo-area { - text-align: center; -} - -.u-no-demo-here { - color: $u-tips-color; - font-size: 13px; -} - -.u-demo-result-line { - border-width: 1px; - border-color: #ddd; - border-style: dashed; - padding: 5px 20px; - margin-top: 30px; - border-radius: 5px; - background-color: rgb(240, 240, 240); - color: $u-content-color; - font-size: 16px; - /* #ifndef APP-NVUE */ - word-break: break-word; - display: inline-block; - /* #endif */ - text-align: left; - -} - -.u-demo-title, -.u-config-title { - text-align: center; - font-size: 16px; - font-weight: bold; - margin-bottom: 20px; -} - -.u-config-item { - margin-top: 25px; -} - -.u-config-title { - margin-top: 20px; - padding-bottom: 5px; -} - -.u-item-title { - position: relative; - font-size: 15px; - padding-left: 8px; - line-height: 1; - margin-bottom: 11px; -} - -.u-item-title:after { - position: absolute; - width: 4px; - top: -1px; - height: 16px; - /* #ifndef APP-NVUE */ - content: ''; - /* #endif */ - left: 0; - border-radius: 10px; - background-color: $u-content-color; -} -/* end--演示页面使用的统一样式--end */ diff --git a/common/http.api.js b/common/http.api.js deleted file mode 100644 index 87defe4..0000000 --- a/common/http.api.js +++ /dev/null @@ -1,22 +0,0 @@ -// 如果没有通过拦截器配置域名的话,可以在这里写上完整的URL(加上域名部分) -let hotSearchUrl = '/ebapi/store_api/hot_search'; -let indexUrl = '/ebapi/public_api/index'; - -// 此处第二个参数vm,就是我们在页面使用的this,你可以通过vm获取vuex等操作,更多内容详见uView对拦截器的介绍部分: -// https://uviewui.com/js/http.html#%E4%BD%95%E8%B0%93%E8%AF%B7%E6%B1%82%E6%8B%A6%E6%88%AA%EF%BC%9F -const install = (Vue, vm) => { - // 此处没有使用传入的params参数 - let getSearch = (params = {}) => vm.$u.get(hotSearchUrl, { - id: 2 - }); - - // 此处使用了传入的params参数,一切自定义即可 - let getInfo = (params = {}) => vm.$u.post(indexUrl, params); - - // 将各个定义的接口名称,统一放进对象挂载到vm.$u.api(因为vm就是this,也即this.$u.api)下 - vm.$u.api = {getSearch, getInfo}; -} - -export default { - install -} \ No newline at end of file diff --git a/common/http.interceptor.js b/common/http.interceptor.js deleted file mode 100644 index b4d9518..0000000 --- a/common/http.interceptor.js +++ /dev/null @@ -1,46 +0,0 @@ -// 这里的vm,就是我们在vue文件里面的this,所以我们能在这里获取vuex的变量,比如存放在里面的token -// 同时,我们也可以在此使用getApp().globalData,如果你把token放在getApp().globalData的话,也是可以使用的 -const install = (Vue, vm) => { - Vue.prototype.$u.http.setConfig({ - baseUrl: 'https://api.youzixy.com', - // 如果将此值设置为true,拦截回调中将会返回服务端返回的所有数据response,而不是response.data - // 设置为true后,就需要在this.$u.http.interceptor.response进行多一次的判断,请打印查看具体值 - // originalData: true, - // 设置自定义头部content-type - // header: { - // 'content-type': 'xxx' - // } - }); - // 请求拦截,配置Token等参数 - Vue.prototype.$u.http.interceptor.request = (config) => { - config.header.Token = 'xxxxxx'; - - // 方式一,存放在vuex的token,假设使用了uView封装的vuex方式,见:https://uviewui.com/components/globalVariable.html - // config.header.token = vm.token; - - // 方式二,如果没有使用uView封装的vuex方法,那么需要使用$store.state获取 - // config.header.token = vm.$store.state.token; - - // 方式三,如果token放在了globalData,通过getApp().globalData获取 - // config.header.token = getApp().globalData.username; - - // 方式四,如果token放在了Storage本地存储中,拦截是每次请求都执行的,所以哪怕您重新登录修改了Storage,下一次的请求将会是最新值 - // const token = uni.getStorageSync('token'); - // config.header.token = token; - - return config; - } - // 响应拦截,判断状态码是否通过 - Vue.prototype.$u.http.interceptor.response = (res) => { - // 如果把originalData设置为了true,这里得到将会是服务器返回的所有的原始数据 - // 判断可能变成了res.statueCode,或者res.data.code之类的,请打印查看结果 - if(res.code == 200) { - // 如果把originalData设置为了true,这里return回什么,this.$u.post的then回调中就会得到什么 - return res.data; - } else return false; - } -} - -export default { - install -} \ No newline at end of file diff --git a/common/index.list.js b/common/index.list.js deleted file mode 100644 index 7e0f5ed..0000000 --- a/common/index.list.js +++ /dev/null @@ -1,585 +0,0 @@ -module.exports = { - list: [{ - "letter": "A", - "data": [{ - "name": "阿拉斯加", - "mobile": "13588889999", - "keyword": "阿拉斯加ABA13588889999" - }, - { - "name": "阿克苏", - "mobile": "0551-4386721", - "keyword": "阿克苏AKESU0551-4386721" - }, - { - "name": "阿拉善", - "mobile": "4008009100", - "keyword": "阿拉善ALASHAN4008009100" - }, - { - "name": "阿勒泰", - "mobile": "13588889999", - "keyword": "阿勒泰ALETAI13588889999" - }, - { - "name": "阿里", - "mobile": "13588889999", - "keyword": "阿里ALI13588889999" - }, - { - "name": "安阳", - "mobile": "13588889999", - "keyword": "13588889999安阳ANYANG" - } - ] - }, - { - "letter": "B", - "data": [{ - "name": "白城", - "mobile": "该主子没有留电话~", - "keyword": "白城BAICHENG" - }, - { - "name": "白山", - "mobile": "13588889999", - "keyword": "白山BAISHAN13588889999" - }, - { - "name": "白银", - "mobile": "13588889999", - "keyword": "白银BAIYIN13588889999" - }, - { - "name": "保定", - "mobile": "13588889999", - "keyword": "保定BAODING13588889999" - } - ] - }, - { - "letter": "C", - "data": [{ - "name": "沧州", - "mobile": "13588889999", - "keyword": "沧州CANGZHOU13588889999" - }, - { - "name": "长春", - "mobile": "13588889999", - "keyword": "长春CHANGCHUN13588889999" - } - ] - }, - { - "letter": "D", - "data": [{ - "name": "大理", - "mobile": "13588889999", - "keyword": "大理DALI13588889999" - }, - { - "name": "大连", - "mobile": "13588889999", - "keyword": "大连DALIAN13588889999" - } - ] - }, - { - "letter": "E", - "data": [{ - "name": "鄂尔多斯", - "mobile": "13588889999", - "keyword": "鄂尔多斯EERDUOSI13588889999" - }, - { - "name": "恩施", - "mobile": "13588889999", - "keyword": "恩施ENSHI13588889999" - }, - { - "name": "鄂州", - "mobile": "13588889999", - "keyword": "鄂州EZHOU13588889999" - } - ] - }, - { - "letter": "F", - "data": [{ - "name": "防城港", - "mobile": "该主子没有留电话~", - "keyword": "防城港FANGCHENGGANG" - }, - { - "name": "抚顺", - "mobile": "13588889999", - "keyword": "抚顺FUSHUN13588889999" - }, - { - "name": "阜新", - "mobile": "13588889999", - "keyword": "阜新FUXIN13588889999" - }, - { - "name": "阜阳", - "mobile": "13588889999", - "keyword": "阜阳FUYANG13588889999" - }, - { - "name": "抚州", - "mobile": "13588889999", - "keyword": "抚州FUZHOU13588889999" - }, - { - "name": "福州", - "mobile": "13588889999", - "keyword": "福州FUZHOU13588889999" - } - ] - }, - { - "letter": "G", - "data": [{ - "name": "甘南", - "mobile": "13588889999", - "keyword": "甘南GANNAN13588889999" - }, - { - "name": "赣州", - "mobile": "13588889999", - "keyword": "赣州GANZHOU13588889999" - }, - { - "name": "甘孜", - "mobile": "13588889999", - "keyword": "甘孜GANZI13588889999" - } - ] - }, - { - "letter": "H", - "data": [{ - "name": "哈尔滨", - "mobile": "13588889999", - "keyword": "哈尔滨HAERBIN13588889999" - }, - { - "name": "海北", - "mobile": "13588889999", - "keyword": "海北HAIBEI13588889999" - }, - { - "name": "海东", - "mobile": "13588889999", - "keyword": "海东HAIDONG13588889999" - }, - { - "name": "海口", - "mobile": "13588889999", - "keyword": "海口HAIKOU13588889999" - } - ] - }, - { - "letter": "I", - "data": [{ - "name": "ice", - "mobile": "13588889999", - "keyword": "佳木斯JIAMUSI13588889999" - }] - }, - { - "letter": "J", - "data": [{ - "name": "佳木斯", - "mobile": "13588889999", - "keyword": "佳木斯JIAMUSI13588889999" - }, - { - "name": "吉安", - "mobile": "13588889999", - "keyword": "吉安JIAN13588889999" - }, - { - "name": "江门", - "mobile": "13588889999", - "keyword": "江门JIANGMEN13588889999" - } - ] - }, - { - "letter": "K", - "data": [{ - "name": "开封", - "mobile": "13588889999", - "keyword": "开封KAIFENG13588889999" - }, - { - "name": "喀什", - "mobile": "13588889999", - "keyword": "喀什KASHI13588889999" - }, - { - "name": "克拉玛依", - "mobile": "13588889999", - "keyword": "克拉玛依KELAMAYI13588889999" - } - ] - }, - { - "letter": "L", - "data": [{ - "name": "来宾", - "mobile": "13588889999", - "keyword": "来宾LAIBIN13588889999" - }, - { - "name": "兰州", - "mobile": "13588889999", - "keyword": "兰州LANZHOU13588889999" - }, - { - "name": "拉萨", - "mobile": "13588889999", - "keyword": "拉萨LASA13588889999" - }, - { - "name": "乐山", - "mobile": "13588889999", - "keyword": "乐山LESHAN13588889999" - }, - { - "name": "凉山", - "mobile": "13588889999", - "keyword": "凉山LIANGSHAN13588889999" - }, - { - "name": "连云港", - "mobile": "13588889999", - "keyword": "连云港LIANYUNGANG13588889999" - }, - { - "name": "聊城", - "mobile": "18322223333", - "keyword": "聊城LIAOCHENG18322223333" - }, - { - "name": "辽阳", - "mobile": "18322223333", - "keyword": "辽阳LIAOYANG18322223333" - }, - { - "name": "辽源", - "mobile": "18322223333", - "keyword": "辽源LIAOYUAN18322223333" - }, - { - "name": "丽江", - "mobile": "18322223333", - "keyword": "丽江LIJIANG18322223333" - }, - { - "name": "临沧", - "mobile": "18322223333", - "keyword": "临沧LINCANG18322223333" - }, - { - "name": "临汾", - "mobile": "18322223333", - "keyword": "临汾LINFEN18322223333" - }, - { - "name": "临夏", - "mobile": "18322223333", - "keyword": "临夏LINXIA18322223333" - }, - { - "name": "临沂", - "mobile": "18322223333", - "keyword": "临沂LINYI18322223333" - }, - { - "name": "林芝", - "mobile": "18322223333", - "keyword": "林芝LINZHI18322223333" - }, - { - "name": "丽水", - "mobile": "18322223333", - "keyword": "丽水LISHUI18322223333" - } - ] - }, - { - "letter": "M", - "data": [{ - "name": "眉山", - "mobile": "15544448888", - "keyword": "眉山MEISHAN15544448888" - }, - { - "name": "梅州", - "mobile": "15544448888", - "keyword": "梅州MEIZHOU15544448888" - }, - { - "name": "绵阳", - "mobile": "15544448888", - "keyword": "绵阳MIANYANG15544448888" - }, - { - "name": "牡丹江", - "mobile": "15544448888", - "keyword": "牡丹江MUDANJIANG15544448888" - } - ] - }, - { - "letter": "N", - "data": [{ - "name": "南昌", - "mobile": "15544448888", - "keyword": "南昌NANCHANG15544448888" - }, - { - "name": "南充", - "mobile": "15544448888", - "keyword": "南充NANCHONG15544448888" - }, - { - "name": "南京", - "mobile": "15544448888", - "keyword": "南京NANJING15544448888" - }, - { - "name": "南宁", - "mobile": "15544448888", - "keyword": "南宁NANNING15544448888" - }, - { - "name": "南平", - "mobile": "15544448888", - "keyword": "南平NANPING15544448888" - } - ] - }, - { - "letter": "O", - "data": [{ - "name": "欧阳", - "mobile": "15544448888", - "keyword": "欧阳ouyang15544448888" - }] - }, - { - "letter": "P", - "data": [{ - "name": "盘锦", - "mobile": "15544448888", - "keyword": "盘锦PANJIN15544448888" - }, - { - "name": "攀枝花", - "mobile": "15544448888", - "keyword": "攀枝花PANZHIHUA15544448888" - }, - { - "name": "平顶山", - "mobile": "15544448888", - "keyword": "平顶山PINGDINGSHAN15544448888" - }, - { - "name": "平凉", - "mobile": "15544448888", - "keyword": "平凉PINGLIANG15544448888" - }, - { - "name": "萍乡", - "mobile": "15544448888", - "keyword": "萍乡PINGXIANG15544448888" - }, - { - "name": "普洱", - "mobile": "15544448888", - "keyword": "普洱PUER15544448888" - }, - { - "name": "莆田", - "mobile": "15544448888", - "keyword": "莆田PUTIAN15544448888" - }, - { - "name": "濮阳", - "mobile": "15544448888", - "keyword": "濮阳PUYANG15544448888" - } - ] - }, - { - "letter": "Q", - "data": [{ - "name": "黔东南", - "mobile": "15544448888", - "keyword": "黔东南QIANDONGNAN15544448888" - }, - { - "name": "黔南", - "mobile": "15544448888", - "keyword": "黔南QIANNAN15544448888" - }, - { - "name": "黔西南", - "mobile": "15544448888", - "keyword": "黔西南QIANXINAN15544448888" - } - ] - }, - { - "letter": "R", - "data": [{ - "name": "日喀则", - "mobile": "15544448888", - "keyword": "日喀则RIKAZE15544448888" - }, - { - "name": "日照", - "mobile": "15544448888", - "keyword": "日照RIZHAO15544448888" - } - ] - }, - { - "letter": "S", - "data": [{ - "name": "三门峡", - "mobile": "15544448888", - "keyword": "三门峡SANMENXIA15544448888" - }, - { - "name": "三明", - "mobile": "15544448888", - "keyword": "三明SANMING15544448888" - }, - { - "name": "三沙", - "mobile": "15544448888", - "keyword": "三沙SANSHA15544448888" - } - ] - }, - { - "letter": "T", - "data": [{ - "name": "塔城", - "mobile": "15544448888", - "keyword": "塔城TACHENG15544448888" - }, - { - "name": "漯河", - "mobile": "15544448888", - "keyword": "漯河TAHE15544448888" - }, - { - "name": "泰安", - "mobile": "15544448888", - "keyword": "泰安TAIAN15544448888" - } - ] - }, - { - "letter": "W", - "data": [{ - "name": "潍坊", - "mobile": "15544448888", - "keyword": "潍坊WEIFANG15544448888" - }, - { - "name": "威海", - "mobile": "15544448888", - "keyword": "威海WEIHAI15544448888" - }, - { - "name": "渭南", - "mobile": "15544448888", - "keyword": "渭南WEINAN15544448888" - }, - { - "name": "文山", - "mobile": "15544448888", - "keyword": "文山WENSHAN15544448888" - } - ] - }, - { - "letter": "X", - "data": [{ - "name": "厦门", - "mobile": "15544448888", - "keyword": "厦门XIAMEN15544448888" - }, - { - "name": "西安", - "mobile": "15544448888", - "keyword": "西安XIAN15544448888" - }, - { - "name": "湘潭", - "mobile": "15544448888", - "keyword": "湘潭XIANGTAN15544448888" - } - ] - }, - { - "letter": "Y", - "data": [{ - "name": "雅安", - "mobile": "15544448888", - "keyword": "雅安YAAN15544448888" - }, - { - "name": "延安", - "mobile": "15544448888", - "keyword": "延安YANAN15544448888" - }, - { - "name": "延边", - "mobile": "15544448888", - "keyword": "延边YANBIAN15544448888" - }, - { - "name": "盐城", - "mobile": "15544448888", - "keyword": "盐城YANCHENG15544448888" - } - ] - }, - { - "letter": "Z", - "data": [{ - "name": "枣庄", - "mobile": "15544448888", - "keyword": "枣庄ZAOZHUANG15544448888" - }, - { - "name": "张家界", - "mobile": "15544448888", - "keyword": "张家界ZHANGJIAJIE15544448888" - }, - { - "name": "张家口", - "mobile": "15544448888", - "keyword": "张家口ZHANGJIAKOU15544448888" - } - ] - }, - { - "letter": "#", - "data": [{ - "name": "其他.", - "mobile": "16666666666", - "keyword": "echo16666666666" - }] - } - ] -} diff --git a/common/locales/en.js b/common/locales/en.js deleted file mode 100644 index 5bd6f7a..0000000 --- a/common/locales/en.js +++ /dev/null @@ -1,21 +0,0 @@ -export default { - // 可以以页面为单位来写,比如首页的内容,写在index字段,个人中心写在center,共同部分写在common部分 - components: { - desc: 'Numerous components cover the various requirements of the development process, and the components are rich in functions and compatible with multiple terminals. Let you integrate quickly, out of the box' - }, - js: { - desc: 'Numerous intimate gadgets are a weapon that you can call upon during the development process, allowing you to dart in your hand and pierce the Yang with a hundred steps' - }, - template: { - desc: 'Collection of many commonly used pages and layouts, reducing the repetitive work of developers, allowing you to focus on logic and get twice the result with half the effort' - }, - nav: { - components: 'Components', - js: 'JS', - template: 'Template' - }, - common: { - intro: 'UI framework for rapid development of multiple platforms', - title: 'uView UI', - }, -} \ No newline at end of file diff --git a/common/locales/zh.js b/common/locales/zh.js deleted file mode 100644 index 1c6b15c..0000000 --- a/common/locales/zh.js +++ /dev/null @@ -1,21 +0,0 @@ -export default { - // 可以以页面为单位来写,比如首页的内容,写在index字段,个人中心写在center,共同部分写在common部分 - components: { - desc: '众多组件覆盖开发过程的各个需求,组件功能丰富,多端兼容。让你快速集成,开箱即用' - }, - js: { - desc: '众多的贴心小工具,是你开发过程中召之即来的利器,让你飞镖在手,百步穿杨' - }, - template: { - desc: '收集众多的常用页面和布局,减少开发者的重复工作,让你专注逻辑,事半功倍' - }, - nav: { - components: '组件', - js: '工具', - template: '模板' - }, - common: { - intro: '多平台快速开发的UI框架', - title: 'uView UI', - }, -} \ No newline at end of file diff --git a/common/vue-i18n.min.js b/common/vue-i18n.min.js deleted file mode 100644 index 8d0a5c0..0000000 --- a/common/vue-i18n.min.js +++ /dev/null @@ -1,6 +0,0 @@ -/*! - * vue-i18n v8.20.0 - * (c) 2020 kazuya kawaguchi - * Released under the MIT License. - */ -var t,e;t=this,e=function(){"use strict";var t=["style","currency","currencyDisplay","useGrouping","minimumIntegerDigits","minimumFractionDigits","maximumFractionDigits","minimumSignificantDigits","maximumSignificantDigits","localeMatcher","formatMatcher","unit"];function e(t,e){"undefined"!=typeof console&&(console.warn("[vue-i18n] "+t),e&&console.warn(e.stack))}var n=Array.isArray;function r(t){return null!==t&&"object"==typeof t}function a(t){return"string"==typeof t}var i=Object.prototype.toString,o="[object Object]";function s(t){return i.call(t)===o}function l(t){return null==t}function c(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];var n=null,a=null;return 1===t.length?r(t[0])||Array.isArray(t[0])?a=t[0]:"string"==typeof t[0]&&(n=t[0]):2===t.length&&("string"==typeof t[0]&&(n=t[0]),(r(t[1])||Array.isArray(t[1]))&&(a=t[1])),{locale:n,params:a}}function u(t){return JSON.parse(JSON.stringify(t))}function h(t,e){return!!~t.indexOf(e)}var f=Object.prototype.hasOwnProperty;function p(t,e){return f.call(t,e)}function m(t){for(var e=arguments,n=Object(t),a=1;a0;)e[n]=arguments[n+1];var r=this.$i18n;return r._t.apply(r,[t,r.locale,r._getMessages(),this].concat(e))},t.prototype.$tc=function(t,e){for(var n=[],r=arguments.length-2;r-- >0;)n[r]=arguments[r+2];var a=this.$i18n;return a._tc.apply(a,[t,a.locale,a._getMessages(),this,e].concat(n))},t.prototype.$te=function(t,e){var n=this.$i18n;return n._te(t,n.locale,n._getMessages(),e)},t.prototype.$d=function(t){for(var e,n=[],r=arguments.length-1;r-- >0;)n[r]=arguments[r+1];return(e=this.$i18n).d.apply(e,[t].concat(n))},t.prototype.$n=function(t){for(var e,n=[],r=arguments.length-1;r-- >0;)n[r]=arguments[r+1];return(e=this.$i18n).n.apply(e,[t].concat(n))}}(F),F.mixin(g),F.directive("t",{bind:w,update:$,unbind:M}),F.component(v.name,v),F.component(k.name,k),F.config.optionMergeStrategies.i18n=function(t,e){return void 0===e?t:e}}var D=function(){this._caches=Object.create(null)};D.prototype.interpolate=function(t,e){if(!e)return[t];var n=this._caches[t];return n||(n=function(t){var e=[],n=0,r="";for(;n0)h--,u=R,f[W]();else{if(h=0,void 0===n)return!1;if(!1===(n=J(n)))return!1;f[j]()}};null!==u;)if("\\"!==(e=t[++c])||!p()){if(a=U(e),(i=(s=z[u])[a]||s.else||E)===E)return;if(u=i[0],(o=f[i[1]])&&(r=void 0===(r=i[2])?e:r,!1===o()))return;if(u===V)return l}}(t))&&(this._cache[t]=e),e||[]},q.prototype.getPathValue=function(t,e){if(!r(t))return null;var n=this.parsePath(e);if(0===n.length)return null;for(var a=n.length,i=t,o=0;o/,Z=/(?:@(?:\.[a-z]+)?:(?:[\w\-_|.]+|\([\w\-_|.]+\)))/g,K=/^@(?:\.([a-z]+))?:/,Q=/[()]/g,Y={upper:function(t){return t.toLocaleUpperCase()},lower:function(t){return t.toLocaleLowerCase()},capitalize:function(t){return""+t.charAt(0).toLocaleUpperCase()+t.substr(1)}},tt=new D,et=function(t){var e=this;void 0===t&&(t={}),!F&&"undefined"!=typeof window&&window.Vue&&I(window.Vue);var n=t.locale||"en-US",r=!1!==t.fallbackLocale&&(t.fallbackLocale||"en-US"),a=t.messages||{},i=t.dateTimeFormats||{},o=t.numberFormats||{};this._vm=null,this._formatter=t.formatter||tt,this._modifiers=t.modifiers||{},this._missing=t.missing||null,this._root=t.root||null,this._sync=void 0===t.sync||!!t.sync,this._fallbackRoot=void 0===t.fallbackRoot||!!t.fallbackRoot,this._formatFallbackMessages=void 0!==t.formatFallbackMessages&&!!t.formatFallbackMessages,this._silentTranslationWarn=void 0!==t.silentTranslationWarn&&t.silentTranslationWarn,this._silentFallbackWarn=void 0!==t.silentFallbackWarn&&!!t.silentFallbackWarn,this._dateTimeFormatters={},this._numberFormatters={},this._path=new q,this._dataListeners=[],this._componentInstanceCreatedListener=t.componentInstanceCreatedListener||null,this._preserveDirectiveContent=void 0!==t.preserveDirectiveContent&&!!t.preserveDirectiveContent,this.pluralizationRules=t.pluralizationRules||{},this._warnHtmlInMessage=t.warnHtmlInMessage||"off",this._postTranslation=t.postTranslation||null,this.getChoiceIndex=function(t,n){var r=Object.getPrototypeOf(e);if(r&&r.getChoiceIndex)return r.getChoiceIndex.call(e,t,n);var a,i;return e.locale in e.pluralizationRules?e.pluralizationRules[e.locale].apply(e,[t,n]):(a=t,i=n,a=Math.abs(a),2===i?a?a>1?1:0:1:a?Math.min(a,2):0)},this._exist=function(t,n){return!(!t||!n)&&(!l(e._path.getPathValue(t,n))||!!t[n])},"warn"!==this._warnHtmlInMessage&&"error"!==this._warnHtmlInMessage||Object.keys(a).forEach(function(t){e._checkLocaleMessage(t,e._warnHtmlInMessage,a[t])}),this._initVM({locale:n,fallbackLocale:r,messages:a,dateTimeFormats:i,numberFormats:o})},nt={vm:{configurable:!0},messages:{configurable:!0},dateTimeFormats:{configurable:!0},numberFormats:{configurable:!0},availableLocales:{configurable:!0},locale:{configurable:!0},fallbackLocale:{configurable:!0},formatFallbackMessages:{configurable:!0},missing:{configurable:!0},formatter:{configurable:!0},silentTranslationWarn:{configurable:!0},silentFallbackWarn:{configurable:!0},preserveDirectiveContent:{configurable:!0},warnHtmlInMessage:{configurable:!0},postTranslation:{configurable:!0}};return et.prototype._checkLocaleMessage=function(t,n,r){var i=function(t,n,r,o){if(s(r))Object.keys(r).forEach(function(e){var a=r[e];s(a)?(o.push(e),o.push("."),i(t,n,a,o),o.pop(),o.pop()):(o.push(e),i(t,n,a,o),o.pop())});else if(Array.isArray(r))r.forEach(function(e,r){s(e)?(o.push("["+r+"]"),o.push("."),i(t,n,e,o),o.pop(),o.pop()):(o.push("["+r+"]"),i(t,n,e,o),o.pop())});else if(a(r)){if(X.test(r)){var l="Detected HTML in message '"+r+"' of keypath '"+o.join("")+"' at '"+n+"'. Consider component interpolation with '' to avoid XSS. See https://bit.ly/2ZqJzkp";"warn"===t?e(l):"error"===t&&function(t,e){"undefined"!=typeof console&&(console.error("[vue-i18n] "+t),e&&console.error(e.stack))}(l)}}};i(n,t,r,[])},et.prototype._initVM=function(t){var e=F.config.silent;F.config.silent=!0,this._vm=new F({data:t}),F.config.silent=e},et.prototype.destroyVM=function(){this._vm.$destroy()},et.prototype.subscribeDataChanging=function(t){this._dataListeners.push(t)},et.prototype.unsubscribeDataChanging=function(t){!function(t,e){if(t.length){var n=t.indexOf(e);if(n>-1)t.splice(n,1)}}(this._dataListeners,t)},et.prototype.watchI18nData=function(){var t=this;return this._vm.$watch("$data",function(){for(var e=t._dataListeners.length;e--;)F.nextTick(function(){t._dataListeners[e]&&t._dataListeners[e].$forceUpdate()})},{deep:!0})},et.prototype.watchLocale=function(){if(!this._sync||!this._root)return null;var t=this._vm;return this._root.$i18n.vm.$watch("locale",function(e){t.$set(t,"locale",e),t.$forceUpdate()},{immediate:!0})},et.prototype.onComponentInstanceCreated=function(t){this._componentInstanceCreatedListener&&this._componentInstanceCreatedListener(t,this)},nt.vm.get=function(){return this._vm},nt.messages.get=function(){return u(this._getMessages())},nt.dateTimeFormats.get=function(){return u(this._getDateTimeFormats())},nt.numberFormats.get=function(){return u(this._getNumberFormats())},nt.availableLocales.get=function(){return Object.keys(this.messages).sort()},nt.locale.get=function(){return this._vm.locale},nt.locale.set=function(t){this._vm.$set(this._vm,"locale",t)},nt.fallbackLocale.get=function(){return this._vm.fallbackLocale},nt.fallbackLocale.set=function(t){this._localeChainCache={},this._vm.$set(this._vm,"fallbackLocale",t)},nt.formatFallbackMessages.get=function(){return this._formatFallbackMessages},nt.formatFallbackMessages.set=function(t){this._formatFallbackMessages=t},nt.missing.get=function(){return this._missing},nt.missing.set=function(t){this._missing=t},nt.formatter.get=function(){return this._formatter},nt.formatter.set=function(t){this._formatter=t},nt.silentTranslationWarn.get=function(){return this._silentTranslationWarn},nt.silentTranslationWarn.set=function(t){this._silentTranslationWarn=t},nt.silentFallbackWarn.get=function(){return this._silentFallbackWarn},nt.silentFallbackWarn.set=function(t){this._silentFallbackWarn=t},nt.preserveDirectiveContent.get=function(){return this._preserveDirectiveContent},nt.preserveDirectiveContent.set=function(t){this._preserveDirectiveContent=t},nt.warnHtmlInMessage.get=function(){return this._warnHtmlInMessage},nt.warnHtmlInMessage.set=function(t){var e=this,n=this._warnHtmlInMessage;if(this._warnHtmlInMessage=t,n!==t&&("warn"===t||"error"===t)){var r=this._getMessages();Object.keys(r).forEach(function(t){e._checkLocaleMessage(t,e._warnHtmlInMessage,r[t])})}},nt.postTranslation.get=function(){return this._postTranslation},nt.postTranslation.set=function(t){this._postTranslation=t},et.prototype._getMessages=function(){return this._vm.messages},et.prototype._getDateTimeFormats=function(){return this._vm.dateTimeFormats},et.prototype._getNumberFormats=function(){return this._vm.numberFormats},et.prototype._warnDefault=function(t,e,n,r,i,o){if(!l(n))return n;if(this._missing){var s=this._missing.apply(null,[t,e,r,i]);if(a(s))return s}if(this._formatFallbackMessages){var u=c.apply(void 0,i);return this._render(e,o,u.params,e)}return e},et.prototype._isFallbackRoot=function(t){return!t&&!l(this._root)&&this._fallbackRoot},et.prototype._isSilentFallbackWarn=function(t){return this._silentFallbackWarn instanceof RegExp?this._silentFallbackWarn.test(t):this._silentFallbackWarn},et.prototype._isSilentFallback=function(t,e){return this._isSilentFallbackWarn(e)&&(this._isFallbackRoot()||t!==this.fallbackLocale)},et.prototype._isSilentTranslationWarn=function(t){return this._silentTranslationWarn instanceof RegExp?this._silentTranslationWarn.test(t):this._silentTranslationWarn},et.prototype._interpolate=function(t,e,n,r,i,o,c){if(!e)return null;var u,h=this._path.getPathValue(e,n);if(Array.isArray(h)||s(h))return h;if(l(h)){if(!s(e))return null;if(!a(u=e[n]))return null}else{if(!a(h))return null;u=h}return(u.indexOf("@:")>=0||u.indexOf("@.")>=0)&&(u=this._link(t,e,u,r,"raw",o,c)),this._render(u,i,o,n)},et.prototype._link=function(t,e,n,r,a,i,o){var s=n,l=s.match(Z);for(var c in l)if(l.hasOwnProperty(c)){var u=l[c],f=u.match(K),p=f[0],m=f[1],_=u.replace(p,"").replace(Q,"");if(h(o,_))return s;o.push(_);var g=this._interpolate(t,e,_,r,"raw"===a?"string":a,"raw"===a?void 0:i,o);if(this._isFallbackRoot(g)){if(!this._root)throw Error("unexpected error");var v=this._root.$i18n;g=v._translate(v._getMessages(),v.locale,v.fallbackLocale,_,r,a,i)}g=this._warnDefault(t,_,g,r,Array.isArray(i)?i:[i],a),this._modifiers.hasOwnProperty(m)?g=this._modifiers[m](g):Y.hasOwnProperty(m)&&(g=Y[m](g)),o.pop(),s=g?s.replace(u,g):s}return s},et.prototype._render=function(t,e,n,r){var i=this._formatter.interpolate(t,n,r);return i||(i=tt.interpolate(t,n,r)),"string"!==e||a(i)?i:i.join("")},et.prototype._appendItemToChain=function(t,e,n){var r=!1;return h(t,e)||(r=!0,e&&(r="!"!==e[e.length-1],e=e.replace(/!/g,""),t.push(e),n&&n[e]&&(r=n[e]))),r},et.prototype._appendLocaleToChain=function(t,e,n){var r,a=e.split("-");do{var i=a.join("-");r=this._appendItemToChain(t,i,n),a.splice(-1,1)}while(a.length&&!0===r);return r},et.prototype._appendBlockToChain=function(t,e,n){for(var r=!0,i=0;i0;)i[o]=arguments[o+4];if(!t)return"";var s=c.apply(void 0,i),l=s.locale||e,u=this._translate(n,l,this.fallbackLocale,t,r,"string",s.params);if(this._isFallbackRoot(u)){if(!this._root)throw Error("unexpected error");return(a=this._root).$t.apply(a,[t].concat(i))}return u=this._warnDefault(l,t,u,r,i,"string"),this._postTranslation&&null!=u&&(u=this._postTranslation(u,t)),u},et.prototype.t=function(t){for(var e,n=[],r=arguments.length-1;r-- >0;)n[r]=arguments[r+1];return(e=this)._t.apply(e,[t,this.locale,this._getMessages(),null].concat(n))},et.prototype._i=function(t,e,n,r,a){var i=this._translate(n,e,this.fallbackLocale,t,r,"raw",a);if(this._isFallbackRoot(i)){if(!this._root)throw Error("unexpected error");return this._root.$i18n.i(t,e,a)}return this._warnDefault(e,t,i,r,[a],"raw")},et.prototype.i=function(t,e,n){return t?(a(e)||(e=this.locale),this._i(t,e,this._getMessages(),null,n)):""},et.prototype._tc=function(t,e,n,r,a){for(var i,o=[],s=arguments.length-5;s-- >0;)o[s]=arguments[s+5];if(!t)return"";void 0===a&&(a=1);var l={count:a,n:a},u=c.apply(void 0,o);return u.params=Object.assign(l,u.params),o=null===u.locale?[u.params]:[u.locale,u.params],this.fetchChoice((i=this)._t.apply(i,[t,e,n,r].concat(o)),a)},et.prototype.fetchChoice=function(t,e){if(!t&&!a(t))return null;var n=t.split("|");return n[e=this.getChoiceIndex(e,n.length)]?n[e].trim():t},et.prototype.tc=function(t,e){for(var n,r=[],a=arguments.length-2;a-- >0;)r[a]=arguments[a+2];return(n=this)._tc.apply(n,[t,this.locale,this._getMessages(),null,e].concat(r))},et.prototype._te=function(t,e,n){for(var r=[],a=arguments.length-3;a-- >0;)r[a]=arguments[a+3];var i=c.apply(void 0,r).locale||e;return this._exist(n[i],t)},et.prototype.te=function(t,e){return this._te(t,this.locale,this._getMessages(),e)},et.prototype.getLocaleMessage=function(t){return u(this._vm.messages[t]||{})},et.prototype.setLocaleMessage=function(t,e){"warn"!==this._warnHtmlInMessage&&"error"!==this._warnHtmlInMessage||this._checkLocaleMessage(t,this._warnHtmlInMessage,e),this._vm.$set(this._vm.messages,t,e)},et.prototype.mergeLocaleMessage=function(t,e){"warn"!==this._warnHtmlInMessage&&"error"!==this._warnHtmlInMessage||this._checkLocaleMessage(t,this._warnHtmlInMessage,e),this._vm.$set(this._vm.messages,t,m({},this._vm.messages[t]||{},e))},et.prototype.getDateTimeFormat=function(t){return u(this._vm.dateTimeFormats[t]||{})},et.prototype.setDateTimeFormat=function(t,e){this._vm.$set(this._vm.dateTimeFormats,t,e),this._clearDateTimeFormat(t,e)},et.prototype.mergeDateTimeFormat=function(t,e){this._vm.$set(this._vm.dateTimeFormats,t,m(this._vm.dateTimeFormats[t]||{},e)),this._clearDateTimeFormat(t,e)},et.prototype._clearDateTimeFormat=function(t,e){for(var n in e){var r=t+"__"+n;this._dateTimeFormatters.hasOwnProperty(r)&&delete this._dateTimeFormatters[r]}},et.prototype._localizeDateTime=function(t,e,n,r,a){for(var i=e,o=r[i],s=this._getLocaleChain(e,n),c=0;c0;)e[n]=arguments[n+1];var i=this.locale,o=null;return 1===e.length?a(e[0])?o=e[0]:r(e[0])&&(e[0].locale&&(i=e[0].locale),e[0].key&&(o=e[0].key)):2===e.length&&(a(e[0])&&(o=e[0]),a(e[1])&&(i=e[1])),this._d(t,i,o)},et.prototype.getNumberFormat=function(t){return u(this._vm.numberFormats[t]||{})},et.prototype.setNumberFormat=function(t,e){this._vm.$set(this._vm.numberFormats,t,e),this._clearNumberFormat(t,e)},et.prototype.mergeNumberFormat=function(t,e){this._vm.$set(this._vm.numberFormats,t,m(this._vm.numberFormats[t]||{},e)),this._clearNumberFormat(t,e)},et.prototype._clearNumberFormat=function(t,e){for(var n in e){var r=t+"__"+n;this._numberFormatters.hasOwnProperty(r)&&delete this._numberFormatters[r]}},et.prototype._getNumberFormatter=function(t,e,n,r,a,i){for(var o=e,s=r[o],c=this._getLocaleChain(e,n),u=0;u0;)n[i]=arguments[i+1];var o=this.locale,s=null,l=null;return 1===n.length?a(n[0])?s=n[0]:r(n[0])&&(n[0].locale&&(o=n[0].locale),n[0].key&&(s=n[0].key),l=Object.keys(n[0]).reduce(function(e,r){var a;return h(t,r)?Object.assign({},e,((a={})[r]=n[0][r],a)):e},null)):2===n.length&&(a(n[0])&&(s=n[0]),a(n[1])&&(o=n[1])),this._n(e,o,s,l)},et.prototype._ntp=function(t,e,n,r){if(!et.availabilities.numberFormat)return[];if(!n)return(r?new Intl.NumberFormat(e,r):new Intl.NumberFormat(e)).formatToParts(t);var a=this._getNumberFormatter(t,e,this.fallbackLocale,this._getNumberFormats(),n,r),i=a&&a.formatToParts(t);if(this._isFallbackRoot(i)){if(!this._root)throw Error("unexpected error");return this._root.$i18n._ntp(t,e,n,r)}return i||[]},Object.defineProperties(et.prototype,nt),Object.defineProperty(et,"availabilities",{get:function(){if(!G){var t="undefined"!=typeof Intl;G={dateTimeFormat:t&&void 0!==Intl.DateTimeFormat,numberFormat:t&&void 0!==Intl.NumberFormat}}return G}}),et.install=I,et.version="8.20.0",et},"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):t.VueI18n=e(); \ No newline at end of file diff --git a/components/page-nav/page-nav.vue b/components/page-nav/page-nav.vue deleted file mode 100644 index 3f3c0f2..0000000 --- a/components/page-nav/page-nav.vue +++ /dev/null @@ -1,98 +0,0 @@ - - - - - diff --git a/i18n.zip b/i18n.zip deleted file mode 100644 index af1b38d66d3a539c23efd552758485ec1e6c352a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 594534 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%0Dbf6XVDAL>{&58;VFaMEd~PP< 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

@X*R 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

pfaV!Mja@ha@-Q zFScKdXg^qPl1}TW-6Dw6Tkr$!HV3E7y&Ppkz zzu74nUB8ZNYiY@;>h2y>#b*rtyJNQw@KkJMvxBs*kZv!If;B{3vUsZ2ZbH(s|Gn<6A+Zn-bz^ji|w&>B0(TGaOKr((t6 z7=FAf|0D?RHHM96JN7Opc||9;gBzoDu4`szi_PfIP{K^tD12}>c^!?oVNy>gcD3(}*#CA4a#E1`3}_8$+xwsY1M2+iJ^f!$=l_{Q{!gzd zt%1Fbt*z1jXkNAQ2Ui%j25GDP^}@3L;@7V=#QI-_|HI7M_1D4%`PVpZN%B3= zC&lV)!R2R7VvZy%)dE!3Q3*Bg&0iX65}n|8H|coH?#v(8&kA`c+7?7QQ3cp9yktgCjwky=(LJB6vswEIk$2Bdl z$O!8X8(#=qhq%#5V`)O&EZvhpaTCjk3r|X)i&zO86U&W6GeR4GK=MdU@>c~i%E2p4 zK;)08QAiW=m3u;Fsv4^p-6{J8fc8pA{2-kHqjPGik6M$$Ah zqlaIWu#Kujfvk@OXMadEJ^m-TA-S?VopG}&7>bM`r8{0M#!9<8I!ob}KbIlAShD(9Lv6zJS5dGqY&y@6EM^ z^-Vx>J{IAanCp6U(&4|$is(2ck-sjsoNlFehD+LCfAk40!K(VYA=U-ZC50Ox8k^#c z)i)&Y`ERe zta+ZYwJbb6hCDj2yEA@XIxt_(<({I{u0PYc9G0|S0fRT$;Jd=mpQ6&MF<-IUha0A@ zS_qD-t=pPTC|#aqy)2fS%gqqf*lTTrmlukTA7l7Yjiu@x=r-D0*H_&!VV2m)(v^H{ zs;$|YRr|mkFR*u%)PW|d!rW}^;4I~PvUMeg=gwDv&6<0mQRZc5izo%9V;P~>N1#pW z1YMWHEDPuTiT@cWHpBL$K=@DmDiluI)aLLj2-V_eAKqAjZ!u0^A}oxP&=2yka-Pxd zk+YN5QBekX0V=apZzj+LSU`xD&oSh_EKUJSigB3taxE&o565AAv^YVWuP^^U*=PC< zPXqck8Db({E*M|p1sg4!V_5V@*>&ZsZ;N%Jlg}_I>0dp8QWha;)}3pP_}jY?s~)X~ z(>s=vUB?dyx2+pW*Z0ul%stDUokz6QZSZ(P0)a^i9m$OVfqp|BU&|R9;@M5X3D=i= z{QT;4=A67^I59(n{inA&K&XnvQUFmKF};GjS`RtYRby|quc!Q82kkC5buK1Qn`YeV zP9?u#q774F6H^~-7n(QNEoz-=6W5=lH`5k`Pbu}47KW9~L)=Z6dj=^eHxFL{Hpc~2 z$ZItR%~W7yEzTuQZbRB0E1CIiM+wtl23#t5u#XS-tX5X)%!B0*>j`5gOt@gkK2{YQJn3i#_c2CJzvQ!?J6+OL==Vfc3Y2cE84wN5}T*a#`Gv}(=e zA5~N@G=?*vT4&BM(GLpcGlb8@>{1{{K`tFGLA=d*kGdxLp@I_!PE*<&zF51^RZVTH zTH4l~>D4R8?319J?!W}#`5-}guSAy2+bZGuPHbhkfZ{+naqLxGXtX{vb*0p^B!a1s zcf@)40LEzr8P;&-eQ(N7Fe*4c*GL!R?2lJXP_6a$`ogRD&BgM&G9W@l^wA?5A zzAjpxFLb|whnS2}eEns#MjDT@1pNFXfmRwLk@;c4tMz{RT#U!P65;c*k(iQHQ_Z{L zJTRb4{0zzs{r4F5cchzR&W%;P`n5>mE?O|b@}`~CntBZS-P8p!*y)&0bcJ|@;9|ao zL`ZJqpb^wlN#I`c2qqjD39!kjqt3C`x`1N0vd+b&18%+)EQe|y;KD)kh_z>d#nqNT z@&0uffnbh0+mju41YL8!`*DNJ`{=&n#XGR1UQoz|9rKGW*Adv)lUuKr`GkhMlCH&a zL-k3<-N(|zq5q;;68=_s9_A)T?U69HDl3`DO*-W;q)JLQ$radKd$js)84# z8NAc}G%|iwsKo9P{pMh1;&HHr>7$HN7@I7?T!|K3WmYRI19dwa_Mm}E1h8nZA)~?m z3))`?Y#N3B!o?*v-ypY2D12zHF(&~VvR)5q9!|-4YQ@WdDKxiyF3XIttw3&kym!gP z0S9Up4`f>E=_w|iA26VlqwJ~tdlmzY$B{c@p70WOa(nj12tVhyf8)L&OCxy(X79Y8 zN9dsY&B}E#8D&D`l4r|(QFxH-QjI#MY*u{>vd~jKB^4**jSNQm${o`gfoz3xwJ3htt}>(20oAD1kcr@|^|+5PEc9F~mNRDq7_btqEw!bwEv{%Kwt z?{%2ySOGe+;aRq>7`Nh@dPp_lMkblN`QTP}Tn~1HGAc-M zR9r^lgg8XR-FqRp{=t()+K4^%XIA;K$L)S7s*Oppa^JvU2QxY~xdm%Y$i#?=@cLKE zC2_YGD*x#w=+NCv>3(Mdl_y4B{0x#uY&UHj*kv?J%|$}Wy0W}gp)}`$^|DTr^XuYs zCT!M*@cFjXK)j97=^VtH@8&34Th~wO4gV^1W2y&8pP_fRp<~_Isae6htpH1;^aOjr zJUuJReh4~A`@??Hu+ebnx6qq9L5_GgV=CiR5tEDUP2Zs zdiq!W{*O*`c8%);bkvc??RYFg&6Zm^kD9+d;Dvr9z4$sm1{q_m5NyL4tPJx80K#Jz zWjO7m;97GUs9n56i*?`9wC1KYO-P6ii(qJwMoV*7n~9&{+HxM4?A)mwv#mzDFQhq7 z*SseqY9>fQ{PkkjaRRC??=2r5z=JbAof!#fk`EV@h$VOng>V(9KctTxP-DEQ{AWI; z!fI0cDze+b0xoUBuHS5rM7GK&&^@Qs|`jzR!_;O(lR63I?igzCGV?(MpyuFlyL0!O&nKU9j4A>hiyiKo7v zYSc{LA-i`B&1l&yGyW@I!dyw1FZ+D`zk>Z%d@-w1d*6WX(HNeW1=o=djCg>^&^|x0 z(9vZB^Tj$1_HELDTh9-A;|0Fw*Y_LErY-|c+sjpiCKTS+2JTcibpv~j zJSi`z!DgQD=Q5hZ#xN&NtZ3Rs`LTLC%*k7RbVVY6PeZwA%zEZprTqO`y-?%6`X7Go zk$BWhT0OYoU z1{ChyW}n{XavtC@yUTG$>~JgHxmE%d#xW9A+@D~^7 z)>K2OVn+2zscHt&`Xb!DeW3lJ{}{_ZCA?$psICA&;cD^ zJ4mfNbfR`CZgOJhyf0RCZFz!2J+4x|fB$x;s|ZBuGp^fu?RE(aA0Mk7u0-Tq+)<*t zu&~vjiGj`K9T^#ioBS(h%o$@WQzDgy5A<0KjK_rS^2KRN1hgkkWXOhd>@5@8c!?vR zE!gGRy=jyzI*j!k*pysclQ=mP3ygcaWRo|4-=jKeM6N(=SlQ9vN)#y)n(1^+PZG$; zW|Nq=k5x4fj2f_SIMb>&Xd4%eC7Aa^%(31{Crbl6$>`{dpQqys=*nU=n#GYX35mwZ zqo8aIJ6Nio5jKlAdw#C!keRM}M+^H)j?G)m2H?B?2?f$)sF&eUH^5c~VQFr&iqroK zTSKdz*5zvDWMymxcf7m+Xp;fUm#YI{e;n#*eSfuz49uf`1}mXaBV*ot0-mCdz;FX) zp8*I*!bcecYBeL04AUUcl}4a6i3NzR*RW{P`_h{FG#8$xh!*=CzvzWlxwl>c2&+Eq z>?gEh7|uH`(8YP*6F1ogdk0!9P zXGa_z1l+4GA(0+lHePCH6P+F<{-jx%K-{cPVYDI+Cb5p)?<6=g_drS8$GKZ30;tXq zl0U$=X5WL>TxOt&!cDNqA8jk*An{sFh^_$^^G`>QnGcY|*DwndJW1hJBjEK9@z zyIppp36@{|>J`v}u9dZW-EJz9AY(n^uLeAjGQ)mvnXYhm1W0K%c$loz4StrS8=Hn-=Ja%t;IR{u8tY%Uf z0=rKTIBug}AS*PY{OUu|6=Wj$-ED`9GXxqV`;`+6T5fpD6pnwIKd;epW~p}Y1Y&Hkb}k0!F{VsV-XzcC9g8&gyda0uEoEai_t zW~D$_lhthgHx+;qM+&9<)hy+3B+K%o!XAZkh;xe+@1eDLL9+QvqDxYN9Lj9n61dAH z$&d$+6z>SactKQyf(7OR1h6W-5t(cshxiiig|`%eBTms|T>sz-Ia;GZJpEC|rZS)| za41njXo;2yyaQTrBa|`kN;OT;Dgi*gQEz2o@Itmh(D4{ z;F2~hU%`#RF-+QtksQ`+W?J9H&x)?HqB@4R$ox~h#n~#5vu-_GZ9VZ zaqeA16{wcT5n6B9i7JGJD2vXChB^XRoM0ASSmsGwTq2b$zZlo27qU@x@SK7(d=J!F z^3gOji*hUXpmVoB0GFXjz#2GW6d)cG$kw4rB;xVW!P4occbZX0!cqyy2nyjg%XA?PBv&_wjah zU7>sP^G;`a)R$$`^KpeM;4RO(F*f)*5$7n*m!(wBK04O#+A74uRxqr12C9M=u!kGc z%H5mj+YG!Nn1~clRU#z(N(=~|!IXz0XaV?;s8G|cw#9-84@t)rDX8zygCRND44)WU z-4`a6A(GM$WuetVlQv-KOA8wYBv#) z!8GYVRRl>Z!co|^f*kqJ#OL+KD;s!KL<4>+s^qEWpcEtM(-!WLV3vPYagRIl8&Pwc zRp7*c&jEd)_cFaz3x_C8#lBG564gmQ-5!cf)hWOzaBREn@djx|5J>OVAb7CYeM5~U z;uJB@q7FvD4l`dN%=@pmSmFjlDN7NRtXi>}aE<+RH&oMEHo9+xVGK(Rvl6eL&eWbY zR7**ra$R4k^dPll9sfyhTiU<0|1_G?>Zc-w1qx!%9xEd+V97s|fCH3=At1O3F&r{O zQW_UKQH%ee4=ER!51r+oHW-^*%Qk5xjU`!(Gj4%OmO0ZXqKA*irDw!3v}Gq-HMW;w=@%prQUN0c(DWTcQ8u2gbDCr){ z2r^*9Pcpb$wh0$5cgx}55gf69;|;6itTAk$g}AF5Oe_NPbqjiQYyS)@mNyI|o)Y8)Fy-&;yB zO^bww8Ajuw+he6(`%zKA4pR${_Y}&r4>nh5nQz;h{G&l;ylrYgg5+#xc~hLTF&jBbWomNqDGmdziQ|IT zrEjjB^PT@@DFG{!YuCvUl3ph)lp@tcDjL#JK?Rn?IvX zvFMxG*X5pfe(U}(U!7BlBAX6n2Bk3N=&5*S#-HU4a|Vtx=+f6~*M2*^BJ^0CRcw-` zjd3#48I~<;(=tDtTv^zdy<_cqx9XY3KTNOFmp_a^D9hFTI9#�kbp$4D-wph(a?u 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

    wsmU6Uyfoa3S0Umr)zAfI`VZ-F9z7P z4bMy18qn`(G5t@KGo0KIwxv;D1v40&MOZ=Vu&A(aR=l2H>*m<6wMnsyWuovPPdv<~ zmYJG3eH8F~_!SX$p}@bPnYO8S$!R;rD)=07xJCYblU4giZSnUkl2 z3iCOa7#3@ob%4I+YLJNS2t^?Falq!ma~^Sl=9W%woo7>OEXIIAdwX0=@HJX7#0#p) z5KBX_6YU|GHTbF%MBtDGHlvp}H=P^LDZFO;@Jl4;rE>m1_u&RMs+5aCb(kCV9aPSc z{vXVT@Y63eaZPgZ*?nF1BPUl8l4c(+aJt@{C{20{$EeItUtO+dwG&TM+)l)(hw!y# zq2{D5;JoI*mKGZpA@7bF6Uy{##umb3?b|g1t(E%wbq)e)6;2P%Y?-EI0w?PYCh_T} z7Z$L%ijZ6-4p5!R$CzCh{rpPW#^tW9%=tm&RVZzDNy{hv46aLk%*#e?#(Vr2H$rtG z#cGjhpt{dt7GoM6RHg1*?8)xD?`WLmh#tq;3~9%V8f|B-S4Ri z!_0aq04reOlvh_mwkPHXMC{W6PYstXlc+@B^M;TS%CW#fV&o-%%(*g#_vUJ@%Vji8 z7~I0^tk8CXDU>!XPzxgi9l`gUT$I#t1hO`V85x8MG1gAm+cci|!xiG3$x=5(Ij#0V z!gxmOIYAn5tK*Dz74TPH?QJ3DODZ`mvmz)j4gK7%n9lYT|I8 zQpk;xUy<5YLIL{V;*Ce{j!1EK%Cm5ZJJn6YPfU( zKm7}fX26t>)J}_#ibM(MyeceeYgC$Zkf<-Jmv)UG%9`~J`!vCX)Yc4b9Uk-5FQSig z894~VSH4ElA<<|Z3kr>j;6f2h>2t&FXe+z>rB{H`d8^_eW82ynA?(*?qY47CiGtI7 zx!mn-n~GJx4sjj>mLl$q`u2i!WdH=4LGg>i28-zEbW7eHYgBBvG$)F|glGe_ITELz zYnib49)5n`73)a+lS;C7q>nj(<8k|b^my3$#LDeH_`Kz~=hSt7J9fZ&7S!~9#(cnH zWZCvzZWVl8GX2$MAMCttN9ulkvFcoWpWyx6-*6Ljc~Nh3lx;KDvLyIYNYp!pdst&Rn?>FPJhsiLZCRII#5nd@e73$jbVfy0zbKSGt4oKDe70 zb1Pxhst(~HEXuT<&hofD&&U+zI}T9WT#Sf_P-3)c>b)N7{8UfTOq)68}!0-t?l+V>wZs#=~n3+qHa-g z;PF7Umi8il6ZGi#^L~BpWoGm^>8G-yy-1^8@cbk zUf}WGJiquz)wT9|O;*+Yp@92Ji~P1=&kgdr`}%qPsn4<%8A;{&)C%)Dn(lhz)K7oD z@p_}D;F+9HO~l@`nLIMJoym8{VS%gpu$T3{Z3yr_y6SQ#x>F<2LGsvtR4?~!K=M1Rd>aXU*}iHNoNhzo}sl;?3%ff2rAtX=u4BMTX@PQNnRaKR%X=x#;1l8!#x zH`Y|@e#l}uW%bMPJ%YKkp*(APflFo#gvb~5e8k<`a{Q&nE7|CJ_@wqzMfDnT*0sH4{nv`$T5;H- ze>*b4X}g!>teE($J9KM*Vl6@&s?6=jyVu?N)v(Cpp0RyD^B|otOQPX?(>vm=*f*L{ zm*4$>QLieeYxSOscqyLK3v?>Y?jumbUDmFhghztW-4yGK8g zv5hpbvHV^I^raMZZOvW6zuNPHvAoeV#qw1?#-)@C^K5;%AWgY&vq*oHI;&_NdajR| z_6at&0hr)p5>@@Tt7*#8uXOr_1us69F?ah->itD*9iHZ-SC%4zXzuX9HH2A=f8pob z#g!q5v9x#C#7)T#>8rb}T5{O>L%Oo_;slQHpyxg14_tNleUqchUuO&g>@8h5R45>d{Yp;J3?;a>$ z-X7mAjJ_EU@qK+>8M<#Q9=9jgeBgnJb5S>Ru7XaocU)$2UB1yE`UfFedS8qK%w~4H z;8(v<%2xofA#TGTwlCT}Zg`3K?AO1$UXHa}$jv;o{)}F^9>8orT@={v_&v84Qh56N z6(YvYza4GaU4-xWf${m$4wU^|dS#A`SAy4Ge{^{Ny4P{SAsHasl;?A)woMpW>O5PvvRxtcQ)05lUun$0STOf^ zG2!TLR_n0IQoZ4e{Gki}ma~g^W^lfiXh;reW4y+Fs9_97r56g$i)MF@T9YoY4Ux%%LV!> z4PF7&FXcKjPu-*Cm)-^F{rpD18IYadXrj^bW~bCq8O8Dn6!g{GbQqMyKXSIU3_EY& z#P-RVyn~VSMsjl^^g3GjF$&^2(Gga)Hh=yD_&;Zx`Cp<8oh^(^X#by#Gyg#us$D8Q z>;KXt?&AJ$pbYR%<(Wb*p3Ruw-n68)eZC4 zeAdqf#dAC?uGlXnTQ)AOz|wUf?SPQG@q_^YkdXT+mjH9|M_9X~(Vbhq6MCyo6&3Vs zaA}vZuEj%1m9p6%oKGt43rP)}A}qzVnbRR$cH@fh5>y2SBm*9TOVXT_kU9l)kEe!o z(zcL}T!<+#*qGJi()*!nrQ#8{HmjKD^N&eIKPuAW9>lVNJ7a1^8Z%F9t-tK@(T0Dr zbs|%`#@9@mlZ25V=dPqZ$Oc}|rZ?x4yj9 zNGrD@81Qf3thN&0%oqp|kAdBCs775LPYw^Ket+A*NzY9*C_x`FW?~UU(pScebt;}Ms+j6T7F~c&$C6Eq4zcl7U54!C zH{#i*iJ3+@LqAt+MH!J0bT+i6PIa?GePx$St|sMmfLG6YH=D81nEQ)tWU!oxQIBFi zN@nzWYJSQ$M`f1`YfKJ6{FuWYnf;fUK^Fxzo@P27E>_6P%bUPMm61v;L5m&o!zq)j zyb$ggDZ*r`YVhIIkrLE&L)_Xs=TcuQz_8c0zZ~?j{7z?i_lRq5iA&=Tb-Sd2Npr>1 zlzYX6eRFkorzy%Vja#5hkoG#1!$(7ZoosfU?D|X%y@1aTqxM{y{WOfHpcZg`5SFlh zwPTq<6k!=qcZh5}rmEj)z^iNeugXp2Vl7@pyU`T>N=*n)N@+%l{BE$JY_PiR4Cgv9 zaQOfdBXwn^YWM|jrl|~roT*qtHSFSRYC^d>u#^dzFfHvnE1CHbtw5h&qmdk5u5sRl z%Z7Fc?59db1?@O1LGN5CvG=f1CsCI`XA5ZKU=uea3;MEr5cdN_4lX4=N7MH&&$s}v z>=6||t7%Fp4I4_o|1U_sYrbD@c|YUCpi1?RM+f!}k+^?y zyEu%xGwoaSl2TuMVknVoHXFC{wnwwKT}huez~?5()({duNlMZ+*4G{u5MV@CV&MeC z_A$|$g1HLj3I;MzV0ivQRF2#a(t7D5ye?RxhHDiTax&V9Q)Z>N8^KO{0L5RE%s89O zF~j_Y;sP$d+^o|>t!@XOooOcX#4>k7>)2wEwb;HOV@^$l>aFx&L) ziDfdq_F$11ti$7JWzS7<1)FH}#fE9s38{;Jmb%5{qa>*y+XW;tK2(-ej9}$C>e2-b znY4R$7XTWbk?kGXFhYIawJGZ2F|Vcd$DE#v=e>tu_VEL9@^Bx+)6%CiZilg$B*6VG zh%1;s|6#VxoO~TpUP*)fr4}r+)ep%0c)Azu04=3y{|f8M7-EwrK(UFx&(^Ur&&|H5 zqUWZbRCUM%GrH z^pHiECuOd!Jp91tI(-51MboqzZcDRT93%gmXz(c2QFHdisWTnvsn=Uo((DU2lri0I z7(`WBQ2QRmiW;-GOB1D_}*#g4Wo@z=R+|(b8!%H+c1bl87c$~_ITO3a)oF?K0+@>ZZ;zK5n?mXNY8#N z3?W2}{;&;G;L|-^mX~!-2-lLlL|c`}(Sk~V5`;hhWLvcV`M>rZ-{#oLKwQku z=S5YMbKcQfoCu=sDCZe6gm|mwvCuurOtaghfkB0nQ%>EOu$|pu5AR{DZNql(zBP>< zqa+x66nBPFCKeEtegyJPUgnGn8^O)E z_j%sa=rhID_^kew*rE{|<`U zU!m_vh6s#{JzO&{WYD$;3gTC7mw#rkZ#1_B2UYkf@XMGSc3jUr-l5JFvScGTNdAJ3 zSx4&M($bm0@!eb~;Vf8y$Ko}Xen96JC{wxP2Cs>+Rxq1BiWdYE+M=26=2GbjR>O(Pw@krS3{Pf|V+SeF!G=i=M@t>t#FDui z64U1t0mao_xZOqmCh1~p8ncotAYBwlOjo#KkJ-RI#_~ z7Zmf+t6S7e4(0g7(Z`{@zgE4*nM=&D^D2pXd0?>iD%Wl;Q}=_M4E{7S9OT_L#<2Q7e{m6qI{xro*j!5D5XOe?ht zNNK(}9dpx6vb#h;B?j4&T$Tui&l66?2sO28aBpHZt&vB(a|h2^6kK5H9UCsHCG`&W z>wEK?j$y< zJVl+l->+$vqE}w)GKm&QQQ3}q_I&6*@cx7S|9{@=Vq<9HNNZ^4{$H3D|3eG@HQd{S z3=aUXLH)nZd;f16zj^Qf82mSO4b6*RJs+eW>xz4R7)h$cz7%66d*PNgWknHEmt?7P z@hzX-wuv{)YanyA8j87OL~)-ys+2+o`IF z^?Nnfd^nJXZg^X~zjtrW8k|gYsj(n3y|-gQd7&CoZDJWsndQ)5TZy8B?1K69f9~p~ zoobO}$g~cW397t@Qncx@&t(~T=71_vB|wxSm#D~^Lks1kzQ#VO>bWzMqh4RfFpP*! zF>w=#-2lB(=owQ&B8p#3$0ziDW+@; zHbtncj~ zB*=RGz02NLnowvF#Jsj9+^D9fb=2vzbODkB!IUG#yK#)uDwHKp7{K2{Ia9uaiX^ME zAxii4JRGDyMa=3zGC;@7$72=dJu#h=ipuLAEg7|M#>4fhS z3-|pfK26cMdLzO(bO9hoOQprxnZwyJ`=%{fUK$zdbhdGGA3@HpRiCECET3J8xXWTW zgTUP@wL5y1FfplkJ4Fi{?}bZ#rhaoPsZW^)H?H`=+4tYPT(`=(_(ccw6YS5o$#i_c zfu7fb7A6>Ye;71+f50HRH>S|p#hxNmcz5JhM)E<)F_EQ5 zym56(&K`F(sDIkJwx7C`$^hc-hPU1sxH=`UXRkd8qjrO?E4h#1p(tu#(82SynfrJ& z+!$s?pII)noES1BKh>V;EdkGBvozWY5RMZcUe2v(MnX0$8c zvZ2I>nM)2!$?bP?xWQvS$Fgqc!R^-D z#164Hs<+^FO9SuRTp_Y8!`G0$x^NQ8b8Mx~wFvr|#<74+1M~2;w@w+r+tRI|etMf_ z95bA)?uDf8m1Wy^crN2HGz>*)6(b;+FHgT;hyB_Ei;Ccuv+&J42BSRnb5Dxhp_KVI ze4oZwLsRI@ptP=0ZhSKzg1HKJ zX<)u-)*1ivMZH_3#WEIJ6nW2lJIh^nV6S&T9qj#e?kf5+2)L>4hy_U<&&YIT#W`{5OQdU2@il_}{M)X`azlr;_-%%5RQB2y zCpuAzPU`Wy=~G5+AgBD+Z6eDBoST-)BBPpJ?=rm9bzw87w~;bQYc?@`r3>Pv z0_truw^*v6?O{i6NBhT;4mSXrdEMIXv2BekA5HUqGZR6}j9??X`_BZS2C;7%=>aGm ziBMa93RqgjLL2YMp&Fc8x2jwnaCec=gPF1IIJGYbKQ5*j`^RZ#-Mdq5(%1yNo4Z0S zy+6PYQvpx&?{F(`9ll1mil(%jTsgq?nCiQ}BTU=p$V#D(2E9#cb*nbE*y_xBEIflj^ZP-@p0HYvTW+M3zK^JD#dRf)=V|-XjM^1RR+k(r8#S$G#4Y8c&y$%wK65_ zGIz`mDzNu=(izN{7*bF>QL3O<4+w1?WZH3X>x%r?BzAa{H{(gb63BLzksR!hAr%-xE)IEBBd0^0 z+1Rjqrd269)lvS_g&{Fl-;D@8dI)frM(aK1@y6MZre6qv4OgShd%YA%o2cUB0H7K)kan=!L2K3R-@WfIoIv=L zO+I9dLM7U+8P#@-b?J5qFbXg*T|IV4DcxbyrH zMr>|MWGG4%nc}#Ph?nmqH8ME^#2uU4Ecn(3eW4OcI~~^Ar9{>T>vMdx#jC>z6@u!|yS@DKNu9w4K+cX97MH4=$}2ae6txdbbNtmn3PZ!w z8bgS2W{^+c2{?^mtMkTT&rxAhS1n(I=Hrjhu6tVn!_z`o_=$nl{~kQ*1oj7Qg~vnH zSF=Iczpx_H#kqKD?F@2}o(0J*M|jj%;!>($2&h&~?qye_3Gr77td>%;d#o=lL)Mku zLzvFChyj=H;8oD|iOkP|5ByE*u{~RM;&X8G!X$`jC$sQ@g}fHhWH5UNj8foUF_{J- zm-+|&alDB(I%4ND-(r(B+|y|A>$HP3z)1S`UvZ4nC zs)SdKfB!$3!K_m!QO5?cnDn9-V6Jr>iZB`qpx)S_o33j=aHq9D9GnF*5dR(S)Pr8~-m7%P8{fu=V6e{@k+>U6s zr=mu0<4=JnJ6(*%eMSIQXP7~)Z&#-Qq10Ddq zY=Bp<-ObZ1tFVj&3RRxpvc2CVlA?<14b(;1=_4zRWyZr~CB|8qX-M>Uv7}LzGDVMg zn_&4=J-gwLDto&7bn~J7)XQk33v59+-+>PxBajF1KG!jVidSU?Q4PS^GU2P2|6;bW z9%U4BI3cV^cCqG>#{4^kFQe3$cUSG$^du#SimraLA&^UXS%jV$K`LMkk3GewhOCV>|j5%l-Ppd*V0Y1m~8P5@(Mg zMqnt?Pz;ok;Z>CO%6+G4rYLXNLv=azC(Wb4v8kY+C$I0VFG5&-+#p!$_Xt{gy5Dt_ z>eG+}%oWCp6na3=hxIDSo8t`suu#5657%DU4p*=7f?ty9Qy9=Z&ITPv zB$CoNnF@BB^)_S5)(>9O)Upf`RvtXn7T(a}tgF+66}ER~7x+#K6Tg?JeEq9C%cm?h z|7}%3dJ#kd?pBn2BA`s!g9+L44akmIlA9e+e+_l6PxOpbf0#xP)j$Ihxzw9Q2}%=`EK z$?Dn6r=V_Rf$LWaEPYr_-2~?$yR#A2nmR9Ajw{uWeMHBI+dKkObIsJdjaUW0T*V1b z41)shOa-(j78gdlZ&RNBl2;aHidWU`KB^h%N1Hc;vG;rkXr)R<^2>{b?Ucsk{W~`} z-qU!55S#%^v1gPw*@(vH$z}JH=~uw=;|iQ{l$9%xdX=%g=GhWlHl~AUvOTMya)!(4 z^x6H1<(97_ke~YAGU8BNMD$JkYO9hk+UkmE0H>dphm>yWExE#>Yj8Il^PtK|3q>+@PN4e3w{orZ82vT-^09Fc_~&O}w& z*e#RQO=XFZH_Cv--nbYOBG}(aAa3BjU>5s!G}$SMQcBVx!%umfL2+&Qj%Cp$Yf)F2S>7F1b1zA$v)%Knk)e3#nArL`=6KUzm@j?D-q^@udJ<1JPhp& z9F6}=y}o67BtN^A&}ab$03d@103h)H&CvfS+W#-p|Eb)&)wb*wR8jnFi@)K~?O0;a z$SF0TW%gqON-XA^(4YN--R&edHKBw|D%1^%y{!Z12cBn! z-rU!F>zrFNW;usjkkVqS)d`mU^ZjEux2!CtPm>i^jqvB=E)wgN2t->W?n*fT zV>D84-O)vuS=pN|mQSd@L7gHnNjoN=CUO`l+$R6GC(UD{q}osm#H^EJRya6cAIUJq z8_yQdCs6d@lwcwc7)erW)ux(5hU4Wdz7nqd97DSpLUy+K#4@~;NH)ENBw8MACY|F` zNVNU2`8YnFDLj&dAr!%3y~^K%p5*d?L&wYYnSo2VCQ_I>K&kM|+3bTNfmY)7z*l=E ziTPh)o16ScE*Uo=2b6)MDVPGHa^;ayQl^yXvQIL@-Yx(rN`NYwQ0@Sq{jbDDg^c~X3&AmG`0zIe%1u+{lo8*(;*kw>5YwK^-Js&Mk&ar>f zV-w2_^>zTtHE$gPS2Gl(?Gw##p#rI6VHF%{_qb=(JXM zP!AMk?n4OCovU0ixlA+cjYV5Yv1YebYrfU}zOu9|Xtax?mZYx0xv!^@jG9b@Sfy^v zj3t+GXC`Lz>?D&Tc#vKWZKNk!_Nbv10f-Q*@(X8~)3R-gY$+s5iogM+Geze?ws~V-LCrc zbI^<3F6hJyz@;sr@1S{Ax8n|tpq%rKO_N^_JTB<_=&gO50UZ2FD|$Cp`)h{e_NFCG zF9@b9?nR|Cx&CKJ8#2Jyy}#TH9sw_I1YV! z7N;3aHN9B@I^JviNv-Rn_T}XkbSYn`N&2ldZfQTWZ!fj1XJaE2mMJC1vtJhcRT@{~rr>@7UrAXKa^KAMbgJ|+L|a}EKdC>Y&(-8{qmi151+#{@+z zDBDydvV{_?9HCwFE$YsGnX$3Cglc3s-IKPWgoIg@^A-Bc{T?QW7V3uSyGAYMoS@E` zY`x&jhI${&iGN#~#S+eDz)W@B_XT%{sn5wGZa(#QAEDg62$zo4xV++qD|R*DTm2*q zJV@}l%6_RuGzU-?fi4N9Ta_`2;<{C6GaE+Jwkz6?ldUTba<+dIqs=fUGzulsER*jUKjnPp-)Cc(vAi){avjo9X&lXnDO0GKMzX)8a_) zp~b8Zsl>5ETInea9PO8sNfqh`w@E(i%AV)=3~VvMv^^8xQ=s)oqT z@zN!`YAaB(Q0j_ZD)R~BEW1k=BEjC_?#n6FGzESi=DRnQn0gdZ=5{m2iRrs11PkJ~ zoJ12Hsvv5p(v7j$Ot3`rV$x_a#Wqn|YSLT5?T^F=(@)QFl!hhQ;T<;jh0sOV&sd8UaFs?W`>0Z%M6V#4WP+Y)Gf)6K@t z)LhoKm&T+MNFdBd`2YES_`eXdv^Q{cGWl=2;BR}z@73W8tMK2x{GT8Hi;j=~{<^h= zq0@iaN&llUbk)Adp$iHC!24^K{@0cTBZn=$i>rl+8?B24y^)=by`8Ozt+Nxo3+;cg zVPt1(YGFoa=@g@?Wrr+=;wxM98HUQUDriI=97Uz&6E2TWgc=S~mJ9*k$Zh6Un!crB zYMR}Ks#vKwAcQC`FRobz6a%%7bf;XA=D(P$xaM%b*gMPIdC@EbsN%Z+)b4x2Z8q(G z9PV^G81sGoyuHvwS=v9kaBx#mU~R(9Ni^)2r}h5*sB@ zQIS?ya4-gulwTV8K18n!e|f{d}}N+tu0H^ zxdNv`Jr^=VTp6bVXQIa?YOYA49f%+973o|AX}7dacFfLm~R zV`p~~ScbAm36fP0Go)AR7%&@7)u=uLT7hDXf@V$7rl+112;SZ&g4J*ncYi|&(f?Qa z-U}2|t!fdKMVAj%@lsegb&o}+0yS(EYCMrpDw1Z{c)V8HtVJ=>!zc-_zWC1=Dn7G? z9N3B_N{oUWw2i;S@e8lWOUElRD z_v_zjA(EF9298dW6sWUfNFqg21xDWuAJFCiD~7p!Xr|olMS5^q=5;80}e%FoI_DG zUe@yRw!IX%UA&vi!w&G179Bg>3ZiM7C=r}Yu#sYOCH*-BqAr6(-BVyF0)z4m-6UBI zCP^s3)kj8kCzavEE)QiC?Xbgl<<3^f6D?lTi5Tp8bCT0R8Jh0j1HUtH9sJjYVri0{q%LUmvwE^bKcz(L1ip4 zW#s8JJ-w{Ig<1;s;vWazm@=gkgiY0^b_pBX**VbGa?;jsw2^0OJJ}mLGWU)n9AYAY z&(*eyF{$~_ax7OlX7F3$!?Ht>QJxjB#{x%66_*y&Y}(+MDYboS;JL_5Zwh2?&ze;> zZ>!4a2R~az^}%{L9j`wHQI+~o#tY6;T@-=+-bk;_WajjVkeB_|fC)oLM_8rrpeyiz z6fcRcxAvNCH9KvCq$2uiAw0^JII(`{*lSiBlF^CQ%QjC(sYT%JbggfgAY=^q6wn?l zN127VkFCh`&p*uI^rhg~G6a09b?dLcf(!F6!os(CRZ_0>(lYyAmh*B4*3>EB5ThwI0I8VYP#hP&Az_WNow-rw336OjGQf~=m4h=}YSIzXvO3mLmOUo5> z1aQ);&hFLAS<@aebedBlzGp~SdlFz5<$XmHff5;@0ytlTn`XP*rRY|A-YvIB1L@@w z*W63VOI$VkA<$SAsQR1Yn<$))Gw|m}DvDyujDk}89Mgug(%jm2F3HhF^i;)~g(6Fu zv2^N8n@n^ELnaMffwy4F&p#Zj0(!)E-Z5nr-~D!=L+xHg^xuCnaP% zi5IhUMJ(DOk#<}K<9NC;wCJiqa5ZB|0PsoxP8l;5J{nw00RJ|Km!0U z|8IwCAtxts16yNj6UX0hovk_*yTE|J*Q&T^tJ1$mSOSv5x1}lWy0O&Qh5cA7AY#?*I2iYeK?*Kb=c= zj>nf;o&ysWT)B%t5vhjGBtA03x(W`^RkWlckjZQx#X%ntO%tsOhoIRH2-gP0EKWbM099w1gHa5Y zL``{kX8hHk?49UPzH#?KYK`$3Y@`!m-Ba%K8Y5zL!w8#q9kXcfVAx|SUMCYES|iN$0>SA-Tqw2zG}%0uRVPlU|m)DSTI98~oc zyl^@8U65$4XxKoL0fC6a1S`eQx5tNg(l;VWpT7c2&Iux=mtam9@{Se0VzsZj$~oQE9oX zgq@dvTLd>#RY<;UN;v)D?hLHhmeJoU9*c2qx=7(t8EuQEXX7Adv&5E`VmQvD#lY54 zD*Y7=z|Sy8H!Zd@Mt8}790>%|SS|QByb?qg4!AXH$G=inzp4v0PB{q-K5Vju+hiNQ z2J`Lx^Y(Gky2I~_+s8!Hl)waCe3Y*!El?>5%iP&xwrmSh(b+uB+hG(k-3ik6kXjKE z4HAG7X$a5EY~+}#P~5VxxQb68cjlpzV)-vU2cN}v#1l*xEv=hd&!}fik=t!F0?pc; zBkP2-(mfZ-GVP0t<^3T!&su`7TNCuOABGimcCK@e!PN{L4?XzE(Z?-){WMPX1}bD1 znoLsb_)n6o1L5@uc)#p9oBqF!Go;ij(w8;*B&4QCFHzCK&i zuPw9zzb5o;yP7yF&3K)y*LDPvmVkK{=jvu|miZ0E%S??0i{9I+<98;520wWY81!~% zZVon4+fNio7p{c`EwZpT8de8qk%}v^A0rkdy)rp9F7^(qw4-Z!eO$m7KgcQbkTF0j zoXOki;Ub^H6E7e4RhS>3|0IbhzYY!o@E^C=6$%^g`yB}a0st`nZ@azu|LOB??oPaM zf{}v^Fd{3Ehj8a57WyL$8-J!5z%e@Nj9eI29WB?2i^sPvN?g@`?&4=xRKOUFVF{ye zPuE4MP-AZ&k`+?jlAanqg{kw4{gDy`J$ zTy)8zfo_}P6Qy=UIORJPP-4k}BhSHR+5wHAK)BMAlC9ntynH{{F_Ylt=(=toGL7^F z9&8cOKtFyFz*uyB<-m8d@o0JQ_pE#Xjv)3p6_dGXZjk@q)A65#6;7ALy6ty%Oho_y zSpT=DL&jd**~VJ_KS}g|;$Sh4)!)q#huk=oPk1L334qNLTvDa3BLxGB(tpB4Dk7Q+ z4cjOV>X&pW>iWR?H-zsM#-k0&l552k%KH?q+KSd<4b^3d6-hR8DW7J}Zi~HR&NG$Z zeb?DIzHOkUo*iDEzfTAFrFOgHH%{jO*)WZ%9RKIqo!kzu=MAy-d!wO3k;dU@S7X|V zR`xUp6?Bb=SU`M_L47r$LIC#Q)Rr#_LNI1+-4-*4|X1`ER>t>4W*~siV=NOW@bp(pcry5Zh+LHd-`DJp( zuEZu1=)w$cy0nRM;&}xi=DG6475;I3>I7~X#+l_4bFw(3%5{b}>x4ixf*<($^Rnq@ zfAOq$Htx!GdD_~`;rY-iX6NJjIrCHP?~2CF%^2;*+v0<)W^FUnyd1*1(jcgOl}7Er zXweXUAqoGZ`SqnrjrBNGQClrSd>oi#s=&~mIs^{?>98Hfcr}z80t^~z-;r)($6R{L zDF)Z+onF1Oksc~Im-G78-F=u$lO3kvFbns|F~TTw3=(@nNPXqc+&G6U-dLw@42k{b zfEQUJ^r;0jBnqiz3=P7&n1KRzhCteQF)DLBb1eEtlA}6?Y(JY#Bb=+Hg*~E;V+)oF z3|)W|sRm@w{%3p4g^pW0vZ|kr<6*;p#E4ttl>a=Pap68K2dA;!83z1@co}fw4pR)8 zGZ>dKEXI?ZQX96765s{5CRTO@u=&6UOPpQr@=yeg)Ciq0)B4Pmdwmii$3qKRRG-GmUg)S@=K~ zJ{j<;BZD*cigaH!?NPlehhCnFc8W{bphg8VT$G)ufL+3{rkTIW_x24`z8g+6SB24_ z^Dakd8_mYN{&dP9)-1icpaUR~p-k0YK?Dq^v5S#@D=kxjjlOa#2l>V3(4HzvcM2kM zLpAXTxuCctB`uSdq=GNEtdo&flgv$&En#dX98I{^&YB>z!ZowjZi!Ks2p&|e3ZdBI zBu8LL(}yX~4xhHn<=()xiZqFp0~pMnIr;I}Lqjw%{R_4|HPhjYw;0;Im4mak zQQ^+>KWk1Dwg^VOFfn57tZKF&!8lM)i-=P%MYb3) zOMeF;TmRqgh9{XJP6^TbI)8Tb{^Ic}agl-Pg*P1roT6Oz_5m!3rG}6povj5qKK{4M zzlA?M);6`!|nmaz-z~hKm?v z=deu@b(DzrZ{a4taQN-~n5%6f|6HT+(aaNjxWdE5`Epq_@NUIXo!6@qRh% z%&nQ1TE%_xY(D^xYjZ&QO4NfaG;P-1l|}Xf#v)~@FwP*btzkNz0`)Ixk`?f`G2%J& zs5=gUp#o%e_7ujOFE}-8C=%7(l}rc`MU{t8q!7bFv$hO7FwA3tfCyfeh;9%_Rxo5= zO~RlMtx^&p2GJlc6`~bj;nAQdg{pt(w8Qs#&-|;$$LVp?_&4rH2{fQ^75|}p`j~4P z4Q4<&o`29sX+vq7%*f>GXC-DEjEwEreItq_SGe#`hAJqWGjCB%(3;|H@Hua$P#Yk3 zRDTW8XMavm+B`CE!qA>oB3lMd2X9|q`haYczUthvkrg#)hON!=xEduk^A zeMHn{;QGTZ@(7nqh{L3fam5IKw)egTOrzs1l7L!Q&=<`*ITT|8@?E{^W^2Np|^ z_^1(yj1W>u;V{4N?!RumwOIx7`XP{ecOudVSDownBryyRQTqFqmofo)5eK{@gBE8F z_H7&=NWq^xrR}0Epw28w(yAgzMa(_$4_P|Ld+bWP(v)U8C{>|!_qVD@()0g}4$G+j z70vAzAF}bTLI)Zme0W^Xp=Snp)9)J^h|*c|0j^+P|76j=vpKh5=*5~9%rW59Yt?qm zdma_rZIdI+Q5$tP%uQ#7s(&QWCgK+SwJlROMJw=wC|fj z5{U4MVOeWbEw%h(a0qUI3%Fa#dT*xSEieYqBm=4`OPVNFi%gU^Jo`tk4Mdixe-FYH z7zHv{x~I<^!FAJkg=MT6FQ55gZkGGwquTp;l#xG?`%r=Z-+)0=TEEhz*@3)&y4VxX z=@K-QcwrhxH(%E&a7Y3Q+lo|00qmYNIgX-Bq^N|*lYJnOqA)94KC$gVNf8|^5@0`C zFd-Z$*0={EvngCCG7j;X`ONXma*H1B%*9?UU5=XAOfzfuUY{rwQ6gk_0jVrQqgvdX zMsJJH%#O~$+fs(>_-e+&^OrtkVIcSfg$5G}K4NVzg<`ZljdF<{-Us+GhQSNCc4h<1 zboF;4uZCfSY$G!%%b&R+DD@GzQc0S*j)uJyR`&fpx}rIN^{+5={EOqk&ZxD)05Opk zkdiryD1}@N5VsLWfZ*(z?(rHbN@&KB?+bAH;_vu%D5LOa2K?%~GaDMNB*FJ6jwfg@ z;lTlcq;sT_&}^x+sLY$F)rd>aV0ycc=0Pa4zYJJ%kzC8da=3Pu(u1P+sBOr=DfMEP zubvXTdjM8eO{1#jbu2PxL_&6R`0=DGrjyb+fl+zLnjrGyWv2Z|nVw{|S}?R*^kmI+ z9JwFrXb7+x9pJE%SI+lGb81uF{E8~&4#R3) z6GWI-D!GLOuFVl8XI=5c1W#?qq*;Vio|X09W|OnUAG|xP3=w>qkiOB zmbuojjb(lh%ir=)*~T{@GwwFGMns0&B9+8m?PzzzVz3##`P7_amn_CbQ*8~|NTxBM z0Q7e(rBOtZ7LBa%p9|h{W&YMG+kjY0b3U*UGHC{@b? z&UKVeTxg6_qUj)mlR5MuXVFor2egv0$l!N>ZQQo^!=&H)=WAGR-4rHa)0pAtLPHp) zbn+a73+0NWmJBxRm~AuLBSSJcT8kr<^%1CX3Y(5SoxtDmj`Hb%(GsrUMKmlw30tT0 z`p{&#RsiYZBq}VDD!z}`SMZsma7Kf|mOv9QRyPLTC^Bp)cXm9UC1xc&wd? zTKnDUwsE>Y*C|8J=)A5W*Tl;PD>)YvI+st@V2fOid#DCcqr?FeeW{q4W(Y$5--ant z4P_0*RI%uB6?wiL_*_LfIDW|_Cc`Q>3eDBD`mjXli4_Ek@~HFDNxyId2I^#l+}kfS zEl~io)R0DJ_8|w|8|%gqjinPFNG#-mjq>fqrQCZA^#- zZAMg`FJr_ODt1H#?#1I%qH>iPmOyk`0_!(*zU=!}A?9nbhO<;rTfhc6;q|%ZyLjaAQl%g_0k4~eHg7|TaCDesd879HT zgp~-G7c+-MFQl-+TbBfPDyheM=kl%1k2 z_DTlSkT`6(*3)XVfvQ8+`zDv}I_wZH?z8U@vcXaQlQ`XodnlQ>BwG!KI4Ey{;ff9a z_2!A>dWyYH_0cC*;y!2KSb+wdhQQ#1x?F5@_t*`UNTusIeuVSUxMN3RGBZ*SxT-2_#Jf#FhuoCES zg;ONY1dc>U>mT*>)|p1JHvl!3p0?^+ur&umFl+K9Dhi9zB8cj)Vhqzd_hsU)GoDmT zoQ#kslN~J3;llPQhUEw=ySXk>5)PGEUPs( zrww5@LOPqdbv6n9CYslubdlAc<5ep_uUkdJVGWh{M_dS6AT}bhS zR>t75Ve?0cT1KSAF)ebYEyjf;QM?%U0}Rvv*Gubz5~uLP)kMfj72<7V1DmRdWDWGo z6Sw}Y4W5ZUn=-0>Bt}sO_&*7`0X?r<*m^u~^$@19+h2g)OsJ*(g_4k&byL~0O;KV7 z+tq_&wkI#gy67tf(R^5DVikM;5bG4eWG>nPgpvw z76hg)U9q=tkn#Ht>!CyXh{(vb#7!l}Oy<-hO#lp_KQ~ER-dJnZqE44Bh4s9ytHOzt zJ-$3gD{#lk5qVZ>D~+OG!99mua4L`7@=krkzESyW2lRd+F0Ylo!ar8idF2k(sQUmn zU0^=7ka!Tz)cOqKd%m7H@w`ge;8={8wF^I9^LRyWC@o5PhG9H?Hs ze(`60ZoK69exKce@06m|^pKHEvkVfdVLHK*L>sM<(ck_1%7Y=;0O^A}26O3kZ-y7? zU{F(1Y@A_Xb&JqH?lwpgim;cuwTm9_I9wt|UL)B`REkTtuwFlc=(ppXe3WOg)A6Rk zgFE@4kvlLS8%g(@?R;$;D3!Jbl$5Z7oKCqsZaYF2^Mw*+R3wocVoA13ghW*H%V%}` zt9`TK=s%M^iW{N~ z$`L7I*(gS&#h&F}qD;b~&e_|0$z_v#X3ClNFo28F1mSjNTFYzT>!?gs;msFUR~oW` zCD!8BpL%F+T(0$#CvGI-<5gZ45e39@kkiu%)D}|H0*HJImf5!Er3FO7al6*kGa(F+ zS425h`@tD*U46m&KF9vr{X$Lb#+&4PzL^artu(iS7Yg3dpp^%+Ri8%&7!#w_Kr>(5 zI$y}5vaAC>fUhIR2H4Iq@aFUQHRcBA=Wu*}LH>=Xy{RXm=fNw8%U@Vv#aEsf#yhDO z1r0Rg6<`1}_K0kRo`cXeh`*PvLZsmY?d(nKj4Pny_oPck&O-j_BEDILa-n161%9Y{ zOL8bm>2GG(Y16J3Torx)gUrXStEuq{Xv6mvx*c!Z z5<3PsaG*jB&nfP2}PcDR$d&CZMp^slw8Y zP|v#?li82qqYwfDF17Ekt$)Gd!(*dpG_@oQ#T+my}r0Sm71KFZUa@6YDfF#LEF5x*UNPi`l$ zfP7N=o?ck16N&J!ia$SHzcui9PAoMlv(j6ymb5UR_0E@E&i(JGy@6;bW{5eup(aTZhYF6?Ez-eBqiQyYi=WXjJE zl7a2a{2me9#vbqHdq8Z~IS%*--~TOzf)VYsNg@CMxc};)|Gjtb*s z;t}^8(%tU?9P6EUj_de%hm=H=8!w+Xg2T1vcG}(@wsAZ);mqcSKPG zI6Lk2ZFQc)w@9#L_Nm4N$zt(14eZ=~FzzcG2@8rd7mc$76S4-}7RI#QMux693u8h~ zhq9E|P3scqad1SCl4gMoXuTsOVPNogW2GX8;Za)^-M-&3JwHA8okt%~L>TyQMw}L; z0!VbXW`}V@la}h{aQZL~Bm$`?G|(Wck_CMR5W5tULb`sFTF^W>A(WwYseLu^#)c_z zW1BN~_SLVl4rn(C0Tl(jv4|Rx8XqyBL4602(qN3R#PO5W+LqLd3kyD`t{=_*@ay)k zTL~Qutu9yP{jIQM*}EK3#FJniYi5m(*i52p+Xk!*_e|y|GHj8Kz(J;PS9B7IGq6gL zAX;WTx1XeVd?al-3qVfkf%a0+1cJ!iT7e_oT3t&wd~A{8U_@Ckfe*cH>4!K8Yur6o zutx*E>zcrw)9NW)W(1#(F0+C>))Ms)rWlmIxZ#Md2pN$YDXD{Vcq(>AIhqUAmJ(?E z)-oyIK;%Ju$LwP?#;FY*#^N#KUER%-wT0_P?R{PYD3OG@%OFA$Ox;5+5C1}9-r)x?1z_D zEhE0PU8bWbB-#0@*KhQjYo2FKEQ!j)k!dUKPb*_kgqgxd=O1YIhdV#VXFZ>#>E6M5 z*!z8VsbT#@CEOOAB_-Aa523=T9)3gC&z$&9oGaC72=uK`Bz=f(|AeETh}oJz5f2CR zQsY3yLR)!fic*YS@Ub{53rO6>`obSAjXpAuL^Fn`%|_44>O^!e{^Utan_b4MBH(=` z7Q6Vz0JKs#T#8c!1IUX1E0D<1;w-)JfZoAHT2}Q0F`j?-vGH<6~}uD<{IM(W2V zz-RIND`A&5A(>qBB0YxRZx`O`1T`9$K&9_9S?*^-m} zbBf#Ibsa3R>x=psOhK88+<$E zt_{>ZubH8J3K%;#JNQ>$-(j;j58Q2gOO|qvS~|%fq{MiXSsfm?&fixy|b2GJ_MOqiyS zriUM&7Kg^h>wgV<*z`AFN833C3yQpMPs-o5`^+!V1E*~82^7OL6n{2lI4wO}QE>6@ zD*$W|PE<%ZT7{iXAU=Ls4(qjCt%4LIr$&U3jR9_1Rz>OgPga`m7F+_N7Z*B;*j%Yz zV@ZPX!@1)s0=n)6+gD*9c;8m@S-NPa*u7KQqkQqlW&#C7!(_r56mT4EM~sUSh+P7* zV(=kb>sMnz$si|;5ohd?0iJ{t3_`?@uT~Ip_2QHhagV);bD;PB*%?*DoJ9JwZx{YiB~bWz-|j&rvEj$tADm#!IuC zjxY!}o@XdU_HlW05bnqGBJ@{Ju?gX>*VkJe52}*n2-=3mpKEjon8d-R%X*XrWsJoT zqk!!LYHmd4rvx~;=oC@*sT8&CSRy-Pn4gllC>F}a5}33L1JoJHeTCxC8YCRikqfy3 z{8wHwyD-9vp#*oYR#<}lheCzq{-);RG068$(bfKI3W%lK2+HWtP7=9HDBK{ay#iHR zm>Lq5qV0|L6q%$H1N3_|rjLW-loYd!41tdH?JlrM0Dy^qARa+vRX8x7(AjeqM%{$M z3&7@~#0Z6iEeShO2ien(9_S>4DJZ8dKX^GX(x0%6!WU_CLMeSVEXmm-wE=umjND`Q zyx^(AssgnSt?b9Gu%%h&VL;V!g*T~G|C-o?lw#Ng?ylnSzW@YT#q_j{9-7~6KnciQ zgTRdJw;%9&M0CJ#=7IyZIBkLr#cX12QrL5SG-1 zRrE+PK^D<2i?h~YrA(M@;Wk!Ng+W3U5*Nyw{PO80%lN6LW@#IT{wAuE+e8i!4M+w% zz*bk{5$%(e{q@bkvE%DY4h)d!du?{)Gh)gF?;Ha-=&eLXn5OE}HqBAc=)SHjrTvUa z#|(8Bd#bpeU=fmtmBc)*Ds%{@%*sT%d5g>hNe99?jE4`iiaNScid&QBgw_%mU!Y(Lh34p};wn-R z`G*M$a?#s(8rTUttQxqvvf1Amp|tY!3cCU4*1_B%c7=j;6wj7pBc>vf##ClptwJ%S zlS*#!?~G(&EQ`EgBEO}J%@f!_tP|8wMa@;$E3FRgw%c3K%8QQA!MMr8wvg5nsVIv*$qy@pkmf;OGp6if@}z~9lTxqh{Ex~xbY)2T4seH;W-p#;XUQwj2K!t*S`maQfk)W7NCq& z0*I7^4l9nB=bazpJfQpH220)O#bs{TMt4tjiK_odxQUofm9H06bANh9P9uY$OK^J6 zyUhHk8m*kg2fV5)=zVRx-e?;7 zX7&LC0w^CD0j2Hl!SFhsv2@m~et{W_RPt|xle&=-oW+C@I{PcA(Z+);fd&5@6UV~G zK=$RWOVQ}ee@BvdVH@V%AwK! z)J5!Gl*6<*p4ofP>%d`rzo$cFdEX8{r($?NwmzVgr5(yd#0%uzJKD6dz(BOcG-pGs z+OlG_S}!u$ILaGq5A!uPrj0*Ba+S`@?GW~GHnDN={3+`PgoK1C9I)#jw&cm^bDy{ccKfGay&j}V~j{!G8(*0n7jp?7|Armw_ougt!I_jui(&182!UB8X+ zari!<%Wl8NJp8jf32CS~CyFrPO>@uqbYN79EtRCE$v_Dh$VwY03HCKAu?l1ZW~cf*Q`w%d~V zNa}CWC?1!SH=8sQBZZr6C`z~JZ(RHaxx6Ik<7QGs40feviF{x}Z0|E|2HaRMhu9R9;bnEdUn)0f0jJ?f&2Cm>tPf@r z&5%qOkow37X_!+5pr@1j%YQ;~5{q>_J?rYx=?JaA5#xaIqJ0CfrlCCipjDGD`kZ`B z2@`$<>nLvh?>vLOYf?3TNqoI#P#vxXc56V zY!*#5WA?F2;Y4H)DfUpe7gqAXnj@2FSV9BC*x|+2u<4w0tL0KPrNdm%1uj1np^rJ+sOUKROxSTVppAf`C zVgUM3ZHme zcqZsNd@>`)X-l>7ID*QKy0Z=eCUeTdNr33dDcmP4=N5rvI_>lhr|a>fHfX*M2NRoU zXWKSx$IvJ@=fCQ*{n3I%=&=GFg5~!02OY`z%~z#oppLWJS)R=e+LmoP4M|E%NS+jB zS=P#ge2@Wu^)oYF4_0mZYoAy>$LIFJoNE}_$dS<_i>mq6C1p3ET9VgEXUB>#(Qlk}dXa$eTFS1}1d=s9wrdl$TRG0j2Sn%En%-jJ^GJ9Pw4!dzhhF?2=Xx z0a~OmFD|kAc0VzOWSfBX zxmTQVrN0^EzjNmTpbZ}#tJ6-GDJMC7?@kS;!`G!-Lmb7Q6}|3p=^9;9u$Xb3CbQ0Q z&R8)}mW8Ydxxz9W>-&;@zVYoRWU6&8ZQ zlLDXeqQ){>c+NW-ygNCz9L&h5I8zE-)u^`%ltn`uh0IDkr6@5LD-obiMw%)Ro)Wg1 zj{*`7sOc)n8K-4DxMZFqwAR#-gKzP3%0<-KhQyI(Bc&KuD4E0Q6C{Vh z(otlvWtQh~P$1HB{cxYfiQrAcxp}MIegfoz&;#i=&HmSOh}jRi?t8nu`-L44^IhNb zvR=?tqqZX(Z-XR?$IzHWlGUm~$JSN2w8fBBtKAKTW>vBQkd}xE$6JgXgv%!BGJ1VP z;%~kD3!LT4(7WAE3DA5A@skb8yIB{AS!FOC0izZIbH#hK{ZaiXpa<*eU~_x<5Zmdz zKh5C7_xgT6kp1z#?NbG3``+|@i0BKcdG>vh|5?%HS@+CwmL7)jWPbFHPS0E2`S{vB zrVfa)!SlKw+P!uSsCjv}-8N2uedY!6`~KE~!so4ayTGJE!Qn!76j-!4&k5nV68BXuGcHpwEnE^Uax%J_;Be@qg~Gz zHles#XRMR3J{5%c?)bh$^s%*oyLO93xx3nO!_96M^_mCC+gu*F@@@J){mwsS6}!a2 zuK!$TeRpwz=lq=P#ekX2B;+^eo6T`&Yzs|MvjJez*a6^GR z2aXD+ag#V)y~F8y7E;WD-$>(Kh$7nU-*xoxx!vmhDO|B3a|yA8xh?lKv>li1+%;~d zZ#99B`8O5j@74$HBS4F4yX{nf5%ghov?h5pGQ&HP;SE3Of{^eqLETscjp51r9 zuFa<(O_^-;ChQ=8(?7q*Obx^DWS`_1ILzX1WT3E# z354(^n#54iPl3`+2%0A0!g<@@f~X6Ij%LSt-X7_)oWSANkFXZ{!>}mZAD_0Es|v|< z2P0y_`Vb)_E%YzBvo>{U23{)4O<&JM4H~y>sS?RVO#LEOnkEwIS*Fpneybk2gfv2N zfUkX*!Gibp%L$`*_^+C2RjD=HYR+I)#1$y?N%m}Q>?xevq)+3D`6L+E{&GzJ|Zm^#01I+wvt?`m36GZ1; z16>W7EG#}bGDyJwD58=(Y(Ag>+8Rt3XIU;BZr;~qH^XH8{=Z<_EY0r5M`-mQ5T&21 zt`RmH<5IvRNd2-7@4CD)jGZ!085P2Y2CFlj-B;~e0EjZ^aOjcqOkdv!IV^LP&UF+FA5d}tB{_BHO3AZ9(o7YC%4(2`k`MTddjVd>H z;?jnnGf#U#k-_G;ZE}d{cR3eIO!*lCLK0vMZFdOGM(Byji)+DAJ*(=YvuZaH#DW#t zrC1qNfvba~OJTd_s7#A$(^{(1r^uYMJR6#sNYF<-?RtsXxd{xwrC8<Fq^Kk>)6-UEUM0m`@xphk!SvHg-=vMW*!M5JHEq)eZ4XlHh+5f* z=#?*wVu-OSR7j>SjRgzzG!m)G`*jviSYlm|v17`7|9J2Le z$EbaJ@HmaraI49#XPsG!BHFk~Y+N(25aIS&`5@jrZPuscI8vrhHT~PjgJh8 zE`k8!cUZ%G(8Ti^_;?Sy-rX%uJ7^aqktmGkQ%o0fQ_3D@+Y|fM%}T_9CBkSRTIDcI zo!V7|Mt0*zXe~Oq2IvxufXaCn9-6Wg-d zbB%)~*wE246M{g0Nxx{FuKK6|cihi&G$;5a&B@rr%%Wi|!?A5yF+D$qk^RIjJK{X4 zDPT1hwCgk`Zvi~y=_{&>I0bp9m&CTrNASJVamf<9_p>)@x;m53vkl`kEbv1^rk0W9p54VPz2i{nk@Bs_g8 zg_=Mq4c+X4zX;VtRBd;|Uqsat>Lg!DS%yXs?5Y44z)tU~0nEra=7>lA7ITJH9 z)?WKKG#*@eCQ*g9J0z8`(s3dlre0#;VbQ=NG*K#qERys5U)MwOH7?jo95L`;1x6|8V)JAXSaUP|UsY;|z`09FdC1!dI$~&pUL442yIey}Pbo z^;^25QP-YiT%sMn-o+uj(UqC%T+D?V&a0m+78tTJ!E#AGoJk@nfxGP9_CcA7%?nmm z|1o;hkUL=-n+EGeaGx0eC82t!8#H3|uBK{~Jv-wOLLyF)V{{f4II>rCPji9Nqr6}b zO(i!N%0-%j6ugfq22^dkHx$< zA0*TUes~m&((^exX-I}A~TVsko$%zx3 zooDJeUEF&8>4J4%S5i;a%1OXwGMB2oJN2y9sW>3n!bN3Q56gs7O&Q3-YL&k<<^G#8 z=^WFZVX+}v=@AdK2z8;X7OW{iroddmt+Hug+n|Hap;UsjO^3Nyh)Xg_Se6i#7_KAk zK!uV#3Z$|*LkZD3CVr*fFpOG<$?sHdu0~fi8D*kgTCW7V(1Eee$F0vMU<`QKP31Sj z*q~t{N^`VqR6jG#NP{yjVp^KfFZH}y)i^E>(6Hi6(vv?$XTtLKPXz86gIDQr{Ju-n zGc#$ufEny;LiLi4b>$LPF8P*x;{26KAX*V=4gKi~zhfUhh1fqPLMvi0e6<4@*;Eyb zW9Ke3zf5Fmh5=DvYn|0OPi}ztWGblL@P7}=LIM9&^$W1Xjy(;gXbnx*)7iS(BgWey zFKpDgDl#maq}5y_Dwu`Al@@40wYewRB;`k_kq30-O01|EZ3)9WO2?dnqit_Skqa;E zqd-QT{!JQHB?F{gBT|7d7?Ta7R9N>hU&uCF z1Q*qwua_D#sRmrgglREOOA*Hh^YR~35;zQTHh5T6xs)pzSh(nGMOOS)F>;g8TGi&2 zCX|sNLuz{&uRvDYixds9PyTiJ*ys-Om*Wt;2ag-eN-r7{C)nIF`j8=nJ?d(d(tRY| zo(&BNa^ePgC#vBBzU4Yt09NoEuLrw(%FQs^4lR!uAQ9samQ9qH+j5*VM~p;+=#&nL z%na^a@y81>V%;^NTYG$y8W3MrlhF*p=Dl1AyLj4EYB4 z%~W`>PD7jKmvQWalJizWO2tN$niQ<+F0B_=A-Qa{gY4aCir`j=51Br2UPP2dmA)2) zh^=xpsa?)k+bPC5Ix^#dfK>3XS%d>VSqlcqj*1R!x!5$ixI?6>gxvlL}Wq^rwn?+x}EVc{33EI&u3&ylkp@)eyJu_z($ zLDcu+aUleyh+ojAp%zyEl`1#7tfi@0d^Jdr(140xYm~}QB+0BXzpIhBC8i23C8WB5 zh#k%2CKYj&M@tQE&#l4n#AwB@h1QnJuSov3HF(6E(@Tdb5Q&xlHF5ew?Jvho83!L% zhIhIWX_5Wnrf^F(PeqE)u_A#V**cLRr5nKC$2>QuQpGMrdx6e=fRS< zaebQ=HwNN(mYDp>I*6x?Pihwzei9gci>cGRHeX=M%d%xQ5MM%6LO>ubtk^idn!J8l zP`*jsD55nv_M}h_e4MnE#L$9kddrDrFfECwU@Pmf2Q;Or%js~Kgv4O+Htmq+D#5PK zs>q;NJ&0!_H9QOV>_11h5teT+ev+$&Ur}&5Y$Y#d4tszgDY+MzOwjV%#|E`g42U(L z6v<&$0TFnX;YSPB-`FIV-iHAg!DK-T&b$VOH*F#>C2Q4mN})59rsuzcT=qyz!pgyi zu}@_x=YuS_ODv_wiJPtxGMrHo^TR3l*cj^wF{j9`OutUC9w{2WCs9^t`-AW%CnZaT zujJ&hr>#R?NbK*j%-Jq1xDx}K+e*EgbFa!Xyp*Ztd2T}hF*^VG zsDJtlf!lBMMr5l5+#ufd3|#%&N;AMhmq<<8%Bu9R|IFG`>?Fa=J=91^i&uLi?p7um zO|S3aL;T%`XVd_yElodq%!1lO_Kx|b5bC2!vJ;}8hYzQIBxl+0RH$^^vGA{rDA~_A zg5gZoM9bu!A~eZRp(v@XZf}^j8i+a!q zE*VVf)~L-dqG^8#rdEn0yk4g>ldw>_`w=JoBiFll}``=!B#w; z4&(r_Xedoe_AxK)pnaEt3xCj_`+D@7*Ry&df0=G#V&17l@ zkq|g>8a{H1Ncnz!s0OxsLsXEkI%=bv2y6|PpTMktXB7%fG2#R(ZBJQ~(58lAZD!Z& z+#^LfnN6?}R|~YTgj4x~s8T{r6P))k!Xkvv2?9(J`r>WI>lgGC{h8`Er?D_(ue8_9 zG>u6>RI8%lOL2SBxPnL$ozm1h#fpEN z>k@`fukiSnz8@SPXtll%DnHK~Uu-vUHr^h$W15sGT^Oe!jT#84ZgtTzbMkRv3c$m; zLB%9g&98XYb83p|#Vw~H(4E#kQ8eLGg(^_m(86DJDChg_nDz|~PJNfAENf^wa$b1$ zEErQLbV_?f3K-=U2KcG@zL$rxtQ90Jk@`=BXw8RvVVtad2}yiWv&KwN&}`L5yjA~PAsW(|Bl}KLJ;Cl|m>@en`q&ynGC(~X8YGrN_dzZLrOW&6 z{1M#;oRK(2WtJ$gjKaXZnVq=0T`@-KC-d-+Jd-CQieA z$RkH`&I~cL;s~~u3|DmZGNW5yM|L#iqp8liPyr@wIulP}$%QA<<&3EwD|1Vrm-X0w ziiwTMeV2UXvV~-4<~EU=Sg+onBj}^sN2JB*>FA=L#hrli%+b=YQstVsD4Ao;X(le8 zm{l+#Uw@i#CTte?Z!^W;!2cFXZjx043qoX++wBDo0+!(j78ct}(nu;C5o)M=o<;%h z`@I6fWm3~6y%G@d24tmqyRAGghdM+waB($obu>I^1(6`(#9>8gDNk1ll`crEcDac9 z*6MI20OO#Eh7Ur(=mCK`N(p2-NRM@&yt#F!_Z0T{NgV5R3lF<`i;00NtgfWSE$L7~9h z#IP5ff`8-AF;d_}sSz-uZ>(|%Jr&9MYnSszVxv5h0dyf%tve`wIpZ#yP+AD#2MTV? zUaw$s`mEn;URaz%0~J;KDwYLFlCi1Bo&X zIH*SNe&XV|$zT!8U+Sc!(%G2IHZav;RjorK@g^YWkT^mI_+>vPOiV|W6w#@(dn!1clD#7++Nu{vfQ2M&e?NlK>fo(uBLfSwGUiloN2)zvdxh zAK@7+QSfMGhpH^>_TGOAGC{o`?QeEg9efk?Yo-%RGoVf4qG>UqqE;&#Z5IZR%)e zxZX317hBTl07Gb6AbUI!YRj7FutACs%yzf}p^_cG#-`{s{S{`WTwtq{*0EmFx18>@ zWR9FS6r^T4W3kZFD(b0B9+7&RL>ka79x_EGB_h^X*mo&Zucxc?&>*UAti}yrL&Zrk z?6#~D_VFW|iEH%>SeDk}AHN&~#SvIYkkv9{u{5GBEd<3G9o5J!4Epp~G>n@Mn1)8n7hj3=3u_gm8i&lbd-<<5jMWcEB zdhzh^XZZGw5KOrQ2*1XxCxWEt4Y`0aC$9Z|n@rG@(IaxiSjdJ{X*Vw)h=`9i@RB#6 zut|%@jQ9LgPHAlph%nrgTV_=4@H34Et~m(1&P^TQhQlp%Z65|Q1A48{zL-C- zPk+u_WTEUEbW3?fNr@@V7(8AEjzL95M@7ZOlJXKQK3k&^86s07atJ&N&J6gUGb!Ey zjfA?*wuCSznU7a1!H9P)Y5c#%2LRj|tdUOhBN}g+r8UIKqXH*y050VD-4Aubc-IyXF+cukx}c9rS{)cqM?WVh zKDUHpup=`U>!8cop+^q0$e{x&Fg#_Te>^@oX#W~^29(mz77gt)1bQ14K3r*!J-XAT zGR>#ykyT`^D2OhSn|PMwuqXh5Dq{ch%QJQ06?MeYa1>>`uMTM{K|Zshwu~uSZyJ=a zs@37Br1r)umfSp(s?=s{$E8`!VKUeP+*Dme=fFzt!pCIP^C~gEG6`F9H5DhTAU9mI(WOlWn0Znn z|Ck-Z-c{mU$}>%1tvGiqrz;RH5$h*V5BdjG=n%K;x=JDX@)(L|KrW#C+{&xE)Yfq3 z)}llWcmO;D{uo^fFC8LMP{~-~e14`xT*|{ntS^mkDzClKVNfQ+4D-FwVhB43K2QsK zIqFX|5d&0Nv@f6Ys;78BL=FHnPOj)*E=7a=_qdl%PU|W?b8m}S8tODSS(tA&Zd%k^ zdey>Y)9LFrVoj}AL1V^zOFris!;z&BlBWoiNQ)RznE{cjg0$1(%!H@e#l~dj;EcYNXzgi)TFFgdTek;yV3)1nOZ-{l+>^z}F~zwxPBE$BF#f|>gGTbq zGkzfKven*H9U-2l2s|*vHW0K8kB1}8spN_7900<=g@GUs8MkM^ac;@|Fg0Fj;K3AA zKMhPbhv*?QMAd%HFhu{|F{XTakB^)v>#AIb_wAxarRv_$oCd`QODWHlx$UNJYOh zKD!>Ek^%Ui4LIWXSiIAmAHhL;0+kzOC&YgY{lCS25Q785o=AEZx7QSr(lIA~Oo*^H zFxH5WWFK&P+jC{MfY5S6n$xmfJ@Rs#G`YGV1BSmZ7858 zFwCW6%<-IK)Z8k$C_XRB`;;vlzCn+Eqx9XxrUqLGE0y=a@{;Y;2DDeNn0*v05C?Gs z8veMBrAuq;b1gHUWJ6^Thoj}^NmbguMh;6CjF{%paycvx<48(GMhq2jLD3Z{1P~w) zAi#Gf?d{Bros>R;k3Tr`2)()@b!96fQ0U|us-sZ>RsOscpWrgx-b@^9x~MR=`z!!Y zvYvKu+*nhvAUd5E#Id}EJI`viOz`fH6lYOUWM-^W?Swd)*&hg^0^=x~<%hGi9)G&0 zKb#V3#?3XKtvl&H@*b`7>1~40{rg96K91(?jowwAofgtD?sZ-^Mo&tn^flIu>yY+{ z#R`A$ac1I;Pp^u{Pb%v6grkn zr*%P((b-z`A$81ztZHFG=hLZ1S%^lWgI#rjwL(pU=8s`7uDiM_XOXJg`)wD_0@3~g ze$~Oz`n_Y#)>)zFdJqUXr@BRAr>U{B6;q|4PZsGr>H(^$o^>c;VkAM|`s;6@?k*k; zW%?mr7?n52|Cv`Hv2Zk~ba(-*xAR6tL1S)dZ8qD&sUIfKZAoq{yGGePqS&32zEJPO z!mQTP1rkmIZ#de+CvEES;QREM__$d)bg$8FMp~70{L4^5)|_mJk8^Qa8bDj^JlLyz z|HYIJf)pqX_{Ts*`R+;-XP8!J-B0>>pO&|QHRe?qKH^-q(Ut%BU<+6s`SRbPkqsZg zNneYwqRUodmmn9GHSK3nRmSn_gZEwvR%p--06jmrfhlr&)h6)QQBjlRj?~+c+!+%4 z@|5I{g87H09?Zysup&)E@{QgDp6& zOMtN7wNf-i?Qn72%VhL?&))hozUkp^11J^Hsby~%8v=WL-`>UunKd{#|FV-I^b%ny zYf(9RQhPs(>}X!x$}80>$5^aVIY*kY!OEku_se1t^wSQST!G-f?3=v8?iAp~HRiT! zYlJ$q23R}7KMqvIzyz{5RYEAYJAkwTWY|6FuG)X5k+Po_zsC;%KAz{C>z(+iJb`~x z;>s?acf)|ht^`LTAnpw~Ix2KO!Ooq+!6Pkfl%mzz%mkrY%61WRW(3QN7>?fPD|B4( z&z|p25pdn*vgbC6;r!Pi6asIK?*2%a82H3*lo(Fhq_S)lV`T+~0Y$Jf-hnMhi0A}> zUy)tG9y+bfSkQMm4IsJi!xRz7?E9cp-=b~@H+Z`A?XbhI z49s7Jn?upvDpU;28o}OL-SIX)Rn4m@o8ule=;mc%e^u`6dwNUQ*3M)7qZDizC-EGe zjn;{hN~{0jZkgC1&&?_=SNmRci=uLf`sjtI^^~eHf_a2^e7R zgy=nMWX0Ip!2WZy2zy{J&?qgK?ox2a^nF>9`b1w{Hf79wNPN*h48|P>H zPEqY-SXNZ{y%@}vb}zZ$-!1q*JLr#%oz(g8-~1afjRAdZ94KD|s1^#7kfPGASj7}L z1-ZCt>n-pq8XN1ZXLUYa7BL%v^7#L;n538@TK#fn7ba)C$Mw~?87pG9vFwnn<}!NGR&+8M z4bXhH5_a~M>o^pbdX9$>_e>5XG`=A}Y3vrVUbvH$_q7J}IC~*Q5u~2*UiSVMU88-% zy(^Y^miG0xq0HdNn`~#+7Yb|@>aO;y-&l6G0LRO$P%d8;c5CGlPYm>?Y021xU)nK_A zjDbU_GlpK61^Y0mWcJY1ZQe-RNug=ZE!QEyvAqun@6MQc+eLWIo+r@K>m94 zp0>(SW?N+*7CCsLr5z}lJLG-dvy$c=CHaZnc@nc)`EXIHeJ@y>aL1 z>vnGppbs;Yu@PX6w^9D`tl|(5D@U6r7XFrA<#_g3Insprce6DhYXXvhmI72S$shcJ z5%~nPQz|@bohrBvRQ3c3@s`@mPN)D6HG@vn#JAgZ&pN8nNJUSrsBL-z1&kA zg;Xn&G;WST2}YqGghQ%`(G5gBRdGSb%(Y_AI_E%YPa%sbG?*d+zs8#nSx<4;MrxAC zZV)TteCYh|=UWnwl0V1=p7xmkNdeIw9`PI7H2euPwiI?)*Xbo&NbAq< zU)0`5DQOCb6bZWP2+2wgoo;0t{>^*_wnqTlVNyL@o-DFuz{1RFzOEDu4b+D3DUxh; z2mecEHh@gbjQFn;-Or81?x#)7Ux5Kb*acq0jszwkMp%#iJ#Z}T9s%cz8X>%?mqM-R z2*Ww;LKd|4NEe`9=r5}18E$3Rjl4V70ePN(sV{hlK!R%FVMle$=b7yMza%nW3Y$p6 zK5W-XF(H*5l7v78Zj1h9hUoR`}+Bhfy`Dt|62C+Lf&_n}g|UKc)D{e|63P z+BDfzjapc^!(nzA^O|0LcRw!YBkjJVDV_Q1>%^>41u`BB)8~?+sf{rp2*)P^4l^kK z9UvYdZ-#Hg0q6Z@HvlUPCVC%Gfk=glY%`U!ep7b=cj9~;HuU;_e=quGy%!Y3J0;gr z#7wOpy3wMpaQ*(v5(SSlIi*= z4y_ogT6hfLzJfH$)rohNauBpz>VHDSG6bNrq2|E)#oc|$T?JCX4n27;-+H;*fILOY=G{HdTafx$Fk8IKrY^$9 zYNX(Mk=Nx{&+LaOVq!6Zi%r$^t$s}6(;<3pf|=@CReYrI;`nztf%m*0x$cH#wLs#ZQm3uNsp?l1_ENk2}WnZ`#uU$Z_J^$t_>P!)2NbJ1jP!;2l@Hqyd&UsX7O*rJl{Vo>)ut*mo4B_;>CMVF`} z@P|44s;j9connfQ1)X0!qiAFSUz#s1rDg$V@_VdV$wgBe&r_P_@;I3YDkKGq7g{>??G?J!vwmO~w)9W??*HdS^zhVtv0G19FIP z5*%kA=n!NH=8d9xn}T(B1yt4Q3ecQxeQlwHKj#3xVTAMb%^R1uIBt_h&-;bXIx5bq zzpEqkMA7x7R*TdMdzD%k@O3DqVTf?DxZiyoSi*tg=6A~sR{VR7WWToG%{#eu8Eom9 z|MdveyVLe*c!^I>%)lOYKRH2tR;j;6qYe4*PonDfg5y&$CFF7*zdDXJ!hH&YaN5hF z;7nSi3Bwd3zVGlu#IFs@73dZ61o-^CuRIDk;DG1zK?wU{>gGql1QFlHbZrcPKl?yV z?&YkLAbvtIjVrtf=Sy=E@D9^|G(y8XPy(W1MW{!*`VrgarCn5HB7&ZAWjY4wdW&&{ z>-`pc0;TPF&Cb~fGk@GqO z2OU?MdCl+Q+HB(BeNsZ&X04v3vT#3RA3H&#RoWjfQk!?Ne;}yoyZj>46>MPouch?@ zHCjpQDM##UvvI5O_J_u^1RV2sX@(-gShcI!tH-oY%uOtkLP8x*?eBuk$|tK7<4e%2 zjGA)qccHW+=k+SDXTi87<0o!wM_>zWMd|?}m=E~2%|`^Jr<;Z0U%IH!QSnQ&0X9>X zcR}eE_ia7BLFNteBiK4g;<=Os*@>+Oksy@eo!W#@m6@PFDza1GYLuW3NO6T`4$E$JoY|0df|NN^;yXPLX zUU8EUQ`h<QexeW4P|ZkR%2D=%+*iD!iWSQ{6d27f|WSEzqHm|AhE+$!C~?L}V* zQ)}{}mu%gEkwq^HBanH$v zr2F@A_XL-2Av#%$H^GlZg4^TLIi5lV*_-J2A(j%DK1m8{ZyPPmfMrgMmOf3==on|w z0x|l$)MfL88{^>mEbF|EuxKOtg*6^?)xod;cXEz=Bul=}|&|yI_ScrIu$2sh>R-?ovl*S4`SO#&Pd^j~OcI9JCvdKqZ zMz~lG@kKA_Ha$Ilz?fQb*_js;*9i2SWUkG^2O*cNg}*!r-Te4;gze=oYb=lh@?=w> zx;)^yK2r8Kj9{FG&oiIV!(RY9AEUC_Aq1DUdCpx)8RWgPr2Sp~+>U>VD>h$vJ2zk0 zf=aUKZ)r;fvUney_v!&|n(AfvLw_1xTm(*K@~AwLt?D7It=u6ki%9oG(EdgeFH(ch z`$yY*Wir~*F$LM=*s~^_fSw^s*cOQ_MnH1NF ziLX=y-EFip4qv2vw+k#5VO8_x?@X?%^?CEv8_W#@i$mh-`>KUic(O?SAc3}lL+}5= z**68})^^KAE4FRhwr$(ClNH;^if!ArZQEI~t&{IR`&8{Z*#E9`HRr|qjElEw&e5|+ zcaPoNfZU1?E8lH6%#N=U3M8(oPy7ZbpKQnah4R1)7UdUhRcpEn%?i*hXGE!rof&1@ zw-~fiCYK%+rlyG9O@puvb7|C2f^aOVYM#Lo#HXgTwoVI}p4?}&RAX7Xd%HaSEUDre z**$Tu*k5|a`qzJzoV+juE$Dae?ue+PZ{4W$t;ebILM(&X_hya4O^Zk9%4M^dpgC8$ zbf29uMYA2^UCq~MH?OT#P_GQ?6QdOPYKzzFNA0L&VL)}6$*bJcCL8igQ92-}; z2Ia>rQbLO}Q@Cx68nEa2Z&dSJ)0Yplp(Jlh^8Rjc z^EU~)RHeYQ${e`_a;@8U+3sQ{AN_>nWb1MaV*3i}K_E)!=*TnU_9PgcaJUol)B8v1 zcAC(9HkKe2x4V&YYJaV{K+*BAcFV%OpLdx1N3~cQ6=(6B?rg!O-7tc(w$156%K2Lp`p2tbP<(0~UBs6s>h4_`KB z8nm=6n{2$|H!3*uYUv-s3vfg$Y#1OUR#!N-QzBT-h31`iEX~p105}&HWsy>v9BxuR z#qM&j7O1~fjqDK+I)HT}b_Q2yA>|OxmLW%$Tn2pojTzx%jWAp+R|he-`c#y#P%xa4w;|=lhP!h4PTYo_lLo|Z8297cX|}{AlZ43dA!m9_)z%v zfbzP4{UiWdH2oSS!)m$EqNqz`y!ZAt#Q%;LKiNEJd zm_7ylPL@%X8ifAjmZKgF+*EbFSYS;lN{YH}I%IHQPJ^cyj z**9BQWB=X=LUSX`<%=Iv(4IXIO$qE9cBjsqx(OpdiX7qSzWIK3_|*Z^Pyf)_6V@oX zMWV8iWMTOE2M3s4M^%&zTo8$mZ$#ESx0faYX=8=~G{|Eg`4}>g&SFtP1xUuLC7R_; z&hUe#UsmM4!ZGe=y{n&XOgS@JF|h;9T`TCBN@xyqxg(+YkX3C)*@tJDU6s|o@3N*Z z^^hH^Z91h5&spExrE8_I2@G$zea^%#{I`Jkn>a*K7duDC81@ejJW?pXrQWRTMk*M8hC_3d#)?hACG{WrwB`# zqN|fx?0Rwqni~`x)Ms7wm$5rdYY)^8e**u%=QRIrVTzr-i~WBZ)BKYi&6WL%_6P?6 zut@*!ok{;X{xhZd=lai(W{T5F2}`Uw=ZNx4NX$VsPDC8`XuZDH&@3Ti-D|b0`rP_# zxmf#L08@XNDB99=kcdC276ufHI#WLoB3veb!C|>S2Iqd5&yo%^rBwOfx-E6eCK8GKqGIBwu| zPBc8zAbL3*9uUiZ5R&G4;(}=$T{c@0H2z%tT_`=-d1i?!b_;@ELF>#bxxP5h9auZH zcRZ`{eQY`eV!ab}(1HQP@c<-kP{*re*pNE;qAXX1CtTeQQz1So_k5O7o+hgfm4}0O zo&`lUWN-hz1FEF`u}~1dBo&2i9)16uX!mtIQA4uKLs6qo8?ep#pSdHS)$6kYpJf-0 zuasGP8Yns!l_==oaE#eL{kWw)BQSZiY+b59D_gIVBKv-&1@9EOE+sn2-o4dLLWTsBRYQ1ufP!eu2k}rD$%>BLf2&m-%*%^^qw)^cby$+?xx48E z<*6UQM(wlrV?gLAE!FA`9pd_acbGAZ4(gNRGCx*cn1j)mrjHTAc88h8((4W0ds#c` zb7`;`3m%ZIhmn%;gT*G!SVr}wGYScz-MG(bsnGQ|D4qcJG<|ZnSMj#XnGt2{!wJbJ z#53%1++B6hkgax57nsyzm|of@Wly&34!#yj^V`=uY`53h@bp-sG*`Y`^<2oN94|*~ zv{aqANl|Syp6j*M?Vp?cw%(ea={G(-O=Mw!y#cVEsoGdD8k))gZ}5Qf(ZZ^D;ri}> zb8K&YZFIDW7XP4fYie}rYP}yH=L6&(`mE83@Pp}N|5-)rq~DvpNxtK5h=Llar8L-( z#=@fWM|s&S9fJrp92y$h*;oNgqlhT4i13E5pr}t;G)QW5&a7B@J+e)7d5VD5Yi=>g z`I>x)Yk#7<#bj#x)x@p7zCoV0veYs5XX%;p#Kvc}zu0TiXP(jr*F5B8vB`LxrdgVN5ep zJPoUN+Vwhmljs_ag^i@mrSX?2sa&yu0`El2A&Q}cAxX79Uamqt0n#4bO%LPfp3+G^ z7o2Buh_8lsJjZ@)lkNV1rI*xC`+@Z-Je$VGC=#h2Y}O{|dr!8%Kf>yqzykf~BdJ(7 z$;g$eO&hT7?hr8B{RK+xFC_ zeJ+&Gfztu&Jy4FE8mKAXE<3(Xhe92kVs=X0=~OqqGc(uXhZhVE^VfCVCnokOb{+=Z zbt?G9Iq?CEDgA1KF64;cOnxIrNENa=rP$sl1-R0CJHRG3r~6`Xy4od3+Wr_CY_=%dz}D!lHVL6g$EOdBS+_Q$zpOtJ%mn zc&Y$nwy4@h3O}_L#{Z3HA*?Ao8i*morlENCr@nk_19~!p0Tt1&lT-u-lfhEZ9S91< zPw1|DeoD>NHmaEL1*{FJ7SM?txHafo(S=HU2>n?;6VvAT;L*&_0(yXGQ$(~^LzKKf zTE6!oPGsw4EdGyGX$ZVdDZ<*@!`=|ALM=uf{klh-SgN0d4ZKWe&~JeT8arQW)p zPGDVeVRJBsAaU~3*P-{!X~~Y+{US{kLNJ1!!l}Y`cbWWwu2k~al8u6f&Bk4`TThQq zEOb;iG=HQcK|ExVZyP!rt)1=stf%1^mwN*TCNPA^d>s$piq2b^iSQ7eJqK*={?6C> zcrEIl?!BqvqZPfBloAS%Jy1O)Z|Yw-adLS)<*e5}gNe!B?phll!u%;ymD#2P1v*~b znng==Wg4%koF45!kFn&e_iC3Nsh;%aG*xTQwyP66TIX8J<6ZmPR&gP8HfSvb2)=eQ zovi?$xs^f^zeRA*mWg>FMC@NTFsxh=`N=H;Y07$04goU43RHbCfut=?V97@`HG=+X z`MAQED?7qnj%mCf7mROu?*c38-@5!fdiw(K^(>^BuYyM%zXnH*4(qIi{6l;?Diy=` zc<#YvhDLpFH3y59CMlv-DLCE4>>P)&vaa9afm62n58Zj~Ga-rL?K2up`+32hpq$M; z7^8zBhAo_@qgBZ9$LMXl0`6bYuDFA(c4D-;QFchR1!+5J?3ff=7ln8wFqef|kL?^Y z^6(={gl<<-M8HqZ)2y&%W)V?-XBD`JTK&CU6o&O1@eRz@yE(X~y3W(2yrNMsev!E+ zp22}yelfOqXQ&jUlhsHNM2$z6k2lq0qI{Z=EY#NM%WF++`O=$MCo4eeZmTWA0WWLY zKTf!t0NWL(khoTvUu|A$w4kqy>S`V~!*5nQhAgTDdmmS_c_1h>Y-5!2kn`p?z4_Wzu$VnC- z@^ji_Pu@ckhytSab+ycNTPR8FNpn_|Gxxz=kF+Ph5ocBRGs*+XT`sZ))~fmd^1vzz ze92l|0iydcy1hOE$yRR$noT>T3@~m3n8|eL7KDkpAT<18sH(_zEoH; zR;o@?Psfy|0ro4g5Rv#4?Ut(~$%v*vJGA)qi8pvIeYrwt?5GC^#LgPZ@9f;^5-2A- z9xXB4=qjbmgX*3GcJ#6h-v9h1oxx~q&PhXScic5~K$37)Ebqt#16_~DU0_%k245Bt zf2)C8t>9`(Uew02Q+7nq!*U6{anZahyJ(-)rf4At6M#*-K-e9IJRs4cp;ioblCt4C@ zwj$XtHMg&AHt+Iq!6`&Xem=AZPJ^A5snXSy{aNiJpB6G5wK}*_k7leqBb=6Sb>hZlDJRSP5oL)rudBXx?Nzrks+(q?BN-3BUTTdqp(&t^;kulqxdSW zi>TIZPlv(;;denz6#Oe_ut!DKfTPG5ZX6a+VrYrgwYenS>5hcfwfWd{V0hH;SVnKR zVG-zM<;fqZxg9drfVP`m(JK>?`-ZwnPIqSwAEQNKwCVcKv zRnSL2<92S>^~|in;W|i^UWN*W>K;mWpdj(y-}gPvISSJEv+ZH6VKV#y2IZqzyI6=9 zZNhFORlE2t7uf+?GPHJGEB;EarA=f6?0q4*lm%Hg*QS>PNjJ z${0ulz#A}9dTCrZkO-3?)Wom{MUVgK*q}_dc1^%$4EjkE-P-YfCDuM}P8zLo-f@IQ*G43G({Dwq zEhO~iHKEf?YI;#Na%5s{L}|p7$y*W~aPzz7-mALR8|owf!yUyOjZN*smlki|;xD>R z_9HLF7FA0~d6igcRxme=WNB7r!=>M*ypoICq7Rc1PeyHaY(d=B`&9|m@=MeFMCj1g z(74*h({%kKx1G(_5cy=4V5)e{G?yC!jZbfKLEmTNhD}SZ2$r|NA;-3h9x*?Ql-ZhF z__@3Kih-iDum$=>dN!O?6t5kanfAmcVwu0h5i`tGb<5IpMAP~dem`dvbB zYK65u7X&!m5V&%#FRL6$$dV=D(nX#EyK|={gH6dXJbkKGHnHqW7S8T{Q`xwP7U&k- zCvG?bO)NDaJa6EAz=o;SivrP;q(SoH!eK%T^wwleQ&D`;vaZe{`1_X6+X(AZ2tLX` z3Z=t#=RwW2<^7pJ_E=$=1Vf_@`o3G!`wraJB}E}BkQ8EAuCffL(g8}OiUnXy&)aPa ztHU*smn94ee>PQchtyvn!*!_?7;<8}RvYXsTQ-ccWJ$$(WcWLHr5CMGwlTX{IffKV zeq(r{%)B0s)XCunppqoQ#R*ePX`wNH&VKLxKD>s62DMs4#8}?Bu~3in+$GLAA8Vx{Z@5YE;ci8l((X0mnc5Fr;6Vzu`6%%H?* zGjHOleCBau$6of=G2jADxW3F8SkE$Ktvvhd4~uk>+34*7I?=JcgksXRvpU03;$GG= zqoN=~=%CMv*vxLM*mAm^Wm_W!2~M?VUN*)BVgjxnazoFs#=J?An~$9(?l;*a%;j+# zBNHNG<73IXS3Ad%!1;IWtKTI~iEInbnB?X5`UL0khozC7!eY{VF&LG15|fv6?`h>0 zGA!3MOvOp%LLG{%S}4qu!-`eypBcQ?h5NHPH^__vso6(_5x^QDws9v+QW9~^@Be@H z!O_6j!tQ@#A2NcNy#LXh%47Xo_ThgXccJ;$^&j@3N&VbuVHM@u+VlmFHiR%k)RlFX zf}O$OJ>AuG!@#uUv!A{r!Wk)YG@feAgE;{M*dIRNo}3s2d?uuq@le2Eo>+D_wv2=; z=LOC4N~qp?0(Q%WY4^`G&vWJu&olRu(SfyWg0M9{1$QexJJd;LNL;7>Y**?nZP>A(t+ z4CUPm$>#F_r!b^Ab>u=eR7z%xwi>l5rnw z|Dm3$RUiWRE+fNeg>i2(R+?H1BJnsw{>WDf3lNfZ*vq9q;_Vp=LqncaR}reIQn~7) zy`FBJP&&F4^mvCMko~^#xQ3nG()xBZ-BGT&X3BRms_5(*UZsR1%RJI~?i=obTG?!C z3d9nzMR4e4zH7VtB3qqVTKCwXSCJ6H*qGKRGj?=$Xa7SMI#vO(HcGnZJ3U)xt0h56 z^rx-?b0?E28k_Y}f%&P*ru+@yO^J6Sbjm^aGgO<*5!c%}M~0KCCUZ&y0G5pE8f|KG z^rTA*tmr4{T5=_A=C@MlSb2b$1Nn=s8>Wy3Zr3-U9Bq84+S%T#uG-yyX<4TaWkqKN(p-|PZ zQY6_JVI%xz2BS+!jpk}a)4kG<)YgK803wNUb2s!>YxqhB(@JS^>)Y@HM?N;@cQDQ7 zlq)`kJp)QNfMUJ$=>{8dlj}dT-1+YFm&y%tn znmsT}p-TAEHW5}4DZ9k=9oG%caVNgv3q3~5gXi*MI=Lm1-}zcQxD`hcB~$s4O1)V^ zGL@1)+t{S;?G(_MIE?=JQ_uxe@*=hEHN`UhmZh}jRpR@ICtWCk0 zx4Uf8n!V$>69AI`0YE6wAs{fBL?#l!5Df8*vJoC`9T?JnyLw1KD3_7WHHZ2gJe+)~ zHkEu>*@InS%l)FG<=&#F{$^eyBM_$Y3TKmC5Ly1UY4pCPw?oVmpl26bs^kxT?l!0+ zr8`3@+e12h&&L%jM%Wv%6e{)#o8pea?ir&PaQ|DAD?Jv6P#xn2M@Gl=Fl*h#FswGW zg@SnPoOZt@4YyDTulF#NHLCgEjYa4Jmb+}8x>aiC!9$umJ1da!8&P48X7%mt9c@{H zZK=!VUTLRtkSEsmMn06ii%T>As8*!huV*2ORegJPy_I-t_IiF)(XOe&=9e>!;LNgq zc1Fs^Iue?}ZJc;UEZ7K_u&zEd$U+qOSP}iBP7FXQ1>N6$kQf#`d70fE$A2U$6f`md z9Qx?AgyNG&^i|!;!Ew>41C{Ifs+MB%46x?g|yuH)vk1iM}S_sFZ66{p4oMnPVJ4k}tgLj6J zUDZW;u5E_Qkb_@0?6n5833PgA2~sa&mTL#*jO&2Ph!df_mZZmwQv@tns{&h6`?k-S zD1aL8_;e74ODYle7#MzI?J7WN3DTMJ%{-$hi zTQaYF(dq{x9~}*bcfwYC&!ZFe?Nle?a6+1XOSZ#3nPXzCsMMoN*;Xxf-F)0Q-25H6 z6z$>p2Eop7-v7oTRG)QuKHVXR11kxJ9T4(vLr{u+9lbj%r9j5Xu=0`|WC(5P#I1jtEbgA=)Q(q9+>z_dtysg_40;I9KM-%#QdW$5U&X&2wA$OF zlqzoZ3o86bvvi~*(3-tsy@x~(-SGAb-xC+|V#9Ouf8whgIa`s024AfV$TWa*YYODkgfg4;Om?ut1>`USoIZr1xfvuXMQ z3exB%2G43beq_EWANfQjwl@~yLMnRJAJe8cl=p?8tdMMsSMRPSn|Z>#mIB*xUeSxF2~Q5VXj$ zJVs<0p>S3$ydhEiD+hWJ(x;E{9p9diu0H_gZ1tJGodiTDi2IjvQxH~Le2aCH?;?^` zk9c>{06jp0CuCiWBnYBb!5V4sv~wDV>}?DpzQd}&Y~Y*?w_zl*QkUR(X}p|A{_`z; zaA_PYoZs_ti?x7M-1X&y6Kxs{H@r1bDmz;MwU82uvo6rIbJjXJD;n0U>FA)#Jskg*@QgTSTW&OFTpZMn>CZcD zo2)Vjt%{XHxhW%>UkALE4{jk)u$TBAZ|pE zqyh;EYQ5?8VM^P@BiP!Yc0Sp+jD6NzhV{&`WC6)IbrP1we`q)XCUhBn;-9!1&%=L( z|Nq}DOJx7G<>+51lE%!@?*ABw%@bwcZ2tlPh=m3KVE^wI`43?FKTG}tPm5Hw;4-LiSfq)M}rXc28 zv^C0*zX0(SbDcjbeF@G?R&EXPr*`(6DF_iw6Y*Gh&4b zk}-_Pj^CxLvQlr54wo8>2UTe=)R51 zn=}FBLGxA0vR2Oa{MYUD9QQ#_Az)>)sim= zvqv|&%L$ypFJ2VGUX~N6yRS()@0mPR0u&YIL58z!ENe$0h0&G6KnOuSrZ{#am1X{)(w&=NZ zE%kfV`x6~}ZU8rAo|nyKWL2I4af$JDo~TSokwsuNU<0QHI17j3FXJ@SocRy#!<~&y zzog>qDCnkGg&m1I^swRwcGa3tP~)Xxg4}4Nced6>5V_1fWP}ljHB~@(BTO0DJzV5m zqBwAuhAiYU_^As4H!sPy2{jGnNnC;r0tvH4#Yn7|Kc;u-ggDFcn9y$om#9{}`M86? zBP$^t8K~x8wG68EDJ6k*ch_Fowo$D!QeF!?8lHpN`D>QmTqC6xzj3xTLd1MrVad7< zhK?oLpF3KfDwK2(hlZza!J7rTh^nPq^w``s7=CmRe!;wdWKZL&d*Kk+_c=qR-pWe?>RpozRlW) zaCSE8{j&lcvAlaBy*s6I90|R3AS;C1b&;vv-0(W-#wk0f2lFoXxlarwdRk> zHP#x6W#HxSqJvBeYX>MTbi9%XMOr^oj>^d}(M0TrqDObRCDZDfV*)~=<2zuVKB%Ct z*27el#jY%)O;+FNFxPE6M$;fP4R}XJs{n9k>D4PN;#~WAO z6moOzdskC|6*B9M8LmV$ck>{+avmd7PUowQayJGdF^-Mc8)kP!J ztMFhBEiULTX4bqp&xk|U+9tCtclWRcsr|MP!I`%gzE<%oJPVg@)-bP*0YXTSD&EIi4$Jy>ZwGGV^bP|E;S+;jILb!aaT)=77s4wj3@PoiB=NJkKyxX2 zkdQtH*-=t2MhSfK*|Q2sYg|I=!mP5vdoQ2*&M5~x0);otHH;XzrutZ`$JeG;T| zQLOXRmW>VTIuIi1!?gBPm$nrhQzk@Gq6)9GA7Clm(T7yln2r3USN-+?A}GVv z0V-Ay0iD<8nQo0G@%rN}PAw>Gb_psq>Hx65VTXa0qxE7f#zfs$;}!s!k#T2#Z1tsn zYp{jp5Zs6XeB{+;%uv=_y#+tN4nfPyg{x3IU2v)HEMh}a-ESYx*2+)M?632~Zb>BY zil!AtYtwax2v>j?RY14y1bx|`a8L=~3H!C0gRkcT>*A8jL|q*RA35xz!WP5km=w`k zS?gxz4LY9`z#Ub-doIJf&X{Yp3^&eakDPXc1>J&m`sWFjAtM)ovp;$M=KYs)m;| z_R5}Q3GBeQ%6f;+!A5m>9!5k}VZMIelo=5N7dM%4u`P;l=usKutHcFn-d41fN^xGY z%*$eZc44(vbZ!cd8rU)5D^cRnh-g9~@S+J@!A<-LQ@kG(6) zs#c$$yVDtp33O0(F)zTs<<>nMk~(HcE^5v?L-olb5JQRYDw+IGmf@3j%51|IY%};q zu3uf=cGdMQ$E6r?DoDQDOrUUAU@~WKQ1uYilksgu1nFMIV%IMHFy+;&F-ER+5N-j58wQc|6 z_4k}|td5wN>ggFGf+F)h(7$YGUMQ8;JwUnH&_(s-X9IhMm9XHM@!@rv4jGeEvu8)e zmt5bRKqXOFb5nLqnwgHk7ny~XFot|U;s$x`;5}+%7mSBZPlmvvK_LhjrQij+KEt`> zkrb$_ud?l8_C?K6&jO{1I^JSB`b1Qg4#&@>$ax6B&nVM4arz6&Tcw&FTdf?pFs% zr~IArD;&R}PV&h&MRpo+1WjN{^<8?}b!`p*4EazVp>em5ZSyelxV0t&6Uk6e|Lt^2 z4cc^wf9(iu18WMTKrP@BsRg6la58p`xk$DeGBmmNQ(Vh%QEdGsSqiIArS!UedYc6t zmrjw`n&O;4U7$Mz)XVD)oyVIcc1My#zt;ELFt*^YSBqL#3M2d09ETk6Zc{JH`$IES zw#{?tNjp!3TtzZdwOUoI|1Mix93M+&m26TbtsV~s2cVrJt^@w4zgV!}X!TjzH<0;e zB?>W9Y#;fW7r+w1kl0cO_F>f77l8EhM%=^c9Q@&){gJGaM|?TESwao1RZUDwzIjQ@ zfJ|ePBNN10d>}#hVz27(>Ct|k{byash&V0><=-^20s{oX*yH}A(O#)HNU z^&8hRoTBFo0QVaRa@?3+dChRD;#(KIh^it(5fg?5eF1Sm9xTH^`s;DR;w9DFDBdjq zjT=~g=2$e(2bl+x+_v4~lbg6tLMKgJ7RlEcr-a$L_bE`C$5@@1T=xEgr9Bow--*RI*gX~4jiFZF{n2}U?7l=BV4$LKvneNhm3^!n5X51qW=|n=--Invys0=dRX;| zo^`-1TIjcOg7rKoJup0cPFvYZpapqcpkXFdxhZzZw4nle2>gkU>)(keLiC$U{GCxZ zB-DPi(X~m7NYx9SuFpIa)KJ>3oh1~j-7?$9lwfj~b%;s0gUf7ZIS!lcjGi5VTbdRHPll7a+4VVJld7DlL#Rub*5CCw-6N~y zB3|P4@#;{RtHO1W{pflJK&*q{K=F{V)U!W{Sp&Z|F~&!))@_p|EH=;(H^jdqONrH# zCr5An84AN|Lr$4uBM~+xqp;j%6ixy&yISQ)vp1xqL)?HKwAT0qP_)DWxw3d}O4Kgk zJtKPG+ngS`UvL6xW=pg~O$35{HbZj(A0ff*8m1x)xtffCA$w~zCfvjOm$D6k5B{lv(X4&Yj>xB-R=;?ke(MYXB|wGu1xA_ zK80=+HUcNUP(*URx@!1?Q)@&TAv<9}6Y&N7Uf0CIHQ^q+6wshLl4v1;)V8&@NRB@` z-q3Ww>(2ILhp@k#{*o8Ql?w_oNAfI{D8>HEpHSY`S9U!K0M9F!U_p?XAiR)I7OYRPc17_6;mgDkP ztj7{Zw1$q}a#HQt`AX*_JVeHJT_lsScPA&`SkJ^|lLamRn2kx~;njkly7A+J``Y$6 zS9Da@9SC@BeT!%v7=6`6x7#K{X;>aDSz|HF9-n=_g^(J^#;ft~5i;3eOf6F%)Cf%u^7Tlrt7b?+ zGaHbjEC^=Q=9 zw%}AtRo&FhY|*iY7cm6Rl61BP3&J|cAWZ7X@tL6W`@hITA^A5b&BVZ%#>UR^KLfpg zw6?vf#p7_`003x6007MY-4Z`&?|+s12l6GU+bC_QqJB}EzQDCuB5r6Hb2V-i0WCBECy7r!)@Sbiv@eJCvoLU6Oy}V8kC56@&6H#*73ZPb!Xc<+CXcnmz zF)oChld;xau|L+SVe+vxj?BaG)e zLYl9am#CB>O@LCw9J^Wu7$SH>+-7=Ot1MDz*t! zb5|-UveAfxQb$J$0ZbtySFrlE%3{5h`_!ww;L7mZmbo>L!;(U8`Nv8##}kc<#iWmU zmlz*TCUi-Z-Cs!AP>J6_cZS<4A17qSuWz9OKS(WO5d-Z1Y?&!=@k`LE$T;_x*b(Rc zWEgHi$scWMtlcFVPSI$Nv<@!}-Z_&)@Tc6TH*2eFdiRH_o~FLg>a$cj`rgpxZN7|9 zH#yj6x$K$7<8I4pZXOQz-JOg_H(&El_ma<>p^1XvCp5RuwKjc|p2w|c`YP{}GCnuB z!>J9vmuI-o8oW0#rmqVnN;9YoEVs|8z}<$f@2O2xN(kaeBXiPnctxir?P}c`GoG^; zGvi2C7O-!Yjetvgr@YfO$g*@p?xfnEmSGw5a_0aRGttz(r z*A%h)66PMO4btUG(EZnNkoCJjeeW5)pN8e0C}()$cf-^J(|n zhD?1UlpIuQ0@?AgyQcxw|C704jO9M-X#0ct{<-0{KwrUs}M!Lo7TB;gO4{EBww@H^ff7I`L>1piV7Yr`Ph2G(jTRwe;5Pfp) zKCq9-#})vyGlaOy*0*jg{hPGk)BEOfr&EX0MgOJ{R3il8kn4!JBBg*RMxoOFTzMiy zIsbJA5@Kr4JnqQJ3`JP)7Dn;X0p=~Q=4$+ZgScZg9 z-&*Gj$Wugvw)NKS{@6Y6Do=C1lXWmUVp_R>aYiN_aG2OhGI>isDGK1XM;i_}%X4A- zBoUoceM1>H6XKchHgQvJq4*g`;Dhjerw5fcQU9D&4YgC#TWdIjyYmdoI#1>#iOB)?c$ZL#h z*C=AGPWxK6G5ND%y+DuXU~^ZbiV!i!^(IGw3G8JST?mR}rru9{v#zTfi zkQvB_-6!x_;{9KW`d!N*ypp_w2~#(f#yP$deu+LL1orfoK_3>DeO};ZntjdN%r1G> z?elqF*zpF>EH`jzyWe?*8q7*^zxtZ~mQ!k zW`if|9oN##cP!MGaQ#V?jWZV0Y!ss)cq-0h!_P==Y#oS&Z$Pe*CodiC7tb)uk}tBm zwRmlLBtnACuP_cV!IrFLC8f|al!4XF%S_+B$oI9FqX&(~vugpxZS!Tqm->osD1;41 zr44Ooo!5VW^5!aowvqy++kAoH$vF_0L6rmMH1Rc#yV{>_c6Dk$vP5}Ef8lya16GGm zV2eH!J5Mr0Id9734eQ3p!2Gj*2p7l8OLJu$YTJ&%1J6>1GfAee$RDEYGmW}TpXyQ{ z4Mns-P^f^Z1*P&TtN{_x^4;~uy`k;3t>--zEE!G!rRdUbUq9=edV52_p5xP8$M>d) zuLX|_fFqLMSM{N=V6-8sQY{0!Ql=QGb6Qw87~!-%7!`i2eyTO3qe|7lQ`rYO;5nsr%v; zyokr_Bn^s0l5#TUMfEjR|7~Yc zFeUTPZ!d! z5QJ}li+?IKLn3NH8Kq+#2cvh^eGNtQ+k#zdh=Y@uqD?H%usm)1xd0JAK!OdrxC?`W ziUqOKxUjGgX!#TR|Lq0B`!@i?&h3Arp{61S{N+Ia0P=ni3i-c3{DVvE-2Oo%(f={% z*p~c+E07`CK)xpR_!~$UR(=MYgvfFxM5&V0**xOD@pxtFhH8W$g(ZkcHk8^7qB#$* zRHTAj#t(v`kM&`+udyNb5j<_O;u;-J*k^7weaUsgD{xe%8q=W_^Kf&kM)8ApI0*M8u-@)<27|i15dE2(Gl2 zdfo+031wrLcN%1IT zF#sT>XGg`$A)wFsUBMdlVMKXeV0Xus72hx&)|O67M;DOoCP?euXvGSxW<}T2K=*rn z$BFCo#!D=)wnt0`%#V?`w}-o1Jo);0^cpEy6{&wR za56YxXhqj(@4DS9RRFd%u6X${qgnYg2#x}lXMbrcgU`SdtDn4*NJOylBAFpFa%C8# zGivPRTd0E@8^}5^gQz>5NdgZ0?X*;qXq*~pQ;stJW%ZpwPj}lKlshjR?K(gUBz&Hh z8%s{aR6FnNp9~8G*9I>&j)&j5MK1Av>OQ%od(k)CJ$7-G&xYOCrR9j$+PLnJ11|~M zM5Z!}P-SDGwxhh8?#c=9bQR`zyGT`|6X8Rdum>X9P-dh*%b_1)78U`2RB*6I#^`D> zl6d2YDMB^u6*PKvh`;@^__p>o^ckgxK!#28DufA&>bKAJQa87~8Zi|j!S@iD>bDx3*3bzNx&CQ1^55`+)DyTrvUQ8 zFUT>j1@866H^u%8&4LvWe#H@-K=kqvJ-FN1O&3<

    eUmo_UOPXG&c+8#H#i=-z!x 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 z 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 OegHk0q;K27WH)LLeQQ9;So<#$?SsS;muq?II2 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
    JY=NZA2d; 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 I4dPJrKQWAE82|tP diff --git a/main.js b/main.js index 2416414..77ceceb 100644 --- a/main.js +++ b/main.js @@ -1,64 +1,14 @@ -import Vue from 'vue'; -import App from './App'; +import Vue from 'vue' +import App from './App' -Vue.config.productionTip = false; +Vue.config.productionTip = false -App.mpType = 'app'; +App.mpType = 'app' -// 此处为演示Vue.prototype使用,非uView的功能部分 -Vue.prototype.vuePrototype = '枣红'; - -// 引入全局uView -import uView from 'uview-ui'; +import uView from "uview-ui"; Vue.use(uView); -// 此处为演示vuex使用,非uView的功能部分 -import store from '@/store'; - -// 引入uView提供的对vuex的简写法文件 -let vuexStore = require('@/store/$u.mixin.js'); -Vue.mixin(vuexStore); - -// 引入uView对小程序分享的mixin封装 -let mpShare = require('uview-ui/libs/mixin/mpShare.js'); -Vue.mixin(mpShare); - -// i18n部分的配置 -// 引入语言包,注意路径 -import Chinese from '@/common/locales/zh.js'; -import English from '@/common/locales/en.js'; - -// VueI18n -import VueI18n from '@/common/vue-i18n.min.js'; - -// VueI18n -Vue.use(VueI18n); - -const i18n = new VueI18n({ - // 默认语言 - locale: 'zh', - // 引入语言文件 - messages: { - 'zh': Chinese, - 'en': English, - } -}); - -// 由于微信小程序的运行机制问题,需声明如下一行,H5和APP非必填 -Vue.prototype._i18n = i18n; - const app = new Vue({ - i18n, - store, - ...App -}); - -// http拦截器,将此部分放在new Vue()和app.$mount()之间,才能App.vue中正常使用 -import httpInterceptor from '@/common/http.interceptor.js'; -Vue.use(httpInterceptor, app); - -// http接口API抽离,免于写url或者一些固定的参数 -import httpApi from '@/common/http.api.js'; -Vue.use(httpApi, app); - -app.$mount(); + ...App +}) +app.$mount() diff --git a/manifest.json b/manifest.json index 2237a42..9ccad35 100644 --- a/manifest.json +++ b/manifest.json @@ -1,62 +1,44 @@ { - "name" : "zy-app", - "appid" : "", - "description" : "多平台快速开发的UI框架", - "versionName" : "1.8.0", + "name" : "zyplayer", + "appid" : "__UNI__B85B395", + "description" : "", + "versionName" : "1.0.0", "versionCode" : "100", "transformPx" : false, + /* 5+App特有相关 */ "app-plus" : { - // APP-VUE分包,可提APP升启动速度,2.7.12开始支持,兼容微信小程序分包方案,默认关闭 - "optimization" : { - "subPackages" : true - }, - "safearea" : { - "bottom" : { - "offset" : "none" - } - }, + "usingComponents" : true, + "nvueCompiler" : "uni-app", + "compilerVersion" : 3, "splashscreen" : { "alwaysShowBeforeRender" : true, "waiting" : true, "autoclose" : true, "delay" : 0 }, - "usingComponents" : true, - "nvueCompiler" : "uni-app", - "compilerVersion" : 3, - "modules" : {}, + /* 模块配置 */ + "modules" : { + "VideoPlayer" : {} + }, + /* 应用发布信息 */ "distribute" : { + /* android打包配置 */ "android" : { "permissions" : [ - "", - "", - "", - "", - "", - "", + "", "", - "", - "", "", - "", + "", "", "", - "", - "", "", - "", - "", - "", - "", - "", "" - ], - "abiFilters" : [ "armeabi-v7a", "arm64-v8a" ] + ] }, + /* ios打包配置 */ "ios" : {}, - "sdkConfigs" : { - "ad" : {} - }, + /* SDK配置 */ + "sdkConfigs" : {}, "icons" : { "android" : { "hdpi" : "unpackage/res/icons/72x72.png", @@ -89,51 +71,29 @@ } } } - } + }, + "renderer" : "native" }, + /* 快应用特有相关 */ "quickapp" : {}, + /* 小程序特有相关 */ "mp-weixin" : { "appid" : "", "setting" : { - "urlCheck" : true, - "es6" : false, - "minified" : true, - "postcss" : true - }, - "optimization" : { - "subPackages" : true + "urlCheck" : false }, "usingComponents" : true }, "mp-alipay" : { - "usingComponents" : true, - "component2" : true - }, - "mp-qq" : { - "optimization" : { - "subPackages" : true - }, - "appid" : "" + "usingComponents" : true }, "mp-baidu" : { - "usingComponents" : true, - "appid" : "" + "usingComponents" : true }, "mp-toutiao" : { - "usingComponents" : true, - "appid" : "" + "usingComponents" : true }, - "h5" : { - "template" : "template.h5.html", - "router" : { - "mode" : "history", - "base" : "" - }, - "optimization" : { - "treeShaking" : { - "enable" : false - } - }, - "title" : "uView UI" + "uniStatistics" : { + "enable" : false } } diff --git a/node_modules/.bin/xml2js b/node_modules/.bin/xml2js new file mode 100644 index 0000000..141e9ac --- /dev/null +++ b/node_modules/.bin/xml2js @@ -0,0 +1,15 @@ +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;; +esac + +if [ -x "$basedir/node" ]; then + "$basedir/node" "$basedir/../fast-xml-parser/cli.js" "$@" + ret=$? +else + node "$basedir/../fast-xml-parser/cli.js" "$@" + ret=$? +fi +exit $ret diff --git a/node_modules/.bin/xml2js.cmd b/node_modules/.bin/xml2js.cmd new file mode 100644 index 0000000..a92040e --- /dev/null +++ b/node_modules/.bin/xml2js.cmd @@ -0,0 +1,17 @@ +@ECHO off +SETLOCAL +CALL :find_dp0 + +IF EXIST "%dp0%\node.exe" ( + SET "_prog=%dp0%\node.exe" +) ELSE ( + SET "_prog=node" + SET PATHEXT=%PATHEXT:;.JS;=;% +) + +"%_prog%" "%dp0%\..\fast-xml-parser\cli.js" %* +ENDLOCAL +EXIT /b %errorlevel% +:find_dp0 +SET dp0=%~dp0 +EXIT /b diff --git a/node_modules/.bin/xml2js.ps1 b/node_modules/.bin/xml2js.ps1 new file mode 100644 index 0000000..7dc0cf7 --- /dev/null +++ b/node_modules/.bin/xml2js.ps1 @@ -0,0 +1,18 @@ +#!/usr/bin/env pwsh +$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent + +$exe="" +if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { + # Fix case when both the Windows and Linux builds of Node + # are installed in the same directory + $exe=".exe" +} +$ret=0 +if (Test-Path "$basedir/node$exe") { + & "$basedir/node$exe" "$basedir/../fast-xml-parser/cli.js" $args + $ret=$LASTEXITCODE +} else { + & "node$exe" "$basedir/../fast-xml-parser/cli.js" $args + $ret=$LASTEXITCODE +} +exit $ret diff --git a/node_modules/axios/CHANGELOG.md b/node_modules/axios/CHANGELOG.md new file mode 100644 index 0000000..8c6b7d9 --- /dev/null +++ b/node_modules/axios/CHANGELOG.md @@ -0,0 +1,662 @@ +# Changelog + +### 0.21.0 (October 23, 2020) + +Fixes and Functionality: + +- Fixing requestHeaders.Authorization ([#3287](https://github.com/axios/axios/pull/3287)) +- Fixing node types ([#3237](https://github.com/axios/axios/pull/3237)) +- Fixing axios.delete ignores config.data ([#3282](https://github.com/axios/axios/pull/3282)) +- Revert "Fixing overwrite Blob/File type as Content-Type in browser. (#1773)" ([#3289](https://github.com/axios/axios/pull/3289)) +- Fixing an issue that type 'null' and 'undefined' is not assignable to validateStatus when typescript strict option is enabled ([#3200](https://github.com/axios/axios/pull/3200)) + +Internal and Tests: + +- Lock travis to not use node v15 ([#3361](https://github.com/axios/axios/pull/3361)) + +Documentation: + +- Fixing simple typo, existant -> existent ([#3252](https://github.com/axios/axios/pull/3252)) +- Fixing typos ([#3309](https://github.com/axios/axios/pull/3309)) + +Huge thanks to everyone who contributed to this release via code (authors listed below) or via reviews and triaging on GitHub: + +- Allan Cruz <57270969+Allanbcruz@users.noreply.github.com> +- George Cheng +- Jay +- Kevin Kirsche +- Remco Haszing +- Taemin Shin +- Tim Gates +- Xianming Zhong + +### 0.20.0 (August 20, 2020) + +Release of 0.20.0-pre as a full release with no other changes. + +### 0.20.0-pre (July 15, 2020) + +Fixes and Functionality: + +- Fixing response with utf-8 BOM can not parse to json ([#2419](https://github.com/axios/axios/pull/2419)) + - fix: remove byte order marker (UTF-8 BOM) when transform response + - fix: remove BOM only utf-8 + - test: utf-8 BOM + - fix: incorrect param name +- Refactor mergeConfig without utils.deepMerge ([#2844](https://github.com/axios/axios/pull/2844)) + - Adding failing test + - Fixing #2587 default custom config persisting + - Adding Concat keys and filter duplicates + - Fixed value from CPE + - update for review feedbacks + - no deepMerge + - only merge between plain objects + - fix rename + - always merge config by mergeConfig + - extract function mergeDeepProperties + - refactor mergeConfig with all keys, and add special logic for validateStatus + - add test for resetting headers + - add lots of tests and fix a bug + - should not inherit `data` + - use simple toString +- Fixing overwrite Blob/File type as Content-Type in browser. ([#1773](https://github.com/axios/axios/pull/1773)) +- Fixing an issue that type 'null' is not assignable to validateStatus ([#2773](https://github.com/axios/axios/pull/2773)) +- Fixing special char encoding ([#1671](https://github.com/axios/axios/pull/1671)) + - removing @ character from replacement list since it is a reserved character + - Updating buildURL test to not include the @ character + - Removing console logs +- Fixing password encoding with special characters in basic authentication ([#1492](https://github.com/axios/axios/pull/1492)) + - Fixing password encoding with special characters in basic authentication + - Adding test to check if password with non-Latin1 characters pass +- Fixing 'Network Error' in react native android ([#1487](https://github.com/axios/axios/pull/1487)) + There is a bug in react native Android platform when using get method. It will trigger a 'Network Error' when passing the requestData which is an empty string to request.send function. So if the requestData is an empty string we can set it to null as well to fix the bug. +- Fixing Cookie Helper with Asyc Components ([#1105](https://github.com/axios/axios/pull/1105)) ([#1107](https://github.com/axios/axios/pull/1107)) +- Fixing 'progressEvent' type ([#2851](https://github.com/axios/axios/pull/2851)) + - Fix 'progressEvent' type + - Update axios.ts +- Fixing getting local files (file://) failed ([#2470](https://github.com/axios/axios/pull/2470)) + - fix issue #2416, #2396 + - fix Eslint warn + - Modify judgment conditions + - add unit test + - update unit test + - update unit test +- Allow PURGE method in typings ([#2191](https://github.com/axios/axios/pull/2191)) +- Adding option to disable automatic decompression ([#2661](https://github.com/axios/axios/pull/2661)) + - Adding ability to disable auto decompression + - Updating decompress documentation in README + - Fixing test\unit\adapters\http.js lint errors + - Adding test for disabling auto decompression + - Removing changes that fixed lint errors in tests + - Removing formatting change to unit test +- Add independent `maxBodyLength` option ([#2781](https://github.com/axios/axios/pull/2781)) + - Add independent option to set the maximum size of the request body + - Remove maxBodyLength check + - Update README + - Assert for error code and message +- Adding responseEncoding to mergeConfig ([#1745](https://github.com/axios/axios/pull/1745)) +- Compatible with follow-redirect aborts the request ([#2689](https://github.com/axios/axios/pull/2689)) + - Compatible with follow-redirect aborts the request + - Use the error code +- Fix merging of params ([#2656](https://github.com/axios/axios/pull/2656)) + - Name function to avoid ESLint func-names warning + - Switch params config to merge list and update tests + - Restore testing of both false and null + - Restore test cases for keys without defaults + - Include test for non-object values that aren't false-y. +- Revert `finally` as `then` ([#2683](https://github.com/axios/axios/pull/2683)) + +Internal and Tests: + +- Fix stale bot config ([#3049](https://github.com/axios/axios/pull/3049)) + - fix stale bot config + - fix multiple lines +- Add days and change name to work ([#3035](https://github.com/axios/axios/pull/3035)) +- Update close-issues.yml ([#3031](https://github.com/axios/axios/pull/3031)) + - Update close-issues.yml + Update close message to read better 😄 + - Fix use of quotations + Use single quotes as per other .yml files + - Remove user name form message +- Add GitHub actions to close stale issues/prs ([#3029](https://github.com/axios/axios/pull/3029)) + - prepare stale actions + - update messages + - Add exempt labels and lighten up comments +- Add GitHub actions to close invalid issues ([#3022](https://github.com/axios/axios/pull/3022)) + - add close actions + - fix with checkout + - update issue templates + - add reminder + - update close message +- Add test with Node.js 12 ([#2860](https://github.com/axios/axios/pull/2860)) + - test with Node.js 12 + - test with latest +- Adding console log on sandbox server startup ([#2210](https://github.com/axios/axios/pull/2210)) + - Adding console log on sandbox server startup + - Update server.js + Add server error handling + - Update server.js + Better error message, remove retry. +- Adding tests for method `options` type definitions ([#1996](https://github.com/axios/axios/pull/1996)) + Update tests. +- Add test for redirecting with too large response ([#2695](https://github.com/axios/axios/pull/2695)) +- Fixing unit test failure in Windows OS ([#2601](https://github.com/axios/axios/pull/2601)) +- Fixing issue for HEAD method and gzipped response ([#2666](https://github.com/axios/axios/pull/2666)) +- Fix tests in browsers ([#2748](https://github.com/axios/axios/pull/2748)) +- chore: add `jsdelivr` and `unpkg` support ([#2443](https://github.com/axios/axios/pull/2443)) + +Documentation: + +- Adding support for URLSearchParams in node ([#1900](https://github.com/axios/axios/pull/1900)) + - Adding support for URLSearchParams in node + - Remove un-needed code + - Update utils.js + - Make changes as suggested +- Adding table of content (preview) ([#3050](https://github.com/axios/axios/pull/3050)) + - add toc (preview) + - remove toc in toc + Signed-off-by: Moni + - fix sublinks + - fix indentation + - remove redundant table links + - update caps and indent + - remove axios +- Replace 'blacklist' with 'blocklist' ([#3006](https://github.com/axios/axios/pull/3006)) +- docs(): Detailed config options environment. ([#2088](https://github.com/axios/axios/pull/2088)) + - docs(): Detailed config options environment. + - Update README.md +- Include axios-data-unpacker in ECOSYSTEM.md ([#2080](https://github.com/axios/axios/pull/2080)) +- Allow opening examples in Gitpod ([#1958](https://github.com/axios/axios/pull/1958)) +- Remove axios.all() and axios.spread() from Readme.md ([#2727](https://github.com/axios/axios/pull/2727)) + - remove axios.all(), axios.spread() + - replace example + - axios.all() -> Promise.all() + - axios.spread(function (acct, perms)) -> function (acct, perms) + - add deprecated mark +- Update README.md ([#2887](https://github.com/axios/axios/pull/2887)) + Small change to the data attribute doc of the config. A request body can also be set for DELETE methods but this wasn't mentioned in the documentation (it only mentioned POST, PUT and PATCH). Took my some 10-20 minutes until I realized that I don't need to manipulate the request body with transformRequest in the case of DELETE. +- Include swagger-taxos-codegen in ECOSYSTEM.md ([#2162](https://github.com/axios/axios/pull/2162)) +- Add CDNJS version badge in README.md ([#878](https://github.com/axios/axios/pull/878)) + This badge will show the version on CDNJS! +- Documentation update to clear up ambiguity in code examples ([#2928](https://github.com/axios/axios/pull/2928)) + - Made an adjustment to the documentation to clear up any ambiguity around the use of "fs". This should help clear up that the code examples with "fs" cannot be used on the client side. +- Update README.md about validateStatus ([#2912](https://github.com/axios/axios/pull/2912)) + Rewrote the comment from "Reject only if the status code is greater than or equal to 500" to "Resolve only if the status code is less than 500" +- Updating documentation for usage form-data ([#2805](https://github.com/axios/axios/pull/2805)) + Closes #2049 +- Fixing CHANGELOG.md issue link ([#2784](https://github.com/axios/axios/pull/2784)) +- Include axios-hooks in ECOSYSTEM.md ([#2003](https://github.com/axios/axios/pull/2003)) +- Added Response header access instructions ([#1901](https://github.com/axios/axios/pull/1901)) + - Added Response header access instructions + - Added note about using bracket notation +- Add `onUploadProgress` and `onDownloadProgress` are browser only ([#2763](https://github.com/axios/axios/pull/2763)) + Saw in #928 and #1966 that `onUploadProgress` and `onDownloadProgress` only work in the browser and was missing that from the README. +- Update ' sign to ` in proxy spec ([#2778](https://github.com/axios/axios/pull/2778)) +- Adding jsDelivr link in README ([#1110](https://github.com/axios/axios/pull/1110)) + - Adding jsDelivr link + - Add SRI + - Remove SRI + +Huge thanks to everyone who contributed to this release via code (authors listed +below) or via reviews and triaging on GitHub: + +- Alan Wang +- Alexandru Ungureanu +- Anubhav Srivastava +- Benny Neugebauer +- Cr <631807682@qq.com> +- David +- David Ko +- David Tanner +- Emily Morehouse +- Felipe Martins +- Fonger <5862369+Fonger@users.noreply.github.com> +- Frostack +- George Cheng +- grumblerchester +- Gustavo López +- hexaez <45806662+hexaez@users.noreply.github.com> +- huangzuizui +- Ian Wijma +- Jay +- jeffjing +- jennynju <46782518+jennynju@users.noreply.github.com> +- Jimmy Liao <52391190+jimmy-liao-gogoro@users.noreply.github.com> +- Jonathan Sharpe +- JounQin +- Justin Beckwith +- Kamil Posiadała <3dcreator.pl@gmail.com> +- Lukas Drgon +- marcinx +- Martti Laine +- Michał Zarach +- Moni +- Motonori Iwata <121048+iwata@users.noreply.github.com> +- Nikita Galkin +- Petr Mares +- Philippe Recto +- Remco Haszing +- rockcs1992 +- Ryan Bown +- Samina Fu +- Simone Busoli +- Spencer von der Ohe +- Sven Efftinge +- Taegyeoung Oh +- Taemin Shin +- Thibault Ehrhart <1208424+ehrhart@users.noreply.github.com> +- Xianming Zhong +- Yasu Flores +- Zac Delventhal + +### 0.19.2 (Jan 20, 2020) + +- Remove unnecessary XSS check ([#2679](https://github.com/axios/axios/pull/2679)) (see ([#2646](https://github.com/axios/axios/issues/2646)) for discussion) + +### 0.19.1 (Jan 7, 2020) + +Fixes and Functionality: + +- Fixing invalid agent issue ([#1904](https://github.com/axios/axios/pull/1904)) +- Fix ignore set withCredentials false ([#2582](https://github.com/axios/axios/pull/2582)) +- Delete useless default to hash ([#2458](https://github.com/axios/axios/pull/2458)) +- Fix HTTP/HTTPs agents passing to follow-redirect ([#1904](https://github.com/axios/axios/pull/1904)) +- Fix ignore set withCredentials false ([#2582](https://github.com/axios/axios/pull/2582)) +- Fix CI build failure ([#2570](https://github.com/axios/axios/pull/2570)) +- Remove dependency on is-buffer from package.json ([#1816](https://github.com/axios/axios/pull/1816)) +- Adding options typings ([#2341](https://github.com/axios/axios/pull/2341)) +- Adding Typescript HTTP method definition for LINK and UNLINK. ([#2444](https://github.com/axios/axios/pull/2444)) +- Update dist with newest changes, fixes Custom Attributes issue +- Change syntax to see if build passes ([#2488](https://github.com/axios/axios/pull/2488)) +- Update Webpack + deps, remove now unnecessary polyfills ([#2410](https://github.com/axios/axios/pull/2410)) +- Fix to prevent XSS, throw an error when the URL contains a JS script ([#2464](https://github.com/axios/axios/pull/2464)) +- Add custom timeout error copy in config ([#2275](https://github.com/axios/axios/pull/2275)) +- Add error toJSON example ([#2466](https://github.com/axios/axios/pull/2466)) +- Fixing Vulnerability A Fortify Scan finds a critical Cross-Site Scrip… ([#2451](https://github.com/axios/axios/pull/2451)) +- Fixing subdomain handling on no_proxy ([#2442](https://github.com/axios/axios/pull/2442)) +- Make redirection from HTTP to HTTPS work ([#2426](https://github.com/axios/axios/pull/2426)) and ([#2547](https://github.com/axios/axios/pull/2547)) +- Add toJSON property to AxiosError type ([#2427](https://github.com/axios/axios/pull/2427)) +- Fixing socket hang up error on node side for slow response. ([#1752](https://github.com/axios/axios/pull/1752)) +- Alternative syntax to send data into the body ([#2317](https://github.com/axios/axios/pull/2317)) +- Fixing custom config options ([#2207](https://github.com/axios/axios/pull/2207)) +- Fixing set `config.method` after mergeConfig for Axios.prototype.request ([#2383](https://github.com/axios/axios/pull/2383)) +- Axios create url bug ([#2290](https://github.com/axios/axios/pull/2290)) +- Do not modify config.url when using a relative baseURL (resolves [#1628](https://github.com/axios/axios/issues/1098)) ([#2391](https://github.com/axios/axios/pull/2391)) +- Add typescript HTTP method definition for LINK and UNLINK ([#2444](https://github.com/axios/axios/pull/2444)) + +Internal: + +- Revert "Update Webpack + deps, remove now unnecessary polyfills" ([#2479](https://github.com/axios/axios/pull/2479)) +- Order of if/else blocks is causing unit tests mocking XHR. ([#2201](https://github.com/axios/axios/pull/2201)) +- Add license badge ([#2446](https://github.com/axios/axios/pull/2446)) +- Fix travis CI build [#2386](https://github.com/axios/axios/pull/2386) +- Fix cancellation error on build master. #2290 #2207 ([#2407](https://github.com/axios/axios/pull/2407)) + +Documentation: + +- Fixing typo in CHANGELOG.md: s/Functionallity/Functionality ([#2639](https://github.com/axios/axios/pull/2639)) +- Fix badge, use master branch ([#2538](https://github.com/axios/axios/pull/2538)) +- Fix typo in changelog [#2193](https://github.com/axios/axios/pull/2193) +- Document fix ([#2514](https://github.com/axios/axios/pull/2514)) +- Update docs with no_proxy change, issue #2484 ([#2513](https://github.com/axios/axios/pull/2513)) +- Fixing missing words in docs template ([#2259](https://github.com/axios/axios/pull/2259)) +- 🐛Fix request finally documentation in README ([#2189](https://github.com/axios/axios/pull/2189)) +- updating spelling and adding link to docs ([#2212](https://github.com/axios/axios/pull/2212)) +- docs: minor tweak ([#2404](https://github.com/axios/axios/pull/2404)) +- Update response interceptor docs ([#2399](https://github.com/axios/axios/pull/2399)) +- Update README.md ([#2504](https://github.com/axios/axios/pull/2504)) +- Fix word 'sintaxe' to 'syntax' in README.md ([#2432](https://github.com/axios/axios/pull/2432)) +- updating README: notes on CommonJS autocomplete ([#2256](https://github.com/axios/axios/pull/2256)) +- Fix grammar in README.md ([#2271](https://github.com/axios/axios/pull/2271)) +- Doc fixes, minor examples cleanup ([#2198](https://github.com/axios/axios/pull/2198)) + +### 0.19.0 (May 30, 2019) + +Fixes and Functionality: + +- Added support for no_proxy env variable ([#1693](https://github.com/axios/axios/pull/1693/files)) - Chance Dickson +- Unzip response body only for statuses != 204 ([#1129](https://github.com/axios/axios/pull/1129)) - drawski +- Destroy stream on exceeding maxContentLength (fixes [#1098](https://github.com/axios/axios/issues/1098)) ([#1485](https://github.com/axios/axios/pull/1485)) - Gadzhi Gadzhiev +- Makes Axios error generic to use AxiosResponse ([#1738](https://github.com/axios/axios/pull/1738)) - Suman Lama +- Fixing Mocha tests by locking follow-redirects version to 1.5.10 ([#1993](https://github.com/axios/axios/pull/1993)) - grumblerchester +- Allow uppercase methods in typings. ([#1781](https://github.com/axios/axios/pull/1781)) - Ken Powers +- Fixing building url with hash mark ([#1771](https://github.com/axios/axios/pull/1771)) - Anatoly Ryabov +- This commit fix building url with hash map (fragment identifier) when parameters are present: they must not be added after `#`, because client cut everything after `#` +- Preserve HTTP method when following redirect ([#1758](https://github.com/axios/axios/pull/1758)) - Rikki Gibson +- Add `getUri` signature to TypeScript definition. ([#1736](https://github.com/axios/axios/pull/1736)) - Alexander Trauzzi +- Adding isAxiosError flag to errors thrown by axios ([#1419](https://github.com/axios/axios/pull/1419)) - Ayush Gupta + +Internal: + +- Fixing .eslintrc without extension ([#1789](https://github.com/axios/axios/pull/1789)) - Manoel +- Fix failing SauceLabs tests by updating configuration - Emily Morehouse +- Add issue templates - Emily Morehouse + +Documentation: + +- Consistent coding style in README ([#1787](https://github.com/axios/axios/pull/1787)) - Ali Servet Donmez +- Add information about auth parameter to README ([#2166](https://github.com/axios/axios/pull/2166)) - xlaguna +- Add DELETE to list of methods that allow data as a config option ([#2169](https://github.com/axios/axios/pull/2169)) - Daniela Borges Matos de Carvalho +- Update ECOSYSTEM.md - Add Axios Endpoints ([#2176](https://github.com/axios/axios/pull/2176)) - Renan +- Add r2curl in ECOSYSTEM ([#2141](https://github.com/axios/axios/pull/2141)) - 유용우 / CX +- Update README.md - Add instructions for installing with yarn ([#2036](https://github.com/axios/axios/pull/2036)) - Victor Hermes +- Fixing spacing for README.md ([#2066](https://github.com/axios/axios/pull/2066)) - Josh McCarty +- Update README.md. - Change `.then` to `.finally` in example code ([#2090](https://github.com/axios/axios/pull/2090)) - Omar Cai +- Clarify what values responseType can have in Node ([#2121](https://github.com/axios/axios/pull/2121)) - Tyler Breisacher +- docs(ECOSYSTEM): add axios-api-versioning ([#2020](https://github.com/axios/axios/pull/2020)) - Weffe +- It seems that `responseType: 'blob'` doesn't actually work in Node (when I tried using it, response.data was a string, not a Blob, since Node doesn't have Blobs), so this clarifies that this option should only be used in the browser +- Update README.md. - Add Querystring library note ([#1896](https://github.com/axios/axios/pull/1896)) - Dmitriy Eroshenko +- Add react-hooks-axios to Libraries section of ECOSYSTEM.md ([#1925](https://github.com/axios/axios/pull/1925)) - Cody Chan +- Clarify in README that default timeout is 0 (no timeout) ([#1750](https://github.com/axios/axios/pull/1750)) - Ben Standefer + +### 0.19.0-beta.1 (Aug 9, 2018) + +**NOTE:** This is a beta version of this release. There may be functionality that is broken in +certain browsers, though we suspect that builds are hanging and not erroring. See +https://saucelabs.com/u/axios for the most up-to-date information. + +New Functionality: + +- Add getUri method ([#1712](https://github.com/axios/axios/issues/1712)) +- Add support for no_proxy env variable ([#1693](https://github.com/axios/axios/issues/1693)) +- Add toJSON to decorated Axios errors to facilitate serialization ([#1625](https://github.com/axios/axios/issues/1625)) +- Add second then on axios call ([#1623](https://github.com/axios/axios/issues/1623)) +- Typings: allow custom return types +- Add option to specify character set in responses (with http adapter) + +Fixes: + +- Fix Keep defaults local to instance ([#385](https://github.com/axios/axios/issues/385)) +- Correctly catch exception in http test ([#1475](https://github.com/axios/axios/issues/1475)) +- Fix accept header normalization ([#1698](https://github.com/axios/axios/issues/1698)) +- Fix http adapter to allow HTTPS connections via HTTP ([#959](https://github.com/axios/axios/issues/959)) +- Fix Removes usage of deprecated Buffer constructor. ([#1555](https://github.com/axios/axios/issues/1555), [#1622](https://github.com/axios/axios/issues/1622)) +- Fix defaults to use httpAdapter if available ([#1285](https://github.com/axios/axios/issues/1285)) + - Fixing defaults to use httpAdapter if available + - Use a safer, cross-platform method to detect the Node environment +- Fix Reject promise if request is cancelled by the browser ([#537](https://github.com/axios/axios/issues/537)) +- [Typescript] Fix missing type parameters on delete/head methods +- [NS]: Send `false` flag isStandardBrowserEnv for Nativescript +- Fix missing type parameters on delete/head +- Fix Default method for an instance always overwritten by get +- Fix type error when socketPath option in AxiosRequestConfig +- Capture errors on request data streams +- Decorate resolve and reject to clear timeout in all cases + +Huge thanks to everyone who contributed to this release via code (authors listed +below) or via reviews and triaging on GitHub: + +- Andrew Scott +- Anthony Gauthier +- arpit +- ascott18 +- Benedikt Rötsch +- Chance Dickson +- Dave Stewart +- Deric Cain +- Guillaume Briday +- Jacob Wejendorp +- Jim Lynch +- johntron +- Justin Beckwith +- Justin Beckwith +- Khaled Garbaya +- Lim Jing Rong +- Mark van den Broek +- Martti Laine +- mattridley +- mattridley +- Nicolas Del Valle +- Nilegfx +- pbarbiero +- Rikki Gibson +- Sako Hartounian +- Shane Fitzpatrick +- Stephan Schneider +- Steven +- Tim Garthwaite +- Tim Johns +- Yutaro Miyazaki + +### 0.18.0 (Feb 19, 2018) + +- Adding support for UNIX Sockets when running with Node.js ([#1070](https://github.com/axios/axios/pull/1070)) +- Fixing typings ([#1177](https://github.com/axios/axios/pull/1177)): + - AxiosRequestConfig.proxy: allows type false + - AxiosProxyConfig: added auth field +- Adding function signature in AxiosInstance interface so AxiosInstance can be invoked ([#1192](https://github.com/axios/axios/pull/1192), [#1254](https://github.com/axios/axios/pull/1254)) +- Allowing maxContentLength to pass through to redirected calls as maxBodyLength in follow-redirects config ([#1287](https://github.com/axios/axios/pull/1287)) +- Fixing configuration when using an instance - method can now be set ([#1342](https://github.com/axios/axios/pull/1342)) + +### 0.17.1 (Nov 11, 2017) + +- Fixing issue with web workers ([#1160](https://github.com/axios/axios/pull/1160)) +- Allowing overriding transport ([#1080](https://github.com/axios/axios/pull/1080)) +- Updating TypeScript typings ([#1165](https://github.com/axios/axios/pull/1165), [#1125](https://github.com/axios/axios/pull/1125), [#1131](https://github.com/axios/axios/pull/1131)) + +### 0.17.0 (Oct 21, 2017) + +- **BREAKING** Fixing issue with `baseURL` and interceptors ([#950](https://github.com/axios/axios/pull/950)) +- **BREAKING** Improving handing of duplicate headers ([#874](https://github.com/axios/axios/pull/874)) +- Adding support for disabling proxies ([#691](https://github.com/axios/axios/pull/691)) +- Updating TypeScript typings with generic type parameters ([#1061](https://github.com/axios/axios/pull/1061)) + +### 0.16.2 (Jun 3, 2017) + +- Fixing issue with including `buffer` in bundle ([#887](https://github.com/axios/axios/pull/887)) +- Including underlying request in errors ([#830](https://github.com/axios/axios/pull/830)) +- Convert `method` to lowercase ([#930](https://github.com/axios/axios/pull/930)) + +### 0.16.1 (Apr 8, 2017) + +- Improving HTTP adapter to return last request in case of redirects ([#828](https://github.com/axios/axios/pull/828)) +- Updating `follow-redirects` dependency ([#829](https://github.com/axios/axios/pull/829)) +- Adding support for passing `Buffer` in node ([#773](https://github.com/axios/axios/pull/773)) + +### 0.16.0 (Mar 31, 2017) + +- **BREAKING** Removing `Promise` from axios typings in favor of built-in type declarations ([#480](https://github.com/axios/axios/issues/480)) +- Adding `options` shortcut method ([#461](https://github.com/axios/axios/pull/461)) +- Fixing issue with using `responseType: 'json'` in browsers incompatible with XHR Level 2 ([#654](https://github.com/axios/axios/pull/654)) +- Improving React Native detection ([#731](https://github.com/axios/axios/pull/731)) +- Fixing `combineURLs` to support empty `relativeURL` ([#581](https://github.com/axios/axios/pull/581)) +- Removing `PROTECTION_PREFIX` support ([#561](https://github.com/axios/axios/pull/561)) + +### 0.15.3 (Nov 27, 2016) + +- Fixing issue with custom instances and global defaults ([#443](https://github.com/axios/axios/issues/443)) +- Renaming `axios.d.ts` to `index.d.ts` ([#519](https://github.com/axios/axios/issues/519)) +- Adding `get`, `head`, and `delete` to `defaults.headers` ([#509](https://github.com/axios/axios/issues/509)) +- Fixing issue with `btoa` and IE ([#507](https://github.com/axios/axios/issues/507)) +- Adding support for proxy authentication ([#483](https://github.com/axios/axios/pull/483)) +- Improving HTTP adapter to use `http` protocol by default ([#493](https://github.com/axios/axios/pull/493)) +- Fixing proxy issues ([#491](https://github.com/axios/axios/pull/491)) + +### 0.15.2 (Oct 17, 2016) + +- Fixing issue with calling `cancel` after response has been received ([#482](https://github.com/axios/axios/issues/482)) + +### 0.15.1 (Oct 14, 2016) + +- Fixing issue with UMD ([#485](https://github.com/axios/axios/issues/485)) + +### 0.15.0 (Oct 10, 2016) + +- Adding cancellation support ([#452](https://github.com/axios/axios/pull/452)) +- Moving default adapter to global defaults ([#437](https://github.com/axios/axios/pull/437)) +- Fixing issue with `file` URI scheme ([#440](https://github.com/axios/axios/pull/440)) +- Fixing issue with `params` objects that have no prototype ([#445](https://github.com/axios/axios/pull/445)) + +### 0.14.0 (Aug 27, 2016) + +- **BREAKING** Updating TypeScript definitions ([#419](https://github.com/axios/axios/pull/419)) +- **BREAKING** Replacing `agent` option with `httpAgent` and `httpsAgent` ([#387](https://github.com/axios/axios/pull/387)) +- **BREAKING** Splitting `progress` event handlers into `onUploadProgress` and `onDownloadProgress` ([#423](https://github.com/axios/axios/pull/423)) +- Adding support for `http_proxy` and `https_proxy` environment variables ([#366](https://github.com/axios/axios/pull/366)) +- Fixing issue with `auth` config option and `Authorization` header ([#397](https://github.com/axios/axios/pull/397)) +- Don't set XSRF header if `xsrfCookieName` is `null` ([#406](https://github.com/axios/axios/pull/406)) + +### 0.13.1 (Jul 16, 2016) + +- Fixing issue with response data not being transformed on error ([#378](https://github.com/axios/axios/issues/378)) + +### 0.13.0 (Jul 13, 2016) + +- **BREAKING** Improved error handling ([#345](https://github.com/axios/axios/pull/345)) +- **BREAKING** Response transformer now invoked in dispatcher not adapter ([10eb238](https://github.com/axios/axios/commit/10eb23865101f9347570552c04e9d6211376e25e)) +- **BREAKING** Request adapters now return a `Promise` ([157efd5](https://github.com/axios/axios/commit/157efd5615890301824e3121cc6c9d2f9b21f94a)) +- Fixing issue with `withCredentials` not being overwritten ([#343](https://github.com/axios/axios/issues/343)) +- Fixing regression with request transformer being called before request interceptor ([#352](https://github.com/axios/axios/issues/352)) +- Fixing custom instance defaults ([#341](https://github.com/axios/axios/issues/341)) +- Fixing instances created from `axios.create` to have same API as default axios ([#217](https://github.com/axios/axios/issues/217)) + +### 0.12.0 (May 31, 2016) + +- Adding support for `URLSearchParams` ([#317](https://github.com/axios/axios/pull/317)) +- Adding `maxRedirects` option ([#307](https://github.com/axios/axios/pull/307)) + +### 0.11.1 (May 17, 2016) + +- Fixing IE CORS support ([#313](https://github.com/axios/axios/pull/313)) +- Fixing detection of `FormData` ([#325](https://github.com/axios/axios/pull/325)) +- Adding `Axios` class to exports ([#321](https://github.com/axios/axios/pull/321)) + +### 0.11.0 (Apr 26, 2016) + +- Adding support for Stream with HTTP adapter ([#296](https://github.com/axios/axios/pull/296)) +- Adding support for custom HTTP status code error ranges ([#308](https://github.com/axios/axios/pull/308)) +- Fixing issue with ArrayBuffer ([#299](https://github.com/axios/axios/pull/299)) + +### 0.10.0 (Apr 20, 2016) + +- Fixing issue with some requests sending `undefined` instead of `null` ([#250](https://github.com/axios/axios/pull/250)) +- Fixing basic auth for HTTP adapter ([#252](https://github.com/axios/axios/pull/252)) +- Fixing request timeout for XHR adapter ([#227](https://github.com/axios/axios/pull/227)) +- Fixing IE8 support by using `onreadystatechange` instead of `onload` ([#249](https://github.com/axios/axios/pull/249)) +- Fixing IE9 cross domain requests ([#251](https://github.com/axios/axios/pull/251)) +- Adding `maxContentLength` option ([#275](https://github.com/axios/axios/pull/275)) +- Fixing XHR support for WebWorker environment ([#279](https://github.com/axios/axios/pull/279)) +- Adding request instance to response ([#200](https://github.com/axios/axios/pull/200)) + +### 0.9.1 (Jan 24, 2016) + +- Improving handling of request timeout in node ([#124](https://github.com/axios/axios/issues/124)) +- Fixing network errors not rejecting ([#205](https://github.com/axios/axios/pull/205)) +- Fixing issue with IE rejecting on HTTP 204 ([#201](https://github.com/axios/axios/issues/201)) +- Fixing host/port when following redirects ([#198](https://github.com/axios/axios/pull/198)) + +### 0.9.0 (Jan 18, 2016) + +- Adding support for custom adapters +- Fixing Content-Type header being removed when data is false ([#195](https://github.com/axios/axios/pull/195)) +- Improving XDomainRequest implementation ([#185](https://github.com/axios/axios/pull/185)) +- Improving config merging and order of precedence ([#183](https://github.com/axios/axios/pull/183)) +- Fixing XDomainRequest support for only <= IE9 ([#182](https://github.com/axios/axios/pull/182)) + +### 0.8.1 (Dec 14, 2015) + +- Adding support for passing XSRF token for cross domain requests when using `withCredentials` ([#168](https://github.com/axios/axios/pull/168)) +- Fixing error with format of basic auth header ([#178](https://github.com/axios/axios/pull/173)) +- Fixing error with JSON payloads throwing `InvalidStateError` in some cases ([#174](https://github.com/axios/axios/pull/174)) + +### 0.8.0 (Dec 11, 2015) + +- Adding support for creating instances of axios ([#123](https://github.com/axios/axios/pull/123)) +- Fixing http adapter to use `Buffer` instead of `String` in case of `responseType === 'arraybuffer'` ([#128](https://github.com/axios/axios/pull/128)) +- Adding support for using custom parameter serializer with `paramsSerializer` option ([#121](https://github.com/axios/axios/pull/121)) +- Fixing issue in IE8 caused by `forEach` on `arguments` ([#127](https://github.com/axios/axios/pull/127)) +- Adding support for following redirects in node ([#146](https://github.com/axios/axios/pull/146)) +- Adding support for transparent decompression if `content-encoding` is set ([#149](https://github.com/axios/axios/pull/149)) +- Adding support for transparent XDomainRequest to handle cross domain requests in IE9 ([#140](https://github.com/axios/axios/pull/140)) +- Adding support for HTTP basic auth via Authorization header ([#167](https://github.com/axios/axios/pull/167)) +- Adding support for baseURL option ([#160](https://github.com/axios/axios/pull/160)) + +### 0.7.0 (Sep 29, 2015) + +- Fixing issue with minified bundle in IE8 ([#87](https://github.com/axios/axios/pull/87)) +- Adding support for passing agent in node ([#102](https://github.com/axios/axios/pull/102)) +- Adding support for returning result from `axios.spread` for chaining ([#106](https://github.com/axios/axios/pull/106)) +- Fixing typescript definition ([#105](https://github.com/axios/axios/pull/105)) +- Fixing default timeout config for node ([#112](https://github.com/axios/axios/pull/112)) +- Adding support for use in web workers, and react-native ([#70](https://github.com/axios/axios/issue/70)), ([#98](https://github.com/axios/axios/pull/98)) +- Adding support for fetch like API `axios(url[, config])` ([#116](https://github.com/axios/axios/issues/116)) + +### 0.6.0 (Sep 21, 2015) + +- Removing deprecated success/error aliases +- Fixing issue with array params not being properly encoded ([#49](https://github.com/axios/axios/pull/49)) +- Fixing issue with User-Agent getting overridden ([#69](https://github.com/axios/axios/issues/69)) +- Adding support for timeout config ([#56](https://github.com/axios/axios/issues/56)) +- Removing es6-promise dependency +- Fixing issue preventing `length` to be used as a parameter ([#91](https://github.com/axios/axios/pull/91)) +- Fixing issue with IE8 ([#85](https://github.com/axios/axios/pull/85)) +- Converting build to UMD + +### 0.5.4 (Apr 08, 2015) + +- Fixing issue with FormData not being sent ([#53](https://github.com/axios/axios/issues/53)) + +### 0.5.3 (Apr 07, 2015) + +- Using JSON.parse unconditionally when transforming response string ([#55](https://github.com/axios/axios/issues/55)) + +### 0.5.2 (Mar 13, 2015) + +- Adding support for `statusText` in response ([#46](https://github.com/axios/axios/issues/46)) + +### 0.5.1 (Mar 10, 2015) + +- Fixing issue using strict mode ([#45](https://github.com/axios/axios/issues/45)) +- Fixing issue with standalone build ([#47](https://github.com/axios/axios/issues/47)) + +### 0.5.0 (Jan 23, 2015) + +- Adding support for intercepetors ([#14](https://github.com/axios/axios/issues/14)) +- Updating es6-promise dependency + +### 0.4.2 (Dec 10, 2014) + +- Fixing issue with `Content-Type` when using `FormData` ([#22](https://github.com/axios/axios/issues/22)) +- Adding support for TypeScript ([#25](https://github.com/axios/axios/issues/25)) +- Fixing issue with standalone build ([#29](https://github.com/axios/axios/issues/29)) +- Fixing issue with verbs needing to be capitalized in some browsers ([#30](https://github.com/axios/axios/issues/30)) + +### 0.4.1 (Oct 15, 2014) + +- Adding error handling to request for node.js ([#18](https://github.com/axios/axios/issues/18)) + +### 0.4.0 (Oct 03, 2014) + +- Adding support for `ArrayBuffer` and `ArrayBufferView` ([#10](https://github.com/axios/axios/issues/10)) +- Adding support for utf-8 for node.js ([#13](https://github.com/axios/axios/issues/13)) +- Adding support for SSL for node.js ([#12](https://github.com/axios/axios/issues/12)) +- Fixing incorrect `Content-Type` header ([#9](https://github.com/axios/axios/issues/9)) +- Adding standalone build without bundled es6-promise ([#11](https://github.com/axios/axios/issues/11)) +- Deprecating `success`/`error` in favor of `then`/`catch` + +### 0.3.1 (Sep 16, 2014) + +- Fixing missing post body when using node.js ([#3](https://github.com/axios/axios/issues/3)) + +### 0.3.0 (Sep 16, 2014) + +- Fixing `success` and `error` to properly receive response data as individual arguments ([#8](https://github.com/axios/axios/issues/8)) +- Updating `then` and `catch` to receive response data as a single object ([#6](https://github.com/axios/axios/issues/6)) +- Fixing issue with `all` not working ([#7](https://github.com/axios/axios/issues/7)) + +### 0.2.2 (Sep 14, 2014) + +- Fixing bundling with browserify ([#4](https://github.com/axios/axios/issues/4)) + +### 0.2.1 (Sep 12, 2014) + +- Fixing build problem causing ridiculous file sizes + +### 0.2.0 (Sep 12, 2014) + +- Adding support for `all` and `spread` +- Adding support for node.js ([#1](https://github.com/axios/axios/issues/1)) + +### 0.1.0 (Aug 29, 2014) + +- Initial release diff --git a/uview-ui/LICENSE b/node_modules/axios/LICENSE similarity index 87% rename from uview-ui/LICENSE rename to node_modules/axios/LICENSE index 8e39ead..d36c80e 100644 --- a/uview-ui/LICENSE +++ b/node_modules/axios/LICENSE @@ -1,6 +1,4 @@ -MIT License - -Copyright (c) 2020 www.uviewui.com +Copyright (c) 2014-present Matt Zabriskie Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -9,13 +7,13 @@ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. \ No newline at end of file +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/axios/README.md b/node_modules/axios/README.md new file mode 100644 index 0000000..620feca --- /dev/null +++ b/node_modules/axios/README.md @@ -0,0 +1,798 @@ +# axios + +[![npm version](https://img.shields.io/npm/v/axios.svg?style=flat-square)](https://www.npmjs.org/package/axios) +[![CDNJS](https://img.shields.io/cdnjs/v/axios.svg?style=flat-square)](https://cdnjs.com/libraries/axios) +[![build status](https://img.shields.io/travis/axios/axios/master.svg?style=flat-square)](https://travis-ci.org/axios/axios) +[![code coverage](https://img.shields.io/coveralls/mzabriskie/axios.svg?style=flat-square)](https://coveralls.io/r/mzabriskie/axios) +[![install size](https://packagephobia.now.sh/badge?p=axios)](https://packagephobia.now.sh/result?p=axios) +[![npm downloads](https://img.shields.io/npm/dm/axios.svg?style=flat-square)](http://npm-stat.com/charts.html?package=axios) +[![gitter chat](https://img.shields.io/gitter/room/mzabriskie/axios.svg?style=flat-square)](https://gitter.im/mzabriskie/axios) +[![code helpers](https://www.codetriage.com/axios/axios/badges/users.svg)](https://www.codetriage.com/axios/axios) + +Promise based HTTP client for the browser and node.js +## Table of Contents + + - [Features](#features) + - [Browser Support](#browser-support) + - [Installing](#installing) + - [Example](#example) + - [Axios API](#axios-api) + - [Request method aliases](#request-method-aliases) + - [Concurrency (Deprecated)](#concurrency-deprecated) + - [Creating an instance](#creating-an-instance) + - [Instance methods](#instance-methods) + - [Request Config](#request-config) + - [Response Schema](#response-schema) + - [Config Defaults](#config-defaults) + - [Global axios defaults](#global-axios-defaults) + - [Custom instance defaults](#custom-instance-defaults) + - [Config order of precedence](#config-order-of-precedence) + - [Interceptors](#interceptors) + - [Handling Errors](#handling-errors) + - [Cancellation](#cancellation) + - [Using application/x-www-form-urlencoded format](#using-applicationx-www-form-urlencoded-format) + - [Browser](#browser) + - [Node.js](#nodejs) + - [Query string](#query-string) + - [Form data](#form-data) + - [Semver](#semver) + - [Promises](#promises) + - [TypeScript](#typescript) + - [Resources](#resources) + - [Credits](#credits) + - [License](#license) + +## Features + +- Make [XMLHttpRequests](https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest) from the browser +- Make [http](http://nodejs.org/api/http.html) requests from node.js +- Supports the [Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise) API +- Intercept request and response +- Transform request and response data +- Cancel requests +- Automatic transforms for JSON data +- Client side support for protecting against [XSRF](http://en.wikipedia.org/wiki/Cross-site_request_forgery) + +## Browser Support + +![Chrome](https://raw.github.com/alrra/browser-logos/master/src/chrome/chrome_48x48.png) | ![Firefox](https://raw.github.com/alrra/browser-logos/master/src/firefox/firefox_48x48.png) | ![Safari](https://raw.github.com/alrra/browser-logos/master/src/safari/safari_48x48.png) | ![Opera](https://raw.github.com/alrra/browser-logos/master/src/opera/opera_48x48.png) | ![Edge](https://raw.github.com/alrra/browser-logos/master/src/edge/edge_48x48.png) | ![IE](https://raw.github.com/alrra/browser-logos/master/src/archive/internet-explorer_9-11/internet-explorer_9-11_48x48.png) | +--- | --- | --- | --- | --- | --- | +Latest ✔ | Latest ✔ | Latest ✔ | Latest ✔ | Latest ✔ | 11 ✔ | + +[![Browser Matrix](https://saucelabs.com/open_sauce/build_matrix/axios.svg)](https://saucelabs.com/u/axios) + +## Installing + +Using npm: + +```bash +$ npm install axios +``` + +Using bower: + +```bash +$ bower install axios +``` + +Using yarn: + +```bash +$ yarn add axios +``` + +Using jsDelivr CDN: + +```html + +``` + +Using unpkg CDN: + +```html + +``` + +## Example + +### note: CommonJS usage +In order to gain the TypeScript typings (for intellisense / autocomplete) while using CommonJS imports with `require()` use the following approach: + +```js +const axios = require('axios').default; + +// axios. will now provide autocomplete and parameter typings +``` + +Performing a `GET` request + +```js +const axios = require('axios'); + +// Make a request for a user with a given ID +axios.get('/user?ID=12345') + .then(function (response) { + // handle success + console.log(response); + }) + .catch(function (error) { + // handle error + console.log(error); + }) + .then(function () { + // always executed + }); + +// Optionally the request above could also be done as +axios.get('/user', { + params: { + ID: 12345 + } + }) + .then(function (response) { + console.log(response); + }) + .catch(function (error) { + console.log(error); + }) + .then(function () { + // always executed + }); + +// Want to use async/await? Add the `async` keyword to your outer function/method. +async function getUser() { + try { + const response = await axios.get('/user?ID=12345'); + console.log(response); + } catch (error) { + console.error(error); + } +} +``` + +> **NOTE:** `async/await` is part of ECMAScript 2017 and is not supported in Internet +> Explorer and older browsers, so use with caution. + +Performing a `POST` request + +```js +axios.post('/user', { + firstName: 'Fred', + lastName: 'Flintstone' + }) + .then(function (response) { + console.log(response); + }) + .catch(function (error) { + console.log(error); + }); +``` + +Performing multiple concurrent requests + +```js +function getUserAccount() { + return axios.get('/user/12345'); +} + +function getUserPermissions() { + return axios.get('/user/12345/permissions'); +} + +Promise.all([getUserAccount(), getUserPermissions()]) + .then(function (results) { + const acct = results[0]; + const perm = results[1]; + }); +``` + +## axios API + +Requests can be made by passing the relevant config to `axios`. + +##### axios(config) + +```js +// Send a POST request +axios({ + method: 'post', + url: '/user/12345', + data: { + firstName: 'Fred', + lastName: 'Flintstone' + } +}); +``` + +```js +// GET request for remote image in node.js +axios({ + method: 'get', + url: 'http://bit.ly/2mTM3nY', + responseType: 'stream' +}) + .then(function (response) { + response.data.pipe(fs.createWriteStream('ada_lovelace.jpg')) + }); +``` + +##### axios(url[, config]) + +```js +// Send a GET request (default method) +axios('/user/12345'); +``` + +### Request method aliases + +For convenience aliases have been provided for all supported request methods. + +##### axios.request(config) +##### axios.get(url[, config]) +##### axios.delete(url[, config]) +##### axios.head(url[, config]) +##### axios.options(url[, config]) +##### axios.post(url[, data[, config]]) +##### axios.put(url[, data[, config]]) +##### axios.patch(url[, data[, config]]) + +###### NOTE +When using the alias methods `url`, `method`, and `data` properties don't need to be specified in config. + +### Concurrency (Deprecated) +Please use `Promise.all` to replace the below functions. + +Helper functions for dealing with concurrent requests. + +axios.all(iterable) +axios.spread(callback) + +### Creating an instance + +You can create a new instance of axios with a custom config. + +##### axios.create([config]) + +```js +const instance = axios.create({ + baseURL: 'https://some-domain.com/api/', + timeout: 1000, + headers: {'X-Custom-Header': 'foobar'} +}); +``` + +### Instance methods + +The available instance methods are listed below. The specified config will be merged with the instance config. + +##### axios#request(config) +##### axios#get(url[, config]) +##### axios#delete(url[, config]) +##### axios#head(url[, config]) +##### axios#options(url[, config]) +##### axios#post(url[, data[, config]]) +##### axios#put(url[, data[, config]]) +##### axios#patch(url[, data[, config]]) +##### axios#getUri([config]) + +## Request Config + +These are the available config options for making requests. Only the `url` is required. Requests will default to `GET` if `method` is not specified. + +```js +{ + // `url` is the server URL that will be used for the request + url: '/user', + + // `method` is the request method to be used when making the request + method: 'get', // default + + // `baseURL` will be prepended to `url` unless `url` is absolute. + // It can be convenient to set `baseURL` for an instance of axios to pass relative URLs + // to methods of that instance. + baseURL: 'https://some-domain.com/api/', + + // `transformRequest` allows changes to the request data before it is sent to the server + // This is only applicable for request methods 'PUT', 'POST', 'PATCH' and 'DELETE' + // The last function in the array must return a string or an instance of Buffer, ArrayBuffer, + // FormData or Stream + // You may modify the headers object. + transformRequest: [function (data, headers) { + // Do whatever you want to transform the data + + return data; + }], + + // `transformResponse` allows changes to the response data to be made before + // it is passed to then/catch + transformResponse: [function (data) { + // Do whatever you want to transform the data + + return data; + }], + + // `headers` are custom headers to be sent + headers: {'X-Requested-With': 'XMLHttpRequest'}, + + // `params` are the URL parameters to be sent with the request + // Must be a plain object or a URLSearchParams object + params: { + ID: 12345 + }, + + // `paramsSerializer` is an optional function in charge of serializing `params` + // (e.g. https://www.npmjs.com/package/qs, http://api.jquery.com/jquery.param/) + paramsSerializer: function (params) { + return Qs.stringify(params, {arrayFormat: 'brackets'}) + }, + + // `data` is the data to be sent as the request body + // Only applicable for request methods 'PUT', 'POST', 'DELETE , and 'PATCH' + // When no `transformRequest` is set, must be of one of the following types: + // - string, plain object, ArrayBuffer, ArrayBufferView, URLSearchParams + // - Browser only: FormData, File, Blob + // - Node only: Stream, Buffer + data: { + firstName: 'Fred' + }, + + // syntax alternative to send data into the body + // method post + // only the value is sent, not the key + data: 'Country=Brasil&City=Belo Horizonte', + + // `timeout` specifies the number of milliseconds before the request times out. + // If the request takes longer than `timeout`, the request will be aborted. + timeout: 1000, // default is `0` (no timeout) + + // `withCredentials` indicates whether or not cross-site Access-Control requests + // should be made using credentials + withCredentials: false, // default + + // `adapter` allows custom handling of requests which makes testing easier. + // Return a promise and supply a valid response (see lib/adapters/README.md). + adapter: function (config) { + /* ... */ + }, + + // `auth` indicates that HTTP Basic auth should be used, and supplies credentials. + // This will set an `Authorization` header, overwriting any existing + // `Authorization` custom headers you have set using `headers`. + // Please note that only HTTP Basic auth is configurable through this parameter. + // For Bearer tokens and such, use `Authorization` custom headers instead. + auth: { + username: 'janedoe', + password: 's00pers3cret' + }, + + // `responseType` indicates the type of data that the server will respond with + // options are: 'arraybuffer', 'document', 'json', 'text', 'stream' + // browser only: 'blob' + responseType: 'json', // default + + // `responseEncoding` indicates encoding to use for decoding responses (Node.js only) + // Note: Ignored for `responseType` of 'stream' or client-side requests + responseEncoding: 'utf8', // default + + // `xsrfCookieName` is the name of the cookie to use as a value for xsrf token + xsrfCookieName: 'XSRF-TOKEN', // default + + // `xsrfHeaderName` is the name of the http header that carries the xsrf token value + xsrfHeaderName: 'X-XSRF-TOKEN', // default + + // `onUploadProgress` allows handling of progress events for uploads + // browser only + onUploadProgress: function (progressEvent) { + // Do whatever you want with the native progress event + }, + + // `onDownloadProgress` allows handling of progress events for downloads + // browser only + onDownloadProgress: function (progressEvent) { + // Do whatever you want with the native progress event + }, + + // `maxContentLength` defines the max size of the http response content in bytes allowed in node.js + maxContentLength: 2000, + + // `maxBodyLength` (Node only option) defines the max size of the http request content in bytes allowed + maxBodyLength: 2000, + + // `validateStatus` defines whether to resolve or reject the promise for a given + // HTTP response status code. If `validateStatus` returns `true` (or is set to `null` + // or `undefined`), the promise will be resolved; otherwise, the promise will be + // rejected. + validateStatus: function (status) { + return status >= 200 && status < 300; // default + }, + + // `maxRedirects` defines the maximum number of redirects to follow in node.js. + // If set to 0, no redirects will be followed. + maxRedirects: 5, // default + + // `socketPath` defines a UNIX Socket to be used in node.js. + // e.g. '/var/run/docker.sock' to send requests to the docker daemon. + // Only either `socketPath` or `proxy` can be specified. + // If both are specified, `socketPath` is used. + socketPath: null, // default + + // `httpAgent` and `httpsAgent` define a custom agent to be used when performing http + // and https requests, respectively, in node.js. This allows options to be added like + // `keepAlive` that are not enabled by default. + httpAgent: new http.Agent({ keepAlive: true }), + httpsAgent: new https.Agent({ keepAlive: true }), + + // `proxy` defines the hostname and port of the proxy server. + // You can also define your proxy using the conventional `http_proxy` and + // `https_proxy` environment variables. If you are using environment variables + // for your proxy configuration, you can also define a `no_proxy` environment + // variable as a comma-separated list of domains that should not be proxied. + // Use `false` to disable proxies, ignoring environment variables. + // `auth` indicates that HTTP Basic auth should be used to connect to the proxy, and + // supplies credentials. + // This will set an `Proxy-Authorization` header, overwriting any existing + // `Proxy-Authorization` custom headers you have set using `headers`. + proxy: { + host: '127.0.0.1', + port: 9000, + auth: { + username: 'mikeymike', + password: 'rapunz3l' + } + }, + + // `cancelToken` specifies a cancel token that can be used to cancel the request + // (see Cancellation section below for details) + cancelToken: new CancelToken(function (cancel) { + }), + + // `decompress` indicates whether or not the response body should be decompressed + // automatically. If set to `true` will also remove the 'content-encoding' header + // from the responses objects of all decompressed responses + // - Node only (XHR cannot turn off decompression) + decompress: true // default + +} +``` + +## Response Schema + +The response for a request contains the following information. + +```js +{ + // `data` is the response that was provided by the server + data: {}, + + // `status` is the HTTP status code from the server response + status: 200, + + // `statusText` is the HTTP status message from the server response + statusText: 'OK', + + // `headers` the HTTP headers that the server responded with + // All header names are lower cased and can be accessed using the bracket notation. + // Example: `response.headers['content-type']` + headers: {}, + + // `config` is the config that was provided to `axios` for the request + config: {}, + + // `request` is the request that generated this response + // It is the last ClientRequest instance in node.js (in redirects) + // and an XMLHttpRequest instance in the browser + request: {} +} +``` + +When using `then`, you will receive the response as follows: + +```js +axios.get('/user/12345') + .then(function (response) { + console.log(response.data); + console.log(response.status); + console.log(response.statusText); + console.log(response.headers); + console.log(response.config); + }); +``` + +When using `catch`, or passing a [rejection callback](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/then) as second parameter of `then`, the response will be available through the `error` object as explained in the [Handling Errors](#handling-errors) section. + +## Config Defaults + +You can specify config defaults that will be applied to every request. + +### Global axios defaults + +```js +axios.defaults.baseURL = 'https://api.example.com'; +axios.defaults.headers.common['Authorization'] = AUTH_TOKEN; +axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'; +``` + +### Custom instance defaults + +```js +// Set config defaults when creating the instance +const instance = axios.create({ + baseURL: 'https://api.example.com' +}); + +// Alter defaults after instance has been created +instance.defaults.headers.common['Authorization'] = AUTH_TOKEN; +``` + +### Config order of precedence + +Config will be merged with an order of precedence. The order is library defaults found in [lib/defaults.js](https://github.com/axios/axios/blob/master/lib/defaults.js#L28), then `defaults` property of the instance, and finally `config` argument for the request. The latter will take precedence over the former. Here's an example. + +```js +// Create an instance using the config defaults provided by the library +// At this point the timeout config value is `0` as is the default for the library +const instance = axios.create(); + +// Override timeout default for the library +// Now all requests using this instance will wait 2.5 seconds before timing out +instance.defaults.timeout = 2500; + +// Override timeout for this request as it's known to take a long time +instance.get('/longRequest', { + timeout: 5000 +}); +``` + +## Interceptors + +You can intercept requests or responses before they are handled by `then` or `catch`. + +```js +// Add a request interceptor +axios.interceptors.request.use(function (config) { + // Do something before request is sent + return config; + }, function (error) { + // Do something with request error + return Promise.reject(error); + }); + +// Add a response interceptor +axios.interceptors.response.use(function (response) { + // Any status code that lie within the range of 2xx cause this function to trigger + // Do something with response data + return response; + }, function (error) { + // Any status codes that falls outside the range of 2xx cause this function to trigger + // Do something with response error + return Promise.reject(error); + }); +``` + +If you need to remove an interceptor later you can. + +```js +const myInterceptor = axios.interceptors.request.use(function () {/*...*/}); +axios.interceptors.request.eject(myInterceptor); +``` + +You can add interceptors to a custom instance of axios. + +```js +const instance = axios.create(); +instance.interceptors.request.use(function () {/*...*/}); +``` + +## Handling Errors + +```js +axios.get('/user/12345') + .catch(function (error) { + if (error.response) { + // The request was made and the server responded with a status code + // that falls out of the range of 2xx + console.log(error.response.data); + console.log(error.response.status); + console.log(error.response.headers); + } else if (error.request) { + // The request was made but no response was received + // `error.request` is an instance of XMLHttpRequest in the browser and an instance of + // http.ClientRequest in node.js + console.log(error.request); + } else { + // Something happened in setting up the request that triggered an Error + console.log('Error', error.message); + } + console.log(error.config); + }); +``` + +Using the `validateStatus` config option, you can define HTTP code(s) that should throw an error. + +```js +axios.get('/user/12345', { + validateStatus: function (status) { + return status < 500; // Resolve only if the status code is less than 500 + } +}) +``` + +Using `toJSON` you get an object with more information about the HTTP error. + +```js +axios.get('/user/12345') + .catch(function (error) { + console.log(error.toJSON()); + }); +``` + +## Cancellation + +You can cancel a request using a *cancel token*. + +> The axios cancel token API is based on the withdrawn [cancelable promises proposal](https://github.com/tc39/proposal-cancelable-promises). + +You can create a cancel token using the `CancelToken.source` factory as shown below: + +```js +const CancelToken = axios.CancelToken; +const source = CancelToken.source(); + +axios.get('/user/12345', { + cancelToken: source.token +}).catch(function (thrown) { + if (axios.isCancel(thrown)) { + console.log('Request canceled', thrown.message); + } else { + // handle error + } +}); + +axios.post('/user/12345', { + name: 'new name' +}, { + cancelToken: source.token +}) + +// cancel the request (the message parameter is optional) +source.cancel('Operation canceled by the user.'); +``` + +You can also create a cancel token by passing an executor function to the `CancelToken` constructor: + +```js +const CancelToken = axios.CancelToken; +let cancel; + +axios.get('/user/12345', { + cancelToken: new CancelToken(function executor(c) { + // An executor function receives a cancel function as a parameter + cancel = c; + }) +}); + +// cancel the request +cancel(); +``` + +> Note: you can cancel several requests with the same cancel token. + +## Using application/x-www-form-urlencoded format + +By default, axios serializes JavaScript objects to `JSON`. To send data in the `application/x-www-form-urlencoded` format instead, you can use one of the following options. + +### Browser + +In a browser, you can use the [`URLSearchParams`](https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams) API as follows: + +```js +const params = new URLSearchParams(); +params.append('param1', 'value1'); +params.append('param2', 'value2'); +axios.post('/foo', params); +``` + +> Note that `URLSearchParams` is not supported by all browsers (see [caniuse.com](http://www.caniuse.com/#feat=urlsearchparams)), but there is a [polyfill](https://github.com/WebReflection/url-search-params) available (make sure to polyfill the global environment). + +Alternatively, you can encode data using the [`qs`](https://github.com/ljharb/qs) library: + +```js +const qs = require('qs'); +axios.post('/foo', qs.stringify({ 'bar': 123 })); +``` + +Or in another way (ES6), + +```js +import qs from 'qs'; +const data = { 'bar': 123 }; +const options = { + method: 'POST', + headers: { 'content-type': 'application/x-www-form-urlencoded' }, + data: qs.stringify(data), + url, +}; +axios(options); +``` + +### Node.js + +#### Query string + +In node.js, you can use the [`querystring`](https://nodejs.org/api/querystring.html) module as follows: + +```js +const querystring = require('querystring'); +axios.post('http://something.com/', querystring.stringify({ foo: 'bar' })); +``` + +or ['URLSearchParams'](https://nodejs.org/api/url.html#url_class_urlsearchparams) from ['url module'](https://nodejs.org/api/url.html) as follows: + +```js +const url = require('url'); +const params = new url.URLSearchParams({ foo: 'bar' }); +axios.post('http://something.com/', params.toString()); +``` + +You can also use the [`qs`](https://github.com/ljharb/qs) library. + +###### NOTE +The `qs` library is preferable if you need to stringify nested objects, as the `querystring` method has known issues with that use case (https://github.com/nodejs/node-v0.x-archive/issues/1665). + +#### Form data + +In node.js, you can use the [`form-data`](https://github.com/form-data/form-data) library as follows: + +```js +const FormData = require('form-data'); + +const form = new FormData(); +form.append('my_field', 'my value'); +form.append('my_buffer', new Buffer(10)); +form.append('my_file', fs.createReadStream('/foo/bar.jpg')); + +axios.post('https://example.com', form, { headers: form.getHeaders() }) +``` + +Alternatively, use an interceptor: + +```js +axios.interceptors.request.use(config => { + if (config.data instanceof FormData) { + Object.assign(config.headers, config.data.getHeaders()); + } + return config; +}); +``` + +## Semver + +Until axios reaches a `1.0` release, breaking changes will be released with a new minor version. For example `0.5.1`, and `0.5.4` will have the same API, but `0.6.0` will have breaking changes. + +## Promises + +axios depends on a native ES6 Promise implementation to be [supported](http://caniuse.com/promises). +If your environment doesn't support ES6 Promises, you can [polyfill](https://github.com/jakearchibald/es6-promise). + +## TypeScript +axios includes [TypeScript](http://typescriptlang.org) definitions. +```typescript +import axios from 'axios'; +axios.get('/user?ID=12345'); +``` + +## Resources + +* [Changelog](https://github.com/axios/axios/blob/master/CHANGELOG.md) +* [Upgrade Guide](https://github.com/axios/axios/blob/master/UPGRADE_GUIDE.md) +* [Ecosystem](https://github.com/axios/axios/blob/master/ECOSYSTEM.md) +* [Contributing Guide](https://github.com/axios/axios/blob/master/CONTRIBUTING.md) +* [Code of Conduct](https://github.com/axios/axios/blob/master/CODE_OF_CONDUCT.md) + +## Credits + +axios is heavily inspired by the [$http service](https://docs.angularjs.org/api/ng/service/$http) provided in [Angular](https://angularjs.org/). Ultimately axios is an effort to provide a standalone `$http`-like service for use outside of Angular. + +## License + +[MIT](LICENSE) diff --git a/node_modules/axios/UPGRADE_GUIDE.md b/node_modules/axios/UPGRADE_GUIDE.md new file mode 100644 index 0000000..745e804 --- /dev/null +++ b/node_modules/axios/UPGRADE_GUIDE.md @@ -0,0 +1,162 @@ +# Upgrade Guide + +### 0.15.x -> 0.16.0 + +#### `Promise` Type Declarations + +The `Promise` type declarations have been removed from the axios typings in favor of the built-in type declarations. If you use axios in a TypeScript project that targets `ES5`, please make sure to include the `es2015.promise` lib. Please see [this post](https://blog.mariusschulz.com/2016/11/25/typescript-2-0-built-in-type-declarations) for details. + +### 0.13.x -> 0.14.0 + +#### TypeScript Definitions + +The axios TypeScript definitions have been updated to match the axios API and use the ES2015 module syntax. + +Please use the following `import` statement to import axios in TypeScript: + +```typescript +import axios from 'axios'; + +axios.get('/foo') + .then(response => console.log(response)) + .catch(error => console.log(error)); +``` + +#### `agent` Config Option + +The `agent` config option has been replaced with two new options: `httpAgent` and `httpsAgent`. Please use them instead. + +```js +{ + // Define a custom agent for HTTP + httpAgent: new http.Agent({ keepAlive: true }), + // Define a custom agent for HTTPS + httpsAgent: new https.Agent({ keepAlive: true }) +} +``` + +#### `progress` Config Option + +The `progress` config option has been replaced with the `onUploadProgress` and `onDownloadProgress` options. + +```js +{ + // Define a handler for upload progress events + onUploadProgress: function (progressEvent) { + // ... + }, + + // Define a handler for download progress events + onDownloadProgress: function (progressEvent) { + // ... + } +} +``` + +### 0.12.x -> 0.13.0 + +The `0.13.0` release contains several changes to custom adapters and error handling. + +#### Error Handling + +Previous to this release an error could either be a server response with bad status code or an actual `Error`. With this release Promise will always reject with an `Error`. In the case that a response was received, the `Error` will also include the response. + +```js +axios.get('/user/12345') + .catch((error) => { + console.log(error.message); + console.log(error.code); // Not always specified + console.log(error.config); // The config that was used to make the request + console.log(error.response); // Only available if response was received from the server + }); +``` + +#### Request Adapters + +This release changes a few things about how request adapters work. Please take note if you are using your own custom adapter. + +1. Response transformer is now called outside of adapter. +2. Request adapter returns a `Promise`. + +This means that you no longer need to invoke `transformData` on response data. You will also no longer receive `resolve` and `reject` as arguments in your adapter. + +Previous code: + +```js +function myAdapter(resolve, reject, config) { + var response = { + data: transformData( + responseData, + responseHeaders, + config.transformResponse + ), + status: request.status, + statusText: request.statusText, + headers: responseHeaders + }; + settle(resolve, reject, response); +} +``` + +New code: + +```js +function myAdapter(config) { + return new Promise(function (resolve, reject) { + var response = { + data: responseData, + status: request.status, + statusText: request.statusText, + headers: responseHeaders + }; + settle(resolve, reject, response); + }); +} +``` + +See the related commits for more details: +- [Response transformers](https://github.com/axios/axios/commit/10eb23865101f9347570552c04e9d6211376e25e) +- [Request adapter Promise](https://github.com/axios/axios/commit/157efd5615890301824e3121cc6c9d2f9b21f94a) + +### 0.5.x -> 0.6.0 + +The `0.6.0` release contains mostly bug fixes, but there are a couple things to be aware of when upgrading. + +#### ES6 Promise Polyfill + +Up until the `0.6.0` release ES6 `Promise` was being polyfilled using [es6-promise](https://github.com/jakearchibald/es6-promise). With this release, the polyfill has been removed, and you will need to supply it yourself if your environment needs it. + +```js +require('es6-promise').polyfill(); +var axios = require('axios'); +``` + +This will polyfill the global environment, and only needs to be done once. + +#### `axios.success`/`axios.error` + +The `success`, and `error` aliases were deprecated in [0.4.0](https://github.com/axios/axios/blob/master/CHANGELOG.md#040-oct-03-2014). As of this release they have been removed entirely. Instead please use `axios.then`, and `axios.catch` respectively. + +```js +axios.get('some/url') + .then(function (res) { + /* ... */ + }) + .catch(function (err) { + /* ... */ + }); +``` + +#### UMD + +Previous versions of axios shipped with an AMD, CommonJS, and Global build. This has all been rolled into a single UMD build. + +```js +// AMD +require(['bower_components/axios/dist/axios'], function (axios) { + /* ... */ +}); + +// CommonJS +var axios = require('axios/dist/axios'); +``` diff --git a/node_modules/axios/dist/axios.js b/node_modules/axios/dist/axios.js new file mode 100644 index 0000000..629fcfd --- /dev/null +++ b/node_modules/axios/dist/axios.js @@ -0,0 +1,1736 @@ +/* axios v0.21.0 | (c) 2020 by Matt Zabriskie */ +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(); + else if(typeof define === 'function' && define.amd) + define([], factory); + else if(typeof exports === 'object') + exports["axios"] = factory(); + else + root["axios"] = factory(); +})(this, function() { +return /******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) +/******/ return installedModules[moduleId].exports; +/******/ +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ exports: {}, +/******/ id: moduleId, +/******/ loaded: false +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.loaded = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(0); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ (function(module, exports, __webpack_require__) { + + module.exports = __webpack_require__(1); + +/***/ }), +/* 1 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + var utils = __webpack_require__(2); + var bind = __webpack_require__(3); + var Axios = __webpack_require__(4); + var mergeConfig = __webpack_require__(22); + var defaults = __webpack_require__(10); + + /** + * Create an instance of Axios + * + * @param {Object} defaultConfig The default config for the instance + * @return {Axios} A new instance of Axios + */ + function createInstance(defaultConfig) { + var context = new Axios(defaultConfig); + var instance = bind(Axios.prototype.request, context); + + // Copy axios.prototype to instance + utils.extend(instance, Axios.prototype, context); + + // Copy context to instance + utils.extend(instance, context); + + return instance; + } + + // Create the default instance to be exported + var axios = createInstance(defaults); + + // Expose Axios class to allow class inheritance + axios.Axios = Axios; + + // Factory for creating new instances + axios.create = function create(instanceConfig) { + return createInstance(mergeConfig(axios.defaults, instanceConfig)); + }; + + // Expose Cancel & CancelToken + axios.Cancel = __webpack_require__(23); + axios.CancelToken = __webpack_require__(24); + axios.isCancel = __webpack_require__(9); + + // Expose all/spread + axios.all = function all(promises) { + return Promise.all(promises); + }; + axios.spread = __webpack_require__(25); + + module.exports = axios; + + // Allow use of default import syntax in TypeScript + module.exports.default = axios; + + +/***/ }), +/* 2 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + var bind = __webpack_require__(3); + + /*global toString:true*/ + + // utils is a library of generic helper functions non-specific to axios + + var toString = Object.prototype.toString; + + /** + * Determine if a value is an Array + * + * @param {Object} val The value to test + * @returns {boolean} True if value is an Array, otherwise false + */ + function isArray(val) { + return toString.call(val) === '[object Array]'; + } + + /** + * Determine if a value is undefined + * + * @param {Object} val The value to test + * @returns {boolean} True if the value is undefined, otherwise false + */ + function isUndefined(val) { + return typeof val === 'undefined'; + } + + /** + * Determine if a value is a Buffer + * + * @param {Object} val The value to test + * @returns {boolean} True if value is a Buffer, otherwise false + */ + function isBuffer(val) { + return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor) + && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val); + } + + /** + * Determine if a value is an ArrayBuffer + * + * @param {Object} val The value to test + * @returns {boolean} True if value is an ArrayBuffer, otherwise false + */ + function isArrayBuffer(val) { + return toString.call(val) === '[object ArrayBuffer]'; + } + + /** + * Determine if a value is a FormData + * + * @param {Object} val The value to test + * @returns {boolean} True if value is an FormData, otherwise false + */ + function isFormData(val) { + return (typeof FormData !== 'undefined') && (val instanceof FormData); + } + + /** + * Determine if a value is a view on an ArrayBuffer + * + * @param {Object} val The value to test + * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false + */ + function isArrayBufferView(val) { + var result; + if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) { + result = ArrayBuffer.isView(val); + } else { + result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer); + } + return result; + } + + /** + * Determine if a value is a String + * + * @param {Object} val The value to test + * @returns {boolean} True if value is a String, otherwise false + */ + function isString(val) { + return typeof val === 'string'; + } + + /** + * Determine if a value is a Number + * + * @param {Object} val The value to test + * @returns {boolean} True if value is a Number, otherwise false + */ + function isNumber(val) { + return typeof val === 'number'; + } + + /** + * Determine if a value is an Object + * + * @param {Object} val The value to test + * @returns {boolean} True if value is an Object, otherwise false + */ + function isObject(val) { + return val !== null && typeof val === 'object'; + } + + /** + * Determine if a value is a plain Object + * + * @param {Object} val The value to test + * @return {boolean} True if value is a plain Object, otherwise false + */ + function isPlainObject(val) { + if (toString.call(val) !== '[object Object]') { + return false; + } + + var prototype = Object.getPrototypeOf(val); + return prototype === null || prototype === Object.prototype; + } + + /** + * Determine if a value is a Date + * + * @param {Object} val The value to test + * @returns {boolean} True if value is a Date, otherwise false + */ + function isDate(val) { + return toString.call(val) === '[object Date]'; + } + + /** + * Determine if a value is a File + * + * @param {Object} val The value to test + * @returns {boolean} True if value is a File, otherwise false + */ + function isFile(val) { + return toString.call(val) === '[object File]'; + } + + /** + * Determine if a value is a Blob + * + * @param {Object} val The value to test + * @returns {boolean} True if value is a Blob, otherwise false + */ + function isBlob(val) { + return toString.call(val) === '[object Blob]'; + } + + /** + * Determine if a value is a Function + * + * @param {Object} val The value to test + * @returns {boolean} True if value is a Function, otherwise false + */ + function isFunction(val) { + return toString.call(val) === '[object Function]'; + } + + /** + * Determine if a value is a Stream + * + * @param {Object} val The value to test + * @returns {boolean} True if value is a Stream, otherwise false + */ + function isStream(val) { + return isObject(val) && isFunction(val.pipe); + } + + /** + * Determine if a value is a URLSearchParams object + * + * @param {Object} val The value to test + * @returns {boolean} True if value is a URLSearchParams object, otherwise false + */ + function isURLSearchParams(val) { + return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams; + } + + /** + * Trim excess whitespace off the beginning and end of a string + * + * @param {String} str The String to trim + * @returns {String} The String freed of excess whitespace + */ + function trim(str) { + return str.replace(/^\s*/, '').replace(/\s*$/, ''); + } + + /** + * Determine if we're running in a standard browser environment + * + * This allows axios to run in a web worker, and react-native. + * Both environments support XMLHttpRequest, but not fully standard globals. + * + * web workers: + * typeof window -> undefined + * typeof document -> undefined + * + * react-native: + * navigator.product -> 'ReactNative' + * nativescript + * navigator.product -> 'NativeScript' or 'NS' + */ + function isStandardBrowserEnv() { + if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' || + navigator.product === 'NativeScript' || + navigator.product === 'NS')) { + return false; + } + return ( + typeof window !== 'undefined' && + typeof document !== 'undefined' + ); + } + + /** + * Iterate over an Array or an Object invoking a function for each item. + * + * If `obj` is an Array callback will be called passing + * the value, index, and complete array for each item. + * + * If 'obj' is an Object callback will be called passing + * the value, key, and complete object for each property. + * + * @param {Object|Array} obj The object to iterate + * @param {Function} fn The callback to invoke for each item + */ + function forEach(obj, fn) { + // Don't bother if no value provided + if (obj === null || typeof obj === 'undefined') { + return; + } + + // Force an array if not already something iterable + if (typeof obj !== 'object') { + /*eslint no-param-reassign:0*/ + obj = [obj]; + } + + if (isArray(obj)) { + // Iterate over array values + for (var i = 0, l = obj.length; i < l; i++) { + fn.call(null, obj[i], i, obj); + } + } else { + // Iterate over object keys + for (var key in obj) { + if (Object.prototype.hasOwnProperty.call(obj, key)) { + fn.call(null, obj[key], key, obj); + } + } + } + } + + /** + * Accepts varargs expecting each argument to be an object, then + * immutably merges the properties of each object and returns result. + * + * When multiple objects contain the same key the later object in + * the arguments list will take precedence. + * + * Example: + * + * ```js + * var result = merge({foo: 123}, {foo: 456}); + * console.log(result.foo); // outputs 456 + * ``` + * + * @param {Object} obj1 Object to merge + * @returns {Object} Result of all merge properties + */ + function merge(/* obj1, obj2, obj3, ... */) { + var result = {}; + function assignValue(val, key) { + if (isPlainObject(result[key]) && isPlainObject(val)) { + result[key] = merge(result[key], val); + } else if (isPlainObject(val)) { + result[key] = merge({}, val); + } else if (isArray(val)) { + result[key] = val.slice(); + } else { + result[key] = val; + } + } + + for (var i = 0, l = arguments.length; i < l; i++) { + forEach(arguments[i], assignValue); + } + return result; + } + + /** + * Extends object a by mutably adding to it the properties of object b. + * + * @param {Object} a The object to be extended + * @param {Object} b The object to copy properties from + * @param {Object} thisArg The object to bind function to + * @return {Object} The resulting value of object a + */ + function extend(a, b, thisArg) { + forEach(b, function assignValue(val, key) { + if (thisArg && typeof val === 'function') { + a[key] = bind(val, thisArg); + } else { + a[key] = val; + } + }); + return a; + } + + /** + * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM) + * + * @param {string} content with BOM + * @return {string} content value without BOM + */ + function stripBOM(content) { + if (content.charCodeAt(0) === 0xFEFF) { + content = content.slice(1); + } + return content; + } + + module.exports = { + isArray: isArray, + isArrayBuffer: isArrayBuffer, + isBuffer: isBuffer, + isFormData: isFormData, + isArrayBufferView: isArrayBufferView, + isString: isString, + isNumber: isNumber, + isObject: isObject, + isPlainObject: isPlainObject, + isUndefined: isUndefined, + isDate: isDate, + isFile: isFile, + isBlob: isBlob, + isFunction: isFunction, + isStream: isStream, + isURLSearchParams: isURLSearchParams, + isStandardBrowserEnv: isStandardBrowserEnv, + forEach: forEach, + merge: merge, + extend: extend, + trim: trim, + stripBOM: stripBOM + }; + + +/***/ }), +/* 3 */ +/***/ (function(module, exports) { + + 'use strict'; + + module.exports = function bind(fn, thisArg) { + return function wrap() { + var args = new Array(arguments.length); + for (var i = 0; i < args.length; i++) { + args[i] = arguments[i]; + } + return fn.apply(thisArg, args); + }; + }; + + +/***/ }), +/* 4 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + var utils = __webpack_require__(2); + var buildURL = __webpack_require__(5); + var InterceptorManager = __webpack_require__(6); + var dispatchRequest = __webpack_require__(7); + var mergeConfig = __webpack_require__(22); + + /** + * Create a new instance of Axios + * + * @param {Object} instanceConfig The default config for the instance + */ + function Axios(instanceConfig) { + this.defaults = instanceConfig; + this.interceptors = { + request: new InterceptorManager(), + response: new InterceptorManager() + }; + } + + /** + * Dispatch a request + * + * @param {Object} config The config specific for this request (merged with this.defaults) + */ + Axios.prototype.request = function request(config) { + /*eslint no-param-reassign:0*/ + // Allow for axios('example/url'[, config]) a la fetch API + if (typeof config === 'string') { + config = arguments[1] || {}; + config.url = arguments[0]; + } else { + config = config || {}; + } + + config = mergeConfig(this.defaults, config); + + // Set config.method + if (config.method) { + config.method = config.method.toLowerCase(); + } else if (this.defaults.method) { + config.method = this.defaults.method.toLowerCase(); + } else { + config.method = 'get'; + } + + // Hook up interceptors middleware + var chain = [dispatchRequest, undefined]; + var promise = Promise.resolve(config); + + this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) { + chain.unshift(interceptor.fulfilled, interceptor.rejected); + }); + + this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) { + chain.push(interceptor.fulfilled, interceptor.rejected); + }); + + while (chain.length) { + promise = promise.then(chain.shift(), chain.shift()); + } + + return promise; + }; + + Axios.prototype.getUri = function getUri(config) { + config = mergeConfig(this.defaults, config); + return buildURL(config.url, config.params, config.paramsSerializer).replace(/^\?/, ''); + }; + + // Provide aliases for supported request methods + utils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) { + /*eslint func-names:0*/ + Axios.prototype[method] = function(url, config) { + return this.request(mergeConfig(config || {}, { + method: method, + url: url, + data: (config || {}).data + })); + }; + }); + + utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) { + /*eslint func-names:0*/ + Axios.prototype[method] = function(url, data, config) { + return this.request(mergeConfig(config || {}, { + method: method, + url: url, + data: data + })); + }; + }); + + module.exports = Axios; + + +/***/ }), +/* 5 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + var utils = __webpack_require__(2); + + function encode(val) { + return encodeURIComponent(val). + replace(/%3A/gi, ':'). + replace(/%24/g, '$'). + replace(/%2C/gi, ','). + replace(/%20/g, '+'). + replace(/%5B/gi, '['). + replace(/%5D/gi, ']'); + } + + /** + * Build a URL by appending params to the end + * + * @param {string} url The base of the url (e.g., http://www.google.com) + * @param {object} [params] The params to be appended + * @returns {string} The formatted url + */ + module.exports = function buildURL(url, params, paramsSerializer) { + /*eslint no-param-reassign:0*/ + if (!params) { + return url; + } + + var serializedParams; + if (paramsSerializer) { + serializedParams = paramsSerializer(params); + } else if (utils.isURLSearchParams(params)) { + serializedParams = params.toString(); + } else { + var parts = []; + + utils.forEach(params, function serialize(val, key) { + if (val === null || typeof val === 'undefined') { + return; + } + + if (utils.isArray(val)) { + key = key + '[]'; + } else { + val = [val]; + } + + utils.forEach(val, function parseValue(v) { + if (utils.isDate(v)) { + v = v.toISOString(); + } else if (utils.isObject(v)) { + v = JSON.stringify(v); + } + parts.push(encode(key) + '=' + encode(v)); + }); + }); + + serializedParams = parts.join('&'); + } + + if (serializedParams) { + var hashmarkIndex = url.indexOf('#'); + if (hashmarkIndex !== -1) { + url = url.slice(0, hashmarkIndex); + } + + url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams; + } + + return url; + }; + + +/***/ }), +/* 6 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + var utils = __webpack_require__(2); + + function InterceptorManager() { + this.handlers = []; + } + + /** + * Add a new interceptor to the stack + * + * @param {Function} fulfilled The function to handle `then` for a `Promise` + * @param {Function} rejected The function to handle `reject` for a `Promise` + * + * @return {Number} An ID used to remove interceptor later + */ + InterceptorManager.prototype.use = function use(fulfilled, rejected) { + this.handlers.push({ + fulfilled: fulfilled, + rejected: rejected + }); + return this.handlers.length - 1; + }; + + /** + * Remove an interceptor from the stack + * + * @param {Number} id The ID that was returned by `use` + */ + InterceptorManager.prototype.eject = function eject(id) { + if (this.handlers[id]) { + this.handlers[id] = null; + } + }; + + /** + * Iterate over all the registered interceptors + * + * This method is particularly useful for skipping over any + * interceptors that may have become `null` calling `eject`. + * + * @param {Function} fn The function to call for each interceptor + */ + InterceptorManager.prototype.forEach = function forEach(fn) { + utils.forEach(this.handlers, function forEachHandler(h) { + if (h !== null) { + fn(h); + } + }); + }; + + module.exports = InterceptorManager; + + +/***/ }), +/* 7 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + var utils = __webpack_require__(2); + var transformData = __webpack_require__(8); + var isCancel = __webpack_require__(9); + var defaults = __webpack_require__(10); + + /** + * Throws a `Cancel` if cancellation has been requested. + */ + function throwIfCancellationRequested(config) { + if (config.cancelToken) { + config.cancelToken.throwIfRequested(); + } + } + + /** + * Dispatch a request to the server using the configured adapter. + * + * @param {object} config The config that is to be used for the request + * @returns {Promise} The Promise to be fulfilled + */ + module.exports = function dispatchRequest(config) { + throwIfCancellationRequested(config); + + // Ensure headers exist + config.headers = config.headers || {}; + + // Transform request data + config.data = transformData( + config.data, + config.headers, + config.transformRequest + ); + + // Flatten headers + config.headers = utils.merge( + config.headers.common || {}, + config.headers[config.method] || {}, + config.headers + ); + + utils.forEach( + ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'], + function cleanHeaderConfig(method) { + delete config.headers[method]; + } + ); + + var adapter = config.adapter || defaults.adapter; + + return adapter(config).then(function onAdapterResolution(response) { + throwIfCancellationRequested(config); + + // Transform response data + response.data = transformData( + response.data, + response.headers, + config.transformResponse + ); + + return response; + }, function onAdapterRejection(reason) { + if (!isCancel(reason)) { + throwIfCancellationRequested(config); + + // Transform response data + if (reason && reason.response) { + reason.response.data = transformData( + reason.response.data, + reason.response.headers, + config.transformResponse + ); + } + } + + return Promise.reject(reason); + }); + }; + + +/***/ }), +/* 8 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + var utils = __webpack_require__(2); + + /** + * Transform the data for a request or a response + * + * @param {Object|String} data The data to be transformed + * @param {Array} headers The headers for the request or response + * @param {Array|Function} fns A single function or Array of functions + * @returns {*} The resulting transformed data + */ + module.exports = function transformData(data, headers, fns) { + /*eslint no-param-reassign:0*/ + utils.forEach(fns, function transform(fn) { + data = fn(data, headers); + }); + + return data; + }; + + +/***/ }), +/* 9 */ +/***/ (function(module, exports) { + + 'use strict'; + + module.exports = function isCancel(value) { + return !!(value && value.__CANCEL__); + }; + + +/***/ }), +/* 10 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + var utils = __webpack_require__(2); + var normalizeHeaderName = __webpack_require__(11); + + var DEFAULT_CONTENT_TYPE = { + 'Content-Type': 'application/x-www-form-urlencoded' + }; + + function setContentTypeIfUnset(headers, value) { + if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) { + headers['Content-Type'] = value; + } + } + + function getDefaultAdapter() { + var adapter; + if (typeof XMLHttpRequest !== 'undefined') { + // For browsers use XHR adapter + adapter = __webpack_require__(12); + } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') { + // For node use HTTP adapter + adapter = __webpack_require__(12); + } + return adapter; + } + + var defaults = { + adapter: getDefaultAdapter(), + + transformRequest: [function transformRequest(data, headers) { + normalizeHeaderName(headers, 'Accept'); + normalizeHeaderName(headers, 'Content-Type'); + if (utils.isFormData(data) || + utils.isArrayBuffer(data) || + utils.isBuffer(data) || + utils.isStream(data) || + utils.isFile(data) || + utils.isBlob(data) + ) { + return data; + } + if (utils.isArrayBufferView(data)) { + return data.buffer; + } + if (utils.isURLSearchParams(data)) { + setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8'); + return data.toString(); + } + if (utils.isObject(data)) { + setContentTypeIfUnset(headers, 'application/json;charset=utf-8'); + return JSON.stringify(data); + } + return data; + }], + + transformResponse: [function transformResponse(data) { + /*eslint no-param-reassign:0*/ + if (typeof data === 'string') { + try { + data = JSON.parse(data); + } catch (e) { /* Ignore */ } + } + return data; + }], + + /** + * A timeout in milliseconds to abort a request. If set to 0 (default) a + * timeout is not created. + */ + timeout: 0, + + xsrfCookieName: 'XSRF-TOKEN', + xsrfHeaderName: 'X-XSRF-TOKEN', + + maxContentLength: -1, + maxBodyLength: -1, + + validateStatus: function validateStatus(status) { + return status >= 200 && status < 300; + } + }; + + defaults.headers = { + common: { + 'Accept': 'application/json, text/plain, */*' + } + }; + + utils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) { + defaults.headers[method] = {}; + }); + + utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) { + defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE); + }); + + module.exports = defaults; + + +/***/ }), +/* 11 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + var utils = __webpack_require__(2); + + module.exports = function normalizeHeaderName(headers, normalizedName) { + utils.forEach(headers, function processHeader(value, name) { + if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) { + headers[normalizedName] = value; + delete headers[name]; + } + }); + }; + + +/***/ }), +/* 12 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + var utils = __webpack_require__(2); + var settle = __webpack_require__(13); + var cookies = __webpack_require__(16); + var buildURL = __webpack_require__(5); + var buildFullPath = __webpack_require__(17); + var parseHeaders = __webpack_require__(20); + var isURLSameOrigin = __webpack_require__(21); + var createError = __webpack_require__(14); + + module.exports = function xhrAdapter(config) { + return new Promise(function dispatchXhrRequest(resolve, reject) { + var requestData = config.data; + var requestHeaders = config.headers; + + if (utils.isFormData(requestData)) { + delete requestHeaders['Content-Type']; // Let the browser set it + } + + var request = new XMLHttpRequest(); + + // HTTP basic authentication + if (config.auth) { + var username = config.auth.username || ''; + var password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : ''; + requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password); + } + + var fullPath = buildFullPath(config.baseURL, config.url); + request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true); + + // Set the request timeout in MS + request.timeout = config.timeout; + + // Listen for ready state + request.onreadystatechange = function handleLoad() { + if (!request || request.readyState !== 4) { + return; + } + + // The request errored out and we didn't get a response, this will be + // handled by onerror instead + // With one exception: request that using file: protocol, most browsers + // will return status as 0 even though it's a successful request + if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) { + return; + } + + // Prepare the response + var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null; + var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response; + var response = { + data: responseData, + status: request.status, + statusText: request.statusText, + headers: responseHeaders, + config: config, + request: request + }; + + settle(resolve, reject, response); + + // Clean up request + request = null; + }; + + // Handle browser request cancellation (as opposed to a manual cancellation) + request.onabort = function handleAbort() { + if (!request) { + return; + } + + reject(createError('Request aborted', config, 'ECONNABORTED', request)); + + // Clean up request + request = null; + }; + + // Handle low level network errors + request.onerror = function handleError() { + // Real errors are hidden from us by the browser + // onerror should only fire if it's a network error + reject(createError('Network Error', config, null, request)); + + // Clean up request + request = null; + }; + + // Handle timeout + request.ontimeout = function handleTimeout() { + var timeoutErrorMessage = 'timeout of ' + config.timeout + 'ms exceeded'; + if (config.timeoutErrorMessage) { + timeoutErrorMessage = config.timeoutErrorMessage; + } + reject(createError(timeoutErrorMessage, config, 'ECONNABORTED', + request)); + + // Clean up request + request = null; + }; + + // Add xsrf header + // This is only done if running in a standard browser environment. + // Specifically not if we're in a web worker, or react-native. + if (utils.isStandardBrowserEnv()) { + // Add xsrf header + var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName ? + cookies.read(config.xsrfCookieName) : + undefined; + + if (xsrfValue) { + requestHeaders[config.xsrfHeaderName] = xsrfValue; + } + } + + // Add headers to the request + if ('setRequestHeader' in request) { + utils.forEach(requestHeaders, function setRequestHeader(val, key) { + if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') { + // Remove Content-Type if data is undefined + delete requestHeaders[key]; + } else { + // Otherwise add header to the request + request.setRequestHeader(key, val); + } + }); + } + + // Add withCredentials to request if needed + if (!utils.isUndefined(config.withCredentials)) { + request.withCredentials = !!config.withCredentials; + } + + // Add responseType to request if needed + if (config.responseType) { + try { + request.responseType = config.responseType; + } catch (e) { + // Expected DOMException thrown by browsers not compatible XMLHttpRequest Level 2. + // But, this can be suppressed for 'json' type as it can be parsed by default 'transformResponse' function. + if (config.responseType !== 'json') { + throw e; + } + } + } + + // Handle progress if needed + if (typeof config.onDownloadProgress === 'function') { + request.addEventListener('progress', config.onDownloadProgress); + } + + // Not all browsers support upload events + if (typeof config.onUploadProgress === 'function' && request.upload) { + request.upload.addEventListener('progress', config.onUploadProgress); + } + + if (config.cancelToken) { + // Handle cancellation + config.cancelToken.promise.then(function onCanceled(cancel) { + if (!request) { + return; + } + + request.abort(); + reject(cancel); + // Clean up request + request = null; + }); + } + + if (!requestData) { + requestData = null; + } + + // Send the request + request.send(requestData); + }); + }; + + +/***/ }), +/* 13 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + var createError = __webpack_require__(14); + + /** + * Resolve or reject a Promise based on response status. + * + * @param {Function} resolve A function that resolves the promise. + * @param {Function} reject A function that rejects the promise. + * @param {object} response The response. + */ + module.exports = function settle(resolve, reject, response) { + var validateStatus = response.config.validateStatus; + if (!response.status || !validateStatus || validateStatus(response.status)) { + resolve(response); + } else { + reject(createError( + 'Request failed with status code ' + response.status, + response.config, + null, + response.request, + response + )); + } + }; + + +/***/ }), +/* 14 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + var enhanceError = __webpack_require__(15); + + /** + * Create an Error with the specified message, config, error code, request and response. + * + * @param {string} message The error message. + * @param {Object} config The config. + * @param {string} [code] The error code (for example, 'ECONNABORTED'). + * @param {Object} [request] The request. + * @param {Object} [response] The response. + * @returns {Error} The created error. + */ + module.exports = function createError(message, config, code, request, response) { + var error = new Error(message); + return enhanceError(error, config, code, request, response); + }; + + +/***/ }), +/* 15 */ +/***/ (function(module, exports) { + + 'use strict'; + + /** + * Update an Error with the specified config, error code, and response. + * + * @param {Error} error The error to update. + * @param {Object} config The config. + * @param {string} [code] The error code (for example, 'ECONNABORTED'). + * @param {Object} [request] The request. + * @param {Object} [response] The response. + * @returns {Error} The error. + */ + module.exports = function enhanceError(error, config, code, request, response) { + error.config = config; + if (code) { + error.code = code; + } + + error.request = request; + error.response = response; + error.isAxiosError = true; + + error.toJSON = function toJSON() { + return { + // Standard + message: this.message, + name: this.name, + // Microsoft + description: this.description, + number: this.number, + // Mozilla + fileName: this.fileName, + lineNumber: this.lineNumber, + columnNumber: this.columnNumber, + stack: this.stack, + // Axios + config: this.config, + code: this.code + }; + }; + return error; + }; + + +/***/ }), +/* 16 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + var utils = __webpack_require__(2); + + module.exports = ( + utils.isStandardBrowserEnv() ? + + // Standard browser envs support document.cookie + (function standardBrowserEnv() { + return { + write: function write(name, value, expires, path, domain, secure) { + var cookie = []; + cookie.push(name + '=' + encodeURIComponent(value)); + + if (utils.isNumber(expires)) { + cookie.push('expires=' + new Date(expires).toGMTString()); + } + + if (utils.isString(path)) { + cookie.push('path=' + path); + } + + if (utils.isString(domain)) { + cookie.push('domain=' + domain); + } + + if (secure === true) { + cookie.push('secure'); + } + + document.cookie = cookie.join('; '); + }, + + read: function read(name) { + var match = document.cookie.match(new RegExp('(^|;\\s*)(' + name + ')=([^;]*)')); + return (match ? decodeURIComponent(match[3]) : null); + }, + + remove: function remove(name) { + this.write(name, '', Date.now() - 86400000); + } + }; + })() : + + // Non standard browser env (web workers, react-native) lack needed support. + (function nonStandardBrowserEnv() { + return { + write: function write() {}, + read: function read() { return null; }, + remove: function remove() {} + }; + })() + ); + + +/***/ }), +/* 17 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + var isAbsoluteURL = __webpack_require__(18); + var combineURLs = __webpack_require__(19); + + /** + * Creates a new URL by combining the baseURL with the requestedURL, + * only when the requestedURL is not already an absolute URL. + * If the requestURL is absolute, this function returns the requestedURL untouched. + * + * @param {string} baseURL The base URL + * @param {string} requestedURL Absolute or relative URL to combine + * @returns {string} The combined full path + */ + module.exports = function buildFullPath(baseURL, requestedURL) { + if (baseURL && !isAbsoluteURL(requestedURL)) { + return combineURLs(baseURL, requestedURL); + } + return requestedURL; + }; + + +/***/ }), +/* 18 */ +/***/ (function(module, exports) { + + 'use strict'; + + /** + * Determines whether the specified URL is absolute + * + * @param {string} url The URL to test + * @returns {boolean} True if the specified URL is absolute, otherwise false + */ + module.exports = function isAbsoluteURL(url) { + // A URL is considered absolute if it begins with "://" or "//" (protocol-relative URL). + // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed + // by any combination of letters, digits, plus, period, or hyphen. + return /^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(url); + }; + + +/***/ }), +/* 19 */ +/***/ (function(module, exports) { + + 'use strict'; + + /** + * Creates a new URL by combining the specified URLs + * + * @param {string} baseURL The base URL + * @param {string} relativeURL The relative URL + * @returns {string} The combined URL + */ + module.exports = function combineURLs(baseURL, relativeURL) { + return relativeURL + ? baseURL.replace(/\/+$/, '') + '/' + relativeURL.replace(/^\/+/, '') + : baseURL; + }; + + +/***/ }), +/* 20 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + var utils = __webpack_require__(2); + + // Headers whose duplicates are ignored by node + // c.f. https://nodejs.org/api/http.html#http_message_headers + var ignoreDuplicateOf = [ + 'age', 'authorization', 'content-length', 'content-type', 'etag', + 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since', + 'last-modified', 'location', 'max-forwards', 'proxy-authorization', + 'referer', 'retry-after', 'user-agent' + ]; + + /** + * Parse headers into an object + * + * ``` + * Date: Wed, 27 Aug 2014 08:58:49 GMT + * Content-Type: application/json + * Connection: keep-alive + * Transfer-Encoding: chunked + * ``` + * + * @param {String} headers Headers needing to be parsed + * @returns {Object} Headers parsed into an object + */ + module.exports = function parseHeaders(headers) { + var parsed = {}; + var key; + var val; + var i; + + if (!headers) { return parsed; } + + utils.forEach(headers.split('\n'), function parser(line) { + i = line.indexOf(':'); + key = utils.trim(line.substr(0, i)).toLowerCase(); + val = utils.trim(line.substr(i + 1)); + + if (key) { + if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) { + return; + } + if (key === 'set-cookie') { + parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]); + } else { + parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val; + } + } + }); + + return parsed; + }; + + +/***/ }), +/* 21 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + var utils = __webpack_require__(2); + + module.exports = ( + utils.isStandardBrowserEnv() ? + + // Standard browser envs have full support of the APIs needed to test + // whether the request URL is of the same origin as current location. + (function standardBrowserEnv() { + var msie = /(msie|trident)/i.test(navigator.userAgent); + var urlParsingNode = document.createElement('a'); + var originURL; + + /** + * Parse a URL to discover it's components + * + * @param {String} url The URL to be parsed + * @returns {Object} + */ + function resolveURL(url) { + var href = url; + + if (msie) { + // IE needs attribute set twice to normalize properties + urlParsingNode.setAttribute('href', href); + href = urlParsingNode.href; + } + + urlParsingNode.setAttribute('href', href); + + // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils + return { + href: urlParsingNode.href, + protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '', + host: urlParsingNode.host, + search: urlParsingNode.search ? urlParsingNode.search.replace(/^\?/, '') : '', + hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '', + hostname: urlParsingNode.hostname, + port: urlParsingNode.port, + pathname: (urlParsingNode.pathname.charAt(0) === '/') ? + urlParsingNode.pathname : + '/' + urlParsingNode.pathname + }; + } + + originURL = resolveURL(window.location.href); + + /** + * Determine if a URL shares the same origin as the current location + * + * @param {String} requestURL The URL to test + * @returns {boolean} True if URL shares the same origin, otherwise false + */ + return function isURLSameOrigin(requestURL) { + var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL; + return (parsed.protocol === originURL.protocol && + parsed.host === originURL.host); + }; + })() : + + // Non standard browser envs (web workers, react-native) lack needed support. + (function nonStandardBrowserEnv() { + return function isURLSameOrigin() { + return true; + }; + })() + ); + + +/***/ }), +/* 22 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + var utils = __webpack_require__(2); + + /** + * Config-specific merge-function which creates a new config-object + * by merging two configuration objects together. + * + * @param {Object} config1 + * @param {Object} config2 + * @returns {Object} New object resulting from merging config2 to config1 + */ + module.exports = function mergeConfig(config1, config2) { + // eslint-disable-next-line no-param-reassign + config2 = config2 || {}; + var config = {}; + + var valueFromConfig2Keys = ['url', 'method', 'data']; + var mergeDeepPropertiesKeys = ['headers', 'auth', 'proxy', 'params']; + var defaultToConfig2Keys = [ + 'baseURL', 'transformRequest', 'transformResponse', 'paramsSerializer', + 'timeout', 'timeoutMessage', 'withCredentials', 'adapter', 'responseType', 'xsrfCookieName', + 'xsrfHeaderName', 'onUploadProgress', 'onDownloadProgress', 'decompress', + 'maxContentLength', 'maxBodyLength', 'maxRedirects', 'transport', 'httpAgent', + 'httpsAgent', 'cancelToken', 'socketPath', 'responseEncoding' + ]; + var directMergeKeys = ['validateStatus']; + + function getMergedValue(target, source) { + if (utils.isPlainObject(target) && utils.isPlainObject(source)) { + return utils.merge(target, source); + } else if (utils.isPlainObject(source)) { + return utils.merge({}, source); + } else if (utils.isArray(source)) { + return source.slice(); + } + return source; + } + + function mergeDeepProperties(prop) { + if (!utils.isUndefined(config2[prop])) { + config[prop] = getMergedValue(config1[prop], config2[prop]); + } else if (!utils.isUndefined(config1[prop])) { + config[prop] = getMergedValue(undefined, config1[prop]); + } + } + + utils.forEach(valueFromConfig2Keys, function valueFromConfig2(prop) { + if (!utils.isUndefined(config2[prop])) { + config[prop] = getMergedValue(undefined, config2[prop]); + } + }); + + utils.forEach(mergeDeepPropertiesKeys, mergeDeepProperties); + + utils.forEach(defaultToConfig2Keys, function defaultToConfig2(prop) { + if (!utils.isUndefined(config2[prop])) { + config[prop] = getMergedValue(undefined, config2[prop]); + } else if (!utils.isUndefined(config1[prop])) { + config[prop] = getMergedValue(undefined, config1[prop]); + } + }); + + utils.forEach(directMergeKeys, function merge(prop) { + if (prop in config2) { + config[prop] = getMergedValue(config1[prop], config2[prop]); + } else if (prop in config1) { + config[prop] = getMergedValue(undefined, config1[prop]); + } + }); + + var axiosKeys = valueFromConfig2Keys + .concat(mergeDeepPropertiesKeys) + .concat(defaultToConfig2Keys) + .concat(directMergeKeys); + + var otherKeys = Object + .keys(config1) + .concat(Object.keys(config2)) + .filter(function filterAxiosKeys(key) { + return axiosKeys.indexOf(key) === -1; + }); + + utils.forEach(otherKeys, mergeDeepProperties); + + return config; + }; + + +/***/ }), +/* 23 */ +/***/ (function(module, exports) { + + 'use strict'; + + /** + * A `Cancel` is an object that is thrown when an operation is canceled. + * + * @class + * @param {string=} message The message. + */ + function Cancel(message) { + this.message = message; + } + + Cancel.prototype.toString = function toString() { + return 'Cancel' + (this.message ? ': ' + this.message : ''); + }; + + Cancel.prototype.__CANCEL__ = true; + + module.exports = Cancel; + + +/***/ }), +/* 24 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + var Cancel = __webpack_require__(23); + + /** + * A `CancelToken` is an object that can be used to request cancellation of an operation. + * + * @class + * @param {Function} executor The executor function. + */ + function CancelToken(executor) { + if (typeof executor !== 'function') { + throw new TypeError('executor must be a function.'); + } + + var resolvePromise; + this.promise = new Promise(function promiseExecutor(resolve) { + resolvePromise = resolve; + }); + + var token = this; + executor(function cancel(message) { + if (token.reason) { + // Cancellation has already been requested + return; + } + + token.reason = new Cancel(message); + resolvePromise(token.reason); + }); + } + + /** + * Throws a `Cancel` if cancellation has been requested. + */ + CancelToken.prototype.throwIfRequested = function throwIfRequested() { + if (this.reason) { + throw this.reason; + } + }; + + /** + * Returns an object that contains a new `CancelToken` and a function that, when called, + * cancels the `CancelToken`. + */ + CancelToken.source = function source() { + var cancel; + var token = new CancelToken(function executor(c) { + cancel = c; + }); + return { + token: token, + cancel: cancel + }; + }; + + module.exports = CancelToken; + + +/***/ }), +/* 25 */ +/***/ (function(module, exports) { + + 'use strict'; + + /** + * Syntactic sugar for invoking a function and expanding an array for arguments. + * + * Common use case would be to use `Function.prototype.apply`. + * + * ```js + * function f(x, y, z) {} + * var args = [1, 2, 3]; + * f.apply(null, args); + * ``` + * + * With `spread` this example can be re-written. + * + * ```js + * spread(function(x, y, z) {})([1, 2, 3]); + * ``` + * + * @param {Function} callback + * @returns {Function} + */ + module.exports = function spread(callback) { + return function wrap(arr) { + return callback.apply(null, arr); + }; + }; + + +/***/ }) +/******/ ]) +}); +; +//# sourceMappingURL=axios.map \ No newline at end of file diff --git a/node_modules/axios/dist/axios.map b/node_modules/axios/dist/axios.map new file mode 100644 index 0000000..c722a64 --- /dev/null +++ b/node_modules/axios/dist/axios.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap 6b0707aec88359b2feaf","webpack:///./index.js","webpack:///./lib/axios.js","webpack:///./lib/utils.js","webpack:///./lib/helpers/bind.js","webpack:///./lib/core/Axios.js","webpack:///./lib/helpers/buildURL.js","webpack:///./lib/core/InterceptorManager.js","webpack:///./lib/core/dispatchRequest.js","webpack:///./lib/core/transformData.js","webpack:///./lib/cancel/isCancel.js","webpack:///./lib/defaults.js","webpack:///./lib/helpers/normalizeHeaderName.js","webpack:///./lib/adapters/xhr.js","webpack:///./lib/core/settle.js","webpack:///./lib/core/createError.js","webpack:///./lib/core/enhanceError.js","webpack:///./lib/helpers/cookies.js","webpack:///./lib/core/buildFullPath.js","webpack:///./lib/helpers/isAbsoluteURL.js","webpack:///./lib/helpers/combineURLs.js","webpack:///./lib/helpers/parseHeaders.js","webpack:///./lib/helpers/isURLSameOrigin.js","webpack:///./lib/core/mergeConfig.js","webpack:///./lib/cancel/Cancel.js","webpack:///./lib/cancel/CancelToken.js","webpack:///./lib/helpers/spread.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,O;ACVA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,uBAAe;AACf;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;;;;;ACtCA,yC;;;;;;ACAA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,MAAM;AAClB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;;;;;;ACpDA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,aAAa;AACxB,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oCAAmC,OAAO;AAC1C;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAuB,SAAS,GAAG,SAAS;AAC5C,4BAA2B;AAC3B;AACA;AACA,YAAW,OAAO;AAClB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,6BAA4B;AAC5B,MAAK;AACL;AACA,MAAK;AACL;AACA;AACA;;AAEA,wCAAuC,OAAO;AAC9C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AC9VA;;AAEA;AACA;AACA;AACA,oBAAmB,iBAAiB;AACpC;AACA;AACA;AACA;AACA;;;;;;;ACVA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iDAAgD;AAChD;AACA;AACA,0BAAyB;AACzB,MAAK;AACL;AACA,EAAC;;AAED;AACA;AACA;AACA,iDAAgD;AAChD;AACA;AACA;AACA,MAAK;AACL;AACA,EAAC;;AAED;;;;;;;AC9FA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,QAAO;AACP,MAAK;;AAEL;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;;;;;;ACrEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,SAAS;AACpB,YAAW,SAAS;AACpB;AACA,aAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;;;;;;;ACnDA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gCAA+B;AAC/B,wCAAuC;AACvC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;;;;;;;AC9EA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,cAAc;AACzB,YAAW,MAAM;AACjB,YAAW,eAAe;AAC1B,cAAa,EAAE;AACf;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;;;;;;ACnBA;;AAEA;AACA;AACA;;;;;;;ACJA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAwE;AACxE;AACA;AACA;AACA,wDAAuD;AACvD;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,QAAO,YAAY;AACnB;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAC;;AAED;AACA;AACA,EAAC;;AAED;;;;;;;ACjGA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;;;;;;ACXA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,6CAA4C;AAC5C;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;;;;;;;AClLA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,SAAS;AACpB,YAAW,SAAS;AACpB,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACxBA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,cAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;;;;;;;ACjBA;;AAEA;AACA;AACA;AACA,YAAW,MAAM;AACjB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,cAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACzCA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,2CAA0C;AAC1C,UAAS;;AAET;AACA,6DAA4D,wBAAwB;AACpF;AACA,UAAS;;AAET;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,mCAAkC;AAClC,gCAA+B,aAAa,EAAE;AAC9C;AACA;AACA,MAAK;AACL;;;;;;;ACpDA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACnBA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACbA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;;;;;;ACbA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAiB,eAAe;;AAEhC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA,IAAG;;AAEH;AACA;;;;;;;ACpDA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAc,OAAO;AACrB,iBAAgB;AAChB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,eAAc,OAAO;AACrB,iBAAgB,QAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;;;;;;ACnEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL,4BAA2B;AAC3B,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;;AAEH;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;;AAEA;AACA;;;;;;;ACtFA;;AAEA;AACA;AACA;AACA;AACA,YAAW,QAAQ;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;;;;;;AClBA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACxDA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAA+B;AAC/B;AACA;AACA,YAAW,SAAS;AACpB,cAAa;AACb;AACA;AACA;AACA;AACA;AACA","file":"axios.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"axios\"] = factory();\n\telse\n\t\troot[\"axios\"] = factory();\n})(this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 6b0707aec88359b2feaf","module.exports = require('./lib/axios');\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./index.js\n// module id = 0\n// module chunks = 0","'use strict';\n\nvar utils = require('./utils');\nvar bind = require('./helpers/bind');\nvar Axios = require('./core/Axios');\nvar mergeConfig = require('./core/mergeConfig');\nvar defaults = require('./defaults');\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n * @return {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n var context = new Axios(defaultConfig);\n var instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context);\n\n // Copy context to instance\n utils.extend(instance, context);\n\n return instance;\n}\n\n// Create the default instance to be exported\nvar axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Factory for creating new instances\naxios.create = function create(instanceConfig) {\n return createInstance(mergeConfig(axios.defaults, instanceConfig));\n};\n\n// Expose Cancel & CancelToken\naxios.Cancel = require('./cancel/Cancel');\naxios.CancelToken = require('./cancel/CancelToken');\naxios.isCancel = require('./cancel/isCancel');\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\naxios.spread = require('./helpers/spread');\n\nmodule.exports = axios;\n\n// Allow use of default import syntax in TypeScript\nmodule.exports.default = axios;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/axios.js\n// module id = 1\n// module chunks = 0","'use strict';\n\nvar bind = require('./helpers/bind');\n\n/*global toString:true*/\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n return toString.call(val) === '[object Array]';\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nfunction isArrayBuffer(val) {\n return toString.call(val) === '[object ArrayBuffer]';\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(val) {\n return (typeof FormData !== 'undefined') && (val instanceof FormData);\n}\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n var result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n return typeof val === 'number';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {Object} val The value to test\n * @return {boolean} True if value is a plain Object, otherwise false\n */\nfunction isPlainObject(val) {\n if (toString.call(val) !== '[object Object]') {\n return false;\n }\n\n var prototype = Object.getPrototypeOf(val);\n return prototype === null || prototype === Object.prototype;\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nfunction isDate(val) {\n return toString.call(val) === '[object Date]';\n}\n\n/**\n * Determine if a value is a File\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nfunction isFile(val) {\n return toString.call(val) === '[object File]';\n}\n\n/**\n * Determine if a value is a Blob\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nfunction isBlob(val) {\n return toString.call(val) === '[object Blob]';\n}\n\n/**\n * Determine if a value is a Function\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nfunction isFunction(val) {\n return toString.call(val) === '[object Function]';\n}\n\n/**\n * Determine if a value is a Stream\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nfunction isStream(val) {\n return isObject(val) && isFunction(val.pipe);\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nfunction isURLSearchParams(val) {\n return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;\n}\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n */\nfunction isStandardBrowserEnv() {\n if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' ||\n navigator.product === 'NativeScript' ||\n navigator.product === 'NS')) {\n return false;\n }\n return (\n typeof window !== 'undefined' &&\n typeof document !== 'undefined'\n );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (var i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n fn.call(null, obj[key], key, obj);\n }\n }\n }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n var result = {};\n function assignValue(val, key) {\n if (isPlainObject(result[key]) && isPlainObject(val)) {\n result[key] = merge(result[key], val);\n } else if (isPlainObject(val)) {\n result[key] = merge({}, val);\n } else if (isArray(val)) {\n result[key] = val.slice();\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n * @return {Object} The resulting value of object a\n */\nfunction extend(a, b, thisArg) {\n forEach(b, function assignValue(val, key) {\n if (thisArg && typeof val === 'function') {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n });\n return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n * @return {string} content value without BOM\n */\nfunction stripBOM(content) {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n}\n\nmodule.exports = {\n isArray: isArray,\n isArrayBuffer: isArrayBuffer,\n isBuffer: isBuffer,\n isFormData: isFormData,\n isArrayBufferView: isArrayBufferView,\n isString: isString,\n isNumber: isNumber,\n isObject: isObject,\n isPlainObject: isPlainObject,\n isUndefined: isUndefined,\n isDate: isDate,\n isFile: isFile,\n isBlob: isBlob,\n isFunction: isFunction,\n isStream: isStream,\n isURLSearchParams: isURLSearchParams,\n isStandardBrowserEnv: isStandardBrowserEnv,\n forEach: forEach,\n merge: merge,\n extend: extend,\n trim: trim,\n stripBOM: stripBOM\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/utils.js\n// module id = 2\n// module chunks = 0","'use strict';\n\nmodule.exports = function bind(fn, thisArg) {\n return function wrap() {\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n return fn.apply(thisArg, args);\n };\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/helpers/bind.js\n// module id = 3\n// module chunks = 0","'use strict';\n\nvar utils = require('./../utils');\nvar buildURL = require('../helpers/buildURL');\nvar InterceptorManager = require('./InterceptorManager');\nvar dispatchRequest = require('./dispatchRequest');\nvar mergeConfig = require('./mergeConfig');\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n */\nfunction Axios(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n}\n\n/**\n * Dispatch a request\n *\n * @param {Object} config The config specific for this request (merged with this.defaults)\n */\nAxios.prototype.request = function request(config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof config === 'string') {\n config = arguments[1] || {};\n config.url = arguments[0];\n } else {\n config = config || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n // Set config.method\n if (config.method) {\n config.method = config.method.toLowerCase();\n } else if (this.defaults.method) {\n config.method = this.defaults.method.toLowerCase();\n } else {\n config.method = 'get';\n }\n\n // Hook up interceptors middleware\n var chain = [dispatchRequest, undefined];\n var promise = Promise.resolve(config);\n\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n chain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n while (chain.length) {\n promise = promise.then(chain.shift(), chain.shift());\n }\n\n return promise;\n};\n\nAxios.prototype.getUri = function getUri(config) {\n config = mergeConfig(this.defaults, config);\n return buildURL(config.url, config.params, config.paramsSerializer).replace(/^\\?/, '');\n};\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(mergeConfig(config || {}, {\n method: method,\n url: url,\n data: (config || {}).data\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method: method,\n url: url,\n data: data\n }));\n };\n});\n\nmodule.exports = Axios;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/core/Axios.js\n// module id = 4\n// module chunks = 0","'use strict';\n\nvar utils = require('./../utils');\n\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n\n var serializedParams;\n if (paramsSerializer) {\n serializedParams = paramsSerializer(params);\n } else if (utils.isURLSearchParams(params)) {\n serializedParams = params.toString();\n } else {\n var parts = [];\n\n utils.forEach(params, function serialize(val, key) {\n if (val === null || typeof val === 'undefined') {\n return;\n }\n\n if (utils.isArray(val)) {\n key = key + '[]';\n } else {\n val = [val];\n }\n\n utils.forEach(val, function parseValue(v) {\n if (utils.isDate(v)) {\n v = v.toISOString();\n } else if (utils.isObject(v)) {\n v = JSON.stringify(v);\n }\n parts.push(encode(key) + '=' + encode(v));\n });\n });\n\n serializedParams = parts.join('&');\n }\n\n if (serializedParams) {\n var hashmarkIndex = url.indexOf('#');\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/helpers/buildURL.js\n// module id = 5\n// module chunks = 0","'use strict';\n\nvar utils = require('./../utils');\n\nfunction InterceptorManager() {\n this.handlers = [];\n}\n\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\n this.handlers.push({\n fulfilled: fulfilled,\n rejected: rejected\n });\n return this.handlers.length - 1;\n};\n\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\nInterceptorManager.prototype.eject = function eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n};\n\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\nInterceptorManager.prototype.forEach = function forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n};\n\nmodule.exports = InterceptorManager;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/core/InterceptorManager.js\n// module id = 6\n// module chunks = 0","'use strict';\n\nvar utils = require('./../utils');\nvar transformData = require('./transformData');\nvar isCancel = require('../cancel/isCancel');\nvar defaults = require('../defaults');\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n // Ensure headers exist\n config.headers = config.headers || {};\n\n // Transform request data\n config.data = transformData(\n config.data,\n config.headers,\n config.transformRequest\n );\n\n // Flatten headers\n config.headers = utils.merge(\n config.headers.common || {},\n config.headers[config.method] || {},\n config.headers\n );\n\n utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n function cleanHeaderConfig(method) {\n delete config.headers[method];\n }\n );\n\n var adapter = config.adapter || defaults.adapter;\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData(\n response.data,\n response.headers,\n config.transformResponse\n );\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData(\n reason.response.data,\n reason.response.headers,\n config.transformResponse\n );\n }\n }\n\n return Promise.reject(reason);\n });\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/core/dispatchRequest.js\n// module id = 7\n// module chunks = 0","'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n /*eslint no-param-reassign:0*/\n utils.forEach(fns, function transform(fn) {\n data = fn(data, headers);\n });\n\n return data;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/core/transformData.js\n// module id = 8\n// module chunks = 0","'use strict';\n\nmodule.exports = function isCancel(value) {\n return !!(value && value.__CANCEL__);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/cancel/isCancel.js\n// module id = 9\n// module chunks = 0","'use strict';\n\nvar utils = require('./utils');\nvar normalizeHeaderName = require('./helpers/normalizeHeaderName');\n\nvar DEFAULT_CONTENT_TYPE = {\n 'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nfunction setContentTypeIfUnset(headers, value) {\n if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n headers['Content-Type'] = value;\n }\n}\n\nfunction getDefaultAdapter() {\n var adapter;\n if (typeof XMLHttpRequest !== 'undefined') {\n // For browsers use XHR adapter\n adapter = require('./adapters/xhr');\n } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {\n // For node use HTTP adapter\n adapter = require('./adapters/http');\n }\n return adapter;\n}\n\nvar defaults = {\n adapter: getDefaultAdapter(),\n\n transformRequest: [function transformRequest(data, headers) {\n normalizeHeaderName(headers, 'Accept');\n normalizeHeaderName(headers, 'Content-Type');\n if (utils.isFormData(data) ||\n utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n return data.toString();\n }\n if (utils.isObject(data)) {\n setContentTypeIfUnset(headers, 'application/json;charset=utf-8');\n return JSON.stringify(data);\n }\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n /*eslint no-param-reassign:0*/\n if (typeof data === 'string') {\n try {\n data = JSON.parse(data);\n } catch (e) { /* Ignore */ }\n }\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n }\n};\n\ndefaults.headers = {\n common: {\n 'Accept': 'application/json, text/plain, */*'\n }\n};\n\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n defaults.headers[method] = {};\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\n\nmodule.exports = defaults;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/defaults.js\n// module id = 10\n// module chunks = 0","'use strict';\n\nvar utils = require('../utils');\n\nmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n utils.forEach(headers, function processHeader(value, name) {\n if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n headers[normalizedName] = value;\n delete headers[name];\n }\n });\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/helpers/normalizeHeaderName.js\n// module id = 11\n// module chunks = 0","'use strict';\n\nvar utils = require('./../utils');\nvar settle = require('./../core/settle');\nvar cookies = require('./../helpers/cookies');\nvar buildURL = require('./../helpers/buildURL');\nvar buildFullPath = require('../core/buildFullPath');\nvar parseHeaders = require('./../helpers/parseHeaders');\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\nvar createError = require('../core/createError');\n\nmodule.exports = function xhrAdapter(config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n var requestData = config.data;\n var requestHeaders = config.headers;\n\n if (utils.isFormData(requestData)) {\n delete requestHeaders['Content-Type']; // Let the browser set it\n }\n\n var request = new XMLHttpRequest();\n\n // HTTP basic authentication\n if (config.auth) {\n var username = config.auth.username || '';\n var password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : '';\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n }\n\n var fullPath = buildFullPath(config.baseURL, config.url);\n request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);\n\n // Set the request timeout in MS\n request.timeout = config.timeout;\n\n // Listen for ready state\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n\n // Prepare the response\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;\n var response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config: config,\n request: request\n };\n\n settle(resolve, reject, response);\n\n // Clean up request\n request = null;\n };\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(createError('Request aborted', config, 'ECONNABORTED', request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(createError('Network Error', config, null, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n var timeoutErrorMessage = 'timeout of ' + config.timeout + 'ms exceeded';\n if (config.timeoutErrorMessage) {\n timeoutErrorMessage = config.timeoutErrorMessage;\n }\n reject(createError(timeoutErrorMessage, config, 'ECONNABORTED',\n request));\n\n // Clean up request\n request = null;\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if (utils.isStandardBrowserEnv()) {\n // Add xsrf header\n var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName ?\n cookies.read(config.xsrfCookieName) :\n undefined;\n\n if (xsrfValue) {\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\n }\n }\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n // Remove Content-Type if data is undefined\n delete requestHeaders[key];\n } else {\n // Otherwise add header to the request\n request.setRequestHeader(key, val);\n }\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(config.withCredentials)) {\n request.withCredentials = !!config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (config.responseType) {\n try {\n request.responseType = config.responseType;\n } catch (e) {\n // Expected DOMException thrown by browsers not compatible XMLHttpRequest Level 2.\n // But, this can be suppressed for 'json' type as it can be parsed by default 'transformResponse' function.\n if (config.responseType !== 'json') {\n throw e;\n }\n }\n }\n\n // Handle progress if needed\n if (typeof config.onDownloadProgress === 'function') {\n request.addEventListener('progress', config.onDownloadProgress);\n }\n\n // Not all browsers support upload events\n if (typeof config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', config.onUploadProgress);\n }\n\n if (config.cancelToken) {\n // Handle cancellation\n config.cancelToken.promise.then(function onCanceled(cancel) {\n if (!request) {\n return;\n }\n\n request.abort();\n reject(cancel);\n // Clean up request\n request = null;\n });\n }\n\n if (!requestData) {\n requestData = null;\n }\n\n // Send the request\n request.send(requestData);\n });\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/adapters/xhr.js\n// module id = 12\n// module chunks = 0","'use strict';\n\nvar createError = require('./createError');\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n */\nmodule.exports = function settle(resolve, reject, response) {\n var validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(createError(\n 'Request failed with status code ' + response.status,\n response.config,\n null,\n response.request,\n response\n ));\n }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/core/settle.js\n// module id = 13\n// module chunks = 0","'use strict';\n\nvar enhanceError = require('./enhanceError');\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The created error.\n */\nmodule.exports = function createError(message, config, code, request, response) {\n var error = new Error(message);\n return enhanceError(error, config, code, request, response);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/core/createError.js\n// module id = 14\n// module chunks = 0","'use strict';\n\n/**\n * Update an Error with the specified config, error code, and response.\n *\n * @param {Error} error The error to update.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The error.\n */\nmodule.exports = function enhanceError(error, config, code, request, response) {\n error.config = config;\n if (code) {\n error.code = code;\n }\n\n error.request = request;\n error.response = response;\n error.isAxiosError = true;\n\n error.toJSON = function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: this.config,\n code: this.code\n };\n };\n return error;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/core/enhanceError.js\n// module id = 15\n// module chunks = 0","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs support document.cookie\n (function standardBrowserEnv() {\n return {\n write: function write(name, value, expires, path, domain, secure) {\n var cookie = [];\n cookie.push(name + '=' + encodeURIComponent(value));\n\n if (utils.isNumber(expires)) {\n cookie.push('expires=' + new Date(expires).toGMTString());\n }\n\n if (utils.isString(path)) {\n cookie.push('path=' + path);\n }\n\n if (utils.isString(domain)) {\n cookie.push('domain=' + domain);\n }\n\n if (secure === true) {\n cookie.push('secure');\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read: function read(name) {\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove: function remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n };\n })() :\n\n // Non standard browser env (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return {\n write: function write() {},\n read: function read() { return null; },\n remove: function remove() {}\n };\n })()\n);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/helpers/cookies.js\n// module id = 16\n// module chunks = 0","'use strict';\n\nvar isAbsoluteURL = require('../helpers/isAbsoluteURL');\nvar combineURLs = require('../helpers/combineURLs');\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n * @returns {string} The combined full path\n */\nmodule.exports = function buildFullPath(baseURL, requestedURL) {\n if (baseURL && !isAbsoluteURL(requestedURL)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/core/buildFullPath.js\n// module id = 17\n// module chunks = 0","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nmodule.exports = function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/helpers/isAbsoluteURL.js\n// module id = 18\n// module chunks = 0","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n * @returns {string} The combined URL\n */\nmodule.exports = function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/helpers/combineURLs.js\n// module id = 19\n// module chunks = 0","'use strict';\n\nvar utils = require('./../utils');\n\n// Headers whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nvar ignoreDuplicateOf = [\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n];\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n var parsed = {};\n var key;\n var val;\n var i;\n\n if (!headers) { return parsed; }\n\n utils.forEach(headers.split('\\n'), function parser(line) {\n i = line.indexOf(':');\n key = utils.trim(line.substr(0, i)).toLowerCase();\n val = utils.trim(line.substr(i + 1));\n\n if (key) {\n if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {\n return;\n }\n if (key === 'set-cookie') {\n parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n }\n });\n\n return parsed;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/helpers/parseHeaders.js\n// module id = 20\n// module chunks = 0","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs have full support of the APIs needed to test\n // whether the request URL is of the same origin as current location.\n (function standardBrowserEnv() {\n var msie = /(msie|trident)/i.test(navigator.userAgent);\n var urlParsingNode = document.createElement('a');\n var originURL;\n\n /**\n * Parse a URL to discover it's components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n var href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n return (parsed.protocol === originURL.protocol &&\n parsed.host === originURL.host);\n };\n })() :\n\n // Non standard browser envs (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n })()\n);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/helpers/isURLSameOrigin.js\n// module id = 21\n// module chunks = 0","'use strict';\n\nvar utils = require('../utils');\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n * @returns {Object} New object resulting from merging config2 to config1\n */\nmodule.exports = function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n var config = {};\n\n var valueFromConfig2Keys = ['url', 'method', 'data'];\n var mergeDeepPropertiesKeys = ['headers', 'auth', 'proxy', 'params'];\n var defaultToConfig2Keys = [\n 'baseURL', 'transformRequest', 'transformResponse', 'paramsSerializer',\n 'timeout', 'timeoutMessage', 'withCredentials', 'adapter', 'responseType', 'xsrfCookieName',\n 'xsrfHeaderName', 'onUploadProgress', 'onDownloadProgress', 'decompress',\n 'maxContentLength', 'maxBodyLength', 'maxRedirects', 'transport', 'httpAgent',\n 'httpsAgent', 'cancelToken', 'socketPath', 'responseEncoding'\n ];\n var directMergeKeys = ['validateStatus'];\n\n function getMergedValue(target, source) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge(target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n function mergeDeepProperties(prop) {\n if (!utils.isUndefined(config2[prop])) {\n config[prop] = getMergedValue(config1[prop], config2[prop]);\n } else if (!utils.isUndefined(config1[prop])) {\n config[prop] = getMergedValue(undefined, config1[prop]);\n }\n }\n\n utils.forEach(valueFromConfig2Keys, function valueFromConfig2(prop) {\n if (!utils.isUndefined(config2[prop])) {\n config[prop] = getMergedValue(undefined, config2[prop]);\n }\n });\n\n utils.forEach(mergeDeepPropertiesKeys, mergeDeepProperties);\n\n utils.forEach(defaultToConfig2Keys, function defaultToConfig2(prop) {\n if (!utils.isUndefined(config2[prop])) {\n config[prop] = getMergedValue(undefined, config2[prop]);\n } else if (!utils.isUndefined(config1[prop])) {\n config[prop] = getMergedValue(undefined, config1[prop]);\n }\n });\n\n utils.forEach(directMergeKeys, function merge(prop) {\n if (prop in config2) {\n config[prop] = getMergedValue(config1[prop], config2[prop]);\n } else if (prop in config1) {\n config[prop] = getMergedValue(undefined, config1[prop]);\n }\n });\n\n var axiosKeys = valueFromConfig2Keys\n .concat(mergeDeepPropertiesKeys)\n .concat(defaultToConfig2Keys)\n .concat(directMergeKeys);\n\n var otherKeys = Object\n .keys(config1)\n .concat(Object.keys(config2))\n .filter(function filterAxiosKeys(key) {\n return axiosKeys.indexOf(key) === -1;\n });\n\n utils.forEach(otherKeys, mergeDeepProperties);\n\n return config;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/core/mergeConfig.js\n// module id = 22\n// module chunks = 0","'use strict';\n\n/**\n * A `Cancel` is an object that is thrown when an operation is canceled.\n *\n * @class\n * @param {string=} message The message.\n */\nfunction Cancel(message) {\n this.message = message;\n}\n\nCancel.prototype.toString = function toString() {\n return 'Cancel' + (this.message ? ': ' + this.message : '');\n};\n\nCancel.prototype.__CANCEL__ = true;\n\nmodule.exports = Cancel;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/cancel/Cancel.js\n// module id = 23\n// module chunks = 0","'use strict';\n\nvar Cancel = require('./Cancel');\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @class\n * @param {Function} executor The executor function.\n */\nfunction CancelToken(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n var resolvePromise;\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n var token = this;\n executor(function cancel(message) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new Cancel(message);\n resolvePromise(token.reason);\n });\n}\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nCancelToken.prototype.throwIfRequested = function throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n};\n\n/**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\nCancelToken.source = function source() {\n var cancel;\n var token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token: token,\n cancel: cancel\n };\n};\n\nmodule.exports = CancelToken;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/cancel/CancelToken.js\n// module id = 24\n// module chunks = 0","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/helpers/spread.js\n// module id = 25\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file diff --git a/node_modules/axios/dist/axios.min.js b/node_modules/axios/dist/axios.min.js new file mode 100644 index 0000000..abdb244 --- /dev/null +++ b/node_modules/axios/dist/axios.min.js @@ -0,0 +1,3 @@ +/* axios v0.21.0 | (c) 2020 by Matt Zabriskie */ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.axios=t():e.axios=t()}(this,function(){return function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){e.exports=n(1)},function(e,t,n){"use strict";function r(e){var t=new i(e),n=s(i.prototype.request,t);return o.extend(n,i.prototype,t),o.extend(n,t),n}var o=n(2),s=n(3),i=n(4),a=n(22),u=n(10),c=r(u);c.Axios=i,c.create=function(e){return r(a(c.defaults,e))},c.Cancel=n(23),c.CancelToken=n(24),c.isCancel=n(9),c.all=function(e){return Promise.all(e)},c.spread=n(25),e.exports=c,e.exports.default=c},function(e,t,n){"use strict";function r(e){return"[object Array]"===R.call(e)}function o(e){return"undefined"==typeof e}function s(e){return null!==e&&!o(e)&&null!==e.constructor&&!o(e.constructor)&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}function i(e){return"[object ArrayBuffer]"===R.call(e)}function a(e){return"undefined"!=typeof FormData&&e instanceof FormData}function u(e){var t;return t="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&e.buffer instanceof ArrayBuffer}function c(e){return"string"==typeof e}function f(e){return"number"==typeof e}function p(e){return null!==e&&"object"==typeof e}function d(e){if("[object Object]"!==R.call(e))return!1;var t=Object.getPrototypeOf(e);return null===t||t===Object.prototype}function l(e){return"[object Date]"===R.call(e)}function h(e){return"[object File]"===R.call(e)}function m(e){return"[object Blob]"===R.call(e)}function y(e){return"[object Function]"===R.call(e)}function g(e){return p(e)&&y(e.pipe)}function v(e){return"undefined"!=typeof URLSearchParams&&e instanceof URLSearchParams}function x(e){return e.replace(/^\s*/,"").replace(/\s*$/,"")}function w(){return("undefined"==typeof navigator||"ReactNative"!==navigator.product&&"NativeScript"!==navigator.product&&"NS"!==navigator.product)&&("undefined"!=typeof window&&"undefined"!=typeof document)}function b(e,t){if(null!==e&&"undefined"!=typeof e)if("object"!=typeof e&&(e=[e]),r(e))for(var n=0,o=e.length;n=200&&e<300}};u.headers={common:{Accept:"application/json, text/plain, */*"}},s.forEach(["delete","get","head"],function(e){u.headers[e]={}}),s.forEach(["post","put","patch"],function(e){u.headers[e]=s.merge(a)}),e.exports=u},function(e,t,n){"use strict";var r=n(2);e.exports=function(e,t){r.forEach(e,function(n,r){r!==t&&r.toUpperCase()===t.toUpperCase()&&(e[t]=n,delete e[r])})}},function(e,t,n){"use strict";var r=n(2),o=n(13),s=n(16),i=n(5),a=n(17),u=n(20),c=n(21),f=n(14);e.exports=function(e){return new Promise(function(t,n){var p=e.data,d=e.headers;r.isFormData(p)&&delete d["Content-Type"];var l=new XMLHttpRequest;if(e.auth){var h=e.auth.username||"",m=e.auth.password?unescape(encodeURIComponent(e.auth.password)):"";d.Authorization="Basic "+btoa(h+":"+m)}var y=a(e.baseURL,e.url);if(l.open(e.method.toUpperCase(),i(y,e.params,e.paramsSerializer),!0),l.timeout=e.timeout,l.onreadystatechange=function(){if(l&&4===l.readyState&&(0!==l.status||l.responseURL&&0===l.responseURL.indexOf("file:"))){var r="getAllResponseHeaders"in l?u(l.getAllResponseHeaders()):null,s=e.responseType&&"text"!==e.responseType?l.response:l.responseText,i={data:s,status:l.status,statusText:l.statusText,headers:r,config:e,request:l};o(t,n,i),l=null}},l.onabort=function(){l&&(n(f("Request aborted",e,"ECONNABORTED",l)),l=null)},l.onerror=function(){n(f("Network Error",e,null,l)),l=null},l.ontimeout=function(){var t="timeout of "+e.timeout+"ms exceeded";e.timeoutErrorMessage&&(t=e.timeoutErrorMessage),n(f(t,e,"ECONNABORTED",l)),l=null},r.isStandardBrowserEnv()){var g=(e.withCredentials||c(y))&&e.xsrfCookieName?s.read(e.xsrfCookieName):void 0;g&&(d[e.xsrfHeaderName]=g)}if("setRequestHeader"in l&&r.forEach(d,function(e,t){"undefined"==typeof p&&"content-type"===t.toLowerCase()?delete d[t]:l.setRequestHeader(t,e)}),r.isUndefined(e.withCredentials)||(l.withCredentials=!!e.withCredentials),e.responseType)try{l.responseType=e.responseType}catch(t){if("json"!==e.responseType)throw t}"function"==typeof e.onDownloadProgress&&l.addEventListener("progress",e.onDownloadProgress),"function"==typeof e.onUploadProgress&&l.upload&&l.upload.addEventListener("progress",e.onUploadProgress),e.cancelToken&&e.cancelToken.promise.then(function(e){l&&(l.abort(),n(e),l=null)}),p||(p=null),l.send(p)})}},function(e,t,n){"use strict";var r=n(14);e.exports=function(e,t,n){var o=n.config.validateStatus;n.status&&o&&!o(n.status)?t(r("Request failed with status code "+n.status,n.config,null,n.request,n)):e(n)}},function(e,t,n){"use strict";var r=n(15);e.exports=function(e,t,n,o,s){var i=new Error(e);return r(i,t,n,o,s)}},function(e,t){"use strict";e.exports=function(e,t,n,r,o){return e.config=t,n&&(e.code=n),e.request=r,e.response=o,e.isAxiosError=!0,e.toJSON=function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code}},e}},function(e,t,n){"use strict";var r=n(2);e.exports=r.isStandardBrowserEnv()?function(){return{write:function(e,t,n,o,s,i){var a=[];a.push(e+"="+encodeURIComponent(t)),r.isNumber(n)&&a.push("expires="+new Date(n).toGMTString()),r.isString(o)&&a.push("path="+o),r.isString(s)&&a.push("domain="+s),i===!0&&a.push("secure"),document.cookie=a.join("; ")},read:function(e){var t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},function(e,t,n){"use strict";var r=n(18),o=n(19);e.exports=function(e,t){return e&&!r(t)?o(e,t):t}},function(e,t){"use strict";e.exports=function(e){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(e)}},function(e,t){"use strict";e.exports=function(e,t){return t?e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,""):e}},function(e,t,n){"use strict";var r=n(2),o=["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"];e.exports=function(e){var t,n,s,i={};return e?(r.forEach(e.split("\n"),function(e){if(s=e.indexOf(":"),t=r.trim(e.substr(0,s)).toLowerCase(),n=r.trim(e.substr(s+1)),t){if(i[t]&&o.indexOf(t)>=0)return;"set-cookie"===t?i[t]=(i[t]?i[t]:[]).concat([n]):i[t]=i[t]?i[t]+", "+n:n}}),i):i}},function(e,t,n){"use strict";var r=n(2);e.exports=r.isStandardBrowserEnv()?function(){function e(e){var t=e;return n&&(o.setAttribute("href",t),t=o.href),o.setAttribute("href",t),{href:o.href,protocol:o.protocol?o.protocol.replace(/:$/,""):"",host:o.host,search:o.search?o.search.replace(/^\?/,""):"",hash:o.hash?o.hash.replace(/^#/,""):"",hostname:o.hostname,port:o.port,pathname:"/"===o.pathname.charAt(0)?o.pathname:"/"+o.pathname}}var t,n=/(msie|trident)/i.test(navigator.userAgent),o=document.createElement("a");return t=e(window.location.href),function(n){var o=r.isString(n)?e(n):n;return o.protocol===t.protocol&&o.host===t.host}}():function(){return function(){return!0}}()},function(e,t,n){"use strict";var r=n(2);e.exports=function(e,t){function n(e,t){return r.isPlainObject(e)&&r.isPlainObject(t)?r.merge(e,t):r.isPlainObject(t)?r.merge({},t):r.isArray(t)?t.slice():t}function o(o){r.isUndefined(t[o])?r.isUndefined(e[o])||(s[o]=n(void 0,e[o])):s[o]=n(e[o],t[o])}t=t||{};var s={},i=["url","method","data"],a=["headers","auth","proxy","params"],u=["baseURL","transformRequest","transformResponse","paramsSerializer","timeout","timeoutMessage","withCredentials","adapter","responseType","xsrfCookieName","xsrfHeaderName","onUploadProgress","onDownloadProgress","decompress","maxContentLength","maxBodyLength","maxRedirects","transport","httpAgent","httpsAgent","cancelToken","socketPath","responseEncoding"],c=["validateStatus"];r.forEach(i,function(e){r.isUndefined(t[e])||(s[e]=n(void 0,t[e]))}),r.forEach(a,o),r.forEach(u,function(o){r.isUndefined(t[o])?r.isUndefined(e[o])||(s[o]=n(void 0,e[o])):s[o]=n(void 0,t[o])}),r.forEach(c,function(r){r in t?s[r]=n(e[r],t[r]):r in e&&(s[r]=n(void 0,e[r]))});var f=i.concat(a).concat(u).concat(c),p=Object.keys(e).concat(Object.keys(t)).filter(function(e){return f.indexOf(e)===-1});return r.forEach(p,o),s}},function(e,t){"use strict";function n(e){this.message=e}n.prototype.toString=function(){return"Cancel"+(this.message?": "+this.message:"")},n.prototype.__CANCEL__=!0,e.exports=n},function(e,t,n){"use strict";function r(e){if("function"!=typeof e)throw new TypeError("executor must be a function.");var t;this.promise=new Promise(function(e){t=e});var n=this;e(function(e){n.reason||(n.reason=new o(e),t(n.reason))})}var o=n(23);r.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},r.source=function(){var e,t=new r(function(t){e=t});return{token:t,cancel:e}},e.exports=r},function(e,t){"use strict";e.exports=function(e){return function(t){return e.apply(null,t)}}}])}); +//# sourceMappingURL=axios.min.map \ No newline at end of file diff --git a/node_modules/axios/dist/axios.min.map b/node_modules/axios/dist/axios.min.map new file mode 100644 index 0000000..e8a9bab --- /dev/null +++ b/node_modules/axios/dist/axios.min.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///axios.min.js","webpack:///webpack/bootstrap 5db0cd118db1f73a2dc3","webpack:///./index.js","webpack:///./lib/axios.js","webpack:///./lib/utils.js","webpack:///./lib/helpers/bind.js","webpack:///./lib/core/Axios.js","webpack:///./lib/helpers/buildURL.js","webpack:///./lib/core/InterceptorManager.js","webpack:///./lib/core/dispatchRequest.js","webpack:///./lib/core/transformData.js","webpack:///./lib/cancel/isCancel.js","webpack:///./lib/defaults.js","webpack:///./lib/helpers/normalizeHeaderName.js","webpack:///./lib/adapters/xhr.js","webpack:///./lib/core/settle.js","webpack:///./lib/core/createError.js","webpack:///./lib/core/enhanceError.js","webpack:///./lib/helpers/cookies.js","webpack:///./lib/core/buildFullPath.js","webpack:///./lib/helpers/isAbsoluteURL.js","webpack:///./lib/helpers/combineURLs.js","webpack:///./lib/helpers/parseHeaders.js","webpack:///./lib/helpers/isURLSameOrigin.js","webpack:///./lib/core/mergeConfig.js","webpack:///./lib/cancel/Cancel.js","webpack:///./lib/cancel/CancelToken.js","webpack:///./lib/helpers/spread.js"],"names":["root","factory","exports","module","define","amd","this","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","createInstance","defaultConfig","context","Axios","instance","bind","prototype","request","utils","extend","mergeConfig","defaults","axios","create","instanceConfig","Cancel","CancelToken","isCancel","all","promises","Promise","spread","default","isArray","val","toString","isUndefined","isBuffer","constructor","isArrayBuffer","isFormData","FormData","isArrayBufferView","result","ArrayBuffer","isView","buffer","isString","isNumber","isObject","isPlainObject","Object","getPrototypeOf","isDate","isFile","isBlob","isFunction","isStream","pipe","isURLSearchParams","URLSearchParams","trim","str","replace","isStandardBrowserEnv","navigator","product","window","document","forEach","obj","fn","i","l","length","key","hasOwnProperty","merge","assignValue","slice","arguments","a","b","thisArg","stripBOM","content","charCodeAt","args","Array","apply","interceptors","InterceptorManager","response","buildURL","dispatchRequest","config","url","method","toLowerCase","chain","undefined","promise","resolve","interceptor","unshift","fulfilled","rejected","push","then","shift","getUri","params","paramsSerializer","data","encode","encodeURIComponent","serializedParams","parts","v","toISOString","JSON","stringify","join","hashmarkIndex","indexOf","handlers","use","eject","h","throwIfCancellationRequested","cancelToken","throwIfRequested","transformData","headers","transformRequest","common","adapter","transformResponse","reason","reject","fns","value","__CANCEL__","setContentTypeIfUnset","getDefaultAdapter","XMLHttpRequest","process","normalizeHeaderName","DEFAULT_CONTENT_TYPE","Content-Type","parse","e","timeout","xsrfCookieName","xsrfHeaderName","maxContentLength","maxBodyLength","validateStatus","status","Accept","normalizedName","name","toUpperCase","settle","cookies","buildFullPath","parseHeaders","isURLSameOrigin","createError","requestData","requestHeaders","auth","username","password","unescape","Authorization","btoa","fullPath","baseURL","open","onreadystatechange","readyState","responseURL","responseHeaders","getAllResponseHeaders","responseData","responseType","responseText","statusText","onabort","onerror","ontimeout","timeoutErrorMessage","xsrfValue","withCredentials","read","setRequestHeader","onDownloadProgress","addEventListener","onUploadProgress","upload","cancel","abort","send","enhanceError","message","code","error","Error","isAxiosError","toJSON","description","number","fileName","lineNumber","columnNumber","stack","write","expires","path","domain","secure","cookie","Date","toGMTString","match","RegExp","decodeURIComponent","remove","now","isAbsoluteURL","combineURLs","requestedURL","test","relativeURL","ignoreDuplicateOf","parsed","split","line","substr","concat","resolveURL","href","msie","urlParsingNode","setAttribute","protocol","host","search","hash","hostname","port","pathname","charAt","originURL","userAgent","createElement","location","requestURL","config1","config2","getMergedValue","target","source","mergeDeepProperties","prop","valueFromConfig2Keys","mergeDeepPropertiesKeys","defaultToConfig2Keys","directMergeKeys","axiosKeys","otherKeys","keys","filter","executor","TypeError","resolvePromise","token","callback","arr"],"mappings":"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","file":"axios.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"axios\"] = factory();\n\telse\n\t\troot[\"axios\"] = factory();\n})(this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"axios\"] = factory();\n\telse\n\t\troot[\"axios\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(1);\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\tvar bind = __webpack_require__(3);\n\tvar Axios = __webpack_require__(4);\n\tvar mergeConfig = __webpack_require__(22);\n\tvar defaults = __webpack_require__(10);\n\t\n\t/**\n\t * Create an instance of Axios\n\t *\n\t * @param {Object} defaultConfig The default config for the instance\n\t * @return {Axios} A new instance of Axios\n\t */\n\tfunction createInstance(defaultConfig) {\n\t var context = new Axios(defaultConfig);\n\t var instance = bind(Axios.prototype.request, context);\n\t\n\t // Copy axios.prototype to instance\n\t utils.extend(instance, Axios.prototype, context);\n\t\n\t // Copy context to instance\n\t utils.extend(instance, context);\n\t\n\t return instance;\n\t}\n\t\n\t// Create the default instance to be exported\n\tvar axios = createInstance(defaults);\n\t\n\t// Expose Axios class to allow class inheritance\n\taxios.Axios = Axios;\n\t\n\t// Factory for creating new instances\n\taxios.create = function create(instanceConfig) {\n\t return createInstance(mergeConfig(axios.defaults, instanceConfig));\n\t};\n\t\n\t// Expose Cancel & CancelToken\n\taxios.Cancel = __webpack_require__(23);\n\taxios.CancelToken = __webpack_require__(24);\n\taxios.isCancel = __webpack_require__(9);\n\t\n\t// Expose all/spread\n\taxios.all = function all(promises) {\n\t return Promise.all(promises);\n\t};\n\taxios.spread = __webpack_require__(25);\n\t\n\tmodule.exports = axios;\n\t\n\t// Allow use of default import syntax in TypeScript\n\tmodule.exports.default = axios;\n\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar bind = __webpack_require__(3);\n\t\n\t/*global toString:true*/\n\t\n\t// utils is a library of generic helper functions non-specific to axios\n\t\n\tvar toString = Object.prototype.toString;\n\t\n\t/**\n\t * Determine if a value is an Array\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is an Array, otherwise false\n\t */\n\tfunction isArray(val) {\n\t return toString.call(val) === '[object Array]';\n\t}\n\t\n\t/**\n\t * Determine if a value is undefined\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if the value is undefined, otherwise false\n\t */\n\tfunction isUndefined(val) {\n\t return typeof val === 'undefined';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Buffer\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Buffer, otherwise false\n\t */\n\tfunction isBuffer(val) {\n\t return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n\t && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val);\n\t}\n\t\n\t/**\n\t * Determine if a value is an ArrayBuffer\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n\t */\n\tfunction isArrayBuffer(val) {\n\t return toString.call(val) === '[object ArrayBuffer]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a FormData\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is an FormData, otherwise false\n\t */\n\tfunction isFormData(val) {\n\t return (typeof FormData !== 'undefined') && (val instanceof FormData);\n\t}\n\t\n\t/**\n\t * Determine if a value is a view on an ArrayBuffer\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n\t */\n\tfunction isArrayBufferView(val) {\n\t var result;\n\t if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n\t result = ArrayBuffer.isView(val);\n\t } else {\n\t result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\n\t }\n\t return result;\n\t}\n\t\n\t/**\n\t * Determine if a value is a String\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a String, otherwise false\n\t */\n\tfunction isString(val) {\n\t return typeof val === 'string';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Number\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Number, otherwise false\n\t */\n\tfunction isNumber(val) {\n\t return typeof val === 'number';\n\t}\n\t\n\t/**\n\t * Determine if a value is an Object\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is an Object, otherwise false\n\t */\n\tfunction isObject(val) {\n\t return val !== null && typeof val === 'object';\n\t}\n\t\n\t/**\n\t * Determine if a value is a plain Object\n\t *\n\t * @param {Object} val The value to test\n\t * @return {boolean} True if value is a plain Object, otherwise false\n\t */\n\tfunction isPlainObject(val) {\n\t if (toString.call(val) !== '[object Object]') {\n\t return false;\n\t }\n\t\n\t var prototype = Object.getPrototypeOf(val);\n\t return prototype === null || prototype === Object.prototype;\n\t}\n\t\n\t/**\n\t * Determine if a value is a Date\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Date, otherwise false\n\t */\n\tfunction isDate(val) {\n\t return toString.call(val) === '[object Date]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a File\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a File, otherwise false\n\t */\n\tfunction isFile(val) {\n\t return toString.call(val) === '[object File]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Blob\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Blob, otherwise false\n\t */\n\tfunction isBlob(val) {\n\t return toString.call(val) === '[object Blob]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Function\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Function, otherwise false\n\t */\n\tfunction isFunction(val) {\n\t return toString.call(val) === '[object Function]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Stream\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Stream, otherwise false\n\t */\n\tfunction isStream(val) {\n\t return isObject(val) && isFunction(val.pipe);\n\t}\n\t\n\t/**\n\t * Determine if a value is a URLSearchParams object\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n\t */\n\tfunction isURLSearchParams(val) {\n\t return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;\n\t}\n\t\n\t/**\n\t * Trim excess whitespace off the beginning and end of a string\n\t *\n\t * @param {String} str The String to trim\n\t * @returns {String} The String freed of excess whitespace\n\t */\n\tfunction trim(str) {\n\t return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\n\t}\n\t\n\t/**\n\t * Determine if we're running in a standard browser environment\n\t *\n\t * This allows axios to run in a web worker, and react-native.\n\t * Both environments support XMLHttpRequest, but not fully standard globals.\n\t *\n\t * web workers:\n\t * typeof window -> undefined\n\t * typeof document -> undefined\n\t *\n\t * react-native:\n\t * navigator.product -> 'ReactNative'\n\t * nativescript\n\t * navigator.product -> 'NativeScript' or 'NS'\n\t */\n\tfunction isStandardBrowserEnv() {\n\t if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' ||\n\t navigator.product === 'NativeScript' ||\n\t navigator.product === 'NS')) {\n\t return false;\n\t }\n\t return (\n\t typeof window !== 'undefined' &&\n\t typeof document !== 'undefined'\n\t );\n\t}\n\t\n\t/**\n\t * Iterate over an Array or an Object invoking a function for each item.\n\t *\n\t * If `obj` is an Array callback will be called passing\n\t * the value, index, and complete array for each item.\n\t *\n\t * If 'obj' is an Object callback will be called passing\n\t * the value, key, and complete object for each property.\n\t *\n\t * @param {Object|Array} obj The object to iterate\n\t * @param {Function} fn The callback to invoke for each item\n\t */\n\tfunction forEach(obj, fn) {\n\t // Don't bother if no value provided\n\t if (obj === null || typeof obj === 'undefined') {\n\t return;\n\t }\n\t\n\t // Force an array if not already something iterable\n\t if (typeof obj !== 'object') {\n\t /*eslint no-param-reassign:0*/\n\t obj = [obj];\n\t }\n\t\n\t if (isArray(obj)) {\n\t // Iterate over array values\n\t for (var i = 0, l = obj.length; i < l; i++) {\n\t fn.call(null, obj[i], i, obj);\n\t }\n\t } else {\n\t // Iterate over object keys\n\t for (var key in obj) {\n\t if (Object.prototype.hasOwnProperty.call(obj, key)) {\n\t fn.call(null, obj[key], key, obj);\n\t }\n\t }\n\t }\n\t}\n\t\n\t/**\n\t * Accepts varargs expecting each argument to be an object, then\n\t * immutably merges the properties of each object and returns result.\n\t *\n\t * When multiple objects contain the same key the later object in\n\t * the arguments list will take precedence.\n\t *\n\t * Example:\n\t *\n\t * ```js\n\t * var result = merge({foo: 123}, {foo: 456});\n\t * console.log(result.foo); // outputs 456\n\t * ```\n\t *\n\t * @param {Object} obj1 Object to merge\n\t * @returns {Object} Result of all merge properties\n\t */\n\tfunction merge(/* obj1, obj2, obj3, ... */) {\n\t var result = {};\n\t function assignValue(val, key) {\n\t if (isPlainObject(result[key]) && isPlainObject(val)) {\n\t result[key] = merge(result[key], val);\n\t } else if (isPlainObject(val)) {\n\t result[key] = merge({}, val);\n\t } else if (isArray(val)) {\n\t result[key] = val.slice();\n\t } else {\n\t result[key] = val;\n\t }\n\t }\n\t\n\t for (var i = 0, l = arguments.length; i < l; i++) {\n\t forEach(arguments[i], assignValue);\n\t }\n\t return result;\n\t}\n\t\n\t/**\n\t * Extends object a by mutably adding to it the properties of object b.\n\t *\n\t * @param {Object} a The object to be extended\n\t * @param {Object} b The object to copy properties from\n\t * @param {Object} thisArg The object to bind function to\n\t * @return {Object} The resulting value of object a\n\t */\n\tfunction extend(a, b, thisArg) {\n\t forEach(b, function assignValue(val, key) {\n\t if (thisArg && typeof val === 'function') {\n\t a[key] = bind(val, thisArg);\n\t } else {\n\t a[key] = val;\n\t }\n\t });\n\t return a;\n\t}\n\t\n\t/**\n\t * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n\t *\n\t * @param {string} content with BOM\n\t * @return {string} content value without BOM\n\t */\n\tfunction stripBOM(content) {\n\t if (content.charCodeAt(0) === 0xFEFF) {\n\t content = content.slice(1);\n\t }\n\t return content;\n\t}\n\t\n\tmodule.exports = {\n\t isArray: isArray,\n\t isArrayBuffer: isArrayBuffer,\n\t isBuffer: isBuffer,\n\t isFormData: isFormData,\n\t isArrayBufferView: isArrayBufferView,\n\t isString: isString,\n\t isNumber: isNumber,\n\t isObject: isObject,\n\t isPlainObject: isPlainObject,\n\t isUndefined: isUndefined,\n\t isDate: isDate,\n\t isFile: isFile,\n\t isBlob: isBlob,\n\t isFunction: isFunction,\n\t isStream: isStream,\n\t isURLSearchParams: isURLSearchParams,\n\t isStandardBrowserEnv: isStandardBrowserEnv,\n\t forEach: forEach,\n\t merge: merge,\n\t extend: extend,\n\t trim: trim,\n\t stripBOM: stripBOM\n\t};\n\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\tmodule.exports = function bind(fn, thisArg) {\n\t return function wrap() {\n\t var args = new Array(arguments.length);\n\t for (var i = 0; i < args.length; i++) {\n\t args[i] = arguments[i];\n\t }\n\t return fn.apply(thisArg, args);\n\t };\n\t};\n\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\tvar buildURL = __webpack_require__(5);\n\tvar InterceptorManager = __webpack_require__(6);\n\tvar dispatchRequest = __webpack_require__(7);\n\tvar mergeConfig = __webpack_require__(22);\n\t\n\t/**\n\t * Create a new instance of Axios\n\t *\n\t * @param {Object} instanceConfig The default config for the instance\n\t */\n\tfunction Axios(instanceConfig) {\n\t this.defaults = instanceConfig;\n\t this.interceptors = {\n\t request: new InterceptorManager(),\n\t response: new InterceptorManager()\n\t };\n\t}\n\t\n\t/**\n\t * Dispatch a request\n\t *\n\t * @param {Object} config The config specific for this request (merged with this.defaults)\n\t */\n\tAxios.prototype.request = function request(config) {\n\t /*eslint no-param-reassign:0*/\n\t // Allow for axios('example/url'[, config]) a la fetch API\n\t if (typeof config === 'string') {\n\t config = arguments[1] || {};\n\t config.url = arguments[0];\n\t } else {\n\t config = config || {};\n\t }\n\t\n\t config = mergeConfig(this.defaults, config);\n\t\n\t // Set config.method\n\t if (config.method) {\n\t config.method = config.method.toLowerCase();\n\t } else if (this.defaults.method) {\n\t config.method = this.defaults.method.toLowerCase();\n\t } else {\n\t config.method = 'get';\n\t }\n\t\n\t // Hook up interceptors middleware\n\t var chain = [dispatchRequest, undefined];\n\t var promise = Promise.resolve(config);\n\t\n\t this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n\t chain.unshift(interceptor.fulfilled, interceptor.rejected);\n\t });\n\t\n\t this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n\t chain.push(interceptor.fulfilled, interceptor.rejected);\n\t });\n\t\n\t while (chain.length) {\n\t promise = promise.then(chain.shift(), chain.shift());\n\t }\n\t\n\t return promise;\n\t};\n\t\n\tAxios.prototype.getUri = function getUri(config) {\n\t config = mergeConfig(this.defaults, config);\n\t return buildURL(config.url, config.params, config.paramsSerializer).replace(/^\\?/, '');\n\t};\n\t\n\t// Provide aliases for supported request methods\n\tutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n\t /*eslint func-names:0*/\n\t Axios.prototype[method] = function(url, config) {\n\t return this.request(mergeConfig(config || {}, {\n\t method: method,\n\t url: url,\n\t data: (config || {}).data\n\t }));\n\t };\n\t});\n\t\n\tutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n\t /*eslint func-names:0*/\n\t Axios.prototype[method] = function(url, data, config) {\n\t return this.request(mergeConfig(config || {}, {\n\t method: method,\n\t url: url,\n\t data: data\n\t }));\n\t };\n\t});\n\t\n\tmodule.exports = Axios;\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\t\n\tfunction encode(val) {\n\t return encodeURIComponent(val).\n\t replace(/%3A/gi, ':').\n\t replace(/%24/g, '$').\n\t replace(/%2C/gi, ',').\n\t replace(/%20/g, '+').\n\t replace(/%5B/gi, '[').\n\t replace(/%5D/gi, ']');\n\t}\n\t\n\t/**\n\t * Build a URL by appending params to the end\n\t *\n\t * @param {string} url The base of the url (e.g., http://www.google.com)\n\t * @param {object} [params] The params to be appended\n\t * @returns {string} The formatted url\n\t */\n\tmodule.exports = function buildURL(url, params, paramsSerializer) {\n\t /*eslint no-param-reassign:0*/\n\t if (!params) {\n\t return url;\n\t }\n\t\n\t var serializedParams;\n\t if (paramsSerializer) {\n\t serializedParams = paramsSerializer(params);\n\t } else if (utils.isURLSearchParams(params)) {\n\t serializedParams = params.toString();\n\t } else {\n\t var parts = [];\n\t\n\t utils.forEach(params, function serialize(val, key) {\n\t if (val === null || typeof val === 'undefined') {\n\t return;\n\t }\n\t\n\t if (utils.isArray(val)) {\n\t key = key + '[]';\n\t } else {\n\t val = [val];\n\t }\n\t\n\t utils.forEach(val, function parseValue(v) {\n\t if (utils.isDate(v)) {\n\t v = v.toISOString();\n\t } else if (utils.isObject(v)) {\n\t v = JSON.stringify(v);\n\t }\n\t parts.push(encode(key) + '=' + encode(v));\n\t });\n\t });\n\t\n\t serializedParams = parts.join('&');\n\t }\n\t\n\t if (serializedParams) {\n\t var hashmarkIndex = url.indexOf('#');\n\t if (hashmarkIndex !== -1) {\n\t url = url.slice(0, hashmarkIndex);\n\t }\n\t\n\t url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n\t }\n\t\n\t return url;\n\t};\n\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\t\n\tfunction InterceptorManager() {\n\t this.handlers = [];\n\t}\n\t\n\t/**\n\t * Add a new interceptor to the stack\n\t *\n\t * @param {Function} fulfilled The function to handle `then` for a `Promise`\n\t * @param {Function} rejected The function to handle `reject` for a `Promise`\n\t *\n\t * @return {Number} An ID used to remove interceptor later\n\t */\n\tInterceptorManager.prototype.use = function use(fulfilled, rejected) {\n\t this.handlers.push({\n\t fulfilled: fulfilled,\n\t rejected: rejected\n\t });\n\t return this.handlers.length - 1;\n\t};\n\t\n\t/**\n\t * Remove an interceptor from the stack\n\t *\n\t * @param {Number} id The ID that was returned by `use`\n\t */\n\tInterceptorManager.prototype.eject = function eject(id) {\n\t if (this.handlers[id]) {\n\t this.handlers[id] = null;\n\t }\n\t};\n\t\n\t/**\n\t * Iterate over all the registered interceptors\n\t *\n\t * This method is particularly useful for skipping over any\n\t * interceptors that may have become `null` calling `eject`.\n\t *\n\t * @param {Function} fn The function to call for each interceptor\n\t */\n\tInterceptorManager.prototype.forEach = function forEach(fn) {\n\t utils.forEach(this.handlers, function forEachHandler(h) {\n\t if (h !== null) {\n\t fn(h);\n\t }\n\t });\n\t};\n\t\n\tmodule.exports = InterceptorManager;\n\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\tvar transformData = __webpack_require__(8);\n\tvar isCancel = __webpack_require__(9);\n\tvar defaults = __webpack_require__(10);\n\t\n\t/**\n\t * Throws a `Cancel` if cancellation has been requested.\n\t */\n\tfunction throwIfCancellationRequested(config) {\n\t if (config.cancelToken) {\n\t config.cancelToken.throwIfRequested();\n\t }\n\t}\n\t\n\t/**\n\t * Dispatch a request to the server using the configured adapter.\n\t *\n\t * @param {object} config The config that is to be used for the request\n\t * @returns {Promise} The Promise to be fulfilled\n\t */\n\tmodule.exports = function dispatchRequest(config) {\n\t throwIfCancellationRequested(config);\n\t\n\t // Ensure headers exist\n\t config.headers = config.headers || {};\n\t\n\t // Transform request data\n\t config.data = transformData(\n\t config.data,\n\t config.headers,\n\t config.transformRequest\n\t );\n\t\n\t // Flatten headers\n\t config.headers = utils.merge(\n\t config.headers.common || {},\n\t config.headers[config.method] || {},\n\t config.headers\n\t );\n\t\n\t utils.forEach(\n\t ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n\t function cleanHeaderConfig(method) {\n\t delete config.headers[method];\n\t }\n\t );\n\t\n\t var adapter = config.adapter || defaults.adapter;\n\t\n\t return adapter(config).then(function onAdapterResolution(response) {\n\t throwIfCancellationRequested(config);\n\t\n\t // Transform response data\n\t response.data = transformData(\n\t response.data,\n\t response.headers,\n\t config.transformResponse\n\t );\n\t\n\t return response;\n\t }, function onAdapterRejection(reason) {\n\t if (!isCancel(reason)) {\n\t throwIfCancellationRequested(config);\n\t\n\t // Transform response data\n\t if (reason && reason.response) {\n\t reason.response.data = transformData(\n\t reason.response.data,\n\t reason.response.headers,\n\t config.transformResponse\n\t );\n\t }\n\t }\n\t\n\t return Promise.reject(reason);\n\t });\n\t};\n\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\t\n\t/**\n\t * Transform the data for a request or a response\n\t *\n\t * @param {Object|String} data The data to be transformed\n\t * @param {Array} headers The headers for the request or response\n\t * @param {Array|Function} fns A single function or Array of functions\n\t * @returns {*} The resulting transformed data\n\t */\n\tmodule.exports = function transformData(data, headers, fns) {\n\t /*eslint no-param-reassign:0*/\n\t utils.forEach(fns, function transform(fn) {\n\t data = fn(data, headers);\n\t });\n\t\n\t return data;\n\t};\n\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\tmodule.exports = function isCancel(value) {\n\t return !!(value && value.__CANCEL__);\n\t};\n\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\tvar normalizeHeaderName = __webpack_require__(11);\n\t\n\tvar DEFAULT_CONTENT_TYPE = {\n\t 'Content-Type': 'application/x-www-form-urlencoded'\n\t};\n\t\n\tfunction setContentTypeIfUnset(headers, value) {\n\t if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n\t headers['Content-Type'] = value;\n\t }\n\t}\n\t\n\tfunction getDefaultAdapter() {\n\t var adapter;\n\t if (typeof XMLHttpRequest !== 'undefined') {\n\t // For browsers use XHR adapter\n\t adapter = __webpack_require__(12);\n\t } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {\n\t // For node use HTTP adapter\n\t adapter = __webpack_require__(12);\n\t }\n\t return adapter;\n\t}\n\t\n\tvar defaults = {\n\t adapter: getDefaultAdapter(),\n\t\n\t transformRequest: [function transformRequest(data, headers) {\n\t normalizeHeaderName(headers, 'Accept');\n\t normalizeHeaderName(headers, 'Content-Type');\n\t if (utils.isFormData(data) ||\n\t utils.isArrayBuffer(data) ||\n\t utils.isBuffer(data) ||\n\t utils.isStream(data) ||\n\t utils.isFile(data) ||\n\t utils.isBlob(data)\n\t ) {\n\t return data;\n\t }\n\t if (utils.isArrayBufferView(data)) {\n\t return data.buffer;\n\t }\n\t if (utils.isURLSearchParams(data)) {\n\t setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n\t return data.toString();\n\t }\n\t if (utils.isObject(data)) {\n\t setContentTypeIfUnset(headers, 'application/json;charset=utf-8');\n\t return JSON.stringify(data);\n\t }\n\t return data;\n\t }],\n\t\n\t transformResponse: [function transformResponse(data) {\n\t /*eslint no-param-reassign:0*/\n\t if (typeof data === 'string') {\n\t try {\n\t data = JSON.parse(data);\n\t } catch (e) { /* Ignore */ }\n\t }\n\t return data;\n\t }],\n\t\n\t /**\n\t * A timeout in milliseconds to abort a request. If set to 0 (default) a\n\t * timeout is not created.\n\t */\n\t timeout: 0,\n\t\n\t xsrfCookieName: 'XSRF-TOKEN',\n\t xsrfHeaderName: 'X-XSRF-TOKEN',\n\t\n\t maxContentLength: -1,\n\t maxBodyLength: -1,\n\t\n\t validateStatus: function validateStatus(status) {\n\t return status >= 200 && status < 300;\n\t }\n\t};\n\t\n\tdefaults.headers = {\n\t common: {\n\t 'Accept': 'application/json, text/plain, */*'\n\t }\n\t};\n\t\n\tutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n\t defaults.headers[method] = {};\n\t});\n\t\n\tutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n\t defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n\t});\n\t\n\tmodule.exports = defaults;\n\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\t\n\tmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n\t utils.forEach(headers, function processHeader(value, name) {\n\t if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n\t headers[normalizedName] = value;\n\t delete headers[name];\n\t }\n\t });\n\t};\n\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\tvar settle = __webpack_require__(13);\n\tvar cookies = __webpack_require__(16);\n\tvar buildURL = __webpack_require__(5);\n\tvar buildFullPath = __webpack_require__(17);\n\tvar parseHeaders = __webpack_require__(20);\n\tvar isURLSameOrigin = __webpack_require__(21);\n\tvar createError = __webpack_require__(14);\n\t\n\tmodule.exports = function xhrAdapter(config) {\n\t return new Promise(function dispatchXhrRequest(resolve, reject) {\n\t var requestData = config.data;\n\t var requestHeaders = config.headers;\n\t\n\t if (utils.isFormData(requestData)) {\n\t delete requestHeaders['Content-Type']; // Let the browser set it\n\t }\n\t\n\t var request = new XMLHttpRequest();\n\t\n\t // HTTP basic authentication\n\t if (config.auth) {\n\t var username = config.auth.username || '';\n\t var password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : '';\n\t requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n\t }\n\t\n\t var fullPath = buildFullPath(config.baseURL, config.url);\n\t request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);\n\t\n\t // Set the request timeout in MS\n\t request.timeout = config.timeout;\n\t\n\t // Listen for ready state\n\t request.onreadystatechange = function handleLoad() {\n\t if (!request || request.readyState !== 4) {\n\t return;\n\t }\n\t\n\t // The request errored out and we didn't get a response, this will be\n\t // handled by onerror instead\n\t // With one exception: request that using file: protocol, most browsers\n\t // will return status as 0 even though it's a successful request\n\t if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n\t return;\n\t }\n\t\n\t // Prepare the response\n\t var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n\t var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;\n\t var response = {\n\t data: responseData,\n\t status: request.status,\n\t statusText: request.statusText,\n\t headers: responseHeaders,\n\t config: config,\n\t request: request\n\t };\n\t\n\t settle(resolve, reject, response);\n\t\n\t // Clean up request\n\t request = null;\n\t };\n\t\n\t // Handle browser request cancellation (as opposed to a manual cancellation)\n\t request.onabort = function handleAbort() {\n\t if (!request) {\n\t return;\n\t }\n\t\n\t reject(createError('Request aborted', config, 'ECONNABORTED', request));\n\t\n\t // Clean up request\n\t request = null;\n\t };\n\t\n\t // Handle low level network errors\n\t request.onerror = function handleError() {\n\t // Real errors are hidden from us by the browser\n\t // onerror should only fire if it's a network error\n\t reject(createError('Network Error', config, null, request));\n\t\n\t // Clean up request\n\t request = null;\n\t };\n\t\n\t // Handle timeout\n\t request.ontimeout = function handleTimeout() {\n\t var timeoutErrorMessage = 'timeout of ' + config.timeout + 'ms exceeded';\n\t if (config.timeoutErrorMessage) {\n\t timeoutErrorMessage = config.timeoutErrorMessage;\n\t }\n\t reject(createError(timeoutErrorMessage, config, 'ECONNABORTED',\n\t request));\n\t\n\t // Clean up request\n\t request = null;\n\t };\n\t\n\t // Add xsrf header\n\t // This is only done if running in a standard browser environment.\n\t // Specifically not if we're in a web worker, or react-native.\n\t if (utils.isStandardBrowserEnv()) {\n\t // Add xsrf header\n\t var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName ?\n\t cookies.read(config.xsrfCookieName) :\n\t undefined;\n\t\n\t if (xsrfValue) {\n\t requestHeaders[config.xsrfHeaderName] = xsrfValue;\n\t }\n\t }\n\t\n\t // Add headers to the request\n\t if ('setRequestHeader' in request) {\n\t utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n\t if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n\t // Remove Content-Type if data is undefined\n\t delete requestHeaders[key];\n\t } else {\n\t // Otherwise add header to the request\n\t request.setRequestHeader(key, val);\n\t }\n\t });\n\t }\n\t\n\t // Add withCredentials to request if needed\n\t if (!utils.isUndefined(config.withCredentials)) {\n\t request.withCredentials = !!config.withCredentials;\n\t }\n\t\n\t // Add responseType to request if needed\n\t if (config.responseType) {\n\t try {\n\t request.responseType = config.responseType;\n\t } catch (e) {\n\t // Expected DOMException thrown by browsers not compatible XMLHttpRequest Level 2.\n\t // But, this can be suppressed for 'json' type as it can be parsed by default 'transformResponse' function.\n\t if (config.responseType !== 'json') {\n\t throw e;\n\t }\n\t }\n\t }\n\t\n\t // Handle progress if needed\n\t if (typeof config.onDownloadProgress === 'function') {\n\t request.addEventListener('progress', config.onDownloadProgress);\n\t }\n\t\n\t // Not all browsers support upload events\n\t if (typeof config.onUploadProgress === 'function' && request.upload) {\n\t request.upload.addEventListener('progress', config.onUploadProgress);\n\t }\n\t\n\t if (config.cancelToken) {\n\t // Handle cancellation\n\t config.cancelToken.promise.then(function onCanceled(cancel) {\n\t if (!request) {\n\t return;\n\t }\n\t\n\t request.abort();\n\t reject(cancel);\n\t // Clean up request\n\t request = null;\n\t });\n\t }\n\t\n\t if (!requestData) {\n\t requestData = null;\n\t }\n\t\n\t // Send the request\n\t request.send(requestData);\n\t });\n\t};\n\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar createError = __webpack_require__(14);\n\t\n\t/**\n\t * Resolve or reject a Promise based on response status.\n\t *\n\t * @param {Function} resolve A function that resolves the promise.\n\t * @param {Function} reject A function that rejects the promise.\n\t * @param {object} response The response.\n\t */\n\tmodule.exports = function settle(resolve, reject, response) {\n\t var validateStatus = response.config.validateStatus;\n\t if (!response.status || !validateStatus || validateStatus(response.status)) {\n\t resolve(response);\n\t } else {\n\t reject(createError(\n\t 'Request failed with status code ' + response.status,\n\t response.config,\n\t null,\n\t response.request,\n\t response\n\t ));\n\t }\n\t};\n\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar enhanceError = __webpack_require__(15);\n\t\n\t/**\n\t * Create an Error with the specified message, config, error code, request and response.\n\t *\n\t * @param {string} message The error message.\n\t * @param {Object} config The config.\n\t * @param {string} [code] The error code (for example, 'ECONNABORTED').\n\t * @param {Object} [request] The request.\n\t * @param {Object} [response] The response.\n\t * @returns {Error} The created error.\n\t */\n\tmodule.exports = function createError(message, config, code, request, response) {\n\t var error = new Error(message);\n\t return enhanceError(error, config, code, request, response);\n\t};\n\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\t/**\n\t * Update an Error with the specified config, error code, and response.\n\t *\n\t * @param {Error} error The error to update.\n\t * @param {Object} config The config.\n\t * @param {string} [code] The error code (for example, 'ECONNABORTED').\n\t * @param {Object} [request] The request.\n\t * @param {Object} [response] The response.\n\t * @returns {Error} The error.\n\t */\n\tmodule.exports = function enhanceError(error, config, code, request, response) {\n\t error.config = config;\n\t if (code) {\n\t error.code = code;\n\t }\n\t\n\t error.request = request;\n\t error.response = response;\n\t error.isAxiosError = true;\n\t\n\t error.toJSON = function toJSON() {\n\t return {\n\t // Standard\n\t message: this.message,\n\t name: this.name,\n\t // Microsoft\n\t description: this.description,\n\t number: this.number,\n\t // Mozilla\n\t fileName: this.fileName,\n\t lineNumber: this.lineNumber,\n\t columnNumber: this.columnNumber,\n\t stack: this.stack,\n\t // Axios\n\t config: this.config,\n\t code: this.code\n\t };\n\t };\n\t return error;\n\t};\n\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\t\n\tmodule.exports = (\n\t utils.isStandardBrowserEnv() ?\n\t\n\t // Standard browser envs support document.cookie\n\t (function standardBrowserEnv() {\n\t return {\n\t write: function write(name, value, expires, path, domain, secure) {\n\t var cookie = [];\n\t cookie.push(name + '=' + encodeURIComponent(value));\n\t\n\t if (utils.isNumber(expires)) {\n\t cookie.push('expires=' + new Date(expires).toGMTString());\n\t }\n\t\n\t if (utils.isString(path)) {\n\t cookie.push('path=' + path);\n\t }\n\t\n\t if (utils.isString(domain)) {\n\t cookie.push('domain=' + domain);\n\t }\n\t\n\t if (secure === true) {\n\t cookie.push('secure');\n\t }\n\t\n\t document.cookie = cookie.join('; ');\n\t },\n\t\n\t read: function read(name) {\n\t var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n\t return (match ? decodeURIComponent(match[3]) : null);\n\t },\n\t\n\t remove: function remove(name) {\n\t this.write(name, '', Date.now() - 86400000);\n\t }\n\t };\n\t })() :\n\t\n\t // Non standard browser env (web workers, react-native) lack needed support.\n\t (function nonStandardBrowserEnv() {\n\t return {\n\t write: function write() {},\n\t read: function read() { return null; },\n\t remove: function remove() {}\n\t };\n\t })()\n\t);\n\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar isAbsoluteURL = __webpack_require__(18);\n\tvar combineURLs = __webpack_require__(19);\n\t\n\t/**\n\t * Creates a new URL by combining the baseURL with the requestedURL,\n\t * only when the requestedURL is not already an absolute URL.\n\t * If the requestURL is absolute, this function returns the requestedURL untouched.\n\t *\n\t * @param {string} baseURL The base URL\n\t * @param {string} requestedURL Absolute or relative URL to combine\n\t * @returns {string} The combined full path\n\t */\n\tmodule.exports = function buildFullPath(baseURL, requestedURL) {\n\t if (baseURL && !isAbsoluteURL(requestedURL)) {\n\t return combineURLs(baseURL, requestedURL);\n\t }\n\t return requestedURL;\n\t};\n\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\t/**\n\t * Determines whether the specified URL is absolute\n\t *\n\t * @param {string} url The URL to test\n\t * @returns {boolean} True if the specified URL is absolute, otherwise false\n\t */\n\tmodule.exports = function isAbsoluteURL(url) {\n\t // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n\t // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n\t // by any combination of letters, digits, plus, period, or hyphen.\n\t return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\n\t};\n\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\t/**\n\t * Creates a new URL by combining the specified URLs\n\t *\n\t * @param {string} baseURL The base URL\n\t * @param {string} relativeURL The relative URL\n\t * @returns {string} The combined URL\n\t */\n\tmodule.exports = function combineURLs(baseURL, relativeURL) {\n\t return relativeURL\n\t ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n\t : baseURL;\n\t};\n\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\t\n\t// Headers whose duplicates are ignored by node\n\t// c.f. https://nodejs.org/api/http.html#http_message_headers\n\tvar ignoreDuplicateOf = [\n\t 'age', 'authorization', 'content-length', 'content-type', 'etag',\n\t 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n\t 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n\t 'referer', 'retry-after', 'user-agent'\n\t];\n\t\n\t/**\n\t * Parse headers into an object\n\t *\n\t * ```\n\t * Date: Wed, 27 Aug 2014 08:58:49 GMT\n\t * Content-Type: application/json\n\t * Connection: keep-alive\n\t * Transfer-Encoding: chunked\n\t * ```\n\t *\n\t * @param {String} headers Headers needing to be parsed\n\t * @returns {Object} Headers parsed into an object\n\t */\n\tmodule.exports = function parseHeaders(headers) {\n\t var parsed = {};\n\t var key;\n\t var val;\n\t var i;\n\t\n\t if (!headers) { return parsed; }\n\t\n\t utils.forEach(headers.split('\\n'), function parser(line) {\n\t i = line.indexOf(':');\n\t key = utils.trim(line.substr(0, i)).toLowerCase();\n\t val = utils.trim(line.substr(i + 1));\n\t\n\t if (key) {\n\t if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {\n\t return;\n\t }\n\t if (key === 'set-cookie') {\n\t parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);\n\t } else {\n\t parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n\t }\n\t }\n\t });\n\t\n\t return parsed;\n\t};\n\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\t\n\tmodule.exports = (\n\t utils.isStandardBrowserEnv() ?\n\t\n\t // Standard browser envs have full support of the APIs needed to test\n\t // whether the request URL is of the same origin as current location.\n\t (function standardBrowserEnv() {\n\t var msie = /(msie|trident)/i.test(navigator.userAgent);\n\t var urlParsingNode = document.createElement('a');\n\t var originURL;\n\t\n\t /**\n\t * Parse a URL to discover it's components\n\t *\n\t * @param {String} url The URL to be parsed\n\t * @returns {Object}\n\t */\n\t function resolveURL(url) {\n\t var href = url;\n\t\n\t if (msie) {\n\t // IE needs attribute set twice to normalize properties\n\t urlParsingNode.setAttribute('href', href);\n\t href = urlParsingNode.href;\n\t }\n\t\n\t urlParsingNode.setAttribute('href', href);\n\t\n\t // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n\t return {\n\t href: urlParsingNode.href,\n\t protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n\t host: urlParsingNode.host,\n\t search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n\t hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n\t hostname: urlParsingNode.hostname,\n\t port: urlParsingNode.port,\n\t pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n\t urlParsingNode.pathname :\n\t '/' + urlParsingNode.pathname\n\t };\n\t }\n\t\n\t originURL = resolveURL(window.location.href);\n\t\n\t /**\n\t * Determine if a URL shares the same origin as the current location\n\t *\n\t * @param {String} requestURL The URL to test\n\t * @returns {boolean} True if URL shares the same origin, otherwise false\n\t */\n\t return function isURLSameOrigin(requestURL) {\n\t var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n\t return (parsed.protocol === originURL.protocol &&\n\t parsed.host === originURL.host);\n\t };\n\t })() :\n\t\n\t // Non standard browser envs (web workers, react-native) lack needed support.\n\t (function nonStandardBrowserEnv() {\n\t return function isURLSameOrigin() {\n\t return true;\n\t };\n\t })()\n\t);\n\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\t\n\t/**\n\t * Config-specific merge-function which creates a new config-object\n\t * by merging two configuration objects together.\n\t *\n\t * @param {Object} config1\n\t * @param {Object} config2\n\t * @returns {Object} New object resulting from merging config2 to config1\n\t */\n\tmodule.exports = function mergeConfig(config1, config2) {\n\t // eslint-disable-next-line no-param-reassign\n\t config2 = config2 || {};\n\t var config = {};\n\t\n\t var valueFromConfig2Keys = ['url', 'method', 'data'];\n\t var mergeDeepPropertiesKeys = ['headers', 'auth', 'proxy', 'params'];\n\t var defaultToConfig2Keys = [\n\t 'baseURL', 'transformRequest', 'transformResponse', 'paramsSerializer',\n\t 'timeout', 'timeoutMessage', 'withCredentials', 'adapter', 'responseType', 'xsrfCookieName',\n\t 'xsrfHeaderName', 'onUploadProgress', 'onDownloadProgress', 'decompress',\n\t 'maxContentLength', 'maxBodyLength', 'maxRedirects', 'transport', 'httpAgent',\n\t 'httpsAgent', 'cancelToken', 'socketPath', 'responseEncoding'\n\t ];\n\t var directMergeKeys = ['validateStatus'];\n\t\n\t function getMergedValue(target, source) {\n\t if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n\t return utils.merge(target, source);\n\t } else if (utils.isPlainObject(source)) {\n\t return utils.merge({}, source);\n\t } else if (utils.isArray(source)) {\n\t return source.slice();\n\t }\n\t return source;\n\t }\n\t\n\t function mergeDeepProperties(prop) {\n\t if (!utils.isUndefined(config2[prop])) {\n\t config[prop] = getMergedValue(config1[prop], config2[prop]);\n\t } else if (!utils.isUndefined(config1[prop])) {\n\t config[prop] = getMergedValue(undefined, config1[prop]);\n\t }\n\t }\n\t\n\t utils.forEach(valueFromConfig2Keys, function valueFromConfig2(prop) {\n\t if (!utils.isUndefined(config2[prop])) {\n\t config[prop] = getMergedValue(undefined, config2[prop]);\n\t }\n\t });\n\t\n\t utils.forEach(mergeDeepPropertiesKeys, mergeDeepProperties);\n\t\n\t utils.forEach(defaultToConfig2Keys, function defaultToConfig2(prop) {\n\t if (!utils.isUndefined(config2[prop])) {\n\t config[prop] = getMergedValue(undefined, config2[prop]);\n\t } else if (!utils.isUndefined(config1[prop])) {\n\t config[prop] = getMergedValue(undefined, config1[prop]);\n\t }\n\t });\n\t\n\t utils.forEach(directMergeKeys, function merge(prop) {\n\t if (prop in config2) {\n\t config[prop] = getMergedValue(config1[prop], config2[prop]);\n\t } else if (prop in config1) {\n\t config[prop] = getMergedValue(undefined, config1[prop]);\n\t }\n\t });\n\t\n\t var axiosKeys = valueFromConfig2Keys\n\t .concat(mergeDeepPropertiesKeys)\n\t .concat(defaultToConfig2Keys)\n\t .concat(directMergeKeys);\n\t\n\t var otherKeys = Object\n\t .keys(config1)\n\t .concat(Object.keys(config2))\n\t .filter(function filterAxiosKeys(key) {\n\t return axiosKeys.indexOf(key) === -1;\n\t });\n\t\n\t utils.forEach(otherKeys, mergeDeepProperties);\n\t\n\t return config;\n\t};\n\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\t/**\n\t * A `Cancel` is an object that is thrown when an operation is canceled.\n\t *\n\t * @class\n\t * @param {string=} message The message.\n\t */\n\tfunction Cancel(message) {\n\t this.message = message;\n\t}\n\t\n\tCancel.prototype.toString = function toString() {\n\t return 'Cancel' + (this.message ? ': ' + this.message : '');\n\t};\n\t\n\tCancel.prototype.__CANCEL__ = true;\n\t\n\tmodule.exports = Cancel;\n\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar Cancel = __webpack_require__(23);\n\t\n\t/**\n\t * A `CancelToken` is an object that can be used to request cancellation of an operation.\n\t *\n\t * @class\n\t * @param {Function} executor The executor function.\n\t */\n\tfunction CancelToken(executor) {\n\t if (typeof executor !== 'function') {\n\t throw new TypeError('executor must be a function.');\n\t }\n\t\n\t var resolvePromise;\n\t this.promise = new Promise(function promiseExecutor(resolve) {\n\t resolvePromise = resolve;\n\t });\n\t\n\t var token = this;\n\t executor(function cancel(message) {\n\t if (token.reason) {\n\t // Cancellation has already been requested\n\t return;\n\t }\n\t\n\t token.reason = new Cancel(message);\n\t resolvePromise(token.reason);\n\t });\n\t}\n\t\n\t/**\n\t * Throws a `Cancel` if cancellation has been requested.\n\t */\n\tCancelToken.prototype.throwIfRequested = function throwIfRequested() {\n\t if (this.reason) {\n\t throw this.reason;\n\t }\n\t};\n\t\n\t/**\n\t * Returns an object that contains a new `CancelToken` and a function that, when called,\n\t * cancels the `CancelToken`.\n\t */\n\tCancelToken.source = function source() {\n\t var cancel;\n\t var token = new CancelToken(function executor(c) {\n\t cancel = c;\n\t });\n\t return {\n\t token: token,\n\t cancel: cancel\n\t };\n\t};\n\t\n\tmodule.exports = CancelToken;\n\n\n/***/ }),\n/* 25 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\t/**\n\t * Syntactic sugar for invoking a function and expanding an array for arguments.\n\t *\n\t * Common use case would be to use `Function.prototype.apply`.\n\t *\n\t * ```js\n\t * function f(x, y, z) {}\n\t * var args = [1, 2, 3];\n\t * f.apply(null, args);\n\t * ```\n\t *\n\t * With `spread` this example can be re-written.\n\t *\n\t * ```js\n\t * spread(function(x, y, z) {})([1, 2, 3]);\n\t * ```\n\t *\n\t * @param {Function} callback\n\t * @returns {Function}\n\t */\n\tmodule.exports = function spread(callback) {\n\t return function wrap(arr) {\n\t return callback.apply(null, arr);\n\t };\n\t};\n\n\n/***/ })\n/******/ ])\n});\n;\n\n\n// WEBPACK FOOTER //\n// axios.min.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 5db0cd118db1f73a2dc3","module.exports = require('./lib/axios');\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./index.js\n// module id = 0\n// module chunks = 0","'use strict';\n\nvar utils = require('./utils');\nvar bind = require('./helpers/bind');\nvar Axios = require('./core/Axios');\nvar mergeConfig = require('./core/mergeConfig');\nvar defaults = require('./defaults');\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n * @return {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n var context = new Axios(defaultConfig);\n var instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context);\n\n // Copy context to instance\n utils.extend(instance, context);\n\n return instance;\n}\n\n// Create the default instance to be exported\nvar axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Factory for creating new instances\naxios.create = function create(instanceConfig) {\n return createInstance(mergeConfig(axios.defaults, instanceConfig));\n};\n\n// Expose Cancel & CancelToken\naxios.Cancel = require('./cancel/Cancel');\naxios.CancelToken = require('./cancel/CancelToken');\naxios.isCancel = require('./cancel/isCancel');\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\naxios.spread = require('./helpers/spread');\n\nmodule.exports = axios;\n\n// Allow use of default import syntax in TypeScript\nmodule.exports.default = axios;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/axios.js\n// module id = 1\n// module chunks = 0","'use strict';\n\nvar bind = require('./helpers/bind');\n\n/*global toString:true*/\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n return toString.call(val) === '[object Array]';\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nfunction isArrayBuffer(val) {\n return toString.call(val) === '[object ArrayBuffer]';\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(val) {\n return (typeof FormData !== 'undefined') && (val instanceof FormData);\n}\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n var result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n return typeof val === 'number';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {Object} val The value to test\n * @return {boolean} True if value is a plain Object, otherwise false\n */\nfunction isPlainObject(val) {\n if (toString.call(val) !== '[object Object]') {\n return false;\n }\n\n var prototype = Object.getPrototypeOf(val);\n return prototype === null || prototype === Object.prototype;\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nfunction isDate(val) {\n return toString.call(val) === '[object Date]';\n}\n\n/**\n * Determine if a value is a File\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nfunction isFile(val) {\n return toString.call(val) === '[object File]';\n}\n\n/**\n * Determine if a value is a Blob\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nfunction isBlob(val) {\n return toString.call(val) === '[object Blob]';\n}\n\n/**\n * Determine if a value is a Function\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nfunction isFunction(val) {\n return toString.call(val) === '[object Function]';\n}\n\n/**\n * Determine if a value is a Stream\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nfunction isStream(val) {\n return isObject(val) && isFunction(val.pipe);\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nfunction isURLSearchParams(val) {\n return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;\n}\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n */\nfunction isStandardBrowserEnv() {\n if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' ||\n navigator.product === 'NativeScript' ||\n navigator.product === 'NS')) {\n return false;\n }\n return (\n typeof window !== 'undefined' &&\n typeof document !== 'undefined'\n );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (var i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n fn.call(null, obj[key], key, obj);\n }\n }\n }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n var result = {};\n function assignValue(val, key) {\n if (isPlainObject(result[key]) && isPlainObject(val)) {\n result[key] = merge(result[key], val);\n } else if (isPlainObject(val)) {\n result[key] = merge({}, val);\n } else if (isArray(val)) {\n result[key] = val.slice();\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n * @return {Object} The resulting value of object a\n */\nfunction extend(a, b, thisArg) {\n forEach(b, function assignValue(val, key) {\n if (thisArg && typeof val === 'function') {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n });\n return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n * @return {string} content value without BOM\n */\nfunction stripBOM(content) {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n}\n\nmodule.exports = {\n isArray: isArray,\n isArrayBuffer: isArrayBuffer,\n isBuffer: isBuffer,\n isFormData: isFormData,\n isArrayBufferView: isArrayBufferView,\n isString: isString,\n isNumber: isNumber,\n isObject: isObject,\n isPlainObject: isPlainObject,\n isUndefined: isUndefined,\n isDate: isDate,\n isFile: isFile,\n isBlob: isBlob,\n isFunction: isFunction,\n isStream: isStream,\n isURLSearchParams: isURLSearchParams,\n isStandardBrowserEnv: isStandardBrowserEnv,\n forEach: forEach,\n merge: merge,\n extend: extend,\n trim: trim,\n stripBOM: stripBOM\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/utils.js\n// module id = 2\n// module chunks = 0","'use strict';\n\nmodule.exports = function bind(fn, thisArg) {\n return function wrap() {\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n return fn.apply(thisArg, args);\n };\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/helpers/bind.js\n// module id = 3\n// module chunks = 0","'use strict';\n\nvar utils = require('./../utils');\nvar buildURL = require('../helpers/buildURL');\nvar InterceptorManager = require('./InterceptorManager');\nvar dispatchRequest = require('./dispatchRequest');\nvar mergeConfig = require('./mergeConfig');\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n */\nfunction Axios(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n}\n\n/**\n * Dispatch a request\n *\n * @param {Object} config The config specific for this request (merged with this.defaults)\n */\nAxios.prototype.request = function request(config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof config === 'string') {\n config = arguments[1] || {};\n config.url = arguments[0];\n } else {\n config = config || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n // Set config.method\n if (config.method) {\n config.method = config.method.toLowerCase();\n } else if (this.defaults.method) {\n config.method = this.defaults.method.toLowerCase();\n } else {\n config.method = 'get';\n }\n\n // Hook up interceptors middleware\n var chain = [dispatchRequest, undefined];\n var promise = Promise.resolve(config);\n\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n chain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n while (chain.length) {\n promise = promise.then(chain.shift(), chain.shift());\n }\n\n return promise;\n};\n\nAxios.prototype.getUri = function getUri(config) {\n config = mergeConfig(this.defaults, config);\n return buildURL(config.url, config.params, config.paramsSerializer).replace(/^\\?/, '');\n};\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(mergeConfig(config || {}, {\n method: method,\n url: url,\n data: (config || {}).data\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method: method,\n url: url,\n data: data\n }));\n };\n});\n\nmodule.exports = Axios;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/core/Axios.js\n// module id = 4\n// module chunks = 0","'use strict';\n\nvar utils = require('./../utils');\n\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n\n var serializedParams;\n if (paramsSerializer) {\n serializedParams = paramsSerializer(params);\n } else if (utils.isURLSearchParams(params)) {\n serializedParams = params.toString();\n } else {\n var parts = [];\n\n utils.forEach(params, function serialize(val, key) {\n if (val === null || typeof val === 'undefined') {\n return;\n }\n\n if (utils.isArray(val)) {\n key = key + '[]';\n } else {\n val = [val];\n }\n\n utils.forEach(val, function parseValue(v) {\n if (utils.isDate(v)) {\n v = v.toISOString();\n } else if (utils.isObject(v)) {\n v = JSON.stringify(v);\n }\n parts.push(encode(key) + '=' + encode(v));\n });\n });\n\n serializedParams = parts.join('&');\n }\n\n if (serializedParams) {\n var hashmarkIndex = url.indexOf('#');\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/helpers/buildURL.js\n// module id = 5\n// module chunks = 0","'use strict';\n\nvar utils = require('./../utils');\n\nfunction InterceptorManager() {\n this.handlers = [];\n}\n\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\n this.handlers.push({\n fulfilled: fulfilled,\n rejected: rejected\n });\n return this.handlers.length - 1;\n};\n\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\nInterceptorManager.prototype.eject = function eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n};\n\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\nInterceptorManager.prototype.forEach = function forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n};\n\nmodule.exports = InterceptorManager;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/core/InterceptorManager.js\n// module id = 6\n// module chunks = 0","'use strict';\n\nvar utils = require('./../utils');\nvar transformData = require('./transformData');\nvar isCancel = require('../cancel/isCancel');\nvar defaults = require('../defaults');\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n // Ensure headers exist\n config.headers = config.headers || {};\n\n // Transform request data\n config.data = transformData(\n config.data,\n config.headers,\n config.transformRequest\n );\n\n // Flatten headers\n config.headers = utils.merge(\n config.headers.common || {},\n config.headers[config.method] || {},\n config.headers\n );\n\n utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n function cleanHeaderConfig(method) {\n delete config.headers[method];\n }\n );\n\n var adapter = config.adapter || defaults.adapter;\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData(\n response.data,\n response.headers,\n config.transformResponse\n );\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData(\n reason.response.data,\n reason.response.headers,\n config.transformResponse\n );\n }\n }\n\n return Promise.reject(reason);\n });\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/core/dispatchRequest.js\n// module id = 7\n// module chunks = 0","'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n /*eslint no-param-reassign:0*/\n utils.forEach(fns, function transform(fn) {\n data = fn(data, headers);\n });\n\n return data;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/core/transformData.js\n// module id = 8\n// module chunks = 0","'use strict';\n\nmodule.exports = function isCancel(value) {\n return !!(value && value.__CANCEL__);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/cancel/isCancel.js\n// module id = 9\n// module chunks = 0","'use strict';\n\nvar utils = require('./utils');\nvar normalizeHeaderName = require('./helpers/normalizeHeaderName');\n\nvar DEFAULT_CONTENT_TYPE = {\n 'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nfunction setContentTypeIfUnset(headers, value) {\n if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n headers['Content-Type'] = value;\n }\n}\n\nfunction getDefaultAdapter() {\n var adapter;\n if (typeof XMLHttpRequest !== 'undefined') {\n // For browsers use XHR adapter\n adapter = require('./adapters/xhr');\n } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {\n // For node use HTTP adapter\n adapter = require('./adapters/http');\n }\n return adapter;\n}\n\nvar defaults = {\n adapter: getDefaultAdapter(),\n\n transformRequest: [function transformRequest(data, headers) {\n normalizeHeaderName(headers, 'Accept');\n normalizeHeaderName(headers, 'Content-Type');\n if (utils.isFormData(data) ||\n utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n return data.toString();\n }\n if (utils.isObject(data)) {\n setContentTypeIfUnset(headers, 'application/json;charset=utf-8');\n return JSON.stringify(data);\n }\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n /*eslint no-param-reassign:0*/\n if (typeof data === 'string') {\n try {\n data = JSON.parse(data);\n } catch (e) { /* Ignore */ }\n }\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n }\n};\n\ndefaults.headers = {\n common: {\n 'Accept': 'application/json, text/plain, */*'\n }\n};\n\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n defaults.headers[method] = {};\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\n\nmodule.exports = defaults;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/defaults.js\n// module id = 10\n// module chunks = 0","'use strict';\n\nvar utils = require('../utils');\n\nmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n utils.forEach(headers, function processHeader(value, name) {\n if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n headers[normalizedName] = value;\n delete headers[name];\n }\n });\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/helpers/normalizeHeaderName.js\n// module id = 11\n// module chunks = 0","'use strict';\n\nvar utils = require('./../utils');\nvar settle = require('./../core/settle');\nvar cookies = require('./../helpers/cookies');\nvar buildURL = require('./../helpers/buildURL');\nvar buildFullPath = require('../core/buildFullPath');\nvar parseHeaders = require('./../helpers/parseHeaders');\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\nvar createError = require('../core/createError');\n\nmodule.exports = function xhrAdapter(config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n var requestData = config.data;\n var requestHeaders = config.headers;\n\n if (utils.isFormData(requestData)) {\n delete requestHeaders['Content-Type']; // Let the browser set it\n }\n\n var request = new XMLHttpRequest();\n\n // HTTP basic authentication\n if (config.auth) {\n var username = config.auth.username || '';\n var password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : '';\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n }\n\n var fullPath = buildFullPath(config.baseURL, config.url);\n request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);\n\n // Set the request timeout in MS\n request.timeout = config.timeout;\n\n // Listen for ready state\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n\n // Prepare the response\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;\n var response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config: config,\n request: request\n };\n\n settle(resolve, reject, response);\n\n // Clean up request\n request = null;\n };\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(createError('Request aborted', config, 'ECONNABORTED', request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(createError('Network Error', config, null, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n var timeoutErrorMessage = 'timeout of ' + config.timeout + 'ms exceeded';\n if (config.timeoutErrorMessage) {\n timeoutErrorMessage = config.timeoutErrorMessage;\n }\n reject(createError(timeoutErrorMessage, config, 'ECONNABORTED',\n request));\n\n // Clean up request\n request = null;\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if (utils.isStandardBrowserEnv()) {\n // Add xsrf header\n var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName ?\n cookies.read(config.xsrfCookieName) :\n undefined;\n\n if (xsrfValue) {\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\n }\n }\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n // Remove Content-Type if data is undefined\n delete requestHeaders[key];\n } else {\n // Otherwise add header to the request\n request.setRequestHeader(key, val);\n }\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(config.withCredentials)) {\n request.withCredentials = !!config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (config.responseType) {\n try {\n request.responseType = config.responseType;\n } catch (e) {\n // Expected DOMException thrown by browsers not compatible XMLHttpRequest Level 2.\n // But, this can be suppressed for 'json' type as it can be parsed by default 'transformResponse' function.\n if (config.responseType !== 'json') {\n throw e;\n }\n }\n }\n\n // Handle progress if needed\n if (typeof config.onDownloadProgress === 'function') {\n request.addEventListener('progress', config.onDownloadProgress);\n }\n\n // Not all browsers support upload events\n if (typeof config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', config.onUploadProgress);\n }\n\n if (config.cancelToken) {\n // Handle cancellation\n config.cancelToken.promise.then(function onCanceled(cancel) {\n if (!request) {\n return;\n }\n\n request.abort();\n reject(cancel);\n // Clean up request\n request = null;\n });\n }\n\n if (!requestData) {\n requestData = null;\n }\n\n // Send the request\n request.send(requestData);\n });\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/adapters/xhr.js\n// module id = 12\n// module chunks = 0","'use strict';\n\nvar createError = require('./createError');\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n */\nmodule.exports = function settle(resolve, reject, response) {\n var validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(createError(\n 'Request failed with status code ' + response.status,\n response.config,\n null,\n response.request,\n response\n ));\n }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/core/settle.js\n// module id = 13\n// module chunks = 0","'use strict';\n\nvar enhanceError = require('./enhanceError');\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The created error.\n */\nmodule.exports = function createError(message, config, code, request, response) {\n var error = new Error(message);\n return enhanceError(error, config, code, request, response);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/core/createError.js\n// module id = 14\n// module chunks = 0","'use strict';\n\n/**\n * Update an Error with the specified config, error code, and response.\n *\n * @param {Error} error The error to update.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The error.\n */\nmodule.exports = function enhanceError(error, config, code, request, response) {\n error.config = config;\n if (code) {\n error.code = code;\n }\n\n error.request = request;\n error.response = response;\n error.isAxiosError = true;\n\n error.toJSON = function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: this.config,\n code: this.code\n };\n };\n return error;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/core/enhanceError.js\n// module id = 15\n// module chunks = 0","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs support document.cookie\n (function standardBrowserEnv() {\n return {\n write: function write(name, value, expires, path, domain, secure) {\n var cookie = [];\n cookie.push(name + '=' + encodeURIComponent(value));\n\n if (utils.isNumber(expires)) {\n cookie.push('expires=' + new Date(expires).toGMTString());\n }\n\n if (utils.isString(path)) {\n cookie.push('path=' + path);\n }\n\n if (utils.isString(domain)) {\n cookie.push('domain=' + domain);\n }\n\n if (secure === true) {\n cookie.push('secure');\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read: function read(name) {\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove: function remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n };\n })() :\n\n // Non standard browser env (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return {\n write: function write() {},\n read: function read() { return null; },\n remove: function remove() {}\n };\n })()\n);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/helpers/cookies.js\n// module id = 16\n// module chunks = 0","'use strict';\n\nvar isAbsoluteURL = require('../helpers/isAbsoluteURL');\nvar combineURLs = require('../helpers/combineURLs');\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n * @returns {string} The combined full path\n */\nmodule.exports = function buildFullPath(baseURL, requestedURL) {\n if (baseURL && !isAbsoluteURL(requestedURL)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/core/buildFullPath.js\n// module id = 17\n// module chunks = 0","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nmodule.exports = function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/helpers/isAbsoluteURL.js\n// module id = 18\n// module chunks = 0","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n * @returns {string} The combined URL\n */\nmodule.exports = function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/helpers/combineURLs.js\n// module id = 19\n// module chunks = 0","'use strict';\n\nvar utils = require('./../utils');\n\n// Headers whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nvar ignoreDuplicateOf = [\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n];\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n var parsed = {};\n var key;\n var val;\n var i;\n\n if (!headers) { return parsed; }\n\n utils.forEach(headers.split('\\n'), function parser(line) {\n i = line.indexOf(':');\n key = utils.trim(line.substr(0, i)).toLowerCase();\n val = utils.trim(line.substr(i + 1));\n\n if (key) {\n if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {\n return;\n }\n if (key === 'set-cookie') {\n parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n }\n });\n\n return parsed;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/helpers/parseHeaders.js\n// module id = 20\n// module chunks = 0","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs have full support of the APIs needed to test\n // whether the request URL is of the same origin as current location.\n (function standardBrowserEnv() {\n var msie = /(msie|trident)/i.test(navigator.userAgent);\n var urlParsingNode = document.createElement('a');\n var originURL;\n\n /**\n * Parse a URL to discover it's components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n var href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n return (parsed.protocol === originURL.protocol &&\n parsed.host === originURL.host);\n };\n })() :\n\n // Non standard browser envs (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n })()\n);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/helpers/isURLSameOrigin.js\n// module id = 21\n// module chunks = 0","'use strict';\n\nvar utils = require('../utils');\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n * @returns {Object} New object resulting from merging config2 to config1\n */\nmodule.exports = function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n var config = {};\n\n var valueFromConfig2Keys = ['url', 'method', 'data'];\n var mergeDeepPropertiesKeys = ['headers', 'auth', 'proxy', 'params'];\n var defaultToConfig2Keys = [\n 'baseURL', 'transformRequest', 'transformResponse', 'paramsSerializer',\n 'timeout', 'timeoutMessage', 'withCredentials', 'adapter', 'responseType', 'xsrfCookieName',\n 'xsrfHeaderName', 'onUploadProgress', 'onDownloadProgress', 'decompress',\n 'maxContentLength', 'maxBodyLength', 'maxRedirects', 'transport', 'httpAgent',\n 'httpsAgent', 'cancelToken', 'socketPath', 'responseEncoding'\n ];\n var directMergeKeys = ['validateStatus'];\n\n function getMergedValue(target, source) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge(target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n function mergeDeepProperties(prop) {\n if (!utils.isUndefined(config2[prop])) {\n config[prop] = getMergedValue(config1[prop], config2[prop]);\n } else if (!utils.isUndefined(config1[prop])) {\n config[prop] = getMergedValue(undefined, config1[prop]);\n }\n }\n\n utils.forEach(valueFromConfig2Keys, function valueFromConfig2(prop) {\n if (!utils.isUndefined(config2[prop])) {\n config[prop] = getMergedValue(undefined, config2[prop]);\n }\n });\n\n utils.forEach(mergeDeepPropertiesKeys, mergeDeepProperties);\n\n utils.forEach(defaultToConfig2Keys, function defaultToConfig2(prop) {\n if (!utils.isUndefined(config2[prop])) {\n config[prop] = getMergedValue(undefined, config2[prop]);\n } else if (!utils.isUndefined(config1[prop])) {\n config[prop] = getMergedValue(undefined, config1[prop]);\n }\n });\n\n utils.forEach(directMergeKeys, function merge(prop) {\n if (prop in config2) {\n config[prop] = getMergedValue(config1[prop], config2[prop]);\n } else if (prop in config1) {\n config[prop] = getMergedValue(undefined, config1[prop]);\n }\n });\n\n var axiosKeys = valueFromConfig2Keys\n .concat(mergeDeepPropertiesKeys)\n .concat(defaultToConfig2Keys)\n .concat(directMergeKeys);\n\n var otherKeys = Object\n .keys(config1)\n .concat(Object.keys(config2))\n .filter(function filterAxiosKeys(key) {\n return axiosKeys.indexOf(key) === -1;\n });\n\n utils.forEach(otherKeys, mergeDeepProperties);\n\n return config;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/core/mergeConfig.js\n// module id = 22\n// module chunks = 0","'use strict';\n\n/**\n * A `Cancel` is an object that is thrown when an operation is canceled.\n *\n * @class\n * @param {string=} message The message.\n */\nfunction Cancel(message) {\n this.message = message;\n}\n\nCancel.prototype.toString = function toString() {\n return 'Cancel' + (this.message ? ': ' + this.message : '');\n};\n\nCancel.prototype.__CANCEL__ = true;\n\nmodule.exports = Cancel;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/cancel/Cancel.js\n// module id = 23\n// module chunks = 0","'use strict';\n\nvar Cancel = require('./Cancel');\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @class\n * @param {Function} executor The executor function.\n */\nfunction CancelToken(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n var resolvePromise;\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n var token = this;\n executor(function cancel(message) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new Cancel(message);\n resolvePromise(token.reason);\n });\n}\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nCancelToken.prototype.throwIfRequested = function throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n};\n\n/**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\nCancelToken.source = function source() {\n var cancel;\n var token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token: token,\n cancel: cancel\n };\n};\n\nmodule.exports = CancelToken;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/cancel/CancelToken.js\n// module id = 24\n// module chunks = 0","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/helpers/spread.js\n// module id = 25\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file diff --git a/node_modules/axios/index.d.ts b/node_modules/axios/index.d.ts new file mode 100644 index 0000000..c860d86 --- /dev/null +++ b/node_modules/axios/index.d.ts @@ -0,0 +1,160 @@ +export interface AxiosTransformer { + (data: any, headers?: any): any; +} + +export interface AxiosAdapter { + (config: AxiosRequestConfig): AxiosPromise; +} + +export interface AxiosBasicCredentials { + username: string; + password: string; +} + +export interface AxiosProxyConfig { + host: string; + port: number; + auth?: { + username: string; + password:string; + }; + protocol?: string; +} + +export type Method = + | 'get' | 'GET' + | 'delete' | 'DELETE' + | 'head' | 'HEAD' + | 'options' | 'OPTIONS' + | 'post' | 'POST' + | 'put' | 'PUT' + | 'patch' | 'PATCH' + | 'purge' | 'PURGE' + | 'link' | 'LINK' + | 'unlink' | 'UNLINK' + +export type ResponseType = + | 'arraybuffer' + | 'blob' + | 'document' + | 'json' + | 'text' + | 'stream' + +export interface AxiosRequestConfig { + url?: string; + method?: Method; + baseURL?: string; + transformRequest?: AxiosTransformer | AxiosTransformer[]; + transformResponse?: AxiosTransformer | AxiosTransformer[]; + headers?: any; + params?: any; + paramsSerializer?: (params: any) => string; + data?: any; + timeout?: number; + timeoutErrorMessage?: string; + withCredentials?: boolean; + adapter?: AxiosAdapter; + auth?: AxiosBasicCredentials; + responseType?: ResponseType; + xsrfCookieName?: string; + xsrfHeaderName?: string; + onUploadProgress?: (progressEvent: any) => void; + onDownloadProgress?: (progressEvent: any) => void; + maxContentLength?: number; + validateStatus?: ((status: number) => boolean) | null; + maxBodyLength?: number; + maxRedirects?: number; + socketPath?: string | null; + httpAgent?: any; + httpsAgent?: any; + proxy?: AxiosProxyConfig | false; + cancelToken?: CancelToken; + decompress?: boolean; +} + +export interface AxiosResponse { + data: T; + status: number; + statusText: string; + headers: any; + config: AxiosRequestConfig; + request?: any; +} + +export interface AxiosError extends Error { + config: AxiosRequestConfig; + code?: string; + request?: any; + response?: AxiosResponse; + isAxiosError: boolean; + toJSON: () => object; +} + +export interface AxiosPromise extends Promise> { +} + +export interface CancelStatic { + new (message?: string): Cancel; +} + +export interface Cancel { + message: string; +} + +export interface Canceler { + (message?: string): void; +} + +export interface CancelTokenStatic { + new (executor: (cancel: Canceler) => void): CancelToken; + source(): CancelTokenSource; +} + +export interface CancelToken { + promise: Promise; + reason?: Cancel; + throwIfRequested(): void; +} + +export interface CancelTokenSource { + token: CancelToken; + cancel: Canceler; +} + +export interface AxiosInterceptorManager { + use(onFulfilled?: (value: V) => V | Promise, onRejected?: (error: any) => any): number; + eject(id: number): void; +} + +export interface AxiosInstance { + (config: AxiosRequestConfig): AxiosPromise; + (url: string, config?: AxiosRequestConfig): AxiosPromise; + defaults: AxiosRequestConfig; + interceptors: { + request: AxiosInterceptorManager; + response: AxiosInterceptorManager; + }; + getUri(config?: AxiosRequestConfig): string; + request> (config: AxiosRequestConfig): Promise; + get>(url: string, config?: AxiosRequestConfig): Promise; + delete>(url: string, config?: AxiosRequestConfig): Promise; + head>(url: string, config?: AxiosRequestConfig): Promise; + options>(url: string, config?: AxiosRequestConfig): Promise; + post>(url: string, data?: any, config?: AxiosRequestConfig): Promise; + put>(url: string, data?: any, config?: AxiosRequestConfig): Promise; + patch>(url: string, data?: any, config?: AxiosRequestConfig): Promise; +} + +export interface AxiosStatic extends AxiosInstance { + create(config?: AxiosRequestConfig): AxiosInstance; + Cancel: CancelStatic; + CancelToken: CancelTokenStatic; + isCancel(value: any): boolean; + all(values: (T | Promise)[]): Promise; + spread(callback: (...args: T[]) => R): (array: T[]) => R; +} + +declare const Axios: AxiosStatic; + +export default Axios; diff --git a/node_modules/axios/index.js b/node_modules/axios/index.js new file mode 100644 index 0000000..79dfd09 --- /dev/null +++ b/node_modules/axios/index.js @@ -0,0 +1 @@ +module.exports = require('./lib/axios'); \ No newline at end of file diff --git a/node_modules/axios/lib/adapters/README.md b/node_modules/axios/lib/adapters/README.md new file mode 100644 index 0000000..68f1118 --- /dev/null +++ b/node_modules/axios/lib/adapters/README.md @@ -0,0 +1,37 @@ +# axios // adapters + +The modules under `adapters/` are modules that handle dispatching a request and settling a returned `Promise` once a response is received. + +## Example + +```js +var settle = require('./../core/settle'); + +module.exports = function myAdapter(config) { + // At this point: + // - config has been merged with defaults + // - request transformers have already run + // - request interceptors have already run + + // Make the request using config provided + // Upon response settle the Promise + + return new Promise(function(resolve, reject) { + + var response = { + data: responseData, + status: request.status, + statusText: request.statusText, + headers: responseHeaders, + config: config, + request: request + }; + + settle(resolve, reject, response); + + // From here: + // - response transformers will run + // - response interceptors will run + }); +} +``` diff --git a/node_modules/axios/lib/adapters/http.js b/node_modules/axios/lib/adapters/http.js new file mode 100644 index 0000000..135c93a --- /dev/null +++ b/node_modules/axios/lib/adapters/http.js @@ -0,0 +1,287 @@ +'use strict'; + +var utils = require('./../utils'); +var settle = require('./../core/settle'); +var buildFullPath = require('../core/buildFullPath'); +var buildURL = require('./../helpers/buildURL'); +var http = require('http'); +var https = require('https'); +var httpFollow = require('follow-redirects').http; +var httpsFollow = require('follow-redirects').https; +var url = require('url'); +var zlib = require('zlib'); +var pkg = require('./../../package.json'); +var createError = require('../core/createError'); +var enhanceError = require('../core/enhanceError'); + +var isHttps = /https:?/; + +/*eslint consistent-return:0*/ +module.exports = function httpAdapter(config) { + return new Promise(function dispatchHttpRequest(resolvePromise, rejectPromise) { + var resolve = function resolve(value) { + resolvePromise(value); + }; + var reject = function reject(value) { + rejectPromise(value); + }; + var data = config.data; + var headers = config.headers; + + // Set User-Agent (required by some servers) + // Only set header if it hasn't been set in config + // See https://github.com/axios/axios/issues/69 + if (!headers['User-Agent'] && !headers['user-agent']) { + headers['User-Agent'] = 'axios/' + pkg.version; + } + + if (data && !utils.isStream(data)) { + if (Buffer.isBuffer(data)) { + // Nothing to do... + } else if (utils.isArrayBuffer(data)) { + data = Buffer.from(new Uint8Array(data)); + } else if (utils.isString(data)) { + data = Buffer.from(data, 'utf-8'); + } else { + return reject(createError( + 'Data after transformation must be a string, an ArrayBuffer, a Buffer, or a Stream', + config + )); + } + + // Add Content-Length header if data exists + headers['Content-Length'] = data.length; + } + + // HTTP basic authentication + var auth = undefined; + if (config.auth) { + var username = config.auth.username || ''; + var password = config.auth.password || ''; + auth = username + ':' + password; + } + + // Parse url + var fullPath = buildFullPath(config.baseURL, config.url); + var parsed = url.parse(fullPath); + var protocol = parsed.protocol || 'http:'; + + if (!auth && parsed.auth) { + var urlAuth = parsed.auth.split(':'); + var urlUsername = urlAuth[0] || ''; + var urlPassword = urlAuth[1] || ''; + auth = urlUsername + ':' + urlPassword; + } + + if (auth) { + delete headers.Authorization; + } + + var isHttpsRequest = isHttps.test(protocol); + var agent = isHttpsRequest ? config.httpsAgent : config.httpAgent; + + var options = { + path: buildURL(parsed.path, config.params, config.paramsSerializer).replace(/^\?/, ''), + method: config.method.toUpperCase(), + headers: headers, + agent: agent, + agents: { http: config.httpAgent, https: config.httpsAgent }, + auth: auth + }; + + if (config.socketPath) { + options.socketPath = config.socketPath; + } else { + options.hostname = parsed.hostname; + options.port = parsed.port; + } + + var proxy = config.proxy; + if (!proxy && proxy !== false) { + var proxyEnv = protocol.slice(0, -1) + '_proxy'; + var proxyUrl = process.env[proxyEnv] || process.env[proxyEnv.toUpperCase()]; + if (proxyUrl) { + var parsedProxyUrl = url.parse(proxyUrl); + var noProxyEnv = process.env.no_proxy || process.env.NO_PROXY; + var shouldProxy = true; + + if (noProxyEnv) { + var noProxy = noProxyEnv.split(',').map(function trim(s) { + return s.trim(); + }); + + shouldProxy = !noProxy.some(function proxyMatch(proxyElement) { + if (!proxyElement) { + return false; + } + if (proxyElement === '*') { + return true; + } + if (proxyElement[0] === '.' && + parsed.hostname.substr(parsed.hostname.length - proxyElement.length) === proxyElement) { + return true; + } + + return parsed.hostname === proxyElement; + }); + } + + + if (shouldProxy) { + proxy = { + host: parsedProxyUrl.hostname, + port: parsedProxyUrl.port + }; + + if (parsedProxyUrl.auth) { + var proxyUrlAuth = parsedProxyUrl.auth.split(':'); + proxy.auth = { + username: proxyUrlAuth[0], + password: proxyUrlAuth[1] + }; + } + } + } + } + + if (proxy) { + options.hostname = proxy.host; + options.host = proxy.host; + options.headers.host = parsed.hostname + (parsed.port ? ':' + parsed.port : ''); + options.port = proxy.port; + options.path = protocol + '//' + parsed.hostname + (parsed.port ? ':' + parsed.port : '') + options.path; + + // Basic proxy authorization + if (proxy.auth) { + var base64 = Buffer.from(proxy.auth.username + ':' + proxy.auth.password, 'utf8').toString('base64'); + options.headers['Proxy-Authorization'] = 'Basic ' + base64; + } + } + + var transport; + var isHttpsProxy = isHttpsRequest && (proxy ? isHttps.test(proxy.protocol) : true); + if (config.transport) { + transport = config.transport; + } else if (config.maxRedirects === 0) { + transport = isHttpsProxy ? https : http; + } else { + if (config.maxRedirects) { + options.maxRedirects = config.maxRedirects; + } + transport = isHttpsProxy ? httpsFollow : httpFollow; + } + + if (config.maxBodyLength > -1) { + options.maxBodyLength = config.maxBodyLength; + } + + // Create the request + var req = transport.request(options, function handleResponse(res) { + if (req.aborted) return; + + // uncompress the response body transparently if required + var stream = res; + + // return the last request in case of redirects + var lastRequest = res.req || req; + + + // if no content, is HEAD request or decompress disabled we should not decompress + if (res.statusCode !== 204 && lastRequest.method !== 'HEAD' && config.decompress !== false) { + switch (res.headers['content-encoding']) { + /*eslint default-case:0*/ + case 'gzip': + case 'compress': + case 'deflate': + // add the unzipper to the body stream processing pipeline + stream = stream.pipe(zlib.createUnzip()); + + // remove the content-encoding in order to not confuse downstream operations + delete res.headers['content-encoding']; + break; + } + } + + var response = { + status: res.statusCode, + statusText: res.statusMessage, + headers: res.headers, + config: config, + request: lastRequest + }; + + if (config.responseType === 'stream') { + response.data = stream; + settle(resolve, reject, response); + } else { + var responseBuffer = []; + stream.on('data', function handleStreamData(chunk) { + responseBuffer.push(chunk); + + // make sure the content length is not over the maxContentLength if specified + if (config.maxContentLength > -1 && Buffer.concat(responseBuffer).length > config.maxContentLength) { + stream.destroy(); + reject(createError('maxContentLength size of ' + config.maxContentLength + ' exceeded', + config, null, lastRequest)); + } + }); + + stream.on('error', function handleStreamError(err) { + if (req.aborted) return; + reject(enhanceError(err, config, null, lastRequest)); + }); + + stream.on('end', function handleStreamEnd() { + var responseData = Buffer.concat(responseBuffer); + if (config.responseType !== 'arraybuffer') { + responseData = responseData.toString(config.responseEncoding); + if (!config.responseEncoding || config.responseEncoding === 'utf8') { + responseData = utils.stripBOM(responseData); + } + } + + response.data = responseData; + settle(resolve, reject, response); + }); + } + }); + + // Handle errors + req.on('error', function handleRequestError(err) { + if (req.aborted && err.code !== 'ERR_FR_TOO_MANY_REDIRECTS') return; + reject(enhanceError(err, config, null, req)); + }); + + // Handle request timeout + if (config.timeout) { + // Sometime, the response will be very slow, and does not respond, the connect event will be block by event loop system. + // And timer callback will be fired, and abort() will be invoked before connection, then get "socket hang up" and code ECONNRESET. + // At this time, if we have a large number of request, nodejs will hang up some socket on background. and the number will up and up. + // And then these socket which be hang up will devoring CPU little by little. + // ClientRequest.setTimeout will be fired on the specify milliseconds, and can make sure that abort() will be fired after connect. + req.setTimeout(config.timeout, function handleRequestTimeout() { + req.abort(); + reject(createError('timeout of ' + config.timeout + 'ms exceeded', config, 'ECONNABORTED', req)); + }); + } + + if (config.cancelToken) { + // Handle cancellation + config.cancelToken.promise.then(function onCanceled(cancel) { + if (req.aborted) return; + + req.abort(); + reject(cancel); + }); + } + + // Send the request + if (utils.isStream(data)) { + data.on('error', function handleStreamError(err) { + reject(enhanceError(err, config, null, req)); + }).pipe(req); + } else { + req.end(data); + } + }); +}; diff --git a/node_modules/axios/lib/adapters/xhr.js b/node_modules/axios/lib/adapters/xhr.js new file mode 100644 index 0000000..3027752 --- /dev/null +++ b/node_modules/axios/lib/adapters/xhr.js @@ -0,0 +1,179 @@ +'use strict'; + +var utils = require('./../utils'); +var settle = require('./../core/settle'); +var cookies = require('./../helpers/cookies'); +var buildURL = require('./../helpers/buildURL'); +var buildFullPath = require('../core/buildFullPath'); +var parseHeaders = require('./../helpers/parseHeaders'); +var isURLSameOrigin = require('./../helpers/isURLSameOrigin'); +var createError = require('../core/createError'); + +module.exports = function xhrAdapter(config) { + return new Promise(function dispatchXhrRequest(resolve, reject) { + var requestData = config.data; + var requestHeaders = config.headers; + + if (utils.isFormData(requestData)) { + delete requestHeaders['Content-Type']; // Let the browser set it + } + + var request = new XMLHttpRequest(); + + // HTTP basic authentication + if (config.auth) { + var username = config.auth.username || ''; + var password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : ''; + requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password); + } + + var fullPath = buildFullPath(config.baseURL, config.url); + request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true); + + // Set the request timeout in MS + request.timeout = config.timeout; + + // Listen for ready state + request.onreadystatechange = function handleLoad() { + if (!request || request.readyState !== 4) { + return; + } + + // The request errored out and we didn't get a response, this will be + // handled by onerror instead + // With one exception: request that using file: protocol, most browsers + // will return status as 0 even though it's a successful request + if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) { + return; + } + + // Prepare the response + var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null; + var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response; + var response = { + data: responseData, + status: request.status, + statusText: request.statusText, + headers: responseHeaders, + config: config, + request: request + }; + + settle(resolve, reject, response); + + // Clean up request + request = null; + }; + + // Handle browser request cancellation (as opposed to a manual cancellation) + request.onabort = function handleAbort() { + if (!request) { + return; + } + + reject(createError('Request aborted', config, 'ECONNABORTED', request)); + + // Clean up request + request = null; + }; + + // Handle low level network errors + request.onerror = function handleError() { + // Real errors are hidden from us by the browser + // onerror should only fire if it's a network error + reject(createError('Network Error', config, null, request)); + + // Clean up request + request = null; + }; + + // Handle timeout + request.ontimeout = function handleTimeout() { + var timeoutErrorMessage = 'timeout of ' + config.timeout + 'ms exceeded'; + if (config.timeoutErrorMessage) { + timeoutErrorMessage = config.timeoutErrorMessage; + } + reject(createError(timeoutErrorMessage, config, 'ECONNABORTED', + request)); + + // Clean up request + request = null; + }; + + // Add xsrf header + // This is only done if running in a standard browser environment. + // Specifically not if we're in a web worker, or react-native. + if (utils.isStandardBrowserEnv()) { + // Add xsrf header + var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName ? + cookies.read(config.xsrfCookieName) : + undefined; + + if (xsrfValue) { + requestHeaders[config.xsrfHeaderName] = xsrfValue; + } + } + + // Add headers to the request + if ('setRequestHeader' in request) { + utils.forEach(requestHeaders, function setRequestHeader(val, key) { + if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') { + // Remove Content-Type if data is undefined + delete requestHeaders[key]; + } else { + // Otherwise add header to the request + request.setRequestHeader(key, val); + } + }); + } + + // Add withCredentials to request if needed + if (!utils.isUndefined(config.withCredentials)) { + request.withCredentials = !!config.withCredentials; + } + + // Add responseType to request if needed + if (config.responseType) { + try { + request.responseType = config.responseType; + } catch (e) { + // Expected DOMException thrown by browsers not compatible XMLHttpRequest Level 2. + // But, this can be suppressed for 'json' type as it can be parsed by default 'transformResponse' function. + if (config.responseType !== 'json') { + throw e; + } + } + } + + // Handle progress if needed + if (typeof config.onDownloadProgress === 'function') { + request.addEventListener('progress', config.onDownloadProgress); + } + + // Not all browsers support upload events + if (typeof config.onUploadProgress === 'function' && request.upload) { + request.upload.addEventListener('progress', config.onUploadProgress); + } + + if (config.cancelToken) { + // Handle cancellation + config.cancelToken.promise.then(function onCanceled(cancel) { + if (!request) { + return; + } + + request.abort(); + reject(cancel); + // Clean up request + request = null; + }); + } + + if (!requestData) { + requestData = null; + } + + // Send the request + request.send(requestData); + }); +}; diff --git a/node_modules/axios/lib/axios.js b/node_modules/axios/lib/axios.js new file mode 100644 index 0000000..8142437 --- /dev/null +++ b/node_modules/axios/lib/axios.js @@ -0,0 +1,53 @@ +'use strict'; + +var utils = require('./utils'); +var bind = require('./helpers/bind'); +var Axios = require('./core/Axios'); +var mergeConfig = require('./core/mergeConfig'); +var defaults = require('./defaults'); + +/** + * Create an instance of Axios + * + * @param {Object} defaultConfig The default config for the instance + * @return {Axios} A new instance of Axios + */ +function createInstance(defaultConfig) { + var context = new Axios(defaultConfig); + var instance = bind(Axios.prototype.request, context); + + // Copy axios.prototype to instance + utils.extend(instance, Axios.prototype, context); + + // Copy context to instance + utils.extend(instance, context); + + return instance; +} + +// Create the default instance to be exported +var axios = createInstance(defaults); + +// Expose Axios class to allow class inheritance +axios.Axios = Axios; + +// Factory for creating new instances +axios.create = function create(instanceConfig) { + return createInstance(mergeConfig(axios.defaults, instanceConfig)); +}; + +// Expose Cancel & CancelToken +axios.Cancel = require('./cancel/Cancel'); +axios.CancelToken = require('./cancel/CancelToken'); +axios.isCancel = require('./cancel/isCancel'); + +// Expose all/spread +axios.all = function all(promises) { + return Promise.all(promises); +}; +axios.spread = require('./helpers/spread'); + +module.exports = axios; + +// Allow use of default import syntax in TypeScript +module.exports.default = axios; diff --git a/node_modules/axios/lib/cancel/Cancel.js b/node_modules/axios/lib/cancel/Cancel.js new file mode 100644 index 0000000..e0de400 --- /dev/null +++ b/node_modules/axios/lib/cancel/Cancel.js @@ -0,0 +1,19 @@ +'use strict'; + +/** + * A `Cancel` is an object that is thrown when an operation is canceled. + * + * @class + * @param {string=} message The message. + */ +function Cancel(message) { + this.message = message; +} + +Cancel.prototype.toString = function toString() { + return 'Cancel' + (this.message ? ': ' + this.message : ''); +}; + +Cancel.prototype.__CANCEL__ = true; + +module.exports = Cancel; diff --git a/node_modules/axios/lib/cancel/CancelToken.js b/node_modules/axios/lib/cancel/CancelToken.js new file mode 100644 index 0000000..6b46e66 --- /dev/null +++ b/node_modules/axios/lib/cancel/CancelToken.js @@ -0,0 +1,57 @@ +'use strict'; + +var Cancel = require('./Cancel'); + +/** + * A `CancelToken` is an object that can be used to request cancellation of an operation. + * + * @class + * @param {Function} executor The executor function. + */ +function CancelToken(executor) { + if (typeof executor !== 'function') { + throw new TypeError('executor must be a function.'); + } + + var resolvePromise; + this.promise = new Promise(function promiseExecutor(resolve) { + resolvePromise = resolve; + }); + + var token = this; + executor(function cancel(message) { + if (token.reason) { + // Cancellation has already been requested + return; + } + + token.reason = new Cancel(message); + resolvePromise(token.reason); + }); +} + +/** + * Throws a `Cancel` if cancellation has been requested. + */ +CancelToken.prototype.throwIfRequested = function throwIfRequested() { + if (this.reason) { + throw this.reason; + } +}; + +/** + * Returns an object that contains a new `CancelToken` and a function that, when called, + * cancels the `CancelToken`. + */ +CancelToken.source = function source() { + var cancel; + var token = new CancelToken(function executor(c) { + cancel = c; + }); + return { + token: token, + cancel: cancel + }; +}; + +module.exports = CancelToken; diff --git a/node_modules/axios/lib/cancel/isCancel.js b/node_modules/axios/lib/cancel/isCancel.js new file mode 100644 index 0000000..051f3ae --- /dev/null +++ b/node_modules/axios/lib/cancel/isCancel.js @@ -0,0 +1,5 @@ +'use strict'; + +module.exports = function isCancel(value) { + return !!(value && value.__CANCEL__); +}; diff --git a/node_modules/axios/lib/core/Axios.js b/node_modules/axios/lib/core/Axios.js new file mode 100644 index 0000000..c28c413 --- /dev/null +++ b/node_modules/axios/lib/core/Axios.js @@ -0,0 +1,95 @@ +'use strict'; + +var utils = require('./../utils'); +var buildURL = require('../helpers/buildURL'); +var InterceptorManager = require('./InterceptorManager'); +var dispatchRequest = require('./dispatchRequest'); +var mergeConfig = require('./mergeConfig'); + +/** + * Create a new instance of Axios + * + * @param {Object} instanceConfig The default config for the instance + */ +function Axios(instanceConfig) { + this.defaults = instanceConfig; + this.interceptors = { + request: new InterceptorManager(), + response: new InterceptorManager() + }; +} + +/** + * Dispatch a request + * + * @param {Object} config The config specific for this request (merged with this.defaults) + */ +Axios.prototype.request = function request(config) { + /*eslint no-param-reassign:0*/ + // Allow for axios('example/url'[, config]) a la fetch API + if (typeof config === 'string') { + config = arguments[1] || {}; + config.url = arguments[0]; + } else { + config = config || {}; + } + + config = mergeConfig(this.defaults, config); + + // Set config.method + if (config.method) { + config.method = config.method.toLowerCase(); + } else if (this.defaults.method) { + config.method = this.defaults.method.toLowerCase(); + } else { + config.method = 'get'; + } + + // Hook up interceptors middleware + var chain = [dispatchRequest, undefined]; + var promise = Promise.resolve(config); + + this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) { + chain.unshift(interceptor.fulfilled, interceptor.rejected); + }); + + this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) { + chain.push(interceptor.fulfilled, interceptor.rejected); + }); + + while (chain.length) { + promise = promise.then(chain.shift(), chain.shift()); + } + + return promise; +}; + +Axios.prototype.getUri = function getUri(config) { + config = mergeConfig(this.defaults, config); + return buildURL(config.url, config.params, config.paramsSerializer).replace(/^\?/, ''); +}; + +// Provide aliases for supported request methods +utils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) { + /*eslint func-names:0*/ + Axios.prototype[method] = function(url, config) { + return this.request(mergeConfig(config || {}, { + method: method, + url: url, + data: (config || {}).data + })); + }; +}); + +utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) { + /*eslint func-names:0*/ + Axios.prototype[method] = function(url, data, config) { + return this.request(mergeConfig(config || {}, { + method: method, + url: url, + data: data + })); + }; +}); + +module.exports = Axios; diff --git a/node_modules/axios/lib/core/InterceptorManager.js b/node_modules/axios/lib/core/InterceptorManager.js new file mode 100644 index 0000000..50d667b --- /dev/null +++ b/node_modules/axios/lib/core/InterceptorManager.js @@ -0,0 +1,52 @@ +'use strict'; + +var utils = require('./../utils'); + +function InterceptorManager() { + this.handlers = []; +} + +/** + * Add a new interceptor to the stack + * + * @param {Function} fulfilled The function to handle `then` for a `Promise` + * @param {Function} rejected The function to handle `reject` for a `Promise` + * + * @return {Number} An ID used to remove interceptor later + */ +InterceptorManager.prototype.use = function use(fulfilled, rejected) { + this.handlers.push({ + fulfilled: fulfilled, + rejected: rejected + }); + return this.handlers.length - 1; +}; + +/** + * Remove an interceptor from the stack + * + * @param {Number} id The ID that was returned by `use` + */ +InterceptorManager.prototype.eject = function eject(id) { + if (this.handlers[id]) { + this.handlers[id] = null; + } +}; + +/** + * Iterate over all the registered interceptors + * + * This method is particularly useful for skipping over any + * interceptors that may have become `null` calling `eject`. + * + * @param {Function} fn The function to call for each interceptor + */ +InterceptorManager.prototype.forEach = function forEach(fn) { + utils.forEach(this.handlers, function forEachHandler(h) { + if (h !== null) { + fn(h); + } + }); +}; + +module.exports = InterceptorManager; diff --git a/node_modules/axios/lib/core/README.md b/node_modules/axios/lib/core/README.md new file mode 100644 index 0000000..253bc48 --- /dev/null +++ b/node_modules/axios/lib/core/README.md @@ -0,0 +1,7 @@ +# axios // core + +The modules found in `core/` should be modules that are specific to the domain logic of axios. These modules would most likely not make sense to be consumed outside of the axios module, as their logic is too specific. Some examples of core modules are: + +- Dispatching requests +- Managing interceptors +- Handling config diff --git a/node_modules/axios/lib/core/buildFullPath.js b/node_modules/axios/lib/core/buildFullPath.js new file mode 100644 index 0000000..00b2b05 --- /dev/null +++ b/node_modules/axios/lib/core/buildFullPath.js @@ -0,0 +1,20 @@ +'use strict'; + +var isAbsoluteURL = require('../helpers/isAbsoluteURL'); +var combineURLs = require('../helpers/combineURLs'); + +/** + * Creates a new URL by combining the baseURL with the requestedURL, + * only when the requestedURL is not already an absolute URL. + * If the requestURL is absolute, this function returns the requestedURL untouched. + * + * @param {string} baseURL The base URL + * @param {string} requestedURL Absolute or relative URL to combine + * @returns {string} The combined full path + */ +module.exports = function buildFullPath(baseURL, requestedURL) { + if (baseURL && !isAbsoluteURL(requestedURL)) { + return combineURLs(baseURL, requestedURL); + } + return requestedURL; +}; diff --git a/node_modules/axios/lib/core/createError.js b/node_modules/axios/lib/core/createError.js new file mode 100644 index 0000000..933680f --- /dev/null +++ b/node_modules/axios/lib/core/createError.js @@ -0,0 +1,18 @@ +'use strict'; + +var enhanceError = require('./enhanceError'); + +/** + * Create an Error with the specified message, config, error code, request and response. + * + * @param {string} message The error message. + * @param {Object} config The config. + * @param {string} [code] The error code (for example, 'ECONNABORTED'). + * @param {Object} [request] The request. + * @param {Object} [response] The response. + * @returns {Error} The created error. + */ +module.exports = function createError(message, config, code, request, response) { + var error = new Error(message); + return enhanceError(error, config, code, request, response); +}; diff --git a/node_modules/axios/lib/core/dispatchRequest.js b/node_modules/axios/lib/core/dispatchRequest.js new file mode 100644 index 0000000..c8267ad --- /dev/null +++ b/node_modules/axios/lib/core/dispatchRequest.js @@ -0,0 +1,79 @@ +'use strict'; + +var utils = require('./../utils'); +var transformData = require('./transformData'); +var isCancel = require('../cancel/isCancel'); +var defaults = require('../defaults'); + +/** + * Throws a `Cancel` if cancellation has been requested. + */ +function throwIfCancellationRequested(config) { + if (config.cancelToken) { + config.cancelToken.throwIfRequested(); + } +} + +/** + * Dispatch a request to the server using the configured adapter. + * + * @param {object} config The config that is to be used for the request + * @returns {Promise} The Promise to be fulfilled + */ +module.exports = function dispatchRequest(config) { + throwIfCancellationRequested(config); + + // Ensure headers exist + config.headers = config.headers || {}; + + // Transform request data + config.data = transformData( + config.data, + config.headers, + config.transformRequest + ); + + // Flatten headers + config.headers = utils.merge( + config.headers.common || {}, + config.headers[config.method] || {}, + config.headers + ); + + utils.forEach( + ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'], + function cleanHeaderConfig(method) { + delete config.headers[method]; + } + ); + + var adapter = config.adapter || defaults.adapter; + + return adapter(config).then(function onAdapterResolution(response) { + throwIfCancellationRequested(config); + + // Transform response data + response.data = transformData( + response.data, + response.headers, + config.transformResponse + ); + + return response; + }, function onAdapterRejection(reason) { + if (!isCancel(reason)) { + throwIfCancellationRequested(config); + + // Transform response data + if (reason && reason.response) { + reason.response.data = transformData( + reason.response.data, + reason.response.headers, + config.transformResponse + ); + } + } + + return Promise.reject(reason); + }); +}; diff --git a/node_modules/axios/lib/core/enhanceError.js b/node_modules/axios/lib/core/enhanceError.js new file mode 100644 index 0000000..b6bc444 --- /dev/null +++ b/node_modules/axios/lib/core/enhanceError.js @@ -0,0 +1,42 @@ +'use strict'; + +/** + * Update an Error with the specified config, error code, and response. + * + * @param {Error} error The error to update. + * @param {Object} config The config. + * @param {string} [code] The error code (for example, 'ECONNABORTED'). + * @param {Object} [request] The request. + * @param {Object} [response] The response. + * @returns {Error} The error. + */ +module.exports = function enhanceError(error, config, code, request, response) { + error.config = config; + if (code) { + error.code = code; + } + + error.request = request; + error.response = response; + error.isAxiosError = true; + + error.toJSON = function toJSON() { + return { + // Standard + message: this.message, + name: this.name, + // Microsoft + description: this.description, + number: this.number, + // Mozilla + fileName: this.fileName, + lineNumber: this.lineNumber, + columnNumber: this.columnNumber, + stack: this.stack, + // Axios + config: this.config, + code: this.code + }; + }; + return error; +}; diff --git a/node_modules/axios/lib/core/mergeConfig.js b/node_modules/axios/lib/core/mergeConfig.js new file mode 100644 index 0000000..5a2c10c --- /dev/null +++ b/node_modules/axios/lib/core/mergeConfig.js @@ -0,0 +1,87 @@ +'use strict'; + +var utils = require('../utils'); + +/** + * Config-specific merge-function which creates a new config-object + * by merging two configuration objects together. + * + * @param {Object} config1 + * @param {Object} config2 + * @returns {Object} New object resulting from merging config2 to config1 + */ +module.exports = function mergeConfig(config1, config2) { + // eslint-disable-next-line no-param-reassign + config2 = config2 || {}; + var config = {}; + + var valueFromConfig2Keys = ['url', 'method', 'data']; + var mergeDeepPropertiesKeys = ['headers', 'auth', 'proxy', 'params']; + var defaultToConfig2Keys = [ + 'baseURL', 'transformRequest', 'transformResponse', 'paramsSerializer', + 'timeout', 'timeoutMessage', 'withCredentials', 'adapter', 'responseType', 'xsrfCookieName', + 'xsrfHeaderName', 'onUploadProgress', 'onDownloadProgress', 'decompress', + 'maxContentLength', 'maxBodyLength', 'maxRedirects', 'transport', 'httpAgent', + 'httpsAgent', 'cancelToken', 'socketPath', 'responseEncoding' + ]; + var directMergeKeys = ['validateStatus']; + + function getMergedValue(target, source) { + if (utils.isPlainObject(target) && utils.isPlainObject(source)) { + return utils.merge(target, source); + } else if (utils.isPlainObject(source)) { + return utils.merge({}, source); + } else if (utils.isArray(source)) { + return source.slice(); + } + return source; + } + + function mergeDeepProperties(prop) { + if (!utils.isUndefined(config2[prop])) { + config[prop] = getMergedValue(config1[prop], config2[prop]); + } else if (!utils.isUndefined(config1[prop])) { + config[prop] = getMergedValue(undefined, config1[prop]); + } + } + + utils.forEach(valueFromConfig2Keys, function valueFromConfig2(prop) { + if (!utils.isUndefined(config2[prop])) { + config[prop] = getMergedValue(undefined, config2[prop]); + } + }); + + utils.forEach(mergeDeepPropertiesKeys, mergeDeepProperties); + + utils.forEach(defaultToConfig2Keys, function defaultToConfig2(prop) { + if (!utils.isUndefined(config2[prop])) { + config[prop] = getMergedValue(undefined, config2[prop]); + } else if (!utils.isUndefined(config1[prop])) { + config[prop] = getMergedValue(undefined, config1[prop]); + } + }); + + utils.forEach(directMergeKeys, function merge(prop) { + if (prop in config2) { + config[prop] = getMergedValue(config1[prop], config2[prop]); + } else if (prop in config1) { + config[prop] = getMergedValue(undefined, config1[prop]); + } + }); + + var axiosKeys = valueFromConfig2Keys + .concat(mergeDeepPropertiesKeys) + .concat(defaultToConfig2Keys) + .concat(directMergeKeys); + + var otherKeys = Object + .keys(config1) + .concat(Object.keys(config2)) + .filter(function filterAxiosKeys(key) { + return axiosKeys.indexOf(key) === -1; + }); + + utils.forEach(otherKeys, mergeDeepProperties); + + return config; +}; diff --git a/node_modules/axios/lib/core/settle.js b/node_modules/axios/lib/core/settle.js new file mode 100644 index 0000000..886adb0 --- /dev/null +++ b/node_modules/axios/lib/core/settle.js @@ -0,0 +1,25 @@ +'use strict'; + +var createError = require('./createError'); + +/** + * Resolve or reject a Promise based on response status. + * + * @param {Function} resolve A function that resolves the promise. + * @param {Function} reject A function that rejects the promise. + * @param {object} response The response. + */ +module.exports = function settle(resolve, reject, response) { + var validateStatus = response.config.validateStatus; + if (!response.status || !validateStatus || validateStatus(response.status)) { + resolve(response); + } else { + reject(createError( + 'Request failed with status code ' + response.status, + response.config, + null, + response.request, + response + )); + } +}; diff --git a/node_modules/axios/lib/core/transformData.js b/node_modules/axios/lib/core/transformData.js new file mode 100644 index 0000000..e065362 --- /dev/null +++ b/node_modules/axios/lib/core/transformData.js @@ -0,0 +1,20 @@ +'use strict'; + +var utils = require('./../utils'); + +/** + * Transform the data for a request or a response + * + * @param {Object|String} data The data to be transformed + * @param {Array} headers The headers for the request or response + * @param {Array|Function} fns A single function or Array of functions + * @returns {*} The resulting transformed data + */ +module.exports = function transformData(data, headers, fns) { + /*eslint no-param-reassign:0*/ + utils.forEach(fns, function transform(fn) { + data = fn(data, headers); + }); + + return data; +}; diff --git a/node_modules/axios/lib/defaults.js b/node_modules/axios/lib/defaults.js new file mode 100644 index 0000000..2b2a1a7 --- /dev/null +++ b/node_modules/axios/lib/defaults.js @@ -0,0 +1,98 @@ +'use strict'; + +var utils = require('./utils'); +var normalizeHeaderName = require('./helpers/normalizeHeaderName'); + +var DEFAULT_CONTENT_TYPE = { + 'Content-Type': 'application/x-www-form-urlencoded' +}; + +function setContentTypeIfUnset(headers, value) { + if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) { + headers['Content-Type'] = value; + } +} + +function getDefaultAdapter() { + var adapter; + if (typeof XMLHttpRequest !== 'undefined') { + // For browsers use XHR adapter + adapter = require('./adapters/xhr'); + } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') { + // For node use HTTP adapter + adapter = require('./adapters/http'); + } + return adapter; +} + +var defaults = { + adapter: getDefaultAdapter(), + + transformRequest: [function transformRequest(data, headers) { + normalizeHeaderName(headers, 'Accept'); + normalizeHeaderName(headers, 'Content-Type'); + if (utils.isFormData(data) || + utils.isArrayBuffer(data) || + utils.isBuffer(data) || + utils.isStream(data) || + utils.isFile(data) || + utils.isBlob(data) + ) { + return data; + } + if (utils.isArrayBufferView(data)) { + return data.buffer; + } + if (utils.isURLSearchParams(data)) { + setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8'); + return data.toString(); + } + if (utils.isObject(data)) { + setContentTypeIfUnset(headers, 'application/json;charset=utf-8'); + return JSON.stringify(data); + } + return data; + }], + + transformResponse: [function transformResponse(data) { + /*eslint no-param-reassign:0*/ + if (typeof data === 'string') { + try { + data = JSON.parse(data); + } catch (e) { /* Ignore */ } + } + return data; + }], + + /** + * A timeout in milliseconds to abort a request. If set to 0 (default) a + * timeout is not created. + */ + timeout: 0, + + xsrfCookieName: 'XSRF-TOKEN', + xsrfHeaderName: 'X-XSRF-TOKEN', + + maxContentLength: -1, + maxBodyLength: -1, + + validateStatus: function validateStatus(status) { + return status >= 200 && status < 300; + } +}; + +defaults.headers = { + common: { + 'Accept': 'application/json, text/plain, */*' + } +}; + +utils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) { + defaults.headers[method] = {}; +}); + +utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) { + defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE); +}); + +module.exports = defaults; diff --git a/node_modules/axios/lib/helpers/README.md b/node_modules/axios/lib/helpers/README.md new file mode 100644 index 0000000..4ae3419 --- /dev/null +++ b/node_modules/axios/lib/helpers/README.md @@ -0,0 +1,7 @@ +# axios // helpers + +The modules found in `helpers/` should be generic modules that are _not_ specific to the domain logic of axios. These modules could theoretically be published to npm on their own and consumed by other modules or apps. Some examples of generic modules are things like: + +- Browser polyfills +- Managing cookies +- Parsing HTTP headers diff --git a/node_modules/axios/lib/helpers/bind.js b/node_modules/axios/lib/helpers/bind.js new file mode 100644 index 0000000..6147c60 --- /dev/null +++ b/node_modules/axios/lib/helpers/bind.js @@ -0,0 +1,11 @@ +'use strict'; + +module.exports = function bind(fn, thisArg) { + return function wrap() { + var args = new Array(arguments.length); + for (var i = 0; i < args.length; i++) { + args[i] = arguments[i]; + } + return fn.apply(thisArg, args); + }; +}; diff --git a/node_modules/axios/lib/helpers/buildURL.js b/node_modules/axios/lib/helpers/buildURL.js new file mode 100644 index 0000000..31595c3 --- /dev/null +++ b/node_modules/axios/lib/helpers/buildURL.js @@ -0,0 +1,70 @@ +'use strict'; + +var utils = require('./../utils'); + +function encode(val) { + return encodeURIComponent(val). + replace(/%3A/gi, ':'). + replace(/%24/g, '$'). + replace(/%2C/gi, ','). + replace(/%20/g, '+'). + replace(/%5B/gi, '['). + replace(/%5D/gi, ']'); +} + +/** + * Build a URL by appending params to the end + * + * @param {string} url The base of the url (e.g., http://www.google.com) + * @param {object} [params] The params to be appended + * @returns {string} The formatted url + */ +module.exports = function buildURL(url, params, paramsSerializer) { + /*eslint no-param-reassign:0*/ + if (!params) { + return url; + } + + var serializedParams; + if (paramsSerializer) { + serializedParams = paramsSerializer(params); + } else if (utils.isURLSearchParams(params)) { + serializedParams = params.toString(); + } else { + var parts = []; + + utils.forEach(params, function serialize(val, key) { + if (val === null || typeof val === 'undefined') { + return; + } + + if (utils.isArray(val)) { + key = key + '[]'; + } else { + val = [val]; + } + + utils.forEach(val, function parseValue(v) { + if (utils.isDate(v)) { + v = v.toISOString(); + } else if (utils.isObject(v)) { + v = JSON.stringify(v); + } + parts.push(encode(key) + '=' + encode(v)); + }); + }); + + serializedParams = parts.join('&'); + } + + if (serializedParams) { + var hashmarkIndex = url.indexOf('#'); + if (hashmarkIndex !== -1) { + url = url.slice(0, hashmarkIndex); + } + + url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams; + } + + return url; +}; diff --git a/node_modules/axios/lib/helpers/combineURLs.js b/node_modules/axios/lib/helpers/combineURLs.js new file mode 100644 index 0000000..f1b58a5 --- /dev/null +++ b/node_modules/axios/lib/helpers/combineURLs.js @@ -0,0 +1,14 @@ +'use strict'; + +/** + * Creates a new URL by combining the specified URLs + * + * @param {string} baseURL The base URL + * @param {string} relativeURL The relative URL + * @returns {string} The combined URL + */ +module.exports = function combineURLs(baseURL, relativeURL) { + return relativeURL + ? baseURL.replace(/\/+$/, '') + '/' + relativeURL.replace(/^\/+/, '') + : baseURL; +}; diff --git a/node_modules/axios/lib/helpers/cookies.js b/node_modules/axios/lib/helpers/cookies.js new file mode 100644 index 0000000..5a8a666 --- /dev/null +++ b/node_modules/axios/lib/helpers/cookies.js @@ -0,0 +1,53 @@ +'use strict'; + +var utils = require('./../utils'); + +module.exports = ( + utils.isStandardBrowserEnv() ? + + // Standard browser envs support document.cookie + (function standardBrowserEnv() { + return { + write: function write(name, value, expires, path, domain, secure) { + var cookie = []; + cookie.push(name + '=' + encodeURIComponent(value)); + + if (utils.isNumber(expires)) { + cookie.push('expires=' + new Date(expires).toGMTString()); + } + + if (utils.isString(path)) { + cookie.push('path=' + path); + } + + if (utils.isString(domain)) { + cookie.push('domain=' + domain); + } + + if (secure === true) { + cookie.push('secure'); + } + + document.cookie = cookie.join('; '); + }, + + read: function read(name) { + var match = document.cookie.match(new RegExp('(^|;\\s*)(' + name + ')=([^;]*)')); + return (match ? decodeURIComponent(match[3]) : null); + }, + + remove: function remove(name) { + this.write(name, '', Date.now() - 86400000); + } + }; + })() : + + // Non standard browser env (web workers, react-native) lack needed support. + (function nonStandardBrowserEnv() { + return { + write: function write() {}, + read: function read() { return null; }, + remove: function remove() {} + }; + })() +); diff --git a/node_modules/axios/lib/helpers/deprecatedMethod.js b/node_modules/axios/lib/helpers/deprecatedMethod.js new file mode 100644 index 0000000..ed40965 --- /dev/null +++ b/node_modules/axios/lib/helpers/deprecatedMethod.js @@ -0,0 +1,24 @@ +'use strict'; + +/*eslint no-console:0*/ + +/** + * Supply a warning to the developer that a method they are using + * has been deprecated. + * + * @param {string} method The name of the deprecated method + * @param {string} [instead] The alternate method to use if applicable + * @param {string} [docs] The documentation URL to get further details + */ +module.exports = function deprecatedMethod(method, instead, docs) { + try { + console.warn( + 'DEPRECATED method `' + method + '`.' + + (instead ? ' Use `' + instead + '` instead.' : '') + + ' This method will be removed in a future release.'); + + if (docs) { + console.warn('For more information about usage see ' + docs); + } + } catch (e) { /* Ignore */ } +}; diff --git a/node_modules/axios/lib/helpers/isAbsoluteURL.js b/node_modules/axios/lib/helpers/isAbsoluteURL.js new file mode 100644 index 0000000..d33e992 --- /dev/null +++ b/node_modules/axios/lib/helpers/isAbsoluteURL.js @@ -0,0 +1,14 @@ +'use strict'; + +/** + * Determines whether the specified URL is absolute + * + * @param {string} url The URL to test + * @returns {boolean} True if the specified URL is absolute, otherwise false + */ +module.exports = function isAbsoluteURL(url) { + // A URL is considered absolute if it begins with "://" or "//" (protocol-relative URL). + // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed + // by any combination of letters, digits, plus, period, or hyphen. + return /^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(url); +}; diff --git a/node_modules/axios/lib/helpers/isURLSameOrigin.js b/node_modules/axios/lib/helpers/isURLSameOrigin.js new file mode 100644 index 0000000..f1d89ad --- /dev/null +++ b/node_modules/axios/lib/helpers/isURLSameOrigin.js @@ -0,0 +1,68 @@ +'use strict'; + +var utils = require('./../utils'); + +module.exports = ( + utils.isStandardBrowserEnv() ? + + // Standard browser envs have full support of the APIs needed to test + // whether the request URL is of the same origin as current location. + (function standardBrowserEnv() { + var msie = /(msie|trident)/i.test(navigator.userAgent); + var urlParsingNode = document.createElement('a'); + var originURL; + + /** + * Parse a URL to discover it's components + * + * @param {String} url The URL to be parsed + * @returns {Object} + */ + function resolveURL(url) { + var href = url; + + if (msie) { + // IE needs attribute set twice to normalize properties + urlParsingNode.setAttribute('href', href); + href = urlParsingNode.href; + } + + urlParsingNode.setAttribute('href', href); + + // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils + return { + href: urlParsingNode.href, + protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '', + host: urlParsingNode.host, + search: urlParsingNode.search ? urlParsingNode.search.replace(/^\?/, '') : '', + hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '', + hostname: urlParsingNode.hostname, + port: urlParsingNode.port, + pathname: (urlParsingNode.pathname.charAt(0) === '/') ? + urlParsingNode.pathname : + '/' + urlParsingNode.pathname + }; + } + + originURL = resolveURL(window.location.href); + + /** + * Determine if a URL shares the same origin as the current location + * + * @param {String} requestURL The URL to test + * @returns {boolean} True if URL shares the same origin, otherwise false + */ + return function isURLSameOrigin(requestURL) { + var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL; + return (parsed.protocol === originURL.protocol && + parsed.host === originURL.host); + }; + })() : + + // Non standard browser envs (web workers, react-native) lack needed support. + (function nonStandardBrowserEnv() { + return function isURLSameOrigin() { + return true; + }; + })() +); diff --git a/node_modules/axios/lib/helpers/normalizeHeaderName.js b/node_modules/axios/lib/helpers/normalizeHeaderName.js new file mode 100644 index 0000000..738c9fe --- /dev/null +++ b/node_modules/axios/lib/helpers/normalizeHeaderName.js @@ -0,0 +1,12 @@ +'use strict'; + +var utils = require('../utils'); + +module.exports = function normalizeHeaderName(headers, normalizedName) { + utils.forEach(headers, function processHeader(value, name) { + if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) { + headers[normalizedName] = value; + delete headers[name]; + } + }); +}; diff --git a/node_modules/axios/lib/helpers/parseHeaders.js b/node_modules/axios/lib/helpers/parseHeaders.js new file mode 100644 index 0000000..8af2cc7 --- /dev/null +++ b/node_modules/axios/lib/helpers/parseHeaders.js @@ -0,0 +1,53 @@ +'use strict'; + +var utils = require('./../utils'); + +// Headers whose duplicates are ignored by node +// c.f. https://nodejs.org/api/http.html#http_message_headers +var ignoreDuplicateOf = [ + 'age', 'authorization', 'content-length', 'content-type', 'etag', + 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since', + 'last-modified', 'location', 'max-forwards', 'proxy-authorization', + 'referer', 'retry-after', 'user-agent' +]; + +/** + * Parse headers into an object + * + * ``` + * Date: Wed, 27 Aug 2014 08:58:49 GMT + * Content-Type: application/json + * Connection: keep-alive + * Transfer-Encoding: chunked + * ``` + * + * @param {String} headers Headers needing to be parsed + * @returns {Object} Headers parsed into an object + */ +module.exports = function parseHeaders(headers) { + var parsed = {}; + var key; + var val; + var i; + + if (!headers) { return parsed; } + + utils.forEach(headers.split('\n'), function parser(line) { + i = line.indexOf(':'); + key = utils.trim(line.substr(0, i)).toLowerCase(); + val = utils.trim(line.substr(i + 1)); + + if (key) { + if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) { + return; + } + if (key === 'set-cookie') { + parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]); + } else { + parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val; + } + } + }); + + return parsed; +}; diff --git a/node_modules/axios/lib/helpers/spread.js b/node_modules/axios/lib/helpers/spread.js new file mode 100644 index 0000000..25e3cdd --- /dev/null +++ b/node_modules/axios/lib/helpers/spread.js @@ -0,0 +1,27 @@ +'use strict'; + +/** + * Syntactic sugar for invoking a function and expanding an array for arguments. + * + * Common use case would be to use `Function.prototype.apply`. + * + * ```js + * function f(x, y, z) {} + * var args = [1, 2, 3]; + * f.apply(null, args); + * ``` + * + * With `spread` this example can be re-written. + * + * ```js + * spread(function(x, y, z) {})([1, 2, 3]); + * ``` + * + * @param {Function} callback + * @returns {Function} + */ +module.exports = function spread(callback) { + return function wrap(arr) { + return callback.apply(null, arr); + }; +}; diff --git a/node_modules/axios/lib/utils.js b/node_modules/axios/lib/utils.js new file mode 100644 index 0000000..83eb1c6 --- /dev/null +++ b/node_modules/axios/lib/utils.js @@ -0,0 +1,351 @@ +'use strict'; + +var bind = require('./helpers/bind'); + +/*global toString:true*/ + +// utils is a library of generic helper functions non-specific to axios + +var toString = Object.prototype.toString; + +/** + * Determine if a value is an Array + * + * @param {Object} val The value to test + * @returns {boolean} True if value is an Array, otherwise false + */ +function isArray(val) { + return toString.call(val) === '[object Array]'; +} + +/** + * Determine if a value is undefined + * + * @param {Object} val The value to test + * @returns {boolean} True if the value is undefined, otherwise false + */ +function isUndefined(val) { + return typeof val === 'undefined'; +} + +/** + * Determine if a value is a Buffer + * + * @param {Object} val The value to test + * @returns {boolean} True if value is a Buffer, otherwise false + */ +function isBuffer(val) { + return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor) + && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val); +} + +/** + * Determine if a value is an ArrayBuffer + * + * @param {Object} val The value to test + * @returns {boolean} True if value is an ArrayBuffer, otherwise false + */ +function isArrayBuffer(val) { + return toString.call(val) === '[object ArrayBuffer]'; +} + +/** + * Determine if a value is a FormData + * + * @param {Object} val The value to test + * @returns {boolean} True if value is an FormData, otherwise false + */ +function isFormData(val) { + return (typeof FormData !== 'undefined') && (val instanceof FormData); +} + +/** + * Determine if a value is a view on an ArrayBuffer + * + * @param {Object} val The value to test + * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false + */ +function isArrayBufferView(val) { + var result; + if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) { + result = ArrayBuffer.isView(val); + } else { + result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer); + } + return result; +} + +/** + * Determine if a value is a String + * + * @param {Object} val The value to test + * @returns {boolean} True if value is a String, otherwise false + */ +function isString(val) { + return typeof val === 'string'; +} + +/** + * Determine if a value is a Number + * + * @param {Object} val The value to test + * @returns {boolean} True if value is a Number, otherwise false + */ +function isNumber(val) { + return typeof val === 'number'; +} + +/** + * Determine if a value is an Object + * + * @param {Object} val The value to test + * @returns {boolean} True if value is an Object, otherwise false + */ +function isObject(val) { + return val !== null && typeof val === 'object'; +} + +/** + * Determine if a value is a plain Object + * + * @param {Object} val The value to test + * @return {boolean} True if value is a plain Object, otherwise false + */ +function isPlainObject(val) { + if (toString.call(val) !== '[object Object]') { + return false; + } + + var prototype = Object.getPrototypeOf(val); + return prototype === null || prototype === Object.prototype; +} + +/** + * Determine if a value is a Date + * + * @param {Object} val The value to test + * @returns {boolean} True if value is a Date, otherwise false + */ +function isDate(val) { + return toString.call(val) === '[object Date]'; +} + +/** + * Determine if a value is a File + * + * @param {Object} val The value to test + * @returns {boolean} True if value is a File, otherwise false + */ +function isFile(val) { + return toString.call(val) === '[object File]'; +} + +/** + * Determine if a value is a Blob + * + * @param {Object} val The value to test + * @returns {boolean} True if value is a Blob, otherwise false + */ +function isBlob(val) { + return toString.call(val) === '[object Blob]'; +} + +/** + * Determine if a value is a Function + * + * @param {Object} val The value to test + * @returns {boolean} True if value is a Function, otherwise false + */ +function isFunction(val) { + return toString.call(val) === '[object Function]'; +} + +/** + * Determine if a value is a Stream + * + * @param {Object} val The value to test + * @returns {boolean} True if value is a Stream, otherwise false + */ +function isStream(val) { + return isObject(val) && isFunction(val.pipe); +} + +/** + * Determine if a value is a URLSearchParams object + * + * @param {Object} val The value to test + * @returns {boolean} True if value is a URLSearchParams object, otherwise false + */ +function isURLSearchParams(val) { + return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams; +} + +/** + * Trim excess whitespace off the beginning and end of a string + * + * @param {String} str The String to trim + * @returns {String} The String freed of excess whitespace + */ +function trim(str) { + return str.replace(/^\s*/, '').replace(/\s*$/, ''); +} + +/** + * Determine if we're running in a standard browser environment + * + * This allows axios to run in a web worker, and react-native. + * Both environments support XMLHttpRequest, but not fully standard globals. + * + * web workers: + * typeof window -> undefined + * typeof document -> undefined + * + * react-native: + * navigator.product -> 'ReactNative' + * nativescript + * navigator.product -> 'NativeScript' or 'NS' + */ +function isStandardBrowserEnv() { + if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' || + navigator.product === 'NativeScript' || + navigator.product === 'NS')) { + return false; + } + return ( + typeof window !== 'undefined' && + typeof document !== 'undefined' + ); +} + +/** + * Iterate over an Array or an Object invoking a function for each item. + * + * If `obj` is an Array callback will be called passing + * the value, index, and complete array for each item. + * + * If 'obj' is an Object callback will be called passing + * the value, key, and complete object for each property. + * + * @param {Object|Array} obj The object to iterate + * @param {Function} fn The callback to invoke for each item + */ +function forEach(obj, fn) { + // Don't bother if no value provided + if (obj === null || typeof obj === 'undefined') { + return; + } + + // Force an array if not already something iterable + if (typeof obj !== 'object') { + /*eslint no-param-reassign:0*/ + obj = [obj]; + } + + if (isArray(obj)) { + // Iterate over array values + for (var i = 0, l = obj.length; i < l; i++) { + fn.call(null, obj[i], i, obj); + } + } else { + // Iterate over object keys + for (var key in obj) { + if (Object.prototype.hasOwnProperty.call(obj, key)) { + fn.call(null, obj[key], key, obj); + } + } + } +} + +/** + * Accepts varargs expecting each argument to be an object, then + * immutably merges the properties of each object and returns result. + * + * When multiple objects contain the same key the later object in + * the arguments list will take precedence. + * + * Example: + * + * ```js + * var result = merge({foo: 123}, {foo: 456}); + * console.log(result.foo); // outputs 456 + * ``` + * + * @param {Object} obj1 Object to merge + * @returns {Object} Result of all merge properties + */ +function merge(/* obj1, obj2, obj3, ... */) { + var result = {}; + function assignValue(val, key) { + if (isPlainObject(result[key]) && isPlainObject(val)) { + result[key] = merge(result[key], val); + } else if (isPlainObject(val)) { + result[key] = merge({}, val); + } else if (isArray(val)) { + result[key] = val.slice(); + } else { + result[key] = val; + } + } + + for (var i = 0, l = arguments.length; i < l; i++) { + forEach(arguments[i], assignValue); + } + return result; +} + +/** + * Extends object a by mutably adding to it the properties of object b. + * + * @param {Object} a The object to be extended + * @param {Object} b The object to copy properties from + * @param {Object} thisArg The object to bind function to + * @return {Object} The resulting value of object a + */ +function extend(a, b, thisArg) { + forEach(b, function assignValue(val, key) { + if (thisArg && typeof val === 'function') { + a[key] = bind(val, thisArg); + } else { + a[key] = val; + } + }); + return a; +} + +/** + * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM) + * + * @param {string} content with BOM + * @return {string} content value without BOM + */ +function stripBOM(content) { + if (content.charCodeAt(0) === 0xFEFF) { + content = content.slice(1); + } + return content; +} + +module.exports = { + isArray: isArray, + isArrayBuffer: isArrayBuffer, + isBuffer: isBuffer, + isFormData: isFormData, + isArrayBufferView: isArrayBufferView, + isString: isString, + isNumber: isNumber, + isObject: isObject, + isPlainObject: isPlainObject, + isUndefined: isUndefined, + isDate: isDate, + isFile: isFile, + isBlob: isBlob, + isFunction: isFunction, + isStream: isStream, + isURLSearchParams: isURLSearchParams, + isStandardBrowserEnv: isStandardBrowserEnv, + forEach: forEach, + merge: merge, + extend: extend, + trim: trim, + stripBOM: stripBOM +}; diff --git a/node_modules/axios/package.json b/node_modules/axios/package.json new file mode 100644 index 0000000..ceee0f8 --- /dev/null +++ b/node_modules/axios/package.json @@ -0,0 +1,114 @@ +{ + "_from": "axios", + "_id": "axios@0.21.0", + "_inBundle": false, + "_integrity": "sha1-Jt8IiAOiNQ3/LCf5b++Z/klEKso=", + "_location": "/axios", + "_phantomChildren": {}, + "_requested": { + "type": "tag", + "registry": true, + "raw": "axios", + "name": "axios", + "escapedName": "axios", + "rawSpec": "", + "saveSpec": null, + "fetchSpec": "latest" + }, + "_requiredBy": [ + "#USER", + "/" + ], + "_resolved": "https://registry.npm.taobao.org/axios/download/axios-0.21.0.tgz", + "_shasum": "26df088803a2350dff2c27f96fef99fe49442aca", + "_spec": "axios", + "_where": "D:\\github\\zyplayer", + "author": { + "name": "Matt Zabriskie" + }, + "browser": { + "./lib/adapters/http.js": "./lib/adapters/xhr.js" + }, + "bugs": { + "url": "https://github.com/axios/axios/issues" + }, + "bundleDependencies": false, + "bundlesize": [ + { + "path": "./dist/axios.min.js", + "threshold": "5kB" + } + ], + "dependencies": { + "follow-redirects": "^1.10.0" + }, + "deprecated": false, + "description": "Promise based HTTP client for the browser and node.js", + "devDependencies": { + "bundlesize": "^0.17.0", + "coveralls": "^3.0.0", + "es6-promise": "^4.2.4", + "grunt": "^1.0.2", + "grunt-banner": "^0.6.0", + "grunt-cli": "^1.2.0", + "grunt-contrib-clean": "^1.1.0", + "grunt-contrib-watch": "^1.0.0", + "grunt-eslint": "^20.1.0", + "grunt-karma": "^2.0.0", + "grunt-mocha-test": "^0.13.3", + "grunt-ts": "^6.0.0-beta.19", + "grunt-webpack": "^1.0.18", + "istanbul-instrumenter-loader": "^1.0.0", + "jasmine-core": "^2.4.1", + "karma": "^1.3.0", + "karma-chrome-launcher": "^2.2.0", + "karma-coverage": "^1.1.1", + "karma-firefox-launcher": "^1.1.0", + "karma-jasmine": "^1.1.1", + "karma-jasmine-ajax": "^0.1.13", + "karma-opera-launcher": "^1.0.0", + "karma-safari-launcher": "^1.0.0", + "karma-sauce-launcher": "^1.2.0", + "karma-sinon": "^1.0.5", + "karma-sourcemap-loader": "^0.3.7", + "karma-webpack": "^1.7.0", + "load-grunt-tasks": "^3.5.2", + "minimist": "^1.2.0", + "mocha": "^5.2.0", + "sinon": "^4.5.0", + "typescript": "^2.8.1", + "url-search-params": "^0.10.0", + "webpack": "^1.13.1", + "webpack-dev-server": "^1.14.1" + }, + "homepage": "https://github.com/axios/axios", + "jsdelivr": "dist/axios.min.js", + "keywords": [ + "xhr", + "http", + "ajax", + "promise", + "node" + ], + "license": "MIT", + "main": "index.js", + "name": "axios", + "repository": { + "type": "git", + "url": "git+https://github.com/axios/axios.git" + }, + "scripts": { + "build": "NODE_ENV=production grunt build", + "coveralls": "cat coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js", + "examples": "node ./examples/server.js", + "fix": "eslint --fix lib/**/*.js", + "postversion": "git push && git push --tags", + "preversion": "npm test", + "start": "node ./sandbox/server.js", + "test": "grunt test && bundlesize", + "version": "npm run build && grunt version && git add -A dist && git add CHANGELOG.md bower.json package.json" + }, + "typings": "./index.d.ts", + "unpkg": "dist/axios.min.js", + "version": "0.21.0" +} diff --git a/node_modules/fast-xml-parser/LICENSE b/node_modules/fast-xml-parser/LICENSE new file mode 100644 index 0000000..b59d02d --- /dev/null +++ b/node_modules/fast-xml-parser/LICENSE @@ -0,0 +1,23 @@ +MIT License + +Copyright (c) 2017 Amit Kumar Gupta + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +If you use this library in a public repository then you give us the right to mention your company name and logo in user's list without further permission required, but you can request them to be taken down within 30 days. + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/fast-xml-parser/README.md b/node_modules/fast-xml-parser/README.md new file mode 100644 index 0000000..d26fd3a --- /dev/null +++ b/node_modules/fast-xml-parser/README.md @@ -0,0 +1,350 @@ + + +# [fast-xml-parser](https://www.npmjs.com/package/fast-xml-parser) +[![Backers on Open Collective](https://opencollective.com/fast-xml-parser/backers/badge.svg)](#backers) [![Sponsors on Open Collective](https://opencollective.com/fast-xml-parser/sponsors/badge.svg)](#sponsors) [![Known Vulnerabilities](https://snyk.io/test/github/naturalintelligence/fast-xml-parser/badge.svg)](https://snyk.io/test/github/naturalintelligence/fast-xml-parser) +[![NPM quality][quality-image]][quality-url] +[![Travis ci Build Status](https://travis-ci.org/NaturalIntelligence/fast-xml-parser.svg?branch=master)](https://travis-ci.org/NaturalIntelligence/fast-xml-parser) +[![Coverage Status](https://coveralls.io/repos/github/NaturalIntelligence/fast-xml-parser/badge.svg?branch=master)](https://coveralls.io/github/NaturalIntelligence/fast-xml-parser?branch=master) +[Try me](https://naturalintelligence.github.io/fast-xml-parser/) +[![NPM total downloads](https://img.shields.io/npm/dt/fast-xml-parser.svg)](https://npm.im/fast-xml-parser) + +[quality-image]: http://npm.packagequality.com/shield/fast-xml-parser.svg?style=flat-square +[quality-url]: http://packagequality.com/#?package=fast-xml-parser + + +Validate XML, Parse XML to JS/JSON and vice versa, or parse XML to Nimn rapidly without C/C++ based libraries and no callback + +![Donate $5](static/img/donation_quote.png) + + + + +Become a Patron! + Stubmatic donate button + +## Users +List of some applications/projects using Fast XML Parser. (Raise an issue to submit yours) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +### Main Features + +FXP logo + +* Validate XML data syntactically +* Transform XML to JSON or Nimn +* Transform JSON back to XML +* Works with node packages, in browser, and in CLI (press try me button above for demo) +* Faster than any pure JS implementation. +* It can handle big files (tested up to 100mb). +* Various options are available to customize the transformation + * You can parse CDATA as a separate property. + * You can prefix attributes or group them to a separate property. Or they can be ignored from the result completely. + * You can parse tag's or attribute's value to primitive type: string, integer, float, hexadecimal, or boolean. And can optionally decode for HTML char. + * You can remove namespace from tag or attribute name while parsing + * It supports boolean attributes, if configured. + +## How to use + +To use it in **NPM package** install it first + +`$npm install fast-xml-parser` or using [yarn](https://yarnpkg.com/) `$yarn add fast-xml-parser` + +To use it from a **CLI** install it globally with the `-g` option. + +`$npm install fast-xml-parser -g` + +To use it on a **webpage** include it from a [CDN](https://cdnjs.com/libraries/fast-xml-parser) + +### XML to JSON + + +```js +var jsonObj = parser.parse(xmlData [,options] ); +``` + +```js +var parser = require('fast-xml-parser'); +var he = require('he'); + +var options = { + attributeNamePrefix : "@_", + attrNodeName: "attr", //default is 'false' + textNodeName : "#text", + ignoreAttributes : true, + ignoreNameSpace : false, + allowBooleanAttributes : false, + parseNodeValue : true, + parseAttributeValue : false, + trimValues: true, + cdataTagName: "__cdata", //default is 'false' + cdataPositionChar: "\\c", + parseTrueNumberOnly: false, + arrayMode: false, //"strict" + attrValueProcessor: (val, attrName) => he.decode(val, {isAttributeValue: true}),//default is a=>a + tagValueProcessor : (val, tagName) => he.decode(val), //default is a=>a + stopNodes: ["parse-me-as-string"] +}; + +if( parser.validate(xmlData) === true) { //optional (it'll return an object in case it's not valid) + var jsonObj = parser.parse(xmlData,options); +} + +// Intermediate obj +var tObj = parser.getTraversalObj(xmlData,options); +var jsonObj = parser.convertToJson(tObj,options); + +``` +As you can notice in the above code, validator is not embedded with in the parser and expected to be called separately. However, you can pass `true` or validation options as 3rd parameter to the parser to trigger validator internally. It is same as above example. + +```js +try{ + var jsonObj = parser.parse(xmlData,options, true); +}catch(error){ + console.log(error.message) +} +``` + +Validator returns the following object in case of error; +```js +{ + err: { + code: code, + msg: message, + line: lineNumber, + }, +}; +``` + + +#### Note: [he](https://www.npmjs.com/package/he) library is used in this example + +

    + OPTIONS : + +* **attributeNamePrefix** : prepend given string to attribute name for identification +* **attrNodeName**: (Valid name) Group all the attributes as properties of given name. +* **ignoreAttributes** : Ignore attributes to be parsed. +* **ignoreNameSpace** : Remove namespace string from tag and attribute names. +* **allowBooleanAttributes** : a tag can have attributes without any value +* **parseNodeValue** : Parse the value of text node to float, integer, or boolean. +* **parseAttributeValue** : Parse the value of an attribute to float, integer, or boolean. +* **trimValues** : trim string values of an attribute or node +* **decodeHTMLchar** : This options has been removed from 3.3.4. Instead, use tagValueProcessor, and attrValueProcessor. See above example. +* **cdataTagName** : If specified, parser parse CDATA as nested tag instead of adding it's value to parent tag. +* **cdataPositionChar** : It'll help to covert JSON back to XML without losing CDATA position. +* **parseTrueNumberOnly**: if true then values like "+123", or "0123" will not be parsed as number. +* **arrayMode** : When `false`, a tag with single occurrence is parsed as an object but as an array in case of multiple occurences. When `true`, a tag will be parsed as an array always excluding leaf nodes. When `strict`, all the tags will be parsed as array only. +* **tagValueProcessor** : Process tag value during transformation. Like HTML decoding, word capitalization, etc. Applicable in case of string only. +* **attrValueProcessor** : Process attribute value during transformation. Like HTML decoding, word capitalization, etc. Applicable in case of string only. +* **stopNodes** : an array of tag names which are not required to be parsed. Instead their values are parsed as string. + +
    + +
    + To use from command line + +```bash +$xml2js [-ns|-a|-c|-v|-V] [-o outputfile.json] +$cat xmlfile.xml | xml2js [-ns|-a|-c|-v|-V] [-o outputfile.json] +``` + +* -ns : To include namespaces (by default ignored) +* -a : To ignore attributes +* -c : To ignore value conversion (i.e. "-3" will not be converted to number -3) +* -v : validate before parsing +* -V : only validate +
    + + +
    + To use it on webpage + +```js +var result = parser.validate(xmlData); +if (result !== true) console.log(result.err); +var jsonObj = parser.parse(xmlData); +``` +
    + +### JSON / JS Object to XML + +```js +var Parser = require("fast-xml-parser").j2xParser; +//default options need not to set +var defaultOptions = { + attributeNamePrefix : "@_", + attrNodeName: "@", //default is false + textNodeName : "#text", + ignoreAttributes : true, + cdataTagName: "__cdata", //default is false + cdataPositionChar: "\\c", + format: false, + indentBy: " ", + supressEmptyNode: false, + tagValueProcessor: a=> he.encode(a, { useNamedReferences: true}),// default is a=>a + attrValueProcessor: a=> he.encode(a, {isAttributeValue: isAttribute, useNamedReferences: true})// default is a=>a +}; +var parser = new Parser(defaultOptions); +var xml = parser.parse(json_or_js_obj); +``` + +
    + OPTIONS : + +With the correct options, you can get the almost original XML without losing any information. + +* **attributeNamePrefix** : Identify attributes with this prefix otherwise treat them as a tag. +* **attrNodeName**: Identify attributes when they are grouped under single property. +* **ignoreAttributes** : Don't check for attributes. Treats everything as tag. +* **encodeHTMLchar** : This option has been removed from 3.3.4. Use tagValueProcessor, and attrValueProcessor instead. See above example. +* **cdataTagName** : If specified, parse matching tag as CDATA +* **cdataPositionChar** : Identify the position where CDATA tag should be placed. If it is blank then CDATA will be added in the last of tag's value. +* **format** : If set to true, then format the XML output. +* **indentBy** : indent by this char `when` format is set to `true` +* **supressEmptyNode** : If set to `true`, tags with no value (text or nested tags) are written as self closing tags. +* **tagValueProcessor** : Process tag value during transformation. Like HTML encoding, word capitalization, etc. Applicable in case of string only. +* **attrValueProcessor** : Process attribute value during transformation. Like HTML encoding, word capitalization, etc. Applicable in case of string only. +
    + +## Benchmark + +#### XML to JSON + +![npm_xml2json_compare](static/img/fxpv3-vs-xml2jsv0419_chart.png) + +
    + report + +| file size | fxp 3.0 validator (rps) | fxp 3.0 parser (rps) | xml2js 0.4.19 (rps) | +| ---------- | ----------------------- | ------------------- | ------------------- | +| 1.5k | 16581.06758 | 14032.09323 | 4615.930805 | +| 1.5m | 14918.47793 | 13.23366098 | 5.90682005 | +| 13m | 1.834479235 | 1.135582008 | -1 | +| 1.3k with CDATA | 30583.35319 | 43160.52342 | 8398.556349 | +| 1.3m with CDATA | 27.29266471 | 52.68877009 | 7.966000795 | +| 1.6k with cdata,prolog,doctype | 27690.26082 | 41433.98547 | 7872.399268 | +| 98m | 0.08473858148 | 0.2600104004 | -1 | + +* -1 indicates error or incorrect output. +
    + + +#### JSON to XML + +![npm_xml2json_compare](static/img/j2x.png) + +
    + report + +| file size | fxp 3.2 js to xml | xml2js 0.4.19 builder | +|------------|-----------------|-----------------| +| 1.3k | 160148.9801 | 10384.99401| +| 1.1m | 173.6374831 | 8.611884025| + +
    + +### Limitations + Currently FXP fails to parse XML with attributes has ">" in the value. This problem is left open as change in regex for its fix is degrading the performance. And the parser become very slow in case of long attribute names. However, it is not ignored and we're working on the fix. + +### Worth to mention + +- **[BigBit standard)](https://github.com/amitguptagwl/bigbit)** : A standard to represent any number in the universe in comparatively less space and without precision loss. A standard to save memory to represent any text string in comparision of UTF encodings. +- **[imglab](https://github.com/NaturalIntelligence/imglab)** : Speedup and simplify image labeling / annotation. Supports multiple formats, one click annotation, easy interface and much more. There are more than half million images are being annotated every month using this tool. +- [stubmatic](https://github.com/NaturalIntelligence/Stubmatic) : Create fake webservices, DynamoDB or S3 servers, Manage fake/mock stub data, Or fake any HTTP(s) call. +- **[अनुमार्गक (anumargak)](https://github.com/NaturalIntelligence/anumargak)** : The fastest and simple router for node js web frameworks with many unique features. +- [मुनीम (Muneem)](https://github.com/muneem4node/muneem) : A webframework made for all team members. Fast and Featured. +- [शब्दावली (shabdawali)](https://github.com/amitguptagwl/shabdawali) : Amazing human like typing effects beyond your imagination. + + + +## Contributors + +This project exists thanks to [all](graphs/contributors) the people who contribute. [[Contribute](CONTRIBUTING.md)]. + + + + +## Backers + +Thank you to all our backers! 🙏 [[Become a backer](https://opencollective.com/fast-xml-parser#backer)] + + + + +## Sponsors + +Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [[Become a sponsor](https://opencollective.com/fast-xml-parser#sponsor)] + + + + + + + + + + + diff --git a/node_modules/fast-xml-parser/cli.js b/node_modules/fast-xml-parser/cli.js new file mode 100644 index 0000000..913dbc0 --- /dev/null +++ b/node_modules/fast-xml-parser/cli.js @@ -0,0 +1,101 @@ +#!/usr/bin/env node +'use strict'; +/*eslint-disable no-console*/ +const fs = require('fs'); +const path = require('path'); +const parser = require('./src/parser'); +const readToEnd = require('./src/read').readToEnd; + +if (process.argv[2] === '--help' || process.argv[2] === '-h') { + console.log('Fast XML Parser ' + require(path.join(__dirname + '/package.json')).version); + console.log('----------------'); + console.log('xml2js [-ns|-a|-c|-v|-V] [-o outputfile.json]'); + console.log('cat xmlfile.xml | xml2js [-ns|-a|-c|-v|-V] [-o outputfile.json]'); + console.log('-ns: remove namespace from tag and atrribute name.'); + console.log("-a: don't parse attributes."); + console.log('-c: parse values to premitive type.'); + console.log('-v: validate before parsing.'); + console.log('-V: validate only.'); +} else if (process.argv[2] === '--version') { + console.log(require(path.join(__dirname + '/package.json')).version); +} else { + const options = { + ignoreNameSpace: true, + ignoreAttributes: false, + parseNodeValue: true, + parseAttributeValue: true, + }; + let fileName = ''; + let outputFileName; + let validate = false; + let validateOnly = false; + for (let i = 2; i < process.argv.length; i++) { + if (process.argv[i] === '-ns') { + options.ignoreNameSpace = false; + } else if (process.argv[i] === '-a') { + options.ignoreAttributes = true; + } else if (process.argv[i] === '-c') { + options.parseNodeValue = false; + options.parseAttributeValue = false; + } else if (process.argv[i] === '-o') { + outputFileName = process.argv[++i]; + } else if (process.argv[i] === '-v') { + validate = true; + } else if (process.argv[i] === '-V') { + validateOnly = true; + } else { + //filename + fileName = process.argv[i]; + } + } + const callback = function(xmlData) { + let output = ''; + if (validate) { + const result = parser.validate(xmlData); + if (result === true) { + output = JSON.stringify(parser.parse(xmlData, options), null, 4); + } else { + output = result; + } + } else if (validateOnly) { + output = parser.validate(xmlData); + process.exitCode = output === true ? 0 : 1; + } else { + output = JSON.stringify(parser.parse(xmlData, options), null, 4); + } + if (outputFileName) { + writeToFile(outputFileName, output); + } else { + console.log(output); + } + }; + + try { + if (!fileName) { + readToEnd(process.stdin, function(err, data) { + if (err) { + throw err; + } + callback(data.toString()); + }); + } else { + fs.readFile(fileName, function(err, data) { + if (err) { + throw err; + } + callback(data.toString()); + }); + } + } catch (e) { + console.log('Seems an invalid file or stream.' + e); + } +} + +function writeToFile(fileName, data) { + fs.writeFile(fileName, data, function(err) { + if (err) { + throw err; + } + console.log('JSON output has been written to ' + fileName); + }); +} diff --git a/node_modules/fast-xml-parser/package.json b/node_modules/fast-xml-parser/package.json new file mode 100644 index 0000000..51ddeb1 --- /dev/null +++ b/node_modules/fast-xml-parser/package.json @@ -0,0 +1,127 @@ +{ + "_from": "fast-xml-parser", + "_id": "fast-xml-parser@3.17.4", + "_inBundle": false, + "_integrity": "sha1-1mhJX7Pku895cPPCSsABnYLnZHc=", + "_location": "/fast-xml-parser", + "_phantomChildren": {}, + "_requested": { + "type": "tag", + "registry": true, + "raw": "fast-xml-parser", + "name": "fast-xml-parser", + "escapedName": "fast-xml-parser", + "rawSpec": "", + "saveSpec": null, + "fetchSpec": "latest" + }, + "_requiredBy": [ + "#USER", + "/" + ], + "_resolved": "https://registry.npm.taobao.org/fast-xml-parser/download/fast-xml-parser-3.17.4.tgz", + "_shasum": "d668495fb3e4bbcf7970f3c24ac0019d82e76477", + "_spec": "fast-xml-parser", + "_where": "D:\\github\\zyplayer", + "author": { + "name": "Amit Gupta", + "url": "https://amitkumargupta.work/" + }, + "bin": { + "xml2js": "cli.js" + }, + "bugs": { + "url": "https://github.com/NaturalIntelligence/fast-xml-parser/issues" + }, + "bundleDependencies": false, + "contributors": [ + { + "name": "Alfonso Muñoz-Pomer Fuentes", + "email": "amunoz@ebi.ac.uk", + "url": "https://github.com/alfonsomunozpomer" + }, + { + "name": "Steve Reichenbach", + "url": "https://github.com/EyesOnlyNet" + }, + { + "name": "Vohmyanin Sergey Vasilevich", + "url": "http://delagen.livejournal.com" + }, + { + "name": "Andrew Udvare", + "url": "https://github.com/Tatsh" + } + ], + "deprecated": false, + "description": "Validate XML or Parse XML to JS/JSON very fast without C/C++ based libraries", + "devDependencies": { + "@babel/core": "^7.10.2", + "@babel/plugin-transform-runtime": "^7.10.1", + "@babel/preset-env": "^7.10.2", + "@babel/register": "^7.10.1", + "babel-loader": "^8.1.0", + "eslint": "^5.16.0", + "he": "^1.2.0", + "http-server": "^0.12.3", + "istanbul": "^0.4.5", + "jasmine": "^3.5.0", + "nimnjs": "^1.3.2", + "prettier": "^1.19.1", + "publish-please": "^5.5.1", + "webpack": "^4.43.0", + "webpack-cli": "^3.3.11" + }, + "funding": { + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" + }, + "homepage": "https://github.com/NaturalIntelligence/fast-xml-parser#readme", + "keywords": [ + "fast", + "xml", + "json", + "parser", + "xml2js", + "x2js", + "xml2json", + "js", + "traversable", + "cli", + "command", + "validator", + "validate", + "transformer", + "checker", + "assert", + "big", + "js2xml", + "json2xml", + "nimn", + "xml2nimn", + "locale", + "html" + ], + "license": "MIT", + "main": "./src/parser.js", + "name": "fast-xml-parser", + "repository": { + "type": "git", + "url": "git+https://github.com/NaturalIntelligence/fast-xml-parser.git" + }, + "scripts": { + "bundle": "webpack && webpack --config webpack-prod.config.js", + "coverage": "istanbul cover -x \"cli.js\" -x \"spec/*spec.js\" jasmine spec/*spec.js;", + "coverage:check": "istanbul check-coverage --branch 90 --statement 90", + "lint": "eslint src/*.js spec/*.js", + "perf": "node ./benchmark/perfTest3.js", + "postinstall": "node tasks/postinstall.js || exit 0", + "prepublishOnly": "publish-please guard", + "prettier": "prettier --write src/**/*.js", + "publish-please": "publish-please", + "test": "jasmine spec/*spec.js", + "unit": "jasmine" + }, + "typings": "src/parser.d.ts", + "version": "3.17.4" +} diff --git a/node_modules/fast-xml-parser/src/json2xml.js b/node_modules/fast-xml-parser/src/json2xml.js new file mode 100644 index 0000000..1c5a9e3 --- /dev/null +++ b/node_modules/fast-xml-parser/src/json2xml.js @@ -0,0 +1,268 @@ +'use strict'; +//parse Empty Node as self closing node +const buildOptions = require('./util').buildOptions; + +const defaultOptions = { + attributeNamePrefix: '@_', + attrNodeName: false, + textNodeName: '#text', + ignoreAttributes: true, + cdataTagName: false, + cdataPositionChar: '\\c', + format: false, + indentBy: ' ', + supressEmptyNode: false, + tagValueProcessor: function(a) { + return a; + }, + attrValueProcessor: function(a) { + return a; + }, +}; + +const props = [ + 'attributeNamePrefix', + 'attrNodeName', + 'textNodeName', + 'ignoreAttributes', + 'cdataTagName', + 'cdataPositionChar', + 'format', + 'indentBy', + 'supressEmptyNode', + 'tagValueProcessor', + 'attrValueProcessor', +]; + +function Parser(options) { + this.options = buildOptions(options, defaultOptions, props); + if (this.options.ignoreAttributes || this.options.attrNodeName) { + this.isAttribute = function(/*a*/) { + return false; + }; + } else { + this.attrPrefixLen = this.options.attributeNamePrefix.length; + this.isAttribute = isAttribute; + } + if (this.options.cdataTagName) { + this.isCDATA = isCDATA; + } else { + this.isCDATA = function(/*a*/) { + return false; + }; + } + this.replaceCDATAstr = replaceCDATAstr; + this.replaceCDATAarr = replaceCDATAarr; + + if (this.options.format) { + this.indentate = indentate; + this.tagEndChar = '>\n'; + this.newLine = '\n'; + } else { + this.indentate = function() { + return ''; + }; + this.tagEndChar = '>'; + this.newLine = ''; + } + + if (this.options.supressEmptyNode) { + this.buildTextNode = buildEmptyTextNode; + this.buildObjNode = buildEmptyObjNode; + } else { + this.buildTextNode = buildTextValNode; + this.buildObjNode = buildObjectNode; + } + + this.buildTextValNode = buildTextValNode; + this.buildObjectNode = buildObjectNode; +} + +Parser.prototype.parse = function(jObj) { + return this.j2x(jObj, 0).val; +}; + +Parser.prototype.j2x = function(jObj, level) { + let attrStr = ''; + let val = ''; + const keys = Object.keys(jObj); + const len = keys.length; + for (let i = 0; i < len; i++) { + const key = keys[i]; + if (typeof jObj[key] === 'undefined') { + // supress undefined node + } else if (jObj[key] === null) { + val += this.indentate(level) + '<' + key + '/' + this.tagEndChar; + } else if (jObj[key] instanceof Date) { + val += this.buildTextNode(jObj[key], key, '', level); + } else if (typeof jObj[key] !== 'object') { + //premitive type + const attr = this.isAttribute(key); + if (attr) { + attrStr += ' ' + attr + '="' + this.options.attrValueProcessor('' + jObj[key]) + '"'; + } else if (this.isCDATA(key)) { + if (jObj[this.options.textNodeName]) { + val += this.replaceCDATAstr(jObj[this.options.textNodeName], jObj[key]); + } else { + val += this.replaceCDATAstr('', jObj[key]); + } + } else { + //tag value + if (key === this.options.textNodeName) { + if (jObj[this.options.cdataTagName]) { + //value will added while processing cdata + } else { + val += this.options.tagValueProcessor('' + jObj[key]); + } + } else { + val += this.buildTextNode(jObj[key], key, '', level); + } + } + } else if (Array.isArray(jObj[key])) { + //repeated nodes + if (this.isCDATA(key)) { + val += this.indentate(level); + if (jObj[this.options.textNodeName]) { + val += this.replaceCDATAarr(jObj[this.options.textNodeName], jObj[key]); + } else { + val += this.replaceCDATAarr('', jObj[key]); + } + } else { + //nested nodes + const arrLen = jObj[key].length; + for (let j = 0; j < arrLen; j++) { + const item = jObj[key][j]; + if (typeof item === 'undefined') { + // supress undefined node + } else if (item === null) { + val += this.indentate(level) + '<' + key + '/' + this.tagEndChar; + } else if (typeof item === 'object') { + const result = this.j2x(item, level + 1); + val += this.buildObjNode(result.val, key, result.attrStr, level); + } else { + val += this.buildTextNode(item, key, '', level); + } + } + } + } else { + //nested node + if (this.options.attrNodeName && key === this.options.attrNodeName) { + const Ks = Object.keys(jObj[key]); + const L = Ks.length; + for (let j = 0; j < L; j++) { + attrStr += ' ' + Ks[j] + '="' + this.options.attrValueProcessor('' + jObj[key][Ks[j]]) + '"'; + } + } else { + const result = this.j2x(jObj[key], level + 1); + val += this.buildObjNode(result.val, key, result.attrStr, level); + } + } + } + return {attrStr: attrStr, val: val}; +}; + +function replaceCDATAstr(str, cdata) { + str = this.options.tagValueProcessor('' + str); + if (this.options.cdataPositionChar === '' || str === '') { + return str + ''); + } + return str + this.newLine; + } +} + +function buildObjectNode(val, key, attrStr, level) { + if (attrStr && !val.includes('<')) { + return ( + this.indentate(level) + + '<' + + key + + attrStr + + '>' + + val + + //+ this.newLine + // + this.indentate(level) + '' + + this.options.tagValueProcessor(val) + + ' 1) { + jObj[tagname] = []; + for (var tag in node.child[tagname]) { + jObj[tagname].push(convertToJson(node.child[tagname][tag], options)); + } + } else { + if(options.arrayMode === true){ + const result = convertToJson(node.child[tagname][0], options) + if(typeof result === 'object') + jObj[tagname] = [ result ]; + else + jObj[tagname] = result; + }else if(options.arrayMode === "strict"){ + jObj[tagname] = [convertToJson(node.child[tagname][0], options) ]; + }else{ + jObj[tagname] = convertToJson(node.child[tagname][0], options); + } + } + } + + //add value + return jObj; +}; + +exports.convertToJson = convertToJson; diff --git a/node_modules/fast-xml-parser/src/node2json_str.js b/node_modules/fast-xml-parser/src/node2json_str.js new file mode 100644 index 0000000..e3758a4 --- /dev/null +++ b/node_modules/fast-xml-parser/src/node2json_str.js @@ -0,0 +1,63 @@ +'use strict'; + +const util = require('./util'); +const buildOptions = require('./util').buildOptions; +const x2j = require('./xmlstr2xmlnode'); + +//TODO: do it later +const convertToJsonString = function(node, options) { + options = buildOptions(options, x2j.defaultOptions, x2j.props); + + options.indentBy = options.indentBy || ''; + return _cToJsonStr(node, options, 0); +}; + +const _cToJsonStr = function(node, options, level) { + let jObj = '{'; + + //traver through all the children + const keys = Object.keys(node.child); + + for (let index = 0; index < keys.length; index++) { + var tagname = keys[index]; + if (node.child[tagname] && node.child[tagname].length > 1) { + jObj += '"' + tagname + '" : [ '; + for (var tag in node.child[tagname]) { + jObj += _cToJsonStr(node.child[tagname][tag], options) + ' , '; + } + jObj = jObj.substr(0, jObj.length - 1) + ' ] '; //remove extra comma in last + } else { + jObj += '"' + tagname + '" : ' + _cToJsonStr(node.child[tagname][0], options) + ' ,'; + } + } + util.merge(jObj, node.attrsMap); + //add attrsMap as new children + if (util.isEmptyObject(jObj)) { + return util.isExist(node.val) ? node.val : ''; + } else { + if (util.isExist(node.val)) { + if (!(typeof node.val === 'string' && (node.val === '' || node.val === options.cdataPositionChar))) { + jObj += '"' + options.textNodeName + '" : ' + stringval(node.val); + } + } + } + //add value + if (jObj[jObj.length - 1] === ',') { + jObj = jObj.substr(0, jObj.length - 2); + } + return jObj + '}'; +}; + +function stringval(v) { + if (v === true || v === false || !isNaN(v)) { + return v; + } else { + return '"' + v + '"'; + } +} + +function indentate(options, level) { + return options.indentBy.repeat(level); +} + +exports.convertToJsonString = convertToJsonString; diff --git a/node_modules/fast-xml-parser/src/parser.d.ts b/node_modules/fast-xml-parser/src/parser.d.ts new file mode 100644 index 0000000..44fe063 --- /dev/null +++ b/node_modules/fast-xml-parser/src/parser.d.ts @@ -0,0 +1,72 @@ +type X2jOptions = { + attributeNamePrefix: string; + attrNodeName: false | string; + textNodeName: string; + ignoreAttributes: boolean; + ignoreNameSpace: boolean; + allowBooleanAttributes: boolean; + parseNodeValue: boolean; + parseAttributeValue: boolean; + arrayMode: boolean | 'strict'; + trimValues: boolean; + cdataTagName: false | string; + cdataPositionChar: string; + parseTrueNumberOnly: boolean; + tagValueProcessor: (tagValue: string, tagName: string) => string; + attrValueProcessor: (attrValue: string, attrName: string) => string; + stopNodes: string[]; +}; +type X2jOptionsOptional = Partial; +type validationOptions = { + allowBooleanAttributes: boolean; +}; +type validationOptionsOptional = Partial; +type J2xOptions = { + attributeNamePrefix: string; + attrNodeName: false | string; + textNodeName: string; + ignoreAttributes: boolean; + cdataTagName: false | string; + cdataPositionChar: string; + format: boolean; + indentBy: string; + supressEmptyNode: boolean; + tagValueProcessor: (tagValue: string) => string; + attrValueProcessor: (attrValue: string) => string; +}; +type J2xOptionsOptional = Partial; + +type ESchema = string | object | Array; + +type ValidationError = { + err: { code: string; msg: string, line: number }; +}; + +export function parse(xmlData: string, options?: X2jOptionsOptional, validationOptions?: validationOptionsOptional | boolean): any; +export function convert2nimn( + node: any, + e_schema: ESchema, + options?: X2jOptionsOptional +): any; +export function getTraversalObj( + xmlData: string, + options?: X2jOptionsOptional +): any; +export function convertToJson(node: any, options?: X2jOptionsOptional): any; +export function convertToJsonString( + node: any, + options?: X2jOptionsOptional +): string; +export function validate( + xmlData: string, + options?: validationOptionsOptional +): true | ValidationError; +export class j2xParser { + constructor(options: J2xOptionsOptional); + parse(options: any): any; +} +export function parseToNimn( + xmlData: string, + schema: any, + options: Partial +): any; diff --git a/node_modules/fast-xml-parser/src/parser.js b/node_modules/fast-xml-parser/src/parser.js new file mode 100644 index 0000000..5e491e8 --- /dev/null +++ b/node_modules/fast-xml-parser/src/parser.js @@ -0,0 +1,67 @@ +'use strict'; + +const nodeToJson = require('./node2json'); +const xmlToNodeobj = require('./xmlstr2xmlnode'); +const x2xmlnode = require('./xmlstr2xmlnode'); +const buildOptions = require('./util').buildOptions; +const validator = require('./validator'); + +exports.parse = function(xmlData, options, validationOption) { + if( validationOption){ + if(validationOption === true) validationOption = {} + + const result = validator.validate(xmlData, validationOption); + if (result !== true) { + throw Error( result.err.msg) + } + } + options = buildOptions(options, x2xmlnode.defaultOptions, x2xmlnode.props); + const traversableObj = xmlToNodeobj.getTraversalObj(xmlData, options) + //print(traversableObj, " "); + return nodeToJson.convertToJson(traversableObj, options); +}; +exports.convertTonimn = require('../src/nimndata').convert2nimn; +exports.getTraversalObj = xmlToNodeobj.getTraversalObj; +exports.convertToJson = nodeToJson.convertToJson; +exports.convertToJsonString = require('./node2json_str').convertToJsonString; +exports.validate = validator.validate; +exports.j2xParser = require('./json2xml'); +exports.parseToNimn = function(xmlData, schema, options) { + return exports.convertTonimn(exports.getTraversalObj(xmlData, options), schema, options); +}; + + +function print(xmlNode, indentation){ + if(xmlNode){ + console.log(indentation + "{") + console.log(indentation + " \"tagName\": \"" + xmlNode.tagname + "\", "); + if(xmlNode.parent){ + console.log(indentation + " \"parent\": \"" + xmlNode.parent.tagname + "\", "); + } + console.log(indentation + " \"val\": \"" + xmlNode.val + "\", "); + console.log(indentation + " \"attrs\": " + JSON.stringify(xmlNode.attrsMap,null,4) + ", "); + + if(xmlNode.child){ + console.log(indentation + "\"child\": {") + const indentation2 = indentation + indentation; + Object.keys(xmlNode.child).forEach( function(key) { + const node = xmlNode.child[key]; + + if(Array.isArray(node)){ + console.log(indentation + "\""+key+"\" :[") + node.forEach( function(item,index) { + //console.log(indentation + " \""+index+"\" : [") + print(item, indentation2); + }) + console.log(indentation + "],") + }else{ + console.log(indentation + " \""+key+"\" : {") + print(node, indentation2); + console.log(indentation + "},") + } + }); + console.log(indentation + "},") + } + console.log(indentation + "},") + } +} \ No newline at end of file diff --git a/node_modules/fast-xml-parser/src/read.js b/node_modules/fast-xml-parser/src/read.js new file mode 100644 index 0000000..642da52 --- /dev/null +++ b/node_modules/fast-xml-parser/src/read.js @@ -0,0 +1,92 @@ +'use strict'; + +// Copyright 2013 Timothy J Fontaine +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the 'Software'), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE + +/* + +Read any stream all the way to the end and trigger a single cb + +const http = require('http'); + +const rte = require('readtoend'); + +http.get('http://nodejs.org', function(response) { + rte.readToEnd(response, function(err, body) { + console.log(body); + }); +}); + +*/ + +let stream = require('stream'); +const util = require('util'); + +if (!stream.Transform) { + stream = require('readable-stream'); +} + +function ReadToEnd(opts) { + if (!(this instanceof ReadToEnd)) { + return new ReadToEnd(opts); + } + + stream.Transform.call(this, opts); + + this._rte_encoding = opts.encoding || 'utf8'; + + this._buff = ''; +} + +module.exports = ReadToEnd; +util.inherits(ReadToEnd, stream.Transform); + +ReadToEnd.prototype._transform = function(chunk, encoding, done) { + this._buff += chunk.toString(this._rte_encoding); + this.push(chunk); + done(); +}; + +ReadToEnd.prototype._flush = function(done) { + this.emit('complete', undefined, this._buff); + done(); +}; + +ReadToEnd.readToEnd = function(stream, options, cb) { + if (!cb) { + cb = options; + options = {}; + } + + const dest = new ReadToEnd(options); + + stream.pipe(dest); + + stream.on('error', function(err) { + stream.unpipe(dest); + cb(err); + }); + + dest.on('complete', cb); + + dest.resume(); + + return dest; +}; diff --git a/node_modules/fast-xml-parser/src/util.js b/node_modules/fast-xml-parser/src/util.js new file mode 100644 index 0000000..a092f24 --- /dev/null +++ b/node_modules/fast-xml-parser/src/util.js @@ -0,0 +1,87 @@ +'use strict'; + +const nameStartChar = ':A-Za-z_\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD'; +const nameChar = nameStartChar + '\\-.\\d\\u00B7\\u0300-\\u036F\\u203F-\\u2040'; +const nameRegexp = '[' + nameStartChar + '][' + nameChar + ']*' +const regexName = new RegExp('^' + nameRegexp + '$'); + +const getAllMatches = function(string, regex) { + const matches = []; + let match = regex.exec(string); + while (match) { + const allmatches = []; + const len = match.length; + for (let index = 0; index < len; index++) { + allmatches.push(match[index]); + } + matches.push(allmatches); + match = regex.exec(string); + } + return matches; +}; + +const isName = function(string) { + const match = regexName.exec(string); + return !(match === null || typeof match === 'undefined'); +}; + +exports.isExist = function(v) { + return typeof v !== 'undefined'; +}; + +exports.isEmptyObject = function(obj) { + return Object.keys(obj).length === 0; +}; + +/** + * Copy all the properties of a into b. + * @param {*} target + * @param {*} a + */ +exports.merge = function(target, a, arrayMode) { + if (a) { + const keys = Object.keys(a); // will return an array of own properties + const len = keys.length; //don't make it inline + for (let i = 0; i < len; i++) { + if(arrayMode === 'strict'){ + target[keys[i]] = [ a[keys[i]] ]; + }else{ + target[keys[i]] = a[keys[i]]; + } + } + } +}; +/* exports.merge =function (b,a){ + return Object.assign(b,a); +} */ + +exports.getValue = function(v) { + if (exports.isExist(v)) { + return v; + } else { + return ''; + } +}; + +// const fakeCall = function(a) {return a;}; +// const fakeCallNoReturn = function() {}; + +exports.buildOptions = function(options, defaultOptions, props) { + var newOptions = {}; + if (!options) { + return defaultOptions; //if there are not options + } + + for (let i = 0; i < props.length; i++) { + if (options[props[i]] !== undefined) { + newOptions[props[i]] = options[props[i]]; + } else { + newOptions[props[i]] = defaultOptions[props[i]]; + } + } + return newOptions; +}; + +exports.isName = isName; +exports.getAllMatches = getAllMatches; +exports.nameRegexp = nameRegexp; diff --git a/node_modules/fast-xml-parser/src/validator.js b/node_modules/fast-xml-parser/src/validator.js new file mode 100644 index 0000000..783771c --- /dev/null +++ b/node_modules/fast-xml-parser/src/validator.js @@ -0,0 +1,396 @@ +'use strict'; + +const util = require('./util'); + +const defaultOptions = { + allowBooleanAttributes: false, //A tag can have attributes without any value +}; + +const props = ['allowBooleanAttributes']; + +//const tagsPattern = new RegExp("<\\/?([\\w:\\-_\.]+)\\s*\/?>","g"); +exports.validate = function (xmlData, options) { + options = util.buildOptions(options, defaultOptions, props); + + //xmlData = xmlData.replace(/(\r\n|\n|\r)/gm,"");//make it single line + //xmlData = xmlData.replace(/(^\s*<\?xml.*?\?>)/g,"");//Remove XML starting tag + //xmlData = xmlData.replace(/()/g,"");//Remove DOCTYPE + const tags = []; + let tagFound = false; + + //indicates that the root tag has been closed (aka. depth 0 has been reached) + let reachedRoot = false; + + if (xmlData[0] === '\ufeff') { + // check for byte order mark (BOM) + xmlData = xmlData.substr(1); + } + + for (let i = 0; i < xmlData.length; i++) { + if (xmlData[i] === '<') { + //starting of tag + //read until you reach to '>' avoiding any '>' in attribute value + + i++; + if (xmlData[i] === '?') { + i = readPI(xmlData, ++i); + if (i.err) { + return i; + } + } else if (xmlData[i] === '!') { + i = readCommentAndCDATA(xmlData, i); + continue; + } else { + let closingTag = false; + if (xmlData[i] === '/') { + //closing tag + closingTag = true; + i++; + } + //read tagname + let tagName = ''; + for (; i < xmlData.length && + xmlData[i] !== '>' && + xmlData[i] !== ' ' && + xmlData[i] !== '\t' && + xmlData[i] !== '\n' && + xmlData[i] !== '\r'; i++ + ) { + tagName += xmlData[i]; + } + tagName = tagName.trim(); + //console.log(tagName); + + if (tagName[tagName.length - 1] === '/') { + //self closing tag without attributes + tagName = tagName.substring(0, tagName.length - 1); + //continue; + i--; + } + if (!validateTagName(tagName)) { + let msg; + if (tagName.trim().length === 0) { + msg = "There is an unnecessary space between tag name and backward slash ' 0) { + return getErrorObject('InvalidTag', "Closing tag '"+tagName+"' can't have attributes or invalid starting.", getLineNumberForPosition(xmlData, i)); + } else { + const otg = tags.pop(); + if (tagName !== otg) { + return getErrorObject('InvalidTag', "Closing tag '"+otg+"' is expected inplace of '"+tagName+"'.", getLineNumberForPosition(xmlData, i)); + } + + //when there are no more tags, we reached the root level. + if (tags.length == 0) { + reachedRoot = true; + } + } + } else { + const isValid = validateAttributeString(attrStr, options); + if (isValid !== true) { + //the result from the nested function returns the position of the error within the attribute + //in order to get the 'true' error line, we need to calculate the position where the attribute begins (i - attrStr.length) and then add the position within the attribute + //this gives us the absolute index in the entire xml, which we can use to find the line at last + return getErrorObject(isValid.err.code, isValid.err.msg, getLineNumberForPosition(xmlData, i - attrStr.length + isValid.err.line)); + } + + //if the root level has been reached before ... + if (reachedRoot === true) { + return getErrorObject('InvalidXml', 'Multiple possible root nodes found.', getLineNumberForPosition(xmlData, i)); + } else { + tags.push(tagName); + } + tagFound = true; + } + + //skip tag text value + //It may include comments and CDATA value + for (i++; i < xmlData.length; i++) { + if (xmlData[i] === '<') { + if (xmlData[i + 1] === '!') { + //comment or CADATA + i++; + i = readCommentAndCDATA(xmlData, i); + continue; + } else { + break; + } + } else if (xmlData[i] === '&') { + const afterAmp = validateAmpersand(xmlData, i); + if (afterAmp == -1) + return getErrorObject('InvalidChar', "char '&' is not expected.", getLineNumberForPosition(xmlData, i)); + i = afterAmp; + } + } //end of reading tag text value + if (xmlData[i] === '<') { + i--; + } + } + } else { + if (xmlData[i] === ' ' || xmlData[i] === '\t' || xmlData[i] === '\n' || xmlData[i] === '\r') { + continue; + } + return getErrorObject('InvalidChar', "char '"+xmlData[i]+"' is not expected.", getLineNumberForPosition(xmlData, i)); + } + } + + if (!tagFound) { + return getErrorObject('InvalidXml', 'Start tag expected.', 1); + } else if (tags.length > 0) { + return getErrorObject('InvalidXml', "Invalid '"+JSON.stringify(tags, null, 4).replace(/\r?\n/g, '')+"' found.", 1); + } + + return true; +}; + +/** + * Read Processing insstructions and skip + * @param {*} xmlData + * @param {*} i + */ +function readPI(xmlData, i) { + var start = i; + for (; i < xmlData.length; i++) { + if (xmlData[i] == '?' || xmlData[i] == ' ') { + //tagname + var tagname = xmlData.substr(start, i - start); + if (i > 5 && tagname === 'xml') { + return getErrorObject('InvalidXml', 'XML declaration allowed only at the start of the document.', getLineNumberForPosition(xmlData, i)); + } else if (xmlData[i] == '?' && xmlData[i + 1] == '>') { + //check if valid attribut string + i++; + break; + } else { + continue; + } + } + } + return i; +} + +function readCommentAndCDATA(xmlData, i) { + if (xmlData.length > i + 5 && xmlData[i + 1] === '-' && xmlData[i + 2] === '-') { + //comment + for (i += 3; i < xmlData.length; i++) { + if (xmlData[i] === '-' && xmlData[i + 1] === '-' && xmlData[i + 2] === '>') { + i += 2; + break; + } + } + } else if ( + xmlData.length > i + 8 && + xmlData[i + 1] === 'D' && + xmlData[i + 2] === 'O' && + xmlData[i + 3] === 'C' && + xmlData[i + 4] === 'T' && + xmlData[i + 5] === 'Y' && + xmlData[i + 6] === 'P' && + xmlData[i + 7] === 'E' + ) { + let angleBracketsCount = 1; + for (i += 8; i < xmlData.length; i++) { + if (xmlData[i] === '<') { + angleBracketsCount++; + } else if (xmlData[i] === '>') { + angleBracketsCount--; + if (angleBracketsCount === 0) { + break; + } + } + } + } else if ( + xmlData.length > i + 9 && + xmlData[i + 1] === '[' && + xmlData[i + 2] === 'C' && + xmlData[i + 3] === 'D' && + xmlData[i + 4] === 'A' && + xmlData[i + 5] === 'T' && + xmlData[i + 6] === 'A' && + xmlData[i + 7] === '[' + ) { + for (i += 8; i < xmlData.length; i++) { + if (xmlData[i] === ']' && xmlData[i + 1] === ']' && xmlData[i + 2] === '>') { + i += 2; + break; + } + } + } + + return i; +} + +var doubleQuote = '"'; +var singleQuote = "'"; + +/** + * Keep reading xmlData until '<' is found outside the attribute value. + * @param {string} xmlData + * @param {number} i + */ +function readAttributeStr(xmlData, i) { + let attrStr = ''; + let startChar = ''; + let tagClosed = false; + for (; i < xmlData.length; i++) { + if (xmlData[i] === doubleQuote || xmlData[i] === singleQuote) { + if (startChar === '') { + startChar = xmlData[i]; + } else if (startChar !== xmlData[i]) { + //if vaue is enclosed with double quote then single quotes are allowed inside the value and vice versa + continue; + } else { + startChar = ''; + } + } else if (xmlData[i] === '>') { + if (startChar === '') { + tagClosed = true; + break; + } + } + attrStr += xmlData[i]; + } + if (startChar !== '') { + return false; + } + + return { + value: attrStr, + index: i, + tagClosed: tagClosed + }; +} + +/** + * Select all the attributes whether valid or invalid. + */ +const validAttrStrRegxp = new RegExp('(\\s*)([^\\s=]+)(\\s*=)?(\\s*([\'"])(([\\s\\S])*?)\\5)?', 'g'); + +//attr, ="sd", a="amit's", a="sd"b="saf", ab cd="" + +function validateAttributeString(attrStr, options) { + //console.log("start:"+attrStr+":end"); + + //if(attrStr.trim().length === 0) return true; //empty string + + const matches = util.getAllMatches(attrStr, validAttrStrRegxp); + const attrNames = {}; + + for (let i = 0; i < matches.length; i++) { + if (matches[i][1].length === 0) { + //nospace before attribute name: a="sd"b="saf" + return getErrorObject('InvalidAttr', "Attribute '"+matches[i][2]+"' has no space in starting.", getPositionFromMatch(attrStr, matches[i][0])) + } else if (matches[i][3] === undefined && !options.allowBooleanAttributes) { + //independent attribute: ab + return getErrorObject('InvalidAttr', "boolean attribute '"+matches[i][2]+"' is not allowed.", getPositionFromMatch(attrStr, matches[i][0])); + } + /* else if(matches[i][6] === undefined){//attribute without value: ab= + return { err: { code:"InvalidAttr",msg:"attribute " + matches[i][2] + " has no value assigned."}}; + } */ + const attrName = matches[i][2]; + if (!validateAttrName(attrName)) { + return getErrorObject('InvalidAttr', "Attribute '"+attrName+"' is an invalid name.", getPositionFromMatch(attrStr, matches[i][0])); + } + if (!attrNames.hasOwnProperty(attrName)) { + //check for duplicate attribute. + attrNames[attrName] = 1; + } else { + return getErrorObject('InvalidAttr', "Attribute '"+attrName+"' is repeated.", getPositionFromMatch(attrStr, matches[i][0])); + } + } + + return true; +} + +function validateNumberAmpersand(xmlData, i) { + let re = /\d/; + if (xmlData[i] === 'x') { + i++; + re = /[\da-fA-F]/; + } + for (; i < xmlData.length; i++) { + if (xmlData[i] === ';') + return i; + if (!xmlData[i].match(re)) + break; + } + return -1; +} + +function validateAmpersand(xmlData, i) { + // https://www.w3.org/TR/xml/#dt-charref + i++; + if (xmlData[i] === ';') + return -1; + if (xmlData[i] === '#') { + i++; + return validateNumberAmpersand(xmlData, i); + } + let count = 0; + for (; i < xmlData.length; i++, count++) { + if (xmlData[i].match(/\w/) && count < 20) + continue; + if (xmlData[i] === ';') + break; + return -1; + } + return i; +} + +function getErrorObject(code, message, lineNumber) { + return { + err: { + code: code, + msg: message, + line: lineNumber, + }, + }; +} + +function validateAttrName(attrName) { + return util.isName(attrName); +} + +// const startsWithXML = /^xml/i; + +function validateTagName(tagname) { + return util.isName(tagname) /* && !tagname.match(startsWithXML) */; +} + +//this function returns the line number for the character at the given index +function getLineNumberForPosition(xmlData, index) { + var lines = xmlData.substring(0, index).split(/\r?\n/); + return lines.length; +} + +//this function returns the position of the last character of match within attrStr +function getPositionFromMatch(attrStr, match) { + return attrStr.indexOf(match) + match.length; +} diff --git a/node_modules/fast-xml-parser/src/xmlNode.js b/node_modules/fast-xml-parser/src/xmlNode.js new file mode 100644 index 0000000..e5835a9 --- /dev/null +++ b/node_modules/fast-xml-parser/src/xmlNode.js @@ -0,0 +1,17 @@ +'use strict'; + +module.exports = function(tagname, parent, val) { + this.tagname = tagname; + this.parent = parent; + this.child = {}; //child tags + this.attrsMap = {}; //attributes map + this.val = val; //text only + this.addChild = function(child) { + if (Array.isArray(this.child[child.tagname])) { + //already presents + this.child[child.tagname].push(child); + } else { + this.child[child.tagname] = [child]; + } + }; +}; diff --git a/node_modules/fast-xml-parser/src/xmlstr2xmlnode.js b/node_modules/fast-xml-parser/src/xmlstr2xmlnode.js new file mode 100644 index 0000000..c75ed78 --- /dev/null +++ b/node_modules/fast-xml-parser/src/xmlstr2xmlnode.js @@ -0,0 +1,341 @@ +'use strict'; + +const util = require('./util'); +const buildOptions = require('./util').buildOptions; +const xmlNode = require('./xmlNode'); +const regx = + '<((!\\[CDATA\\[([\\s\\S]*?)(]]>))|((NAME:)?(NAME))([^>]*)>|((\\/)(NAME)\\s*>))([^<]*)' + .replace(/NAME/g, util.nameRegexp); + +//const tagsRegx = new RegExp("<(\\/?[\\w:\\-\._]+)([^>]*)>(\\s*"+cdataRegx+")*([^<]+)?","g"); +//const tagsRegx = new RegExp("<(\\/?)((\\w*:)?([\\w:\\-\._]+))([^>]*)>([^<]*)("+cdataRegx+"([^<]*))*([^<]+)?","g"); + +//polyfill +if (!Number.parseInt && window.parseInt) { + Number.parseInt = window.parseInt; +} +if (!Number.parseFloat && window.parseFloat) { + Number.parseFloat = window.parseFloat; +} + +const defaultOptions = { + attributeNamePrefix: '@_', + attrNodeName: false, + textNodeName: '#text', + ignoreAttributes: true, + ignoreNameSpace: false, + allowBooleanAttributes: false, //a tag can have attributes without any value + //ignoreRootElement : false, + parseNodeValue: true, + parseAttributeValue: false, + arrayMode: false, + trimValues: true, //Trim string values of tag and attributes + cdataTagName: false, + cdataPositionChar: '\\c', + tagValueProcessor: function(a, tagName) { + return a; + }, + attrValueProcessor: function(a, attrName) { + return a; + }, + stopNodes: [] + //decodeStrict: false, +}; + +exports.defaultOptions = defaultOptions; + +const props = [ + 'attributeNamePrefix', + 'attrNodeName', + 'textNodeName', + 'ignoreAttributes', + 'ignoreNameSpace', + 'allowBooleanAttributes', + 'parseNodeValue', + 'parseAttributeValue', + 'arrayMode', + 'trimValues', + 'cdataTagName', + 'cdataPositionChar', + 'tagValueProcessor', + 'attrValueProcessor', + 'parseTrueNumberOnly', + 'stopNodes' +]; +exports.props = props; + +/** + * Trim -> valueProcessor -> parse value + * @param {string} tagName + * @param {string} val + * @param {object} options + */ +function processTagValue(tagName, val, options) { + if (val) { + if (options.trimValues) { + val = val.trim(); + } + val = options.tagValueProcessor(val, tagName); + val = parseValue(val, options.parseNodeValue, options.parseTrueNumberOnly); + } + + return val; +} + +function resolveNameSpace(tagname, options) { + if (options.ignoreNameSpace) { + const tags = tagname.split(':'); + const prefix = tagname.charAt(0) === '/' ? '/' : ''; + if (tags[0] === 'xmlns') { + return ''; + } + if (tags.length === 2) { + tagname = prefix + tags[1]; + } + } + return tagname; +} + +function parseValue(val, shouldParse, parseTrueNumberOnly) { + if (shouldParse && typeof val === 'string') { + let parsed; + if (val.trim() === '' || isNaN(val)) { + parsed = val === 'true' ? true : val === 'false' ? false : val; + } else { + if (val.indexOf('0x') !== -1) { + //support hexa decimal + parsed = Number.parseInt(val, 16); + } else if (val.indexOf('.') !== -1) { + parsed = Number.parseFloat(val); + val = val.replace(/\.?0+$/, ""); + } else { + parsed = Number.parseInt(val, 10); + } + if (parseTrueNumberOnly) { + parsed = String(parsed) === val ? parsed : val; + } + } + return parsed; + } else { + if (util.isExist(val)) { + return val; + } else { + return ''; + } + } +} + +//TODO: change regex to capture NS +//const attrsRegx = new RegExp("([\\w\\-\\.\\:]+)\\s*=\\s*(['\"])((.|\n)*?)\\2","gm"); +const attrsRegx = new RegExp('([^\\s=]+)\\s*(=\\s*([\'"])(.*?)\\3)?', 'g'); + +function buildAttributesMap(attrStr, options) { + if (!options.ignoreAttributes && typeof attrStr === 'string') { + attrStr = attrStr.replace(/\r?\n/g, ' '); + //attrStr = attrStr || attrStr.trim(); + + const matches = util.getAllMatches(attrStr, attrsRegx); + const len = matches.length; //don't make it inline + const attrs = {}; + for (let i = 0; i < len; i++) { + const attrName = resolveNameSpace(matches[i][1], options); + if (attrName.length) { + if (matches[i][4] !== undefined) { + if (options.trimValues) { + matches[i][4] = matches[i][4].trim(); + } + matches[i][4] = options.attrValueProcessor(matches[i][4], attrName); + attrs[options.attributeNamePrefix + attrName] = parseValue( + matches[i][4], + options.parseAttributeValue, + options.parseTrueNumberOnly + ); + } else if (options.allowBooleanAttributes) { + attrs[options.attributeNamePrefix + attrName] = true; + } + } + } + if (!Object.keys(attrs).length) { + return; + } + if (options.attrNodeName) { + const attrCollection = {}; + attrCollection[options.attrNodeName] = attrs; + return attrCollection; + } + return attrs; + } +} + +const getTraversalObj = function(xmlData, options) { + xmlData = xmlData.replace(/(\r\n)|\n/, " "); + options = buildOptions(options, defaultOptions, props); + const xmlObj = new xmlNode('!xml'); + let currentNode = xmlObj; + let textData = ""; + +//function match(xmlData){ + for(let i=0; i< xmlData.length; i++){ + const ch = xmlData[i]; + if(ch === '<'){ + if( xmlData[i+1] === '/') {//Closing Tag + const closeIndex = findClosingIndex(xmlData, ">", i, "Closing Tag is not closed.") + let tagName = xmlData.substring(i+2,closeIndex).trim(); + + if(options.ignoreNameSpace){ + const colonIndex = tagName.indexOf(":"); + if(colonIndex !== -1){ + tagName = tagName.substr(colonIndex+1); + } + } + + /* if (currentNode.parent) { + currentNode.parent.val = util.getValue(currentNode.parent.val) + '' + processTagValue2(tagName, textData , options); + } */ + if(currentNode){ + if(currentNode.val){ + currentNode.val = util.getValue(currentNode.val) + '' + processTagValue(tagName, textData , options); + }else{ + currentNode.val = processTagValue(tagName, textData , options); + } + } + + if (options.stopNodes.length && options.stopNodes.includes(currentNode.tagname)) { + currentNode.child = [] + if (currentNode.attrsMap == undefined) { currentNode.attrsMap = {}} + currentNode.val = xmlData.substr(currentNode.startIndex + 1, i - currentNode.startIndex - 1) + } + currentNode = currentNode.parent; + textData = ""; + i = closeIndex; + } else if( xmlData[i+1] === '?') { + i = findClosingIndex(xmlData, "?>", i, "Pi Tag is not closed.") + } else if(xmlData.substr(i + 1, 3) === '!--') { + i = findClosingIndex(xmlData, "-->", i, "Comment is not closed.") + } else if( xmlData.substr(i + 1, 2) === '!D') { + const closeIndex = findClosingIndex(xmlData, ">", i, "DOCTYPE is not closed.") + const tagExp = xmlData.substring(i, closeIndex); + if(tagExp.indexOf("[") >= 0){ + i = xmlData.indexOf("]>", i) + 1; + }else{ + i = closeIndex; + } + }else if(xmlData.substr(i + 1, 2) === '![') { + const closeIndex = findClosingIndex(xmlData, "]]>", i, "CDATA is not closed.") - 2 + const tagExp = xmlData.substring(i + 9,closeIndex); + + //considerations + //1. CDATA will always have parent node + //2. A tag with CDATA is not a leaf node so it's value would be string type. + if(textData){ + currentNode.val = util.getValue(currentNode.val) + '' + processTagValue(currentNode.tagname, textData , options); + textData = ""; + } + + if (options.cdataTagName) { + //add cdata node + const childNode = new xmlNode(options.cdataTagName, currentNode, tagExp); + currentNode.addChild(childNode); + //for backtracking + currentNode.val = util.getValue(currentNode.val) + options.cdataPositionChar; + //add rest value to parent node + if (tagExp) { + childNode.val = tagExp; + } + } else { + currentNode.val = (currentNode.val || '') + (tagExp || ''); + } + + i = closeIndex + 2; + }else {//Opening tag + const result = closingIndexForOpeningTag(xmlData, i+1) + let tagExp = result.data; + const closeIndex = result.index; + const separatorIndex = tagExp.indexOf(" "); + let tagName = tagExp; + if(separatorIndex !== -1){ + tagName = tagExp.substr(0, separatorIndex).trimRight(); + tagExp = tagExp.substr(separatorIndex + 1); + } + + if(options.ignoreNameSpace){ + const colonIndex = tagName.indexOf(":"); + if(colonIndex !== -1){ + tagName = tagName.substr(colonIndex+1); + } + } + + //save text to parent node + if (currentNode && textData) { + if(currentNode.tagname !== '!xml'){ + currentNode.val = util.getValue(currentNode.val) + '' + processTagValue( currentNode.tagname, textData, options); + } + } + + if(tagExp.length > 0 && tagExp.lastIndexOf("/") === tagExp.length - 1){//selfClosing tag + + if(tagName[tagName.length - 1] === "/"){ //remove trailing '/' + tagName = tagName.substr(0, tagName.length - 1); + tagExp = tagName; + }else{ + tagExp = tagExp.substr(0, tagExp.length - 1); + } + + const childNode = new xmlNode(tagName, currentNode, ''); + if(tagName !== tagExp){ + childNode.attrsMap = buildAttributesMap(tagExp, options); + } + currentNode.addChild(childNode); + }else{//opening tag + + const childNode = new xmlNode( tagName, currentNode ); + if (options.stopNodes.length && options.stopNodes.includes(childNode.tagname)) { + childNode.startIndex=closeIndex; + } + if(tagName !== tagExp){ + childNode.attrsMap = buildAttributesMap(tagExp, options); + } + currentNode.addChild(childNode); + currentNode = childNode; + } + textData = ""; + i = closeIndex; + } + }else{ + textData += xmlData[i]; + } + } + return xmlObj; +} + +function closingIndexForOpeningTag(data, i){ + let attrBoundary; + let tagExp = ""; + for (let index = i; index < data.length; index++) { + let ch = data[index]; + if (attrBoundary) { + if (ch === attrBoundary) attrBoundary = "";//reset + } else if (ch === '"' || ch === "'") { + attrBoundary = ch; + } else if (ch === '>') { + return { + data: tagExp, + index: index + } + } else if (ch === '\t') { + ch = " " + } + tagExp += ch; + } +} + +function findClosingIndex(xmlData, str, i, errMsg){ + const closingIndex = xmlData.indexOf(str, i); + if(closingIndex === -1){ + throw new Error(errMsg) + }else{ + return closingIndex + str.length - 1; + } +} + +exports.getTraversalObj = getTraversalObj; diff --git a/node_modules/fast-xml-parser/tasks/postinstall.js b/node_modules/fast-xml-parser/tasks/postinstall.js new file mode 100644 index 0000000..ad11ee9 --- /dev/null +++ b/node_modules/fast-xml-parser/tasks/postinstall.js @@ -0,0 +1,5 @@ +#!/usr/bin/env node + + +const msg = '\u001b[96m\u001b[1mLove fast-xml-parser? Check \u001b[32mhttps://amitkumargupta.work \u001b[96m\u001b[1mfor more projects and contribution.\u001b[0m\n'; +console.log(msg) \ No newline at end of file diff --git a/node_modules/fast-xml-parser/yarn.lock b/node_modules/fast-xml-parser/yarn.lock new file mode 100644 index 0000000..1b143f8 --- /dev/null +++ b/node_modules/fast-xml-parser/yarn.lock @@ -0,0 +1,4953 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/code-frame@^7.0.0": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.5.5.tgz#bc0782f6d69f7b7d49531219699b988f669a8f9d" + integrity sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw== + dependencies: + "@babel/highlight" "^7.0.0" + +"@babel/code-frame@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e" + integrity sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g== + dependencies: + "@babel/highlight" "^7.8.3" + +"@babel/compat-data@^7.8.6", "@babel/compat-data@^7.9.0": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.9.0.tgz#04815556fc90b0c174abd2c0c1bb966faa036a6c" + integrity sha512-zeFQrr+284Ekvd9e7KAX954LkapWiOmQtsfHirhxqfdlX6MEC32iRE+pqUGlYIBchdevaCwvzxWGSy/YBNI85g== + dependencies: + browserslist "^4.9.1" + invariant "^2.2.4" + semver "^5.5.0" + +"@babel/core@^7.7.5": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.9.0.tgz#ac977b538b77e132ff706f3b8a4dbad09c03c56e" + integrity sha512-kWc7L0fw1xwvI0zi8OKVBuxRVefwGOrKSQMvrQ3dW+bIIavBY3/NpXmpjMy7bQnLgwgzWQZ8TlM57YHpHNHz4w== + dependencies: + "@babel/code-frame" "^7.8.3" + "@babel/generator" "^7.9.0" + "@babel/helper-module-transforms" "^7.9.0" + "@babel/helpers" "^7.9.0" + "@babel/parser" "^7.9.0" + "@babel/template" "^7.8.6" + "@babel/traverse" "^7.9.0" + "@babel/types" "^7.9.0" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.1" + json5 "^2.1.2" + lodash "^4.17.13" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + +"@babel/generator@^7.9.0": + version "7.9.4" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.9.4.tgz#12441e90c3b3c4159cdecf312075bf1a8ce2dbce" + integrity sha512-rjP8ahaDy/ouhrvCoU1E5mqaitWrxwuNGU+dy1EpaoK48jZay4MdkskKGIMHLZNewg8sAsqpGSREJwP0zH3YQA== + dependencies: + "@babel/types" "^7.9.0" + jsesc "^2.5.1" + lodash "^4.17.13" + source-map "^0.5.0" + +"@babel/helper-annotate-as-pure@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.8.3.tgz#60bc0bc657f63a0924ff9a4b4a0b24a13cf4deee" + integrity sha512-6o+mJrZBxOoEX77Ezv9zwW7WV8DdluouRKNY/IR5u/YTMuKHgugHOzYWlYvYLpLA9nPsQCAAASpCIbjI9Mv+Uw== + dependencies: + "@babel/types" "^7.8.3" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.8.3.tgz#c84097a427a061ac56a1c30ebf54b7b22d241503" + integrity sha512-5eFOm2SyFPK4Rh3XMMRDjN7lBH0orh3ss0g3rTYZnBQ+r6YPj7lgDyCvPphynHvUrobJmeMignBr6Acw9mAPlw== + dependencies: + "@babel/helper-explode-assignable-expression" "^7.8.3" + "@babel/types" "^7.8.3" + +"@babel/helper-compilation-targets@^7.8.7": + version "7.8.7" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.8.7.tgz#dac1eea159c0e4bd46e309b5a1b04a66b53c1dde" + integrity sha512-4mWm8DCK2LugIS+p1yArqvG1Pf162upsIsjE7cNBjez+NjliQpVhj20obE520nao0o14DaTnFJv+Fw5a0JpoUw== + dependencies: + "@babel/compat-data" "^7.8.6" + browserslist "^4.9.1" + invariant "^2.2.4" + levenary "^1.1.1" + semver "^5.5.0" + +"@babel/helper-create-regexp-features-plugin@^7.8.3", "@babel/helper-create-regexp-features-plugin@^7.8.8": + version "7.8.8" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.8.8.tgz#5d84180b588f560b7864efaeea89243e58312087" + integrity sha512-LYVPdwkrQEiX9+1R29Ld/wTrmQu1SSKYnuOk3g0CkcZMA1p0gsNxJFj/3gBdaJ7Cg0Fnek5z0DsMULePP7Lrqg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.8.3" + "@babel/helper-regex" "^7.8.3" + regexpu-core "^4.7.0" + +"@babel/helper-define-map@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.8.3.tgz#a0655cad5451c3760b726eba875f1cd8faa02c15" + integrity sha512-PoeBYtxoZGtct3md6xZOCWPcKuMuk3IHhgxsRRNtnNShebf4C8YonTSblsK4tvDbm+eJAw2HAPOfCr+Q/YRG/g== + dependencies: + "@babel/helper-function-name" "^7.8.3" + "@babel/types" "^7.8.3" + lodash "^4.17.13" + +"@babel/helper-explode-assignable-expression@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.8.3.tgz#a728dc5b4e89e30fc2dfc7d04fa28a930653f982" + integrity sha512-N+8eW86/Kj147bO9G2uclsg5pwfs/fqqY5rwgIL7eTBklgXjcOJ3btzS5iM6AitJcftnY7pm2lGsrJVYLGjzIw== + dependencies: + "@babel/traverse" "^7.8.3" + "@babel/types" "^7.8.3" + +"@babel/helper-function-name@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz#eeeb665a01b1f11068e9fb86ad56a1cb1a824cca" + integrity sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA== + dependencies: + "@babel/helper-get-function-arity" "^7.8.3" + "@babel/template" "^7.8.3" + "@babel/types" "^7.8.3" + +"@babel/helper-get-function-arity@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz#b894b947bd004381ce63ea1db9f08547e920abd5" + integrity sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA== + dependencies: + "@babel/types" "^7.8.3" + +"@babel/helper-hoist-variables@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.8.3.tgz#1dbe9b6b55d78c9b4183fc8cdc6e30ceb83b7134" + integrity sha512-ky1JLOjcDUtSc+xkt0xhYff7Z6ILTAHKmZLHPxAhOP0Nd77O+3nCsd6uSVYur6nJnCI029CrNbYlc0LoPfAPQg== + dependencies: + "@babel/types" "^7.8.3" + +"@babel/helper-member-expression-to-functions@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz#659b710498ea6c1d9907e0c73f206eee7dadc24c" + integrity sha512-fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA== + dependencies: + "@babel/types" "^7.8.3" + +"@babel/helper-module-imports@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz#7fe39589b39c016331b6b8c3f441e8f0b1419498" + integrity sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg== + dependencies: + "@babel/types" "^7.8.3" + +"@babel/helper-module-transforms@^7.9.0": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz#43b34dfe15961918707d247327431388e9fe96e5" + integrity sha512-0FvKyu0gpPfIQ8EkxlrAydOWROdHpBmiCiRwLkUiBGhCUPRRbVD2/tm3sFr/c/GWFrQ/ffutGUAnx7V0FzT2wA== + dependencies: + "@babel/helper-module-imports" "^7.8.3" + "@babel/helper-replace-supers" "^7.8.6" + "@babel/helper-simple-access" "^7.8.3" + "@babel/helper-split-export-declaration" "^7.8.3" + "@babel/template" "^7.8.6" + "@babel/types" "^7.9.0" + lodash "^4.17.13" + +"@babel/helper-optimise-call-expression@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz#7ed071813d09c75298ef4f208956006b6111ecb9" + integrity sha512-Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ== + dependencies: + "@babel/types" "^7.8.3" + +"@babel/helper-plugin-utils@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz#bbb3fbee98661c569034237cc03967ba99b4f250" + integrity sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA== + +"@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz#9ea293be19babc0f52ff8ca88b34c3611b208670" + integrity sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ== + +"@babel/helper-regex@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.8.3.tgz#139772607d51b93f23effe72105b319d2a4c6965" + integrity sha512-BWt0QtYv/cg/NecOAZMdcn/waj/5P26DR4mVLXfFtDokSR6fyuG0Pj+e2FqtSME+MqED1khnSMulkmGl8qWiUQ== + dependencies: + lodash "^4.17.13" + +"@babel/helper-remap-async-to-generator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.8.3.tgz#273c600d8b9bf5006142c1e35887d555c12edd86" + integrity sha512-kgwDmw4fCg7AVgS4DukQR/roGp+jP+XluJE5hsRZwxCYGg+Rv9wSGErDWhlI90FODdYfd4xG4AQRiMDjjN0GzA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.8.3" + "@babel/helper-wrap-function" "^7.8.3" + "@babel/template" "^7.8.3" + "@babel/traverse" "^7.8.3" + "@babel/types" "^7.8.3" + +"@babel/helper-replace-supers@^7.8.3", "@babel/helper-replace-supers@^7.8.6": + version "7.8.6" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.8.6.tgz#5ada744fd5ad73203bf1d67459a27dcba67effc8" + integrity sha512-PeMArdA4Sv/Wf4zXwBKPqVj7n9UF/xg6slNRtZW84FM7JpE1CbG8B612FyM4cxrf4fMAMGO0kR7voy1ForHHFA== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.8.3" + "@babel/helper-optimise-call-expression" "^7.8.3" + "@babel/traverse" "^7.8.6" + "@babel/types" "^7.8.6" + +"@babel/helper-simple-access@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz#7f8109928b4dab4654076986af575231deb639ae" + integrity sha512-VNGUDjx5cCWg4vvCTR8qQ7YJYZ+HBjxOgXEl7ounz+4Sn7+LMD3CFrCTEU6/qXKbA2nKg21CwhhBzO0RpRbdCw== + dependencies: + "@babel/template" "^7.8.3" + "@babel/types" "^7.8.3" + +"@babel/helper-split-export-declaration@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz#31a9f30070f91368a7182cf05f831781065fc7a9" + integrity sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA== + dependencies: + "@babel/types" "^7.8.3" + +"@babel/helper-validator-identifier@^7.9.0": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.0.tgz#ad53562a7fc29b3b9a91bbf7d10397fd146346ed" + integrity sha512-6G8bQKjOh+of4PV/ThDm/rRqlU7+IGoJuofpagU5GlEl29Vv0RGqqt86ZGRV8ZuSOY3o+8yXl5y782SMcG7SHw== + +"@babel/helper-wrap-function@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.8.3.tgz#9dbdb2bb55ef14aaa01fe8c99b629bd5352d8610" + integrity sha512-LACJrbUET9cQDzb6kG7EeD7+7doC3JNvUgTEQOx2qaO1fKlzE/Bf05qs9w1oXQMmXlPO65lC3Tq9S6gZpTErEQ== + dependencies: + "@babel/helper-function-name" "^7.8.3" + "@babel/template" "^7.8.3" + "@babel/traverse" "^7.8.3" + "@babel/types" "^7.8.3" + +"@babel/helpers@^7.9.0": + version "7.9.2" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.9.2.tgz#b42a81a811f1e7313b88cba8adc66b3d9ae6c09f" + integrity sha512-JwLvzlXVPjO8eU9c/wF9/zOIN7X6h8DYf7mG4CiFRZRvZNKEF5dQ3H3V+ASkHoIB3mWhatgl5ONhyqHRI6MppA== + dependencies: + "@babel/template" "^7.8.3" + "@babel/traverse" "^7.9.0" + "@babel/types" "^7.9.0" + +"@babel/highlight@^7.0.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.5.0.tgz#56d11312bd9248fa619591d02472be6e8cb32540" + integrity sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ== + dependencies: + chalk "^2.0.0" + esutils "^2.0.2" + js-tokens "^4.0.0" + +"@babel/highlight@^7.8.3": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.9.0.tgz#4e9b45ccb82b79607271b2979ad82c7b68163079" + integrity sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ== + dependencies: + "@babel/helper-validator-identifier" "^7.9.0" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.8.6", "@babel/parser@^7.9.0": + version "7.9.4" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.9.4.tgz#68a35e6b0319bbc014465be43828300113f2f2e8" + integrity sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA== + +"@babel/plugin-proposal-async-generator-functions@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.8.3.tgz#bad329c670b382589721b27540c7d288601c6e6f" + integrity sha512-NZ9zLv848JsV3hs8ryEh7Uaz/0KsmPLqv0+PdkDJL1cJy0K4kOCFa8zc1E3mp+RHPQcpdfb/6GovEsW4VDrOMw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-remap-async-to-generator" "^7.8.3" + "@babel/plugin-syntax-async-generators" "^7.8.0" + +"@babel/plugin-proposal-dynamic-import@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.8.3.tgz#38c4fe555744826e97e2ae930b0fb4cc07e66054" + integrity sha512-NyaBbyLFXFLT9FP+zk0kYlUlA8XtCUbehs67F0nnEg7KICgMc2mNkIeu9TYhKzyXMkrapZFwAhXLdnt4IYHy1w== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" + +"@babel/plugin-proposal-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.8.3.tgz#da5216b238a98b58a1e05d6852104b10f9a70d6b" + integrity sha512-KGhQNZ3TVCQG/MjRbAUwuH+14y9q0tpxs1nWWs3pbSleRdDro9SAMMDyye8HhY1gqZ7/NqIc8SKhya0wRDgP1Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.0" + +"@babel/plugin-proposal-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.8.3.tgz#e4572253fdeed65cddeecfdab3f928afeb2fd5d2" + integrity sha512-TS9MlfzXpXKt6YYomudb/KU7nQI6/xnapG6in1uZxoxDghuSMZsPb6D2fyUwNYSAp4l1iR7QtFOjkqcRYcUsfw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + +"@babel/plugin-proposal-numeric-separator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.8.3.tgz#5d6769409699ec9b3b68684cd8116cedff93bad8" + integrity sha512-jWioO1s6R/R+wEHizfaScNsAx+xKgwTLNXSh7tTC4Usj3ItsPEhYkEpU4h+lpnBwq7NBVOJXfO6cRFYcX69JUQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.8.3" + +"@babel/plugin-proposal-object-rest-spread@^7.9.0": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.9.0.tgz#a28993699fc13df165995362693962ba6b061d6f" + integrity sha512-UgqBv6bjq4fDb8uku9f+wcm1J7YxJ5nT7WO/jBr0cl0PLKb7t1O6RNR1kZbjgx2LQtsDI9hwoQVmn0yhXeQyow== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + +"@babel/plugin-proposal-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.8.3.tgz#9dee96ab1650eed88646ae9734ca167ac4a9c5c9" + integrity sha512-0gkX7J7E+AtAw9fcwlVQj8peP61qhdg/89D5swOkjYbkboA2CVckn3kiyum1DE0wskGb7KJJxBdyEBApDLLVdw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" + +"@babel/plugin-proposal-optional-chaining@^7.9.0": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.9.0.tgz#31db16b154c39d6b8a645292472b98394c292a58" + integrity sha512-NDn5tu3tcv4W30jNhmc2hyD5c56G6cXx4TesJubhxrJeCvuuMpttxr0OnNCqbZGhFjLrg+NIhxxC+BK5F6yS3w== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" + +"@babel/plugin-proposal-unicode-property-regex@^7.4.4", "@babel/plugin-proposal-unicode-property-regex@^7.8.3": + version "7.8.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.8.8.tgz#ee3a95e90cdc04fe8cd92ec3279fa017d68a0d1d" + integrity sha512-EVhjVsMpbhLw9ZfHWSx2iy13Q8Z/eg8e8ccVWt23sWQK5l1UdkoLJPN5w69UA4uITGBnEZD2JOe4QOHycYKv8A== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.8.8" + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-syntax-async-generators@^7.8.0": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-dynamic-import@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" + integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-json-strings@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.8.0", "@babel/plugin-syntax-numeric-separator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.8.3.tgz#0e3fb63e09bea1b11e96467271c8308007e7c41f" + integrity sha512-H7dCMAdN83PcCmqmkHB5dtp+Xa9a6LKSvA2hiFBC/5alSHxM5VgWZXFqDi0YFe8XNGT6iCa+z4V4zSt/PdZ7Dw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-syntax-object-rest-spread@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-top-level-await@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.8.3.tgz#3acdece695e6b13aaf57fc291d1a800950c71391" + integrity sha512-kwj1j9lL/6Wd0hROD3b/OZZ7MSrZLqqn9RAZ5+cYYsflQ9HZBIKCUkr3+uL1MEJ1NePiUbf98jjiMQSv0NMR9g== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-arrow-functions@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.8.3.tgz#82776c2ed0cd9e1a49956daeb896024c9473b8b6" + integrity sha512-0MRF+KC8EqH4dbuITCWwPSzsyO3HIWWlm30v8BbbpOrS1B++isGxPnnuq/IZvOX5J2D/p7DQalQm+/2PnlKGxg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-async-to-generator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.8.3.tgz#4308fad0d9409d71eafb9b1a6ee35f9d64b64086" + integrity sha512-imt9tFLD9ogt56Dd5CI/6XgpukMwd/fLGSrix2httihVe7LOGVPhyhMh1BU5kDM7iHD08i8uUtmV2sWaBFlHVQ== + dependencies: + "@babel/helper-module-imports" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-remap-async-to-generator" "^7.8.3" + +"@babel/plugin-transform-block-scoped-functions@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.8.3.tgz#437eec5b799b5852072084b3ae5ef66e8349e8a3" + integrity sha512-vo4F2OewqjbB1+yaJ7k2EJFHlTP3jR634Z9Cj9itpqNjuLXvhlVxgnjsHsdRgASR8xYDrx6onw4vW5H6We0Jmg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-block-scoping@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.8.3.tgz#97d35dab66857a437c166358b91d09050c868f3a" + integrity sha512-pGnYfm7RNRgYRi7bids5bHluENHqJhrV4bCZRwc5GamaWIIs07N4rZECcmJL6ZClwjDz1GbdMZFtPs27hTB06w== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + lodash "^4.17.13" + +"@babel/plugin-transform-classes@^7.9.0": + version "7.9.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.9.2.tgz#8603fc3cc449e31fdbdbc257f67717536a11af8d" + integrity sha512-TC2p3bPzsfvSsqBZo0kJnuelnoK9O3welkUpqSqBQuBF6R5MN2rysopri8kNvtlGIb2jmUO7i15IooAZJjZuMQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.8.3" + "@babel/helper-define-map" "^7.8.3" + "@babel/helper-function-name" "^7.8.3" + "@babel/helper-optimise-call-expression" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-replace-supers" "^7.8.6" + "@babel/helper-split-export-declaration" "^7.8.3" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.8.3.tgz#96d0d28b7f7ce4eb5b120bb2e0e943343c86f81b" + integrity sha512-O5hiIpSyOGdrQZRQ2ccwtTVkgUDBBiCuK//4RJ6UfePllUTCENOzKxfh6ulckXKc0DixTFLCfb2HVkNA7aDpzA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-destructuring@^7.8.3": + version "7.8.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.8.8.tgz#fadb2bc8e90ccaf5658de6f8d4d22ff6272a2f4b" + integrity sha512-eRJu4Vs2rmttFCdhPUM3bV0Yo/xPSdPw6ML9KHs/bjB4bLA5HXlbvYXPOD5yASodGod+krjYx21xm1QmL8dCJQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-dotall-regex@^7.4.4", "@babel/plugin-transform-dotall-regex@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.8.3.tgz#c3c6ec5ee6125c6993c5cbca20dc8621a9ea7a6e" + integrity sha512-kLs1j9Nn4MQoBYdRXH6AeaXMbEJFaFu/v1nQkvib6QzTj8MZI5OQzqmD83/2jEM1z0DLilra5aWO5YpyC0ALIw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-duplicate-keys@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.8.3.tgz#8d12df309aa537f272899c565ea1768e286e21f1" + integrity sha512-s8dHiBUbcbSgipS4SMFuWGqCvyge5V2ZeAWzR6INTVC3Ltjig/Vw1G2Gztv0vU/hRG9X8IvKvYdoksnUfgXOEQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-exponentiation-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.8.3.tgz#581a6d7f56970e06bf51560cd64f5e947b70d7b7" + integrity sha512-zwIpuIymb3ACcInbksHaNcR12S++0MDLKkiqXHl3AzpgdKlFNhog+z/K0+TGW+b0w5pgTq4H6IwV/WhxbGYSjQ== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-for-of@^7.9.0": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.9.0.tgz#0f260e27d3e29cd1bb3128da5e76c761aa6c108e" + integrity sha512-lTAnWOpMwOXpyDx06N+ywmF3jNbafZEqZ96CGYabxHrxNX8l5ny7dt4bK/rGwAh9utyP2b2Hv7PlZh1AAS54FQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-function-name@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.8.3.tgz#279373cb27322aaad67c2683e776dfc47196ed8b" + integrity sha512-rO/OnDS78Eifbjn5Py9v8y0aR+aSYhDhqAwVfsTl0ERuMZyr05L1aFSCJnbv2mmsLkit/4ReeQ9N2BgLnOcPCQ== + dependencies: + "@babel/helper-function-name" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-literals@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.8.3.tgz#aef239823d91994ec7b68e55193525d76dbd5dc1" + integrity sha512-3Tqf8JJ/qB7TeldGl+TT55+uQei9JfYaregDcEAyBZ7akutriFrt6C/wLYIer6OYhleVQvH/ntEhjE/xMmy10A== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-member-expression-literals@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.8.3.tgz#963fed4b620ac7cbf6029c755424029fa3a40410" + integrity sha512-3Wk2EXhnw+rP+IDkK6BdtPKsUE5IeZ6QOGrPYvw52NwBStw9V1ZVzxgK6fSKSxqUvH9eQPR3tm3cOq79HlsKYA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-modules-amd@^7.9.0": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.9.0.tgz#19755ee721912cf5bb04c07d50280af3484efef4" + integrity sha512-vZgDDF003B14O8zJy0XXLnPH4sg+9X5hFBBGN1V+B2rgrB+J2xIypSN6Rk9imB2hSTHQi5OHLrFWsZab1GMk+Q== + dependencies: + "@babel/helper-module-transforms" "^7.9.0" + "@babel/helper-plugin-utils" "^7.8.3" + babel-plugin-dynamic-import-node "^2.3.0" + +"@babel/plugin-transform-modules-commonjs@^7.9.0": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.9.0.tgz#e3e72f4cbc9b4a260e30be0ea59bdf5a39748940" + integrity sha512-qzlCrLnKqio4SlgJ6FMMLBe4bySNis8DFn1VkGmOcxG9gqEyPIOzeQrA//u0HAKrWpJlpZbZMPB1n/OPa4+n8g== + dependencies: + "@babel/helper-module-transforms" "^7.9.0" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-simple-access" "^7.8.3" + babel-plugin-dynamic-import-node "^2.3.0" + +"@babel/plugin-transform-modules-systemjs@^7.9.0": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.9.0.tgz#e9fd46a296fc91e009b64e07ddaa86d6f0edeb90" + integrity sha512-FsiAv/nao/ud2ZWy4wFacoLOm5uxl0ExSQ7ErvP7jpoihLR6Cq90ilOFyX9UXct3rbtKsAiZ9kFt5XGfPe/5SQ== + dependencies: + "@babel/helper-hoist-variables" "^7.8.3" + "@babel/helper-module-transforms" "^7.9.0" + "@babel/helper-plugin-utils" "^7.8.3" + babel-plugin-dynamic-import-node "^2.3.0" + +"@babel/plugin-transform-modules-umd@^7.9.0": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.9.0.tgz#e909acae276fec280f9b821a5f38e1f08b480697" + integrity sha512-uTWkXkIVtg/JGRSIABdBoMsoIeoHQHPTL0Y2E7xf5Oj7sLqwVsNXOkNk0VJc7vF0IMBsPeikHxFjGe+qmwPtTQ== + dependencies: + "@babel/helper-module-transforms" "^7.9.0" + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.8.3.tgz#a2a72bffa202ac0e2d0506afd0939c5ecbc48c6c" + integrity sha512-f+tF/8UVPU86TrCb06JoPWIdDpTNSGGcAtaD9mLP0aYGA0OS0j7j7DHJR0GTFrUZPUU6loZhbsVZgTh0N+Qdnw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.8.3" + +"@babel/plugin-transform-new-target@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.8.3.tgz#60cc2ae66d85c95ab540eb34babb6434d4c70c43" + integrity sha512-QuSGysibQpyxexRyui2vca+Cmbljo8bcRckgzYV4kRIsHpVeyeC3JDO63pY+xFZ6bWOBn7pfKZTqV4o/ix9sFw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-object-super@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.8.3.tgz#ebb6a1e7a86ffa96858bd6ac0102d65944261725" + integrity sha512-57FXk+gItG/GejofIyLIgBKTas4+pEU47IXKDBWFTxdPd7F80H8zybyAY7UoblVfBhBGs2EKM+bJUu2+iUYPDQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-replace-supers" "^7.8.3" + +"@babel/plugin-transform-parameters@^7.8.7": + version "7.9.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.9.3.tgz#3028d0cc20ddc733166c6e9c8534559cee09f54a" + integrity sha512-fzrQFQhp7mIhOzmOtPiKffvCYQSK10NR8t6BBz2yPbeUHb9OLW8RZGtgDRBn8z2hGcwvKDL3vC7ojPTLNxmqEg== + dependencies: + "@babel/helper-get-function-arity" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-property-literals@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.8.3.tgz#33194300d8539c1ed28c62ad5087ba3807b98263" + integrity sha512-uGiiXAZMqEoQhRWMK17VospMZh5sXWg+dlh2soffpkAl96KAm+WZuJfa6lcELotSRmooLqg0MWdH6UUq85nmmg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-regenerator@^7.8.7": + version "7.8.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.8.7.tgz#5e46a0dca2bee1ad8285eb0527e6abc9c37672f8" + integrity sha512-TIg+gAl4Z0a3WmD3mbYSk+J9ZUH6n/Yc57rtKRnlA/7rcCvpekHXe0CMZHP1gYp7/KLe9GHTuIba0vXmls6drA== + dependencies: + regenerator-transform "^0.14.2" + +"@babel/plugin-transform-reserved-words@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.8.3.tgz#9a0635ac4e665d29b162837dd3cc50745dfdf1f5" + integrity sha512-mwMxcycN3omKFDjDQUl+8zyMsBfjRFr0Zn/64I41pmjv4NJuqcYlEtezwYtw9TFd9WR1vN5kiM+O0gMZzO6L0A== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-runtime@^7.7.6": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.9.0.tgz#45468c0ae74cc13204e1d3b1f4ce6ee83258af0b" + integrity sha512-pUu9VSf3kI1OqbWINQ7MaugnitRss1z533436waNXp+0N3ur3zfut37sXiQMxkuCF4VUjwZucen/quskCh7NHw== + dependencies: + "@babel/helper-module-imports" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + resolve "^1.8.1" + semver "^5.5.1" + +"@babel/plugin-transform-shorthand-properties@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.8.3.tgz#28545216e023a832d4d3a1185ed492bcfeac08c8" + integrity sha512-I9DI6Odg0JJwxCHzbzW08ggMdCezoWcuQRz3ptdudgwaHxTjxw5HgdFJmZIkIMlRymL6YiZcped4TTCB0JcC8w== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.8.3.tgz#9c8ffe8170fdfb88b114ecb920b82fb6e95fe5e8" + integrity sha512-CkuTU9mbmAoFOI1tklFWYYbzX5qCIZVXPVy0jpXgGwkplCndQAa58s2jr66fTeQnA64bDox0HL4U56CFYoyC7g== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-sticky-regex@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.8.3.tgz#be7a1290f81dae767475452199e1f76d6175b100" + integrity sha512-9Spq0vGCD5Bb4Z/ZXXSK5wbbLFMG085qd2vhL1JYu1WcQ5bXqZBAYRzU1d+p79GcHs2szYv5pVQCX13QgldaWw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-regex" "^7.8.3" + +"@babel/plugin-transform-template-literals@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.8.3.tgz#7bfa4732b455ea6a43130adc0ba767ec0e402a80" + integrity sha512-820QBtykIQOLFT8NZOcTRJ1UNuztIELe4p9DCgvj4NK+PwluSJ49we7s9FB1HIGNIYT7wFUJ0ar2QpCDj0escQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-typeof-symbol@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.8.4.tgz#ede4062315ce0aaf8a657a920858f1a2f35fc412" + integrity sha512-2QKyfjGdvuNfHsb7qnBBlKclbD4CfshH2KvDabiijLMGXPHJXGxtDzwIF7bQP+T0ysw8fYTtxPafgfs/c1Lrqg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-unicode-regex@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.8.3.tgz#0cef36e3ba73e5c57273effb182f46b91a1ecaad" + integrity sha512-+ufgJjYdmWfSQ+6NS9VGUR2ns8cjJjYbrbi11mZBTaWm+Fui/ncTLFF28Ei1okavY+xkojGr1eJxNsWYeA5aZw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/preset-env@^7.7.6": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.9.0.tgz#a5fc42480e950ae8f5d9f8f2bbc03f52722df3a8" + integrity sha512-712DeRXT6dyKAM/FMbQTV/FvRCms2hPCx+3weRjZ8iQVQWZejWWk1wwG6ViWMyqb/ouBbGOl5b6aCk0+j1NmsQ== + dependencies: + "@babel/compat-data" "^7.9.0" + "@babel/helper-compilation-targets" "^7.8.7" + "@babel/helper-module-imports" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-proposal-async-generator-functions" "^7.8.3" + "@babel/plugin-proposal-dynamic-import" "^7.8.3" + "@babel/plugin-proposal-json-strings" "^7.8.3" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-proposal-numeric-separator" "^7.8.3" + "@babel/plugin-proposal-object-rest-spread" "^7.9.0" + "@babel/plugin-proposal-optional-catch-binding" "^7.8.3" + "@babel/plugin-proposal-optional-chaining" "^7.9.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.8.3" + "@babel/plugin-syntax-async-generators" "^7.8.0" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" + "@babel/plugin-syntax-json-strings" "^7.8.0" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + "@babel/plugin-syntax-numeric-separator" "^7.8.0" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" + "@babel/plugin-syntax-top-level-await" "^7.8.3" + "@babel/plugin-transform-arrow-functions" "^7.8.3" + "@babel/plugin-transform-async-to-generator" "^7.8.3" + "@babel/plugin-transform-block-scoped-functions" "^7.8.3" + "@babel/plugin-transform-block-scoping" "^7.8.3" + "@babel/plugin-transform-classes" "^7.9.0" + "@babel/plugin-transform-computed-properties" "^7.8.3" + "@babel/plugin-transform-destructuring" "^7.8.3" + "@babel/plugin-transform-dotall-regex" "^7.8.3" + "@babel/plugin-transform-duplicate-keys" "^7.8.3" + "@babel/plugin-transform-exponentiation-operator" "^7.8.3" + "@babel/plugin-transform-for-of" "^7.9.0" + "@babel/plugin-transform-function-name" "^7.8.3" + "@babel/plugin-transform-literals" "^7.8.3" + "@babel/plugin-transform-member-expression-literals" "^7.8.3" + "@babel/plugin-transform-modules-amd" "^7.9.0" + "@babel/plugin-transform-modules-commonjs" "^7.9.0" + "@babel/plugin-transform-modules-systemjs" "^7.9.0" + "@babel/plugin-transform-modules-umd" "^7.9.0" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.8.3" + "@babel/plugin-transform-new-target" "^7.8.3" + "@babel/plugin-transform-object-super" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.8.7" + "@babel/plugin-transform-property-literals" "^7.8.3" + "@babel/plugin-transform-regenerator" "^7.8.7" + "@babel/plugin-transform-reserved-words" "^7.8.3" + "@babel/plugin-transform-shorthand-properties" "^7.8.3" + "@babel/plugin-transform-spread" "^7.8.3" + "@babel/plugin-transform-sticky-regex" "^7.8.3" + "@babel/plugin-transform-template-literals" "^7.8.3" + "@babel/plugin-transform-typeof-symbol" "^7.8.4" + "@babel/plugin-transform-unicode-regex" "^7.8.3" + "@babel/preset-modules" "^0.1.3" + "@babel/types" "^7.9.0" + browserslist "^4.9.1" + core-js-compat "^3.6.2" + invariant "^2.2.2" + levenary "^1.1.1" + semver "^5.5.0" + +"@babel/preset-modules@^0.1.3": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.3.tgz#13242b53b5ef8c883c3cf7dddd55b36ce80fbc72" + integrity sha512-Ra3JXOHBq2xd56xSF7lMKXdjBn3T772Y1Wet3yWnkDly9zHvJki029tAFzvAAK5cf4YV3yoxuP61crYRol6SVg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" + "@babel/plugin-transform-dotall-regex" "^7.4.4" + "@babel/types" "^7.4.4" + esutils "^2.0.2" + +"@babel/register@^7.7.4": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.9.0.tgz#02464ede57548bddbb5e9f705d263b7c3f43d48b" + integrity sha512-Tv8Zyi2J2VRR8g7pC5gTeIN8Ihultbmk0ocyNz8H2nEZbmhp1N6q0A1UGsQbDvGP/sNinQKUHf3SqXwqjtFv4Q== + dependencies: + find-cache-dir "^2.0.0" + lodash "^4.17.13" + make-dir "^2.1.0" + pirates "^4.0.0" + source-map-support "^0.5.16" + +"@babel/runtime@^7.8.4": + version "7.9.2" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.9.2.tgz#d90df0583a3a252f09aaa619665367bae518db06" + integrity sha512-NE2DtOdufG7R5vnfQUTehdTfNycfUANEtCa9PssN9O/xmTzP4E08UI797ixaei6hBEVL9BI/PsdJS5x7mWoB9Q== + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/template@^7.8.3", "@babel/template@^7.8.6": + version "7.8.6" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.8.6.tgz#86b22af15f828dfb086474f964dcc3e39c43ce2b" + integrity sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg== + dependencies: + "@babel/code-frame" "^7.8.3" + "@babel/parser" "^7.8.6" + "@babel/types" "^7.8.6" + +"@babel/traverse@^7.8.3", "@babel/traverse@^7.8.6", "@babel/traverse@^7.9.0": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.9.0.tgz#d3882c2830e513f4fe4cec9fe76ea1cc78747892" + integrity sha512-jAZQj0+kn4WTHO5dUZkZKhbFrqZE7K5LAQ5JysMnmvGij+wOdr+8lWqPeW0BcF4wFwrEXXtdGO7wcV6YPJcf3w== + dependencies: + "@babel/code-frame" "^7.8.3" + "@babel/generator" "^7.9.0" + "@babel/helper-function-name" "^7.8.3" + "@babel/helper-split-export-declaration" "^7.8.3" + "@babel/parser" "^7.9.0" + "@babel/types" "^7.9.0" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.13" + +"@babel/types@^7.4.4": + version "7.6.3" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.6.3.tgz#3f07d96f854f98e2fbd45c64b0cb942d11e8ba09" + integrity sha512-CqbcpTxMcpuQTMhjI37ZHVgjBkysg5icREQIEZ0eG1yCNwg3oy+5AaLiOKmjsCj6nqOsa6Hf0ObjRVwokb7srA== + dependencies: + esutils "^2.0.2" + lodash "^4.17.13" + to-fast-properties "^2.0.0" + +"@babel/types@^7.8.3", "@babel/types@^7.8.6", "@babel/types@^7.9.0": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.9.0.tgz#00b064c3df83ad32b2dbf5ff07312b15c7f1efb5" + integrity sha512-BS9JKfXkzzJl8RluW4JGknzpiUV7ZrvTayM6yfqLTVBEnFtyowVIOu6rqxRd5cVO6yGoWf4T8u8dgK9oB+GCng== + dependencies: + "@babel/helper-validator-identifier" "^7.9.0" + lodash "^4.17.13" + to-fast-properties "^2.0.0" + +"@webassemblyjs/ast@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964" + integrity sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA== + dependencies: + "@webassemblyjs/helper-module-context" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/wast-parser" "1.9.0" + +"@webassemblyjs/floating-point-hex-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz#3c3d3b271bddfc84deb00f71344438311d52ffb4" + integrity sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA== + +"@webassemblyjs/helper-api-error@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz#203f676e333b96c9da2eeab3ccef33c45928b6a2" + integrity sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw== + +"@webassemblyjs/helper-buffer@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz#a1442d269c5feb23fcbc9ef759dac3547f29de00" + integrity sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA== + +"@webassemblyjs/helper-code-frame@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz#647f8892cd2043a82ac0c8c5e75c36f1d9159f27" + integrity sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA== + dependencies: + "@webassemblyjs/wast-printer" "1.9.0" + +"@webassemblyjs/helper-fsm@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz#c05256b71244214671f4b08ec108ad63b70eddb8" + integrity sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw== + +"@webassemblyjs/helper-module-context@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz#25d8884b76839871a08a6c6f806c3979ef712f07" + integrity sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g== + dependencies: + "@webassemblyjs/ast" "1.9.0" + +"@webassemblyjs/helper-wasm-bytecode@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz#4fed8beac9b8c14f8c58b70d124d549dd1fe5790" + integrity sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw== + +"@webassemblyjs/helper-wasm-section@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz#5a4138d5a6292ba18b04c5ae49717e4167965346" + integrity sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + +"@webassemblyjs/ieee754@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz#15c7a0fbaae83fb26143bbacf6d6df1702ad39e4" + integrity sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg== + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz#f19ca0b76a6dc55623a09cffa769e838fa1e1c95" + integrity sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw== + dependencies: + "@xtuc/long" "4.2.2" + +"@webassemblyjs/utf8@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz#04d33b636f78e6a6813227e82402f7637b6229ab" + integrity sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w== + +"@webassemblyjs/wasm-edit@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz#3fe6d79d3f0f922183aa86002c42dd256cfee9cf" + integrity sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/helper-wasm-section" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + "@webassemblyjs/wasm-opt" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + "@webassemblyjs/wast-printer" "1.9.0" + +"@webassemblyjs/wasm-gen@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz#50bc70ec68ded8e2763b01a1418bf43491a7a49c" + integrity sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/ieee754" "1.9.0" + "@webassemblyjs/leb128" "1.9.0" + "@webassemblyjs/utf8" "1.9.0" + +"@webassemblyjs/wasm-opt@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz#2211181e5b31326443cc8112eb9f0b9028721a61" + integrity sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + +"@webassemblyjs/wasm-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz#9d48e44826df4a6598294aa6c87469d642fff65e" + integrity sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-api-error" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/ieee754" "1.9.0" + "@webassemblyjs/leb128" "1.9.0" + "@webassemblyjs/utf8" "1.9.0" + +"@webassemblyjs/wast-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz#3031115d79ac5bd261556cecc3fa90a3ef451914" + integrity sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/floating-point-hex-parser" "1.9.0" + "@webassemblyjs/helper-api-error" "1.9.0" + "@webassemblyjs/helper-code-frame" "1.9.0" + "@webassemblyjs/helper-fsm" "1.9.0" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/wast-printer@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz#4935d54c85fef637b00ce9f52377451d00d47899" + integrity sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/wast-parser" "1.9.0" + "@xtuc/long" "4.2.2" + +"@xtuc/ieee754@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" + integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== + +"@xtuc/long@4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" + integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== + +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + +abbrev@1.0.x: + version "1.0.9" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" + integrity sha1-kbR5JYinc4wl813W9jdSovh3YTU= + +acorn-jsx@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.1.0.tgz#294adb71b57398b0680015f0a38c563ee1db5384" + integrity sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw== + +acorn@^6.0.7, acorn@^6.2.1: + version "6.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474" + integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA== + +ajv-errors@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" + integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== + +ajv-keywords@^3.1.0, ajv-keywords@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.1.tgz#ef916e271c64ac12171fd8384eaae6b2345854da" + integrity sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ== + +ajv@^6.1.0, ajv@^6.10.2, ajv@^6.9.1: + version "6.10.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.2.tgz#d3cea04d6b017b2894ad69040fec8b623eb4bd52" + integrity sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw== + dependencies: + fast-deep-equal "^2.0.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +amdefine@>=0.0.4: + version "1.0.1" + resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" + integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= + +ansi-escapes@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" + integrity sha1-06ioOzGapneTZisT52HHkRQiMG4= + +ansi-escapes@^3.0.0, ansi-escapes@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" + integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + +ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= + +ansi-styles@^3.2.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +anymatch@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" + +aproba@^1.0.3, aproba@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== + +are-we-there-yet@~1.1.2: + version "1.1.5" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" + integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.6" + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= + +arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= + +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= + +asn1.js@^4.0.0: + version "4.10.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" + integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw== + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +assert@^1.1.1: + version "1.5.0" + resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" + integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== + dependencies: + object-assign "^4.1.1" + util "0.10.3" + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= + +astral-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" + integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== + +async-each@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" + integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== + +async@1.x: + version "1.5.2" + resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= + +async@^2.6.2: + version "2.6.3" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" + integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== + dependencies: + lodash "^4.17.14" + +atob@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + +babel-loader@^8.0.6: + version "8.0.6" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.0.6.tgz#e33bdb6f362b03f4bb141a0c21ab87c501b70dfb" + integrity sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw== + dependencies: + find-cache-dir "^2.0.0" + loader-utils "^1.0.2" + mkdirp "^0.5.1" + pify "^4.0.1" + +babel-plugin-dynamic-import-node@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz#f00f507bdaa3c3e3ff6e7e5e98d90a7acab96f7f" + integrity sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ== + dependencies: + object.assign "^4.1.0" + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +base64-js@^1.0.2: + version "1.3.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" + integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== + +base@^0.11.1: + version "0.11.2" + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + +benchmark@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/benchmark/-/benchmark-2.1.4.tgz#09f3de31c916425d498cc2ee565a0ebf3c2a5629" + integrity sha1-CfPeMckWQl1JjMLuVloOvzwqVik= + dependencies: + lodash "^4.17.4" + platform "^1.3.3" + +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== + +binary-extensions@^1.0.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" + integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== + +bluebird@^3.5.5: + version "3.7.1" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.1.tgz#df70e302b471d7473489acf26a93d63b53f874de" + integrity sha512-DdmyoGCleJnkbp3nkbxTLJ18rjDsE4yCggEwKNXkeV123sPNfOCYeDoeuOY+F2FrSjO1YXcTU+dsy96KMy+gcg== + +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: + version "4.11.8" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" + integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^2.3.1, braces@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + +brorand@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= + +browserify-aes@^1.0.0, browserify-aes@^1.0.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +browserify-cipher@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" + integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== + dependencies: + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + +browserify-des@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" + integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +browserify-rsa@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" + integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ= + dependencies: + bn.js "^4.1.0" + randombytes "^2.0.1" + +browserify-sign@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" + integrity sha1-qk62jl17ZYuqa/alfmMMvXqT0pg= + dependencies: + 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@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" + integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== + dependencies: + pako "~1.0.5" + +browserslist@^4.8.3, browserslist@^4.9.1: + version "4.11.1" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.11.1.tgz#92f855ee88d6e050e7e7311d987992014f1a1f1b" + integrity sha512-DCTr3kDrKEYNw6Jb9HFxVLQNaue8z+0ZfRBRjmCunKDEXEBajKDj2Y+Uelg+Pi29OnvaSGwjOsnRyNEkXzHg5g== + dependencies: + caniuse-lite "^1.0.30001038" + electron-to-chromium "^1.3.390" + node-releases "^1.1.53" + pkg-up "^2.0.0" + +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= + +buffer@^4.3.0: + version "4.9.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" + integrity sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg= + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" + +builtin-status-codes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" + integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= + +cacache@^12.0.2: + version "12.0.3" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.3.tgz#be99abba4e1bf5df461cd5a2c1071fc432573390" + integrity sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw== + dependencies: + bluebird "^3.5.5" + chownr "^1.1.1" + figgy-pudding "^3.5.1" + glob "^7.1.4" + graceful-fs "^4.1.15" + infer-owner "^1.0.3" + lru-cache "^5.1.1" + mississippi "^3.0.0" + mkdirp "^0.5.1" + move-concurrently "^1.0.1" + promise-inflight "^1.0.1" + rimraf "^2.6.3" + ssri "^6.0.1" + unique-filename "^1.1.1" + y18n "^4.0.0" + +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camelcase@^5.0.0: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +caniuse-lite@^1.0.30001038: + version "1.0.30001038" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001038.tgz#44da3cbca2ab6cb6aa83d1be5d324e17f141caff" + integrity sha512-zii9quPo96XfOiRD4TrfYGs+QsGZpb2cGiMAzPjtf/hpFgB6zCPZgJb7I1+EATeMw/o+lG8FyRAnI+CWStHcaQ== + +chalk@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" + integrity sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@2.4.2, chalk@^2.0.0, chalk@^2.1.0, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== + +chokidar@^2.0.2: + version "2.1.8" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" + integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== + dependencies: + anymatch "^2.0.0" + async-each "^1.0.1" + braces "^2.3.2" + glob-parent "^3.1.0" + inherits "^2.0.3" + is-binary-path "^1.0.0" + is-glob "^4.0.0" + normalize-path "^3.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.2.1" + upath "^1.1.1" + optionalDependencies: + fsevents "^1.2.7" + +chownr@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.3.tgz#42d837d5239688d55f303003a508230fa6727142" + integrity sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw== + +chrome-trace-event@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4" + integrity sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ== + dependencies: + tslib "^1.9.0" + +ci-info@^1.5.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" + integrity sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A== + +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +cli-cursor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" + integrity sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc= + dependencies: + restore-cursor "^1.0.1" + +cli-cursor@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= + dependencies: + restore-cursor "^2.0.0" + +cli-width@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" + integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= + +cliui@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" + integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== + dependencies: + string-width "^3.1.0" + strip-ansi "^5.2.0" + wrap-ansi "^5.1.0" + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +colors@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" + integrity sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs= + +commander@^2.20.0, commander@~2.20.3: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= + +component-emitter@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +concat-stream@^1.5.0: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +console-browserify@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" + integrity sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA= + dependencies: + date-now "^0.1.4" + +console-control-strings@^1.0.0, console-control-strings@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= + +constants-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" + integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= + +convert-source-map@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" + integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== + dependencies: + safe-buffer "~5.1.1" + +copy-concurrently@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" + integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== + dependencies: + aproba "^1.1.1" + fs-write-stream-atomic "^1.0.8" + iferr "^0.1.5" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.0" + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= + +core-js-compat@^3.6.2: + version "3.6.4" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.6.4.tgz#938476569ebb6cda80d339bcf199fae4f16fff17" + integrity sha512-zAa3IZPvsJ0slViBQ2z+vgyyTuhd3MFn1rBQjZSKVEgB0UMYhUkCj9jJUVPgGTGqWvsBVmfnruXgTcNyTlEiSA== + dependencies: + browserslist "^4.8.3" + semver "7.0.0" + +core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +corser@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/corser/-/corser-2.0.1.tgz#8eda252ecaab5840dcd975ceb90d9370c819ff87" + integrity sha1-jtolLsqrWEDc2XXOuQ2TcMgZ/4c= + +cp-sugar@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/cp-sugar/-/cp-sugar-1.0.0.tgz#1c26f9bdca1c03cf6af744a655239ff931ccab6f" + integrity sha1-HCb5vcocA89q90SmVSOf+THMq28= + dependencies: + cross-spawn-async "^2.1.6" + pinkie-promise "^2.0.0" + promisify-event "^1.0.0" + shell-quote "^1.4.3" + +create-ecdh@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff" + integrity sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw== + dependencies: + bn.js "^4.1.0" + elliptic "^6.0.0" + +create-hash@^1.1.0, create-hash@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + md5.js "^1.3.4" + ripemd160 "^2.0.1" + sha.js "^2.4.0" + +create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: + version "1.1.7" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +cross-spawn-async@^2.1.6: + version "2.2.5" + resolved "https://registry.yarnpkg.com/cross-spawn-async/-/cross-spawn-async-2.2.5.tgz#845ff0c0834a3ded9d160daca6d390906bb288cc" + integrity sha1-hF/wwINKPe2dFg2sptOQkGuyiMw= + dependencies: + lru-cache "^4.0.0" + which "^1.2.8" + +cross-spawn@6.0.5, cross-spawn@^6.0.0, cross-spawn@^6.0.5: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +crypto-browserify@^3.11.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" + integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== + dependencies: + browserify-cipher "^1.0.0" + browserify-sign "^4.0.0" + create-ecdh "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.0" + diffie-hellman "^5.0.0" + inherits "^2.0.1" + pbkdf2 "^3.0.3" + public-encrypt "^4.0.0" + randombytes "^2.0.0" + randomfill "^1.0.3" + +cyclist@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" + integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= + +date-now@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" + integrity sha1-6vQ5/U1ISK105cx9vvIAZyueNFs= + +debug@^2.2.0, debug@^2.3.3: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@^3.0.0, debug@^3.1.1, debug@^3.2.6: + version "3.2.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" + integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== + dependencies: + ms "^2.1.1" + +debug@^4.0.1, debug@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== + dependencies: + ms "^2.1.1" + +decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + +deep-is@~0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= + +define-properties@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" + +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= + +des.js@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc" + integrity sha1-wHTS4qpqipoH29YfmhXCzYPsjsw= + dependencies: + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +detect-file@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" + integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc= + +detect-libc@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= + +diffie-hellman@^5.0.0: + version "5.0.3" + resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" + integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== + dependencies: + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +domain-browser@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" + integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== + +duplexify@^3.4.2, duplexify@^3.6.0: + version "3.7.1" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" + integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== + dependencies: + end-of-stream "^1.0.0" + inherits "^2.0.1" + readable-stream "^2.0.0" + stream-shift "^1.0.0" + +ecstatic@^3.0.0: + version "3.3.2" + resolved "https://registry.yarnpkg.com/ecstatic/-/ecstatic-3.3.2.tgz#6d1dd49814d00594682c652adb66076a69d46c48" + integrity sha512-fLf9l1hnwrHI2xn9mEDT7KIi22UDqA2jaCwyCbSUJh9a1V+LEUSL/JO/6TIz/QyuBURWUHrFL5Kg2TtO1bkkog== + dependencies: + he "^1.1.1" + mime "^1.6.0" + minimist "^1.1.0" + url-join "^2.0.5" + +electron-to-chromium@^1.3.390: + version "1.3.393" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.393.tgz#d13fa4cbf5065e18451c84465d22aef6aca9a911" + integrity sha512-Ko3/VdhZAaMaJBLBFqEJ+M1qMiBI8sJfPY/hSJvDrkB3Do8LJsL9tmXy4w7o9nPXif/jFaZGSlXTQWU8XVsYtg== + +elegant-spinner@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" + integrity sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4= + +elegant-status@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/elegant-status/-/elegant-status-1.1.0.tgz#41ef4a5f2d03642983babb4f64a4b576b1155215" + integrity sha1-Qe9KXy0DZCmDurtPZKS1drEVUhU= + dependencies: + chalk "^1.1.1" + elegant-spinner "^1.0.1" + log-update "^1.0.2" + os-family "^1.0.0" + +elliptic@^6.0.0: + version "6.5.1" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.1.tgz#c380f5f909bf1b9b4428d028cd18d3b0efd6b52b" + integrity sha512-xvJINNLbTeWQjrl6X+7eQCrIy/YPv5XCpKW6kB5mKvtnGILoLDcySuwomfdzt0BMdLNVnuRNTuzKNHj0bva1Cg== + dependencies: + bn.js "^4.4.0" + brorand "^1.0.1" + hash.js "^1.0.0" + hmac-drbg "^1.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.0" + +emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + +emojis-list@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" + integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= + +end-of-stream@^1.0.0, end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +enhanced-resolve@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz#41c7e0bfdfe74ac1ffe1e57ad6a5c6c9f3742a7f" + integrity sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng== + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.4.0" + tapable "^1.0.0" + +enhanced-resolve@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz#2937e2b8066cd0fe7ce0990a98f0d71a35189f66" + integrity sha512-98p2zE+rL7/g/DzMHMTF4zZlCgeVdJ7yr6xzEpJRYwFYrGi9ANdn5DnJURg6RpBkyk60XYDnWIv51VfIhfNGuA== + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.5.0" + tapable "^1.0.0" + +errno@^0.1.3, errno@~0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" + integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg== + dependencies: + prr "~1.0.1" + +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +escodegen@1.8.x: + version "1.8.1" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018" + integrity sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg= + dependencies: + esprima "^2.7.1" + estraverse "^1.9.1" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.2.0" + +eslint-scope@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" + integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-utils@^1.3.1: + version "1.4.3" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" + integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q== + dependencies: + eslint-visitor-keys "^1.1.0" + +eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2" + integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A== + +eslint@^5.16.0: + version "5.16.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.16.0.tgz#a1e3ac1aae4a3fbd8296fcf8f7ab7314cbb6abea" + integrity sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg== + dependencies: + "@babel/code-frame" "^7.0.0" + ajv "^6.9.1" + chalk "^2.1.0" + cross-spawn "^6.0.5" + debug "^4.0.1" + doctrine "^3.0.0" + eslint-scope "^4.0.3" + eslint-utils "^1.3.1" + eslint-visitor-keys "^1.0.0" + espree "^5.0.1" + esquery "^1.0.1" + esutils "^2.0.2" + file-entry-cache "^5.0.1" + functional-red-black-tree "^1.0.1" + glob "^7.1.2" + globals "^11.7.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + inquirer "^6.2.2" + js-yaml "^3.13.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.3.0" + lodash "^4.17.11" + minimatch "^3.0.4" + mkdirp "^0.5.1" + natural-compare "^1.4.0" + optionator "^0.8.2" + path-is-inside "^1.0.2" + progress "^2.0.0" + regexpp "^2.0.1" + semver "^5.5.1" + strip-ansi "^4.0.0" + strip-json-comments "^2.0.1" + table "^5.2.3" + text-table "^0.2.0" + +espree@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-5.0.1.tgz#5d6526fa4fc7f0788a5cf75b15f30323e2f81f7a" + integrity sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A== + dependencies: + acorn "^6.0.7" + acorn-jsx "^5.0.0" + eslint-visitor-keys "^1.0.0" + +esprima@2.7.x, esprima@^2.7.1: + version "2.7.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" + integrity sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE= + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esquery@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708" + integrity sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA== + dependencies: + estraverse "^4.0.0" + +esrecurse@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" + integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ== + dependencies: + estraverse "^4.1.0" + +estraverse@^1.9.1: + version "1.9.3" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" + integrity sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q= + +estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +eventemitter3@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.0.tgz#d65176163887ee59f386d64c82610b696a4a74eb" + integrity sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg== + +events@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.0.0.tgz#9a0a0dfaf62893d92b875b8f2698ca4114973e88" + integrity sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA== + +evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +exit-hook@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" + integrity sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g= + +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +expand-tilde@^2.0.0, expand-tilde@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" + integrity sha1-l+gBqgUt8CRU3kawK/YhZCzchQI= + dependencies: + homedir-polyfill "^1.0.1" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +external-editor@^3.0.0, external-editor@^3.0.3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +fast-deep-equal@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" + integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= + +fast-json-stable-stringify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" + integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= + +fast-levenshtein@~2.0.4: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + +figgy-pudding@^3.5.1: + version "3.5.1" + resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790" + integrity sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w== + +figures@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" + integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= + dependencies: + escape-string-regexp "^1.0.5" + +file-entry-cache@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" + integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== + dependencies: + flat-cache "^2.0.1" + +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + +find-cache-dir@^2.0.0, find-cache-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" + integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== + dependencies: + commondir "^1.0.1" + make-dir "^2.0.0" + pkg-dir "^3.0.0" + +find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= + dependencies: + locate-path "^2.0.0" + +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + +findup-sync@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-3.0.0.tgz#17b108f9ee512dfb7a5c7f3c8b27ea9e1a9c08d1" + integrity sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg== + dependencies: + detect-file "^1.0.0" + is-glob "^4.0.0" + micromatch "^3.0.4" + resolve-dir "^1.0.1" + +flat-cache@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" + integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== + dependencies: + flatted "^2.0.0" + rimraf "2.6.3" + write "1.0.3" + +flatted@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.1.tgz#69e57caa8f0eacbc281d2e2cb458d46fdb449e08" + integrity sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg== + +flush-write-stream@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" + integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== + dependencies: + inherits "^2.0.3" + readable-stream "^2.3.6" + +follow-redirects@^1.0.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.9.0.tgz#8d5bcdc65b7108fe1508649c79c12d732dcedb4f" + integrity sha512-CRcPzsSIbXyVDl0QI01muNDu69S8trU4jArW9LpOt2WtC6LyUJetcIrmfHsRBx7/Jb6GHJUiuqyYxPooFfNt6A== + dependencies: + debug "^3.0.0" + +for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= + +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= + dependencies: + map-cache "^0.2.2" + +from2@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" + integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.0" + +fs-minipass@^1.2.5: + version "1.2.7" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" + integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== + dependencies: + minipass "^2.6.0" + +fs-write-stream-atomic@^1.0.8: + version "1.0.10" + resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" + integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= + dependencies: + graceful-fs "^4.1.2" + iferr "^0.1.5" + imurmurhash "^0.1.4" + readable-stream "1 || 2" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +fsevents@^1.2.7: + version "1.2.9" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.9.tgz#3f5ed66583ccd6f400b5a00db6f7e861363e388f" + integrity sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw== + dependencies: + nan "^2.12.1" + node-pre-gyp "^0.12.0" + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= + +gauge@~2.7.3: + version "2.7.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= + dependencies: + 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" + +gensync@^1.0.0-beta.1: + version "1.0.0-beta.1" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269" + integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg== + +get-caller-file@^2.0.1: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-stream@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= + +glob-parent@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= + dependencies: + is-glob "^3.1.0" + path-dirname "^1.0.0" + +glob@^5.0.15: + version "5.0.15" + resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" + integrity sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E= + dependencies: + inflight "^1.0.4" + inherits "2" + minimatch "2 || 3" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: + version "7.1.5" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.5.tgz#6714c69bee20f3c3e64c4dd905553e532b40cdc0" + integrity sha512-J9dlskqUXK1OeTOYBEn5s8aMukWMwWfs+rPTn/jn50Ux4MNXVhubL1wu/j2t+H4NVI+cXEcCaYellqaPVGXNqQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +global-modules@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" + integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== + dependencies: + global-prefix "^3.0.0" + +global-modules@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" + integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg== + dependencies: + global-prefix "^1.0.1" + is-windows "^1.0.1" + resolve-dir "^1.0.0" + +global-prefix@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" + integrity sha1-2/dDxsFJklk8ZVVoy2btMsASLr4= + dependencies: + expand-tilde "^2.0.2" + homedir-polyfill "^1.0.1" + ini "^1.3.4" + is-windows "^1.0.1" + which "^1.2.14" + +global-prefix@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" + integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== + dependencies: + ini "^1.3.5" + kind-of "^6.0.2" + which "^1.3.1" + +globals@^11.1.0, globals@^11.7.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2: + version "4.2.3" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" + integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== + +handlebars@^4.0.1: + version "4.4.5" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.4.5.tgz#1b1f94f9bfe7379adda86a8b73fb570265a0dddd" + integrity sha512-0Ce31oWVB7YidkaTq33ZxEbN+UDxMMgThvCe8ptgQViymL5DPis9uLdTA13MiRPhgvqyxIegugrP97iK3JeBHg== + dependencies: + neo-async "^2.6.0" + optimist "^0.6.1" + source-map "^0.6.1" + optionalDependencies: + uglify-js "^3.1.4" + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= + dependencies: + ansi-regex "^2.0.0" + +has-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" + integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo= + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +has-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" + integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q= + +has-unicode@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= + +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +hash-base@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" + integrity sha1-X8hoaEfs1zSZQDMZprCj8/auSRg= + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +hash.js@^1.0.0, hash.js@^1.0.3: + version "1.1.7" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + +he@^1.1.1, he@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +hmac-drbg@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +homedir-polyfill@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" + integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== + dependencies: + parse-passwd "^1.0.0" + +http-proxy@^1.8.1: + version "1.18.0" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.0.tgz#dbe55f63e75a347db7f3d99974f2692a314a6a3a" + integrity sha512-84I2iJM/n1d4Hdgc6y2+qY5mDaz2PUVjlg9znE9byl+q0uC3DeByqBGReQu5tpLK0TAqTIXScRUV+dg7+bUPpQ== + dependencies: + eventemitter3 "^4.0.0" + follow-redirects "^1.0.0" + requires-port "^1.0.0" + +http-server@^0.11.1: + version "0.11.1" + resolved "https://registry.yarnpkg.com/http-server/-/http-server-0.11.1.tgz#2302a56a6ffef7f9abea0147d838a5e9b6b6a79b" + integrity sha512-6JeGDGoujJLmhjiRGlt8yK8Z9Kl0vnl/dQoQZlc4oeqaUoAKQg94NILLfrY3oWzSyFaQCVNTcKE5PZ3cH8VP9w== + dependencies: + colors "1.0.3" + corser "~2.0.0" + ecstatic "^3.0.0" + http-proxy "^1.8.1" + opener "~1.4.0" + optimist "0.6.x" + portfinder "^1.0.13" + union "~0.4.3" + +https-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" + integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= + +iconv-lite@^0.4.24, iconv-lite@^0.4.4: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +ieee754@^1.1.4: + version "1.1.13" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" + integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== + +iferr@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" + integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= + +ignore-walk@^3.0.1: + version "3.0.3" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" + integrity sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw== + dependencies: + minimatch "^3.0.4" + +ignore@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" + integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== + +import-fresh@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.1.0.tgz#6d33fa1dcef6df930fae003446f33415af905118" + integrity sha512-PpuksHKGt8rXfWEr9m9EHIpgyyaltBy8+eF6GJM0QCAxMgxCfucMF3mjecK2QsJr0amJW7gTqh5/wht0z2UhEQ== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-local@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" + integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== + dependencies: + pkg-dir "^3.0.0" + resolve-cwd "^2.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + +infer-owner@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" + integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +inherits@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" + integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= + +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= + +ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: + version "1.3.5" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== + +inquirer@6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.2.0.tgz#51adcd776f661369dc1e894859c2560a224abdd8" + integrity sha512-QIEQG4YyQ2UYZGDC4srMZ7BjHOmNk1lR2JQj5UknBapklm6WHA+VVH7N+sUdX3A7NeCfGF8o4X1S3Ao7nAcIeg== + dependencies: + ansi-escapes "^3.0.0" + chalk "^2.0.0" + cli-cursor "^2.1.0" + cli-width "^2.0.0" + external-editor "^3.0.0" + figures "^2.0.0" + lodash "^4.17.10" + mute-stream "0.0.7" + run-async "^2.2.0" + rxjs "^6.1.0" + string-width "^2.1.0" + strip-ansi "^4.0.0" + through "^2.3.6" + +inquirer@^6.2.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca" + integrity sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ== + dependencies: + ansi-escapes "^3.2.0" + chalk "^2.4.2" + cli-cursor "^2.1.0" + cli-width "^2.0.0" + external-editor "^3.0.3" + figures "^2.0.0" + lodash "^4.17.12" + mute-stream "0.0.7" + run-async "^2.2.0" + rxjs "^6.4.0" + string-width "^2.1.0" + strip-ansi "^5.1.0" + through "^2.3.6" + +interpret@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296" + integrity sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw== + +invariant@^2.2.2, invariant@^2.2.4: + version "2.2.4" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== + dependencies: + loose-envify "^1.0.0" + +invert-kv@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" + integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== + +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== + dependencies: + kind-of "^6.0.0" + +is-binary-path@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= + dependencies: + binary-extensions "^1.0.0" + +is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + +is-ci@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" + integrity sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg== + dependencies: + ci-info "^1.5.0" + +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== + dependencies: + kind-of "^6.0.0" + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= + +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== + dependencies: + is-plain-object "^2.0.4" + +is-extglob@^2.1.0, is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +is-glob@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= + dependencies: + is-extglob "^2.1.0" + +is-glob@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + dependencies: + is-extglob "^2.1.1" + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= + dependencies: + kind-of "^3.0.2" + +is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-promise@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" + integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= + +is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + +is-windows@^1.0.1, is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + +is-wsl@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" + integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= + +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + +istanbul@^0.4.5: + version "0.4.5" + resolved "https://registry.yarnpkg.com/istanbul/-/istanbul-0.4.5.tgz#65c7d73d4c4da84d4f3ac310b918fb0b8033733b" + integrity sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs= + dependencies: + abbrev "1.0.x" + async "1.x" + escodegen "1.8.x" + esprima "2.7.x" + glob "^5.0.15" + handlebars "^4.0.1" + js-yaml "3.x" + mkdirp "0.5.x" + nopt "3.x" + once "1.x" + resolve "1.1.x" + supports-color "^3.1.0" + which "^1.1.1" + wordwrap "^1.0.0" + +jasmine-core@~3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-3.5.0.tgz#132c23e645af96d85c8bca13c8758b18429fc1e4" + integrity sha512-nCeAiw37MIMA9w9IXso7bRaLl+c/ef3wnxsoSAlYrzS+Ot0zTG6nU8G/cIfGkqpkjX2wNaIW9RFG0TwIFnG6bA== + +jasmine@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/jasmine/-/jasmine-3.5.0.tgz#7101eabfd043a1fc82ac24e0ab6ec56081357f9e" + integrity sha512-DYypSryORqzsGoMazemIHUfMkXM7I7easFaxAvNM3Mr6Xz3Fy36TupTrAOxZWN8MVKEU5xECv22J4tUQf3uBzQ== + dependencies: + glob "^7.1.4" + jasmine-core "~3.5.0" + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@3.x, js-yaml@^3.13.0: + version "3.13.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" + integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= + +json-parse-better-errors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + dependencies: + minimist "^1.2.0" + +json5@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.2.tgz#43ef1f0af9835dd624751a6b7fa48874fb2d608e" + integrity sha512-MoUOQ4WdiN3yxhm7NEVJSJrieAo5hNSLQ5sj05OTRHPL9HOBy8u4Bu88jsC1jvqAdN+E1bJmsUcZH+1HQxliqQ== + dependencies: + minimist "^1.2.5" + +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" + integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA== + +lcid@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" + integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA== + dependencies: + invert-kv "^2.0.0" + +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + +levenary@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/levenary/-/levenary-1.1.1.tgz#842a9ee98d2075aa7faeedbe32679e9205f46f77" + integrity sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ== + dependencies: + leven "^3.1.0" + +levn@^0.3.0, levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +loader-runner@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" + integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== + +loader-utils@1.2.3, loader-utils@^1.0.2, loader-utils@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7" + integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA== + dependencies: + big.js "^5.2.2" + emojis-list "^2.0.0" + json5 "^1.0.1" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +lodash.toarray@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.toarray/-/lodash.toarray-4.4.0.tgz#24c4bfcd6b2fba38bfd0594db1179d8e9b656561" + integrity sha1-JMS/zWsvuji/0FlNsRedjptlZWE= + +lodash@4.17.12: + version "4.17.12" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.12.tgz#a712c74fdc31f7ecb20fe44f157d802d208097ef" + integrity sha512-+CiwtLnsJhX03p20mwXuvhoebatoh5B3tt+VvYlrPgZC1g36y+RRbkufX95Xa+X4I59aWEacDFYwnJZiyBh9gA== + +lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.4: + version "4.17.15" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" + integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== + +log-update@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/log-update/-/log-update-1.0.2.tgz#19929f64c4093d2d2e7075a1dad8af59c296b8d1" + integrity sha1-GZKfZMQJPS0ucHWh2tivWcKWuNE= + dependencies: + ansi-escapes "^1.0.0" + cli-cursor "^1.0.2" + +loose-envify@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +lru-cache@^4.0.0: + version "4.1.5" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" + integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +make-dir@^2.0.0, make-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== + dependencies: + pify "^4.0.1" + semver "^5.6.0" + +map-age-cleaner@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" + integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== + dependencies: + p-defer "^1.0.0" + +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= + dependencies: + object-visit "^1.0.0" + +md5.js@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +mem@^4.0.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" + integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w== + dependencies: + map-age-cleaner "^0.1.1" + mimic-fn "^2.0.0" + p-is-promise "^2.0.0" + +memory-fs@^0.4.0, memory-fs@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" + integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +memory-fs@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c" + integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA== + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +micromatch@3.1.10, micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: + version "3.1.10" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + +miller-rabin@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" + integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + +mime@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mimic-fn@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== + +mimic-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= + +"minimatch@2 || 3", minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimist@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= + +minimist@^1.1.0, minimist@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= + +minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + +minimist@~0.0.1: + version "0.0.10" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" + integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= + +minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" + integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== + dependencies: + safe-buffer "^5.1.2" + yallist "^3.0.0" + +minizlib@^1.2.1: + version "1.3.3" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" + integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== + dependencies: + minipass "^2.9.0" + +mississippi@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" + integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA== + dependencies: + concat-stream "^1.5.0" + duplexify "^3.4.2" + end-of-stream "^1.1.0" + flush-write-stream "^1.0.0" + from2 "^2.1.0" + parallel-transform "^1.1.0" + pump "^3.0.0" + pumpify "^1.3.3" + stream-each "^1.1.0" + through2 "^2.0.0" + +mixin-deep@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" + integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +mkdirp@0.5.x, mkdirp@^0.5.0, mkdirp@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= + dependencies: + minimist "0.0.8" + +mkdirp@^0.5.3: + version "0.5.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.4.tgz#fd01504a6797ec5c9be81ff43d204961ed64a512" + integrity sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw== + dependencies: + minimist "^1.2.5" + +move-concurrently@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" + integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= + dependencies: + aproba "^1.1.1" + copy-concurrently "^1.0.0" + fs-write-stream-atomic "^1.0.8" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.3" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +mute-stream@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" + integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= + +nan@^2.12.1: + version "2.14.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" + integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== + +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + +needle@^2.2.1: + version "2.4.0" + resolved "https://registry.yarnpkg.com/needle/-/needle-2.4.0.tgz#6833e74975c444642590e15a750288c5f939b57c" + integrity sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg== + dependencies: + debug "^3.2.6" + iconv-lite "^0.4.4" + sax "^1.2.4" + +neo-async@^2.5.0, neo-async@^2.6.0, neo-async@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" + integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + +nimn-date-parser@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/nimn-date-parser/-/nimn-date-parser-1.0.0.tgz#4ce55d1fd5ea206bbe82b76276f7b7c582139351" + integrity sha512-1Nf+x3EeMvHUiHsVuEhiZnwA8RMeOBVTQWfB1S2n9+i6PYCofHd2HRMD+WOHIHYshy4T4Gk8wQoCol7Hq3av8Q== + +nimn_schema_builder@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/nimn_schema_builder/-/nimn_schema_builder-1.1.0.tgz#b370ccf5b647d66e50b2dcfb20d0aa12468cd247" + integrity sha512-DK5/B8CM4qwzG2URy130avcwPev4uO0ev836FbQyKo1ms6I9z/i6EJyiZ+d9xtgloxUri0W+5gfR8YbPq7SheA== + +nimnjs@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/nimnjs/-/nimnjs-1.3.2.tgz#a6a877968d87fad836375a4f616525e55079a5ba" + integrity sha512-TIOtI4iqkQrUM1tiM76AtTQem0c7e56SkDZ7sj1d1MfUsqRcq2ZWQvej/O+HBTZV7u/VKnwlKTDugK/75IRPPw== + dependencies: + nimn-date-parser "^1.0.0" + nimn_schema_builder "^1.0.0" + +node-emoji@1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.8.1.tgz#6eec6bfb07421e2148c75c6bba72421f8530a826" + integrity sha512-+ktMAh1Jwas+TnGodfCfjUbJKoANqPaJFN0z0iqh41eqD8dvguNzcitVSBSVK1pidz0AqGbLKcoVuVLRVZ/aVg== + dependencies: + lodash.toarray "^4.4.0" + +node-libs-browser@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" + integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== + dependencies: + assert "^1.1.1" + browserify-zlib "^0.2.0" + buffer "^4.3.0" + console-browserify "^1.1.0" + constants-browserify "^1.0.0" + crypto-browserify "^3.11.0" + domain-browser "^1.1.1" + events "^3.0.0" + https-browserify "^1.0.0" + os-browserify "^0.3.0" + path-browserify "0.0.1" + process "^0.11.10" + punycode "^1.2.4" + querystring-es3 "^0.2.0" + readable-stream "^2.3.3" + stream-browserify "^2.0.1" + stream-http "^2.7.2" + string_decoder "^1.0.0" + timers-browserify "^2.0.4" + tty-browserify "0.0.0" + url "^0.11.0" + util "^0.11.0" + vm-browserify "^1.0.1" + +node-modules-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" + integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= + +node-pre-gyp@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz#39ba4bb1439da030295f899e3b520b7785766149" + integrity sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A== + dependencies: + 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" + +node-releases@^1.1.53: + version "1.1.53" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.53.tgz#2d821bfa499ed7c5dffc5e2f28c88e78a08ee3f4" + integrity sha512-wp8zyQVwef2hpZ/dJH7SfSrIPD6YoJz6BDQDpGEkcA0s3LpAQoxBIYmfIq6QAhC1DhwsyCgTaTTcONwX8qzCuQ== + +nopt@3.x: + version "3.0.6" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" + integrity sha1-xkZdvwirzU2zWTF/eaxopkayj/k= + dependencies: + abbrev "1" + +nopt@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" + integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00= + dependencies: + abbrev "1" + osenv "^0.1.4" + +normalize-path@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= + dependencies: + remove-trailing-separator "^1.0.1" + +normalize-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +npm-bundled@^1.0.1: + version "1.0.6" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd" + integrity sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g== + +npm-packlist@^1.1.6: + version "1.4.6" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.6.tgz#53ba3ed11f8523079f1457376dd379ee4ea42ff4" + integrity sha512-u65uQdb+qwtGvEJh/DgQgW1Xg7sqeNbmxYyrvlNznaVTjV3E5P6F/EFjM+BVHXl7JJlsdG8A64M0XI8FI/IOlg== + dependencies: + ignore-walk "^3.0.1" + npm-bundled "^1.0.1" + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= + dependencies: + path-key "^2.0.0" + +npmlog@^4.0.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== + dependencies: + 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@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= + +object-assign@^4.1.0, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-keys@^1.0.11, object-keys@^1.0.12: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + dependencies: + isobject "^3.0.0" + +object.assign@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" + integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== + dependencies: + define-properties "^1.1.2" + function-bind "^1.1.1" + has-symbols "^1.0.0" + object-keys "^1.0.11" + +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= + dependencies: + isobject "^3.0.1" + +once@1.x, once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +onetime@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" + integrity sha1-ofeDj4MUxRbwXs78vEzP4EtO14k= + +onetime@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= + dependencies: + mimic-fn "^1.0.0" + +opener@~1.4.0: + version "1.4.3" + resolved "https://registry.yarnpkg.com/opener/-/opener-1.4.3.tgz#5c6da2c5d7e5831e8ffa3964950f8d6674ac90b8" + integrity sha1-XG2ixdflgx6P+jlklQ+NZnSskLg= + +optimist@0.6.x, optimist@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" + integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY= + dependencies: + minimist "~0.0.1" + wordwrap "~0.0.2" + +optionator@^0.8.1, optionator@^0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" + integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q= + dependencies: + 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" + +os-browserify@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" + integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= + +os-family@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/os-family/-/os-family-1.1.0.tgz#8a89cb617dd1631b8ef9506be830144f626c214e" + integrity sha512-E3Orl5pvDJXnVmpaAA2TeNNpNhTMl4o5HghuWhOivBjEiTnJSrMYSa5uZMek1lBEvu8kKEsa2YgVcGFVDqX/9w== + +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= + +os-locale@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" + integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q== + dependencies: + execa "^1.0.0" + lcid "^2.0.0" + mem "^4.0.0" + +os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + +osenv@0.1.5, osenv@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" + integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" + +p-defer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" + integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + +p-is-promise@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" + integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== + +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + dependencies: + p-try "^1.0.0" + +p-limit@^2.0.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.1.tgz#aa07a788cc3151c939b5131f63570f0dd2009537" + integrity sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg== + dependencies: + p-try "^2.0.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= + dependencies: + p-limit "^1.1.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +pako@~1.0.5: + version "1.0.10" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.10.tgz#4328badb5086a426aa90f541977d4955da5c9732" + integrity sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw== + +parallel-transform@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" + integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg== + dependencies: + cyclist "^1.0.1" + inherits "^2.0.3" + readable-stream "^2.1.5" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-asn1@^5.0.0: + version "5.1.5" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.5.tgz#003271343da58dc94cace494faef3d2147ecea0e" + integrity sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ== + dependencies: + asn1.js "^4.0.0" + browserify-aes "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.0" + pbkdf2 "^3.0.3" + safe-buffer "^5.1.1" + +parse-passwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" + integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= + +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= + +path-browserify@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" + integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== + +path-dirname@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-is-inside@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= + +path-key@^2.0.0, path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + +path-parse@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + +pbkdf2@^3.0.3: + version "3.0.17" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6" + integrity sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA== + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= + +pirates@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" + integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA== + dependencies: + node-modules-regexp "^1.0.0" + +pkg-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" + integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== + dependencies: + find-up "^3.0.0" + +pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-2.0.0.tgz#c819ac728059a461cab1c3889a2be3c49a004d7f" + integrity sha1-yBmscoBZpGHKscOImivjxJoATX8= + dependencies: + find-up "^2.1.0" + +platform@^1.3.3: + version "1.3.5" + resolved "https://registry.yarnpkg.com/platform/-/platform-1.3.5.tgz#fb6958c696e07e2918d2eeda0f0bc9448d733444" + integrity sha512-TuvHS8AOIZNAlE77WUDiR4rySV/VMptyMfcfeoMgs4P8apaZM3JrnbzBiixKUv+XR6i+BXrQh8WAnjaSPFO65Q== + +portfinder@^1.0.13: + version "1.0.25" + resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.25.tgz#254fd337ffba869f4b9d37edc298059cb4d35eca" + integrity sha512-6ElJnHBbxVA1XSLgBp7G1FiCkQdlqGzuF7DswL5tcea+E8UpuvPU7beVAjjRwCioTS9ZluNbu+ZyRvgTsmqEBg== + dependencies: + async "^2.6.2" + debug "^3.1.1" + mkdirp "^0.5.1" + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= + +prettier@^1.19.1: + version "1.19.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" + integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== + +private@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" + integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= + +progress@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= + +promisify-event@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/promisify-event/-/promisify-event-1.0.0.tgz#bd7523ea06b70162f370979016b53a686c60e90f" + integrity sha1-vXUj6ga3AWLzcJeQFrU6aGxg6Q8= + dependencies: + pinkie-promise "^2.0.0" + +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= + +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= + +public-encrypt@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" + integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== + dependencies: + bn.js "^4.1.0" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + parse-asn1 "^5.0.0" + randombytes "^2.0.1" + safe-buffer "^5.1.2" + +publish-please@^5.5.1: + version "5.5.1" + resolved "https://registry.yarnpkg.com/publish-please/-/publish-please-5.5.1.tgz#a49675d6589d860854729494c07aed5fc0f09b30" + integrity sha512-KFX+79e3QhNswHp1wLfwXN7rLf6tO3+7jcY5ELjOVR8rtjqDiXu9jrDbHqSapI1xwiPMdersn2O4c8PwUuOZtA== + dependencies: + chalk "2.4.1" + cp-sugar "1.0.0" + elegant-status "1.1.0" + inquirer "6.2.0" + is-ci "1.2.1" + lodash "4.17.12" + micromatch "3.1.10" + node-emoji "1.8.1" + osenv "0.1.5" + semver "5.6.0" + +pump@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" + integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pumpify@^1.3.3: + version "1.5.1" + resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" + integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== + dependencies: + duplexify "^3.6.0" + inherits "^2.0.3" + pump "^2.0.0" + +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= + +punycode@^1.2.4: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= + +punycode@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +qs@~2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/qs/-/qs-2.3.3.tgz#e9e85adbe75da0bbe4c8e0476a086290f863b404" + integrity sha1-6eha2+ddoLvkyOBHaghikPhjtAQ= + +querystring-es3@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" + integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= + +querystring@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= + +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +randomfill@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" + integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== + dependencies: + randombytes "^2.0.5" + safe-buffer "^5.1.0" + +rc@^1.2.7: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: + version "2.3.6" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" + integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readdirp@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" + integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== + dependencies: + graceful-fs "^4.1.11" + micromatch "^3.1.10" + readable-stream "^2.0.2" + +regenerate-unicode-properties@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" + integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA== + dependencies: + regenerate "^1.4.0" + +regenerate@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" + integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg== + +regenerator-runtime@^0.13.4: + version "0.13.5" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz#d878a1d094b4306d10b9096484b33ebd55e26697" + integrity sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA== + +regenerator-transform@^0.14.2: + version "0.14.4" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.4.tgz#5266857896518d1616a78a0479337a30ea974cc7" + integrity sha512-EaJaKPBI9GvKpvUz2mz4fhx7WPgvwRLY9v3hlNHWmAuJHI13T4nwKnNvm5RWJzEdnI5g5UwtOww+S8IdoUC2bw== + dependencies: + "@babel/runtime" "^7.8.4" + private "^0.1.8" + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + +regexpp@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" + integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== + +regexpu-core@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.0.tgz#fcbf458c50431b0bb7b45d6967b8192d91f3d938" + integrity sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ== + dependencies: + regenerate "^1.4.0" + regenerate-unicode-properties "^8.2.0" + regjsgen "^0.5.1" + regjsparser "^0.6.4" + unicode-match-property-ecmascript "^1.0.4" + unicode-match-property-value-ecmascript "^1.2.0" + +regjsgen@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.1.tgz#48f0bf1a5ea205196929c0d9798b42d1ed98443c" + integrity sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg== + +regjsparser@^0.6.4: + version "0.6.4" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.4.tgz#a769f8684308401a66e9b529d2436ff4d0666272" + integrity sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw== + dependencies: + jsesc "~0.5.0" + +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= + +repeat-element@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" + integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== + +repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= + +resolve-cwd@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" + integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= + dependencies: + resolve-from "^3.0.0" + +resolve-dir@^1.0.0, resolve-dir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" + integrity sha1-eaQGRMNivoLybv/nOcm7U4IEb0M= + dependencies: + expand-tilde "^2.0.0" + global-modules "^1.0.0" + +resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + integrity sha1-six699nWiBvItuZTM17rywoYh0g= + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= + +resolve@1.1.x: + version "1.1.7" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" + integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= + +resolve@^1.3.2, resolve@^1.8.1: + version "1.12.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.12.0.tgz#3fc644a35c84a48554609ff26ec52b66fa577df6" + integrity sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w== + dependencies: + path-parse "^1.0.6" + +restore-cursor@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541" + integrity sha1-NGYfRohjJ/7SmRR5FSJS35LapUE= + dependencies: + exit-hook "^1.0.0" + onetime "^1.0.0" + +restore-cursor@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" + integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= + dependencies: + onetime "^2.0.0" + signal-exit "^3.0.2" + +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== + +rimraf@2.6.3: + version "2.6.3" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" + integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== + dependencies: + glob "^7.1.3" + +rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.3: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + +run-async@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" + integrity sha1-A3GrSuC91yDUFm19/aZP96RFpsA= + dependencies: + is-promise "^2.1.0" + +run-queue@^1.0.0, run-queue@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" + integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= + dependencies: + aproba "^1.1.1" + +rxjs@^6.1.0, rxjs@^6.4.0: + version "6.5.3" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.3.tgz#510e26317f4db91a7eb1de77d9dd9ba0a4899a3a" + integrity sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA== + dependencies: + tslib "^1.9.0" + +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" + integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= + dependencies: + ret "~0.1.10" + +"safer-buffer@>= 2.1.2 < 3": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sax@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + +schema-utils@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" + integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g== + dependencies: + ajv "^6.1.0" + ajv-errors "^1.0.0" + ajv-keywords "^3.1.0" + +semver@5.6.0: + version "5.6.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004" + integrity sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg== + +semver@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" + integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== + +semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +serialize-javascript@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-2.1.2.tgz#ecec53b0e0317bdc95ef76ab7074b7384785fa61" + integrity sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ== + +set-blocking@^2.0.0, set-blocking@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + +set-value@^2.0.0, set-value@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" + integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +setimmediate@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= + +sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + dependencies: + shebang-regex "^1.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + +shell-quote@^1.4.3: + version "1.7.2" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" + integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== + +signal-exit@^3.0.0, signal-exit@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" + integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= + +slice-ansi@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" + integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== + dependencies: + ansi-styles "^3.2.0" + astral-regex "^1.0.0" + is-fullwidth-code-point "^2.0.0" + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + +source-list-map@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" + integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== + +source-map-resolve@^0.5.0: + version "0.5.2" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" + integrity sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA== + dependencies: + 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@^0.5.16: + version "0.5.16" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042" + integrity sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-support@~0.5.12: + version "0.5.13" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" + integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-url@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" + integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= + +source-map@^0.5.0, source-map@^0.5.6: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +source-map@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d" + integrity sha1-2rc/vPwrqBm03gO9b26qSBZLP50= + dependencies: + amdefine ">=0.0.4" + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== + dependencies: + extend-shallow "^3.0.0" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + +ssri@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8" + integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA== + dependencies: + figgy-pudding "^3.5.1" + +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + +stream-browserify@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" + integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== + dependencies: + inherits "~2.0.1" + readable-stream "^2.0.2" + +stream-each@^1.1.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" + integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw== + dependencies: + end-of-stream "^1.1.0" + stream-shift "^1.0.0" + +stream-http@^2.7.2: + version "2.8.3" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" + integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== + dependencies: + builtin-status-codes "^3.0.0" + inherits "^2.0.1" + readable-stream "^2.3.6" + to-arraybuffer "^1.0.0" + xtend "^4.0.0" + +stream-shift@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" + integrity sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI= + +string-width@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +"string-width@^1.0.2 || 2", string-width@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string-width@^3.0.0, string-width@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + +string_decoder@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= + dependencies: + ansi-regex "^3.0.0" + +strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= + +strip-json-comments@^2.0.1, strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= + +supports-color@6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== + dependencies: + has-flag "^3.0.0" + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= + +supports-color@^3.1.0: + version "3.2.3" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" + integrity sha1-ZawFBLOVQXHYpklGsq48u4pfVPY= + dependencies: + has-flag "^1.0.0" + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +table@^5.2.3: + version "5.4.6" + resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" + integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== + dependencies: + ajv "^6.10.2" + lodash "^4.17.14" + slice-ansi "^2.1.0" + string-width "^3.0.0" + +tapable@^1.0.0, tapable@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" + integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== + +tar@^4: + version "4.4.13" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" + integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA== + dependencies: + chownr "^1.1.1" + fs-minipass "^1.2.5" + minipass "^2.8.6" + minizlib "^1.2.1" + mkdirp "^0.5.0" + safe-buffer "^5.1.2" + yallist "^3.0.3" + +terser-webpack-plugin@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.3.tgz#5ecaf2dbdc5fb99745fd06791f46fc9ddb1c9a7c" + integrity sha512-QMxecFz/gHQwteWwSo5nTc6UaICqN1bMedC5sMtUc7y3Ha3Q8y6ZO0iCR8pq4RJC8Hjf0FEPEHZqcMB/+DFCrA== + dependencies: + cacache "^12.0.2" + find-cache-dir "^2.1.0" + is-wsl "^1.1.0" + schema-utils "^1.0.0" + serialize-javascript "^2.1.2" + source-map "^0.6.1" + terser "^4.1.2" + webpack-sources "^1.4.0" + worker-farm "^1.7.0" + +terser@^4.1.2: + version "4.3.9" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.3.9.tgz#e4be37f80553d02645668727777687dad26bbca8" + integrity sha512-NFGMpHjlzmyOtPL+fDw3G7+6Ueh/sz4mkaUYa4lJCxOPTNzd0Uj0aZJOmsDYoSQyfuVoWDMSWTPU3huyOm2zdA== + dependencies: + commander "^2.20.0" + source-map "~0.6.1" + source-map-support "~0.5.12" + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + +through2@^2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + +through@^2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + +timers-browserify@^2.0.4: + version "2.0.11" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.11.tgz#800b1f3eee272e5bc53ee465a04d0e804c31211f" + integrity sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ== + dependencies: + setimmediate "^1.0.4" + +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +to-arraybuffer@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" + integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= + dependencies: + kind-of "^3.0.2" + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + +tslib@^1.9.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" + integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== + +tty-browserify@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" + integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= + dependencies: + prelude-ls "~1.1.2" + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= + +uglify-js@^3.1.4: + version "3.6.4" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.6.4.tgz#88cc880c6ed5cf9868fdfa0760654e7bed463f1d" + integrity sha512-9Yc2i881pF4BPGhjteCXQNaXx1DCwm3dtOyBaG2hitHjLWOczw/ki8vD1bqyT3u6K0Ms/FpCShkmfg+FtlOfYA== + dependencies: + commander "~2.20.3" + source-map "~0.6.1" + +unicode-canonical-property-names-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" + integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== + +unicode-match-property-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" + integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== + dependencies: + unicode-canonical-property-names-ecmascript "^1.0.4" + unicode-property-aliases-ecmascript "^1.0.4" + +unicode-match-property-value-ecmascript@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" + integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== + +unicode-property-aliases-ecmascript@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz#a9cc6cc7ce63a0a3023fc99e341b94431d405a57" + integrity sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw== + +union-value@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^2.0.1" + +union@~0.4.3: + version "0.4.6" + resolved "https://registry.yarnpkg.com/union/-/union-0.4.6.tgz#198fbdaeba254e788b0efcb630bc11f24a2959e0" + integrity sha1-GY+9rrolTniLDvy2MLwR8kopWeA= + dependencies: + qs "~2.3.3" + +unique-filename@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" + integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== + dependencies: + unique-slug "^2.0.0" + +unique-slug@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" + integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== + dependencies: + imurmurhash "^0.1.4" + +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +upath@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" + integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== + +uri-js@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" + integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== + dependencies: + punycode "^2.1.0" + +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= + +url-join@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/url-join/-/url-join-2.0.5.tgz#5af22f18c052a000a48d7b82c5e9c2e2feeda728" + integrity sha1-WvIvGMBSoACkjXuCxenC4v7tpyg= + +url@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= + dependencies: + punycode "1.3.2" + querystring "0.2.0" + +use@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== + +util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +util@0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" + integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= + dependencies: + inherits "2.0.1" + +util@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" + integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== + dependencies: + inherits "2.0.3" + +v8-compile-cache@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz#00f7494d2ae2b688cfe2899df6ed2c54bef91dbe" + integrity sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w== + +vm-browserify@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.0.tgz#bd76d6a23323e2ca8ffa12028dc04559c75f9019" + integrity sha512-iq+S7vZJE60yejDYM0ek6zg308+UZsdtPExWP9VZoCFCz1zkJoXFnAX7aZfd/ZwrkidzdUZL0C/ryW+JwAiIGw== + +watchpack@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.0.tgz#4bc12c2ebe8aa277a71f1d3f14d685c7b446cd00" + integrity sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA== + dependencies: + chokidar "^2.0.2" + graceful-fs "^4.1.2" + neo-async "^2.5.0" + +webpack-cli@^3.3.10: + version "3.3.11" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.11.tgz#3bf21889bf597b5d82c38f215135a411edfdc631" + integrity sha512-dXlfuml7xvAFwYUPsrtQAA9e4DOe58gnzSxhgrO/ZM/gyXTBowrsYeubyN4mqGhYdpXMFNyQ6emjJS9M7OBd4g== + dependencies: + chalk "2.4.2" + cross-spawn "6.0.5" + enhanced-resolve "4.1.0" + findup-sync "3.0.0" + global-modules "2.0.0" + import-local "2.0.0" + interpret "1.2.0" + loader-utils "1.2.3" + supports-color "6.1.0" + v8-compile-cache "2.0.3" + yargs "13.2.4" + +webpack-sources@^1.4.0, webpack-sources@^1.4.1: + version "1.4.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" + integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== + dependencies: + source-list-map "^2.0.0" + source-map "~0.6.1" + +webpack@^4.41.2: + version "4.42.1" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.42.1.tgz#ae707baf091f5ca3ef9c38b884287cfe8f1983ef" + integrity sha512-SGfYMigqEfdGchGhFFJ9KyRpQKnipvEvjc1TwrXEPCM6H5Wywu10ka8o3KGrMzSMxMQKt8aCHUFh5DaQ9UmyRg== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-module-context" "1.9.0" + "@webassemblyjs/wasm-edit" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + acorn "^6.2.1" + ajv "^6.10.2" + ajv-keywords "^3.4.1" + chrome-trace-event "^1.0.2" + enhanced-resolve "^4.1.0" + eslint-scope "^4.0.3" + json-parse-better-errors "^1.0.2" + loader-runner "^2.4.0" + loader-utils "^1.2.3" + memory-fs "^0.4.1" + micromatch "^3.1.10" + mkdirp "^0.5.3" + neo-async "^2.6.1" + node-libs-browser "^2.2.1" + schema-utils "^1.0.0" + tapable "^1.1.3" + terser-webpack-plugin "^1.4.3" + watchpack "^1.6.0" + webpack-sources "^1.4.1" + +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + +which@^1.1.1, which@^1.2.14, which@^1.2.8, which@^1.2.9, which@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +wide-align@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" + integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== + dependencies: + string-width "^1.0.2 || 2" + +wordwrap@^1.0.0, wordwrap@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= + +wordwrap@~0.0.2: + version "0.0.3" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" + integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc= + +worker-farm@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" + integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw== + dependencies: + errno "~0.1.7" + +wrap-ansi@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" + integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== + dependencies: + ansi-styles "^3.2.0" + string-width "^3.0.0" + strip-ansi "^5.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +write@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" + integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== + dependencies: + mkdirp "^0.5.1" + +xtend@^4.0.0, xtend@~4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +y18n@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" + integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== + +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= + +yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yargs-parser@^13.1.0: + version "13.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.1.tgz#d26058532aa06d365fe091f6a1fc06b2f7e5eca0" + integrity sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs@13.2.4: + version "13.2.4" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.2.4.tgz#0b562b794016eb9651b98bd37acf364aa5d6dc83" + integrity sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg== + dependencies: + cliui "^5.0.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + os-locale "^3.1.0" + 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.0" diff --git a/node_modules/vue-i18n/LICENSE b/node_modules/follow-redirects/LICENSE similarity index 50% rename from node_modules/vue-i18n/LICENSE rename to node_modules/follow-redirects/LICENSE index 398540b..742cbad 100644 --- a/node_modules/vue-i18n/LICENSE +++ b/node_modules/follow-redirects/LICENSE @@ -1,20 +1,18 @@ -The MIT License (MIT) - -Copyright (c) 2016 kazuya kawaguchi +Copyright 2014–present Olivier Lalonde , James Talmage , Ruben Verborgh Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/follow-redirects/README.md b/node_modules/follow-redirects/README.md new file mode 100644 index 0000000..b16430f --- /dev/null +++ b/node_modules/follow-redirects/README.md @@ -0,0 +1,148 @@ +## Follow Redirects + +Drop-in replacement for Node's `http` and `https` modules that automatically follows redirects. + +[![npm version](https://img.shields.io/npm/v/follow-redirects.svg)](https://www.npmjs.com/package/follow-redirects) +[![Build Status](https://travis-ci.org/follow-redirects/follow-redirects.svg?branch=master)](https://travis-ci.org/follow-redirects/follow-redirects) +[![Coverage Status](https://coveralls.io/repos/follow-redirects/follow-redirects/badge.svg?branch=master)](https://coveralls.io/r/follow-redirects/follow-redirects?branch=master) +[![npm downloads](https://img.shields.io/npm/dm/follow-redirects.svg)](https://www.npmjs.com/package/follow-redirects) +[![Sponsor on GitHub](https://img.shields.io/static/v1?label=Sponsor&message=%F0%9F%92%96&logo=GitHub)](https://github.com/sponsors/RubenVerborgh) + +`follow-redirects` provides [request](https://nodejs.org/api/http.html#http_http_request_options_callback) and [get](https://nodejs.org/api/http.html#http_http_get_options_callback) + methods that behave identically to those found on the native [http](https://nodejs.org/api/http.html#http_http_request_options_callback) and [https](https://nodejs.org/api/https.html#https_https_request_options_callback) + modules, with the exception that they will seamlessly follow redirects. + +```javascript +const { http, https } = require('follow-redirects'); + +http.get('http://bit.ly/900913', response => { + response.on('data', chunk => { + console.log(chunk); + }); +}).on('error', err => { + console.error(err); +}); +``` + +You can inspect the final redirected URL through the `responseUrl` property on the `response`. +If no redirection happened, `responseUrl` is the original request URL. + +```javascript +const request = https.request({ + host: 'bitly.com', + path: '/UHfDGO', +}, response => { + console.log(response.responseUrl); + // 'http://duckduckgo.com/robots.txt' +}); +request.end(); +``` + +## Options +### Global options +Global options are set directly on the `follow-redirects` module: + +```javascript +const followRedirects = require('follow-redirects'); +followRedirects.maxRedirects = 10; +followRedirects.maxBodyLength = 20 * 1024 * 1024; // 20 MB +``` + +The following global options are supported: + +- `maxRedirects` (default: `21`) – sets the maximum number of allowed redirects; if exceeded, an error will be emitted. + +- `maxBodyLength` (default: 10MB) – sets the maximum size of the request body; if exceeded, an error will be emitted. + +### Per-request options +Per-request options are set by passing an `options` object: + +```javascript +const url = require('url'); +const { http, https } = require('follow-redirects'); + +const options = url.parse('http://bit.ly/900913'); +options.maxRedirects = 10; +options.beforeRedirect = (options, { headers }) => { + // Use this to adjust the request options upon redirecting, + // to inspect the latest response headers, + // or to cancel the request by throwing an error + if (options.hostname === "example.com") { + options.auth = "user:password"; + } +}; +http.request(options); +``` + +In addition to the [standard HTTP](https://nodejs.org/api/http.html#http_http_request_options_callback) and [HTTPS options](https://nodejs.org/api/https.html#https_https_request_options_callback), +the following per-request options are supported: +- `followRedirects` (default: `true`) – whether redirects should be followed. + +- `maxRedirects` (default: `21`) – sets the maximum number of allowed redirects; if exceeded, an error will be emitted. + +- `maxBodyLength` (default: 10MB) – sets the maximum size of the request body; if exceeded, an error will be emitted. + +- `beforeRedirect` (default: `undefined`) – optionally change the request `options` on redirects, or abort the request by throwing an error. + +- `agents` (default: `undefined`) – sets the `agent` option per protocol, since HTTP and HTTPS use different agents. Example value: `{ http: new http.Agent(), https: new https.Agent() }` + +- `trackRedirects` (default: `false`) – whether to store the redirected response details into the `redirects` array on the response object. + + +### Advanced usage +By default, `follow-redirects` will use the Node.js default implementations +of [`http`](https://nodejs.org/api/http.html) +and [`https`](https://nodejs.org/api/https.html). +To enable features such as caching and/or intermediate request tracking, +you might instead want to wrap `follow-redirects` around custom protocol implementations: + +```javascript +const { http, https } = require('follow-redirects').wrap({ + http: require('your-custom-http'), + https: require('your-custom-https'), +}); +``` + +Such custom protocols only need an implementation of the `request` method. + +## Browser Usage + +Due to the way the browser works, +the `http` and `https` browser equivalents perform redirects by default. + +By requiring `follow-redirects` this way: +```javascript +const http = require('follow-redirects/http'); +const https = require('follow-redirects/https'); +``` +you can easily tell webpack and friends to replace +`follow-redirect` by the built-in versions: + +```json +{ + "follow-redirects/http" : "http", + "follow-redirects/https" : "https" +} +``` + +## Contributing + +Pull Requests are always welcome. Please [file an issue](https://github.com/follow-redirects/follow-redirects/issues) + detailing your proposal before you invest your valuable time. Additional features and bug fixes should be accompanied + by tests. You can run the test suite locally with a simple `npm test` command. + +## Debug Logging + +`follow-redirects` uses the excellent [debug](https://www.npmjs.com/package/debug) for logging. To turn on logging + set the environment variable `DEBUG=follow-redirects` for debug output from just this module. When running the test + suite it is sometimes advantageous to set `DEBUG=*` to see output from the express server as well. + +## Authors + +- [Ruben Verborgh](https://ruben.verborgh.org/) +- [Olivier Lalonde](mailto:olalonde@gmail.com) +- [James Talmage](mailto:james@talmage.io) + +## License + +[MIT License](https://github.com/follow-redirects/follow-redirects/blob/master/LICENSE) diff --git a/node_modules/follow-redirects/debug.js b/node_modules/follow-redirects/debug.js new file mode 100644 index 0000000..4c1fa24 --- /dev/null +++ b/node_modules/follow-redirects/debug.js @@ -0,0 +1,9 @@ +var debug; +try { + /* eslint global-require: off */ + debug = require("debug")("follow-redirects"); +} +catch (error) { + debug = function () { /* */ }; +} +module.exports = debug; diff --git a/node_modules/follow-redirects/http.js b/node_modules/follow-redirects/http.js new file mode 100644 index 0000000..695e356 --- /dev/null +++ b/node_modules/follow-redirects/http.js @@ -0,0 +1 @@ +module.exports = require("./").http; diff --git a/node_modules/follow-redirects/https.js b/node_modules/follow-redirects/https.js new file mode 100644 index 0000000..d21c921 --- /dev/null +++ b/node_modules/follow-redirects/https.js @@ -0,0 +1 @@ +module.exports = require("./").https; diff --git a/node_modules/follow-redirects/index.js b/node_modules/follow-redirects/index.js new file mode 100644 index 0000000..ae42ba2 --- /dev/null +++ b/node_modules/follow-redirects/index.js @@ -0,0 +1,498 @@ +var url = require("url"); +var URL = url.URL; +var http = require("http"); +var https = require("https"); +var Writable = require("stream").Writable; +var assert = require("assert"); +var debug = require("./debug"); + +// Create handlers that pass events from native requests +var eventHandlers = Object.create(null); +["abort", "aborted", "connect", "error", "socket", "timeout"].forEach(function (event) { + eventHandlers[event] = function (arg1, arg2, arg3) { + this._redirectable.emit(event, arg1, arg2, arg3); + }; +}); + +// Error types with codes +var RedirectionError = createErrorType( + "ERR_FR_REDIRECTION_FAILURE", + "" +); +var TooManyRedirectsError = createErrorType( + "ERR_FR_TOO_MANY_REDIRECTS", + "Maximum number of redirects exceeded" +); +var MaxBodyLengthExceededError = createErrorType( + "ERR_FR_MAX_BODY_LENGTH_EXCEEDED", + "Request body larger than maxBodyLength limit" +); +var WriteAfterEndError = createErrorType( + "ERR_STREAM_WRITE_AFTER_END", + "write after end" +); + +// An HTTP(S) request that can be redirected +function RedirectableRequest(options, responseCallback) { + // Initialize the request + Writable.call(this); + this._sanitizeOptions(options); + this._options = options; + this._ended = false; + this._ending = false; + this._redirectCount = 0; + this._redirects = []; + this._requestBodyLength = 0; + this._requestBodyBuffers = []; + + // Attach a callback if passed + if (responseCallback) { + this.on("response", responseCallback); + } + + // React to responses of native requests + var self = this; + this._onNativeResponse = function (response) { + self._processResponse(response); + }; + + // Perform the first request + this._performRequest(); +} +RedirectableRequest.prototype = Object.create(Writable.prototype); + +// Writes buffered data to the current native request +RedirectableRequest.prototype.write = function (data, encoding, callback) { + // Writing is not allowed if end has been called + if (this._ending) { + throw new WriteAfterEndError(); + } + + // Validate input and shift parameters if necessary + if (!(typeof data === "string" || typeof data === "object" && ("length" in data))) { + throw new TypeError("data should be a string, Buffer or Uint8Array"); + } + if (typeof encoding === "function") { + callback = encoding; + encoding = null; + } + + // Ignore empty buffers, since writing them doesn't invoke the callback + // https://github.com/nodejs/node/issues/22066 + if (data.length === 0) { + if (callback) { + callback(); + } + return; + } + // Only write when we don't exceed the maximum body length + if (this._requestBodyLength + data.length <= this._options.maxBodyLength) { + this._requestBodyLength += data.length; + this._requestBodyBuffers.push({ data: data, encoding: encoding }); + this._currentRequest.write(data, encoding, callback); + } + // Error when we exceed the maximum body length + else { + this.emit("error", new MaxBodyLengthExceededError()); + this.abort(); + } +}; + +// Ends the current native request +RedirectableRequest.prototype.end = function (data, encoding, callback) { + // Shift parameters if necessary + if (typeof data === "function") { + callback = data; + data = encoding = null; + } + else if (typeof encoding === "function") { + callback = encoding; + encoding = null; + } + + // Write data if needed and end + if (!data) { + this._ended = this._ending = true; + this._currentRequest.end(null, null, callback); + } + else { + var self = this; + var currentRequest = this._currentRequest; + this.write(data, encoding, function () { + self._ended = true; + currentRequest.end(null, null, callback); + }); + this._ending = true; + } +}; + +// Sets a header value on the current native request +RedirectableRequest.prototype.setHeader = function (name, value) { + this._options.headers[name] = value; + this._currentRequest.setHeader(name, value); +}; + +// Clears a header value on the current native request +RedirectableRequest.prototype.removeHeader = function (name) { + delete this._options.headers[name]; + this._currentRequest.removeHeader(name); +}; + +// Global timeout for all underlying requests +RedirectableRequest.prototype.setTimeout = function (msecs, callback) { + if (callback) { + this.once("timeout", callback); + } + + if (this.socket) { + startTimer(this, msecs); + } + else { + var self = this; + this._currentRequest.once("socket", function () { + startTimer(self, msecs); + }); + } + + this.once("response", clearTimer); + this.once("error", clearTimer); + + return this; +}; + +function startTimer(request, msecs) { + clearTimeout(request._timeout); + request._timeout = setTimeout(function () { + request.emit("timeout"); + }, msecs); +} + +function clearTimer() { + clearTimeout(this._timeout); +} + +// Proxy all other public ClientRequest methods +[ + "abort", "flushHeaders", "getHeader", + "setNoDelay", "setSocketKeepAlive", +].forEach(function (method) { + RedirectableRequest.prototype[method] = function (a, b) { + return this._currentRequest[method](a, b); + }; +}); + +// Proxy all public ClientRequest properties +["aborted", "connection", "socket"].forEach(function (property) { + Object.defineProperty(RedirectableRequest.prototype, property, { + get: function () { return this._currentRequest[property]; }, + }); +}); + +RedirectableRequest.prototype._sanitizeOptions = function (options) { + // Ensure headers are always present + if (!options.headers) { + options.headers = {}; + } + + // Since http.request treats host as an alias of hostname, + // but the url module interprets host as hostname plus port, + // eliminate the host property to avoid confusion. + if (options.host) { + // Use hostname if set, because it has precedence + if (!options.hostname) { + options.hostname = options.host; + } + delete options.host; + } + + // Complete the URL object when necessary + if (!options.pathname && options.path) { + var searchPos = options.path.indexOf("?"); + if (searchPos < 0) { + options.pathname = options.path; + } + else { + options.pathname = options.path.substring(0, searchPos); + options.search = options.path.substring(searchPos); + } + } +}; + + +// Executes the next native request (initial or redirect) +RedirectableRequest.prototype._performRequest = function () { + // Load the native protocol + var protocol = this._options.protocol; + var nativeProtocol = this._options.nativeProtocols[protocol]; + if (!nativeProtocol) { + this.emit("error", new TypeError("Unsupported protocol " + protocol)); + return; + } + + // If specified, use the agent corresponding to the protocol + // (HTTP and HTTPS use different types of agents) + if (this._options.agents) { + var scheme = protocol.substr(0, protocol.length - 1); + this._options.agent = this._options.agents[scheme]; + } + + // Create the native request + var request = this._currentRequest = + nativeProtocol.request(this._options, this._onNativeResponse); + this._currentUrl = url.format(this._options); + + // Set up event handlers + request._redirectable = this; + for (var event in eventHandlers) { + /* istanbul ignore else */ + if (event) { + request.on(event, eventHandlers[event]); + } + } + + // End a redirected request + // (The first request must be ended explicitly with RedirectableRequest#end) + if (this._isRedirect) { + // Write the request entity and end. + var i = 0; + var self = this; + var buffers = this._requestBodyBuffers; + (function writeNext(error) { + // Only write if this request has not been redirected yet + /* istanbul ignore else */ + if (request === self._currentRequest) { + // Report any write errors + /* istanbul ignore if */ + if (error) { + self.emit("error", error); + } + // Write the next buffer if there are still left + else if (i < buffers.length) { + var buffer = buffers[i++]; + /* istanbul ignore else */ + if (!request.finished) { + request.write(buffer.data, buffer.encoding, writeNext); + } + } + // End the request if `end` has been called on us + else if (self._ended) { + request.end(); + } + } + }()); + } +}; + +// Processes a response from the current native request +RedirectableRequest.prototype._processResponse = function (response) { + // Store the redirected response + var statusCode = response.statusCode; + if (this._options.trackRedirects) { + this._redirects.push({ + url: this._currentUrl, + headers: response.headers, + statusCode: statusCode, + }); + } + + // RFC7231§6.4: The 3xx (Redirection) class of status code indicates + // that further action needs to be taken by the user agent in order to + // fulfill the request. If a Location header field is provided, + // the user agent MAY automatically redirect its request to the URI + // referenced by the Location field value, + // even if the specific status code is not understood. + var location = response.headers.location; + if (location && this._options.followRedirects !== false && + statusCode >= 300 && statusCode < 400) { + // Abort the current request + this._currentRequest.removeAllListeners(); + this._currentRequest.on("error", noop); + this._currentRequest.abort(); + // Discard the remainder of the response to avoid waiting for data + response.destroy(); + + // RFC7231§6.4: A client SHOULD detect and intervene + // in cyclical redirections (i.e., "infinite" redirection loops). + if (++this._redirectCount > this._options.maxRedirects) { + this.emit("error", new TooManyRedirectsError()); + return; + } + + // RFC7231§6.4: Automatic redirection needs to done with + // care for methods not known to be safe, […] + // RFC7231§6.4.2–3: For historical reasons, a user agent MAY change + // the request method from POST to GET for the subsequent request. + if ((statusCode === 301 || statusCode === 302) && this._options.method === "POST" || + // RFC7231§6.4.4: The 303 (See Other) status code indicates that + // the server is redirecting the user agent to a different resource […] + // A user agent can perform a retrieval request targeting that URI + // (a GET or HEAD request if using HTTP) […] + (statusCode === 303) && !/^(?:GET|HEAD)$/.test(this._options.method)) { + this._options.method = "GET"; + // Drop a possible entity and headers related to it + this._requestBodyBuffers = []; + removeMatchingHeaders(/^content-/i, this._options.headers); + } + + // Drop the Host header, as the redirect might lead to a different host + var previousHostName = removeMatchingHeaders(/^host$/i, this._options.headers) || + url.parse(this._currentUrl).hostname; + + // Create the redirected request + var redirectUrl = url.resolve(this._currentUrl, location); + debug("redirecting to", redirectUrl); + this._isRedirect = true; + var redirectUrlParts = url.parse(redirectUrl); + Object.assign(this._options, redirectUrlParts); + + // Drop the Authorization header if redirecting to another host + if (redirectUrlParts.hostname !== previousHostName) { + removeMatchingHeaders(/^authorization$/i, this._options.headers); + } + + // Evaluate the beforeRedirect callback + if (typeof this._options.beforeRedirect === "function") { + var responseDetails = { headers: response.headers }; + try { + this._options.beforeRedirect.call(null, this._options, responseDetails); + } + catch (err) { + this.emit("error", err); + return; + } + this._sanitizeOptions(this._options); + } + + // Perform the redirected request + try { + this._performRequest(); + } + catch (cause) { + var error = new RedirectionError("Redirected request failed: " + cause.message); + error.cause = cause; + this.emit("error", error); + } + } + else { + // The response is not a redirect; return it as-is + response.responseUrl = this._currentUrl; + response.redirects = this._redirects; + this.emit("response", response); + + // Clean up + this._requestBodyBuffers = []; + } +}; + +// Wraps the key/value object of protocols with redirect functionality +function wrap(protocols) { + // Default settings + var exports = { + maxRedirects: 21, + maxBodyLength: 10 * 1024 * 1024, + }; + + // Wrap each protocol + var nativeProtocols = {}; + Object.keys(protocols).forEach(function (scheme) { + var protocol = scheme + ":"; + var nativeProtocol = nativeProtocols[protocol] = protocols[scheme]; + var wrappedProtocol = exports[scheme] = Object.create(nativeProtocol); + + // Executes a request, following redirects + wrappedProtocol.request = function (input, options, callback) { + // Parse parameters + if (typeof input === "string") { + var urlStr = input; + try { + input = urlToOptions(new URL(urlStr)); + } + catch (err) { + /* istanbul ignore next */ + input = url.parse(urlStr); + } + } + else if (URL && (input instanceof URL)) { + input = urlToOptions(input); + } + else { + callback = options; + options = input; + input = { protocol: protocol }; + } + if (typeof options === "function") { + callback = options; + options = null; + } + + // Set defaults + options = Object.assign({ + maxRedirects: exports.maxRedirects, + maxBodyLength: exports.maxBodyLength, + }, input, options); + options.nativeProtocols = nativeProtocols; + + assert.equal(options.protocol, protocol, "protocol mismatch"); + debug("options", options); + return new RedirectableRequest(options, callback); + }; + + // Executes a GET request, following redirects + wrappedProtocol.get = function (input, options, callback) { + var request = wrappedProtocol.request(input, options, callback); + request.end(); + return request; + }; + }); + return exports; +} + +/* istanbul ignore next */ +function noop() { /* empty */ } + +// from https://github.com/nodejs/node/blob/master/lib/internal/url.js +function urlToOptions(urlObject) { + var options = { + protocol: urlObject.protocol, + hostname: urlObject.hostname.startsWith("[") ? + /* istanbul ignore next */ + urlObject.hostname.slice(1, -1) : + urlObject.hostname, + hash: urlObject.hash, + search: urlObject.search, + pathname: urlObject.pathname, + path: urlObject.pathname + urlObject.search, + href: urlObject.href, + }; + if (urlObject.port !== "") { + options.port = Number(urlObject.port); + } + return options; +} + +function removeMatchingHeaders(regex, headers) { + var lastValue; + for (var header in headers) { + if (regex.test(header)) { + lastValue = headers[header]; + delete headers[header]; + } + } + return lastValue; +} + +function createErrorType(code, defaultMessage) { + function CustomError(message) { + Error.captureStackTrace(this, this.constructor); + this.message = message || defaultMessage; + } + CustomError.prototype = new Error(); + CustomError.prototype.constructor = CustomError; + CustomError.prototype.name = "Error [" + code + "]"; + CustomError.prototype.code = code; + return CustomError; +} + +// Exports +module.exports = wrap({ http: http, https: https }); +module.exports.wrap = wrap; diff --git a/node_modules/follow-redirects/package.json b/node_modules/follow-redirects/package.json new file mode 100644 index 0000000..faef56d --- /dev/null +++ b/node_modules/follow-redirects/package.json @@ -0,0 +1,90 @@ +{ + "_from": "follow-redirects@^1.10.0", + "_id": "follow-redirects@1.13.0", + "_inBundle": false, + "_integrity": "sha1-tC6Nk6Kn7qXtiGM2dtZZe8jjhNs=", + "_location": "/follow-redirects", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "follow-redirects@^1.10.0", + "name": "follow-redirects", + "escapedName": "follow-redirects", + "rawSpec": "^1.10.0", + "saveSpec": null, + "fetchSpec": "^1.10.0" + }, + "_requiredBy": [ + "/axios" + ], + "_resolved": "https://registry.npm.taobao.org/follow-redirects/download/follow-redirects-1.13.0.tgz?cache=0&sync_timestamp=1597057976909&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffollow-redirects%2Fdownload%2Ffollow-redirects-1.13.0.tgz", + "_shasum": "b42e8d93a2a7eea5ed88633676d6597bc8e384db", + "_spec": "follow-redirects@^1.10.0", + "_where": "D:\\github\\zyplayer\\node_modules\\axios", + "author": { + "name": "Ruben Verborgh", + "email": "ruben@verborgh.org", + "url": "https://ruben.verborgh.org/" + }, + "bugs": { + "url": "https://github.com/follow-redirects/follow-redirects/issues" + }, + "bundleDependencies": false, + "contributors": [ + { + "name": "Olivier Lalonde", + "email": "olalonde@gmail.com", + "url": "http://www.syskall.com" + }, + { + "name": "James Talmage", + "email": "james@talmage.io" + } + ], + "deprecated": false, + "description": "HTTP and HTTPS modules that follow redirects.", + "devDependencies": { + "concat-stream": "^2.0.0", + "eslint": "^5.16.0", + "express": "^4.16.4", + "lolex": "^3.1.0", + "mocha": "^6.0.2", + "nyc": "^14.1.1" + }, + "engines": { + "node": ">=4.0" + }, + "files": [ + "*.js" + ], + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "homepage": "https://github.com/follow-redirects/follow-redirects", + "keywords": [ + "http", + "https", + "url", + "redirect", + "client", + "location", + "utility" + ], + "license": "MIT", + "main": "index.js", + "name": "follow-redirects", + "repository": { + "type": "git", + "url": "git+ssh://git@github.com/follow-redirects/follow-redirects.git" + }, + "scripts": { + "lint": "eslint *.js test", + "mocha": "nyc mocha", + "test": "npm run lint && npm run mocha" + }, + "version": "1.13.0" +} diff --git a/LICENSE b/node_modules/uview-ui/LICENSE similarity index 100% rename from LICENSE rename to node_modules/uview-ui/LICENSE diff --git a/uview-ui/README.md b/node_modules/uview-ui/README.md similarity index 100% rename from uview-ui/README.md rename to node_modules/uview-ui/README.md diff --git a/uview-ui/components/u-action-sheet/u-action-sheet.vue b/node_modules/uview-ui/components/u-action-sheet/u-action-sheet.vue similarity index 100% rename from uview-ui/components/u-action-sheet/u-action-sheet.vue rename to node_modules/uview-ui/components/u-action-sheet/u-action-sheet.vue diff --git a/uview-ui/components/u-alert-tips/u-alert-tips.vue b/node_modules/uview-ui/components/u-alert-tips/u-alert-tips.vue similarity index 100% rename from uview-ui/components/u-alert-tips/u-alert-tips.vue rename to node_modules/uview-ui/components/u-alert-tips/u-alert-tips.vue diff --git a/uview-ui/components/u-avatar-cropper/u-avatar-cropper.vue b/node_modules/uview-ui/components/u-avatar-cropper/u-avatar-cropper.vue similarity index 100% rename from uview-ui/components/u-avatar-cropper/u-avatar-cropper.vue rename to node_modules/uview-ui/components/u-avatar-cropper/u-avatar-cropper.vue diff --git a/uview-ui/components/u-avatar-cropper/weCropper.js b/node_modules/uview-ui/components/u-avatar-cropper/weCropper.js similarity index 100% rename from uview-ui/components/u-avatar-cropper/weCropper.js rename to node_modules/uview-ui/components/u-avatar-cropper/weCropper.js diff --git a/uview-ui/components/u-avatar/u-avatar.vue b/node_modules/uview-ui/components/u-avatar/u-avatar.vue similarity index 100% rename from uview-ui/components/u-avatar/u-avatar.vue rename to node_modules/uview-ui/components/u-avatar/u-avatar.vue diff --git a/uview-ui/components/u-back-top/u-back-top.vue b/node_modules/uview-ui/components/u-back-top/u-back-top.vue similarity index 100% rename from uview-ui/components/u-back-top/u-back-top.vue rename to node_modules/uview-ui/components/u-back-top/u-back-top.vue diff --git a/uview-ui/components/u-badge/u-badge.vue b/node_modules/uview-ui/components/u-badge/u-badge.vue similarity index 100% rename from uview-ui/components/u-badge/u-badge.vue rename to node_modules/uview-ui/components/u-badge/u-badge.vue diff --git a/uview-ui/components/u-button/u-button.vue b/node_modules/uview-ui/components/u-button/u-button.vue similarity index 100% rename from uview-ui/components/u-button/u-button.vue rename to node_modules/uview-ui/components/u-button/u-button.vue diff --git a/uview-ui/components/u-calendar/u-calendar.vue b/node_modules/uview-ui/components/u-calendar/u-calendar.vue similarity index 100% rename from uview-ui/components/u-calendar/u-calendar.vue rename to node_modules/uview-ui/components/u-calendar/u-calendar.vue diff --git a/uview-ui/components/u-car-keyboard/u-car-keyboard.vue b/node_modules/uview-ui/components/u-car-keyboard/u-car-keyboard.vue similarity index 100% rename from uview-ui/components/u-car-keyboard/u-car-keyboard.vue rename to node_modules/uview-ui/components/u-car-keyboard/u-car-keyboard.vue diff --git a/uview-ui/components/u-card/u-card.vue b/node_modules/uview-ui/components/u-card/u-card.vue similarity index 100% rename from uview-ui/components/u-card/u-card.vue rename to node_modules/uview-ui/components/u-card/u-card.vue diff --git a/uview-ui/components/u-cell-group/u-cell-group.vue b/node_modules/uview-ui/components/u-cell-group/u-cell-group.vue similarity index 100% rename from uview-ui/components/u-cell-group/u-cell-group.vue rename to node_modules/uview-ui/components/u-cell-group/u-cell-group.vue diff --git a/uview-ui/components/u-cell-item/u-cell-item.vue b/node_modules/uview-ui/components/u-cell-item/u-cell-item.vue similarity index 100% rename from uview-ui/components/u-cell-item/u-cell-item.vue rename to node_modules/uview-ui/components/u-cell-item/u-cell-item.vue diff --git a/uview-ui/components/u-checkbox-group/u-checkbox-group.vue b/node_modules/uview-ui/components/u-checkbox-group/u-checkbox-group.vue similarity index 100% rename from uview-ui/components/u-checkbox-group/u-checkbox-group.vue rename to node_modules/uview-ui/components/u-checkbox-group/u-checkbox-group.vue diff --git a/uview-ui/components/u-checkbox/u-checkbox.vue b/node_modules/uview-ui/components/u-checkbox/u-checkbox.vue similarity index 100% rename from uview-ui/components/u-checkbox/u-checkbox.vue rename to node_modules/uview-ui/components/u-checkbox/u-checkbox.vue diff --git a/uview-ui/components/u-circle-progress/u-circle-progress.vue b/node_modules/uview-ui/components/u-circle-progress/u-circle-progress.vue similarity index 100% rename from uview-ui/components/u-circle-progress/u-circle-progress.vue rename to node_modules/uview-ui/components/u-circle-progress/u-circle-progress.vue diff --git a/uview-ui/components/u-col/u-col.vue b/node_modules/uview-ui/components/u-col/u-col.vue similarity index 100% rename from uview-ui/components/u-col/u-col.vue rename to node_modules/uview-ui/components/u-col/u-col.vue diff --git a/uview-ui/components/u-collapse-item/u-collapse-item.vue b/node_modules/uview-ui/components/u-collapse-item/u-collapse-item.vue similarity index 100% rename from uview-ui/components/u-collapse-item/u-collapse-item.vue rename to node_modules/uview-ui/components/u-collapse-item/u-collapse-item.vue diff --git a/uview-ui/components/u-collapse/u-collapse.vue b/node_modules/uview-ui/components/u-collapse/u-collapse.vue similarity index 100% rename from uview-ui/components/u-collapse/u-collapse.vue rename to node_modules/uview-ui/components/u-collapse/u-collapse.vue diff --git a/uview-ui/components/u-column-notice/u-column-notice.vue b/node_modules/uview-ui/components/u-column-notice/u-column-notice.vue similarity index 100% rename from uview-ui/components/u-column-notice/u-column-notice.vue rename to node_modules/uview-ui/components/u-column-notice/u-column-notice.vue diff --git a/uview-ui/components/u-count-down/u-count-down.vue b/node_modules/uview-ui/components/u-count-down/u-count-down.vue similarity index 100% rename from uview-ui/components/u-count-down/u-count-down.vue rename to node_modules/uview-ui/components/u-count-down/u-count-down.vue diff --git a/uview-ui/components/u-count-to/u-count-to.vue b/node_modules/uview-ui/components/u-count-to/u-count-to.vue similarity index 100% rename from uview-ui/components/u-count-to/u-count-to.vue rename to node_modules/uview-ui/components/u-count-to/u-count-to.vue diff --git a/uview-ui/components/u-divider/u-divider.vue b/node_modules/uview-ui/components/u-divider/u-divider.vue similarity index 100% rename from uview-ui/components/u-divider/u-divider.vue rename to node_modules/uview-ui/components/u-divider/u-divider.vue diff --git a/uview-ui/components/u-dropdown-item/u-dropdown-item.vue b/node_modules/uview-ui/components/u-dropdown-item/u-dropdown-item.vue similarity index 100% rename from uview-ui/components/u-dropdown-item/u-dropdown-item.vue rename to node_modules/uview-ui/components/u-dropdown-item/u-dropdown-item.vue diff --git a/uview-ui/components/u-dropdown/u-dropdown.vue b/node_modules/uview-ui/components/u-dropdown/u-dropdown.vue similarity index 100% rename from uview-ui/components/u-dropdown/u-dropdown.vue rename to node_modules/uview-ui/components/u-dropdown/u-dropdown.vue diff --git a/uview-ui/components/u-empty/u-empty.vue b/node_modules/uview-ui/components/u-empty/u-empty.vue similarity index 100% rename from uview-ui/components/u-empty/u-empty.vue rename to node_modules/uview-ui/components/u-empty/u-empty.vue diff --git a/uview-ui/components/u-field/u-field.vue b/node_modules/uview-ui/components/u-field/u-field.vue similarity index 100% rename from uview-ui/components/u-field/u-field.vue rename to node_modules/uview-ui/components/u-field/u-field.vue diff --git a/uview-ui/components/u-form-item/u-form-item.vue b/node_modules/uview-ui/components/u-form-item/u-form-item.vue similarity index 100% rename from uview-ui/components/u-form-item/u-form-item.vue rename to node_modules/uview-ui/components/u-form-item/u-form-item.vue diff --git a/uview-ui/components/u-form/u-form.vue b/node_modules/uview-ui/components/u-form/u-form.vue similarity index 100% rename from uview-ui/components/u-form/u-form.vue rename to node_modules/uview-ui/components/u-form/u-form.vue diff --git a/uview-ui/components/u-full-screen/u-full-screen.vue b/node_modules/uview-ui/components/u-full-screen/u-full-screen.vue similarity index 100% rename from uview-ui/components/u-full-screen/u-full-screen.vue rename to node_modules/uview-ui/components/u-full-screen/u-full-screen.vue diff --git a/uview-ui/components/u-gap/u-gap.vue b/node_modules/uview-ui/components/u-gap/u-gap.vue similarity index 100% rename from uview-ui/components/u-gap/u-gap.vue rename to node_modules/uview-ui/components/u-gap/u-gap.vue diff --git a/uview-ui/components/u-grid-item/u-grid-item.vue b/node_modules/uview-ui/components/u-grid-item/u-grid-item.vue similarity index 100% rename from uview-ui/components/u-grid-item/u-grid-item.vue rename to node_modules/uview-ui/components/u-grid-item/u-grid-item.vue diff --git a/uview-ui/components/u-grid/u-grid.vue b/node_modules/uview-ui/components/u-grid/u-grid.vue similarity index 100% rename from uview-ui/components/u-grid/u-grid.vue rename to node_modules/uview-ui/components/u-grid/u-grid.vue diff --git a/uview-ui/components/u-icon/u-icon.vue b/node_modules/uview-ui/components/u-icon/u-icon.vue similarity index 100% rename from uview-ui/components/u-icon/u-icon.vue rename to node_modules/uview-ui/components/u-icon/u-icon.vue diff --git a/uview-ui/components/u-image/u-image.vue b/node_modules/uview-ui/components/u-image/u-image.vue similarity index 100% rename from uview-ui/components/u-image/u-image.vue rename to node_modules/uview-ui/components/u-image/u-image.vue diff --git a/uview-ui/components/u-index-anchor/u-index-anchor.vue b/node_modules/uview-ui/components/u-index-anchor/u-index-anchor.vue similarity index 100% rename from uview-ui/components/u-index-anchor/u-index-anchor.vue rename to node_modules/uview-ui/components/u-index-anchor/u-index-anchor.vue diff --git a/uview-ui/components/u-index-list/u-index-list.vue b/node_modules/uview-ui/components/u-index-list/u-index-list.vue similarity index 100% rename from uview-ui/components/u-index-list/u-index-list.vue rename to node_modules/uview-ui/components/u-index-list/u-index-list.vue diff --git a/uview-ui/components/u-input/u-input.vue b/node_modules/uview-ui/components/u-input/u-input.vue similarity index 100% rename from uview-ui/components/u-input/u-input.vue rename to node_modules/uview-ui/components/u-input/u-input.vue diff --git a/uview-ui/components/u-keyboard/u-keyboard.vue b/node_modules/uview-ui/components/u-keyboard/u-keyboard.vue similarity index 100% rename from uview-ui/components/u-keyboard/u-keyboard.vue rename to node_modules/uview-ui/components/u-keyboard/u-keyboard.vue diff --git a/uview-ui/components/u-lazy-load/u-lazy-load.vue b/node_modules/uview-ui/components/u-lazy-load/u-lazy-load.vue similarity index 100% rename from uview-ui/components/u-lazy-load/u-lazy-load.vue rename to node_modules/uview-ui/components/u-lazy-load/u-lazy-load.vue diff --git a/uview-ui/components/u-line-progress/u-line-progress.vue b/node_modules/uview-ui/components/u-line-progress/u-line-progress.vue similarity index 100% rename from uview-ui/components/u-line-progress/u-line-progress.vue rename to node_modules/uview-ui/components/u-line-progress/u-line-progress.vue diff --git a/uview-ui/components/u-line/u-line.vue b/node_modules/uview-ui/components/u-line/u-line.vue similarity index 100% rename from uview-ui/components/u-line/u-line.vue rename to node_modules/uview-ui/components/u-line/u-line.vue diff --git a/uview-ui/components/u-link/u-link.vue b/node_modules/uview-ui/components/u-link/u-link.vue similarity index 100% rename from uview-ui/components/u-link/u-link.vue rename to node_modules/uview-ui/components/u-link/u-link.vue diff --git a/uview-ui/components/u-loading-page/u-loading-page.vue b/node_modules/uview-ui/components/u-loading-page/u-loading-page.vue similarity index 100% rename from uview-ui/components/u-loading-page/u-loading-page.vue rename to node_modules/uview-ui/components/u-loading-page/u-loading-page.vue diff --git a/uview-ui/components/u-loading/u-loading.vue b/node_modules/uview-ui/components/u-loading/u-loading.vue similarity index 100% rename from uview-ui/components/u-loading/u-loading.vue rename to node_modules/uview-ui/components/u-loading/u-loading.vue diff --git a/uview-ui/components/u-loadmore/u-loadmore.vue b/node_modules/uview-ui/components/u-loadmore/u-loadmore.vue similarity index 100% rename from uview-ui/components/u-loadmore/u-loadmore.vue rename to node_modules/uview-ui/components/u-loadmore/u-loadmore.vue diff --git a/uview-ui/components/u-mask/u-mask.vue b/node_modules/uview-ui/components/u-mask/u-mask.vue similarity index 100% rename from uview-ui/components/u-mask/u-mask.vue rename to node_modules/uview-ui/components/u-mask/u-mask.vue diff --git a/uview-ui/components/u-message-input/u-message-input.vue b/node_modules/uview-ui/components/u-message-input/u-message-input.vue similarity index 100% rename from uview-ui/components/u-message-input/u-message-input.vue rename to node_modules/uview-ui/components/u-message-input/u-message-input.vue diff --git a/uview-ui/components/u-modal/u-modal.vue b/node_modules/uview-ui/components/u-modal/u-modal.vue similarity index 100% rename from uview-ui/components/u-modal/u-modal.vue rename to node_modules/uview-ui/components/u-modal/u-modal.vue diff --git a/uview-ui/components/u-navbar/u-navbar.vue b/node_modules/uview-ui/components/u-navbar/u-navbar.vue similarity index 100% rename from uview-ui/components/u-navbar/u-navbar.vue rename to node_modules/uview-ui/components/u-navbar/u-navbar.vue diff --git a/uview-ui/components/u-no-network/u-no-network.vue b/node_modules/uview-ui/components/u-no-network/u-no-network.vue similarity index 100% rename from uview-ui/components/u-no-network/u-no-network.vue rename to node_modules/uview-ui/components/u-no-network/u-no-network.vue diff --git a/uview-ui/components/u-notice-bar/u-notice-bar.vue b/node_modules/uview-ui/components/u-notice-bar/u-notice-bar.vue similarity index 100% rename from uview-ui/components/u-notice-bar/u-notice-bar.vue rename to node_modules/uview-ui/components/u-notice-bar/u-notice-bar.vue diff --git a/uview-ui/components/u-number-box/u-number-box.vue b/node_modules/uview-ui/components/u-number-box/u-number-box.vue similarity index 100% rename from uview-ui/components/u-number-box/u-number-box.vue rename to node_modules/uview-ui/components/u-number-box/u-number-box.vue diff --git a/uview-ui/components/u-number-keyboard/u-number-keyboard.vue b/node_modules/uview-ui/components/u-number-keyboard/u-number-keyboard.vue similarity index 100% rename from uview-ui/components/u-number-keyboard/u-number-keyboard.vue rename to node_modules/uview-ui/components/u-number-keyboard/u-number-keyboard.vue diff --git a/uview-ui/components/u-parse/libs/CssHandler.js b/node_modules/uview-ui/components/u-parse/libs/CssHandler.js similarity index 100% rename from uview-ui/components/u-parse/libs/CssHandler.js rename to node_modules/uview-ui/components/u-parse/libs/CssHandler.js diff --git a/uview-ui/components/u-parse/libs/MpHtmlParser.js b/node_modules/uview-ui/components/u-parse/libs/MpHtmlParser.js similarity index 100% rename from uview-ui/components/u-parse/libs/MpHtmlParser.js rename to node_modules/uview-ui/components/u-parse/libs/MpHtmlParser.js diff --git a/uview-ui/components/u-parse/libs/config.js b/node_modules/uview-ui/components/u-parse/libs/config.js similarity index 100% rename from uview-ui/components/u-parse/libs/config.js rename to node_modules/uview-ui/components/u-parse/libs/config.js diff --git a/uview-ui/components/u-parse/libs/handler.wxs b/node_modules/uview-ui/components/u-parse/libs/handler.wxs similarity index 100% rename from uview-ui/components/u-parse/libs/handler.wxs rename to node_modules/uview-ui/components/u-parse/libs/handler.wxs diff --git a/uview-ui/components/u-parse/libs/trees.vue b/node_modules/uview-ui/components/u-parse/libs/trees.vue similarity index 100% rename from uview-ui/components/u-parse/libs/trees.vue rename to node_modules/uview-ui/components/u-parse/libs/trees.vue diff --git a/uview-ui/components/u-parse/u-parse.vue b/node_modules/uview-ui/components/u-parse/u-parse.vue similarity index 100% rename from uview-ui/components/u-parse/u-parse.vue rename to node_modules/uview-ui/components/u-parse/u-parse.vue diff --git a/uview-ui/components/u-picker/u-picker.vue b/node_modules/uview-ui/components/u-picker/u-picker.vue similarity index 100% rename from uview-ui/components/u-picker/u-picker.vue rename to node_modules/uview-ui/components/u-picker/u-picker.vue diff --git a/uview-ui/components/u-popup/u-popup.vue b/node_modules/uview-ui/components/u-popup/u-popup.vue similarity index 100% rename from uview-ui/components/u-popup/u-popup.vue rename to node_modules/uview-ui/components/u-popup/u-popup.vue diff --git a/uview-ui/components/u-radio-group/u-radio-group.vue b/node_modules/uview-ui/components/u-radio-group/u-radio-group.vue similarity index 100% rename from uview-ui/components/u-radio-group/u-radio-group.vue rename to node_modules/uview-ui/components/u-radio-group/u-radio-group.vue diff --git a/uview-ui/components/u-radio/u-radio.vue b/node_modules/uview-ui/components/u-radio/u-radio.vue similarity index 100% rename from uview-ui/components/u-radio/u-radio.vue rename to node_modules/uview-ui/components/u-radio/u-radio.vue diff --git a/uview-ui/components/u-rate/u-rate.vue b/node_modules/uview-ui/components/u-rate/u-rate.vue similarity index 100% rename from uview-ui/components/u-rate/u-rate.vue rename to node_modules/uview-ui/components/u-rate/u-rate.vue diff --git a/uview-ui/components/u-read-more/u-read-more.vue b/node_modules/uview-ui/components/u-read-more/u-read-more.vue similarity index 100% rename from uview-ui/components/u-read-more/u-read-more.vue rename to node_modules/uview-ui/components/u-read-more/u-read-more.vue diff --git a/uview-ui/components/u-row-notice/u-row-notice.vue b/node_modules/uview-ui/components/u-row-notice/u-row-notice.vue similarity index 100% rename from uview-ui/components/u-row-notice/u-row-notice.vue rename to node_modules/uview-ui/components/u-row-notice/u-row-notice.vue diff --git a/uview-ui/components/u-row/u-row.vue b/node_modules/uview-ui/components/u-row/u-row.vue similarity index 100% rename from uview-ui/components/u-row/u-row.vue rename to node_modules/uview-ui/components/u-row/u-row.vue diff --git a/uview-ui/components/u-search/u-search.vue b/node_modules/uview-ui/components/u-search/u-search.vue similarity index 100% rename from uview-ui/components/u-search/u-search.vue rename to node_modules/uview-ui/components/u-search/u-search.vue diff --git a/uview-ui/components/u-section/u-section.vue b/node_modules/uview-ui/components/u-section/u-section.vue similarity index 100% rename from uview-ui/components/u-section/u-section.vue rename to node_modules/uview-ui/components/u-section/u-section.vue diff --git a/uview-ui/components/u-select/u-select.vue b/node_modules/uview-ui/components/u-select/u-select.vue similarity index 100% rename from uview-ui/components/u-select/u-select.vue rename to node_modules/uview-ui/components/u-select/u-select.vue diff --git a/uview-ui/components/u-skeleton/u-skeleton.vue b/node_modules/uview-ui/components/u-skeleton/u-skeleton.vue similarity index 100% rename from uview-ui/components/u-skeleton/u-skeleton.vue rename to node_modules/uview-ui/components/u-skeleton/u-skeleton.vue diff --git a/uview-ui/components/u-slider/u-slider.vue b/node_modules/uview-ui/components/u-slider/u-slider.vue similarity index 100% rename from uview-ui/components/u-slider/u-slider.vue rename to node_modules/uview-ui/components/u-slider/u-slider.vue diff --git a/uview-ui/components/u-steps/u-steps.vue b/node_modules/uview-ui/components/u-steps/u-steps.vue similarity index 100% rename from uview-ui/components/u-steps/u-steps.vue rename to node_modules/uview-ui/components/u-steps/u-steps.vue diff --git a/uview-ui/components/u-sticky/u-sticky.vue b/node_modules/uview-ui/components/u-sticky/u-sticky.vue similarity index 100% rename from uview-ui/components/u-sticky/u-sticky.vue rename to node_modules/uview-ui/components/u-sticky/u-sticky.vue diff --git a/uview-ui/components/u-subsection/u-subsection.vue b/node_modules/uview-ui/components/u-subsection/u-subsection.vue similarity index 100% rename from uview-ui/components/u-subsection/u-subsection.vue rename to node_modules/uview-ui/components/u-subsection/u-subsection.vue diff --git a/uview-ui/components/u-swipe-action/u-swipe-action.vue b/node_modules/uview-ui/components/u-swipe-action/u-swipe-action.vue similarity index 100% rename from uview-ui/components/u-swipe-action/u-swipe-action.vue rename to node_modules/uview-ui/components/u-swipe-action/u-swipe-action.vue diff --git a/uview-ui/components/u-swiper/u-swiper.vue b/node_modules/uview-ui/components/u-swiper/u-swiper.vue similarity index 100% rename from uview-ui/components/u-swiper/u-swiper.vue rename to node_modules/uview-ui/components/u-swiper/u-swiper.vue diff --git a/uview-ui/components/u-switch/u-switch.vue b/node_modules/uview-ui/components/u-switch/u-switch.vue similarity index 100% rename from uview-ui/components/u-switch/u-switch.vue rename to node_modules/uview-ui/components/u-switch/u-switch.vue diff --git a/uview-ui/components/u-tabbar/u-tabbar.vue b/node_modules/uview-ui/components/u-tabbar/u-tabbar.vue similarity index 100% rename from uview-ui/components/u-tabbar/u-tabbar.vue rename to node_modules/uview-ui/components/u-tabbar/u-tabbar.vue diff --git a/uview-ui/components/u-table/u-table.vue b/node_modules/uview-ui/components/u-table/u-table.vue similarity index 100% rename from uview-ui/components/u-table/u-table.vue rename to node_modules/uview-ui/components/u-table/u-table.vue diff --git a/uview-ui/components/u-tabs-swiper/u-tabs-swiper.vue b/node_modules/uview-ui/components/u-tabs-swiper/u-tabs-swiper.vue similarity index 100% rename from uview-ui/components/u-tabs-swiper/u-tabs-swiper.vue rename to node_modules/uview-ui/components/u-tabs-swiper/u-tabs-swiper.vue diff --git a/uview-ui/components/u-tabs/u-tabs.vue b/node_modules/uview-ui/components/u-tabs/u-tabs.vue similarity index 100% rename from uview-ui/components/u-tabs/u-tabs.vue rename to node_modules/uview-ui/components/u-tabs/u-tabs.vue diff --git a/uview-ui/components/u-tag/u-tag.vue b/node_modules/uview-ui/components/u-tag/u-tag.vue similarity index 100% rename from uview-ui/components/u-tag/u-tag.vue rename to node_modules/uview-ui/components/u-tag/u-tag.vue diff --git a/uview-ui/components/u-td/u-td.vue b/node_modules/uview-ui/components/u-td/u-td.vue similarity index 100% rename from uview-ui/components/u-td/u-td.vue rename to node_modules/uview-ui/components/u-td/u-td.vue diff --git a/uview-ui/components/u-th/u-th.vue b/node_modules/uview-ui/components/u-th/u-th.vue similarity index 100% rename from uview-ui/components/u-th/u-th.vue rename to node_modules/uview-ui/components/u-th/u-th.vue diff --git a/uview-ui/components/u-time-line-item/u-time-line-item.vue b/node_modules/uview-ui/components/u-time-line-item/u-time-line-item.vue similarity index 100% rename from uview-ui/components/u-time-line-item/u-time-line-item.vue rename to node_modules/uview-ui/components/u-time-line-item/u-time-line-item.vue diff --git a/uview-ui/components/u-time-line/u-time-line.vue b/node_modules/uview-ui/components/u-time-line/u-time-line.vue similarity index 100% rename from uview-ui/components/u-time-line/u-time-line.vue rename to node_modules/uview-ui/components/u-time-line/u-time-line.vue diff --git a/uview-ui/components/u-toast/u-toast.vue b/node_modules/uview-ui/components/u-toast/u-toast.vue similarity index 100% rename from uview-ui/components/u-toast/u-toast.vue rename to node_modules/uview-ui/components/u-toast/u-toast.vue diff --git a/uview-ui/components/u-top-tips/u-top-tips.vue b/node_modules/uview-ui/components/u-top-tips/u-top-tips.vue similarity index 100% rename from uview-ui/components/u-top-tips/u-top-tips.vue rename to node_modules/uview-ui/components/u-top-tips/u-top-tips.vue diff --git a/uview-ui/components/u-tr/u-tr.vue b/node_modules/uview-ui/components/u-tr/u-tr.vue similarity index 100% rename from uview-ui/components/u-tr/u-tr.vue rename to node_modules/uview-ui/components/u-tr/u-tr.vue diff --git a/uview-ui/components/u-upload/u-upload.vue b/node_modules/uview-ui/components/u-upload/u-upload.vue similarity index 100% rename from uview-ui/components/u-upload/u-upload.vue rename to node_modules/uview-ui/components/u-upload/u-upload.vue diff --git a/uview-ui/components/u-verification-code/u-verification-code.vue b/node_modules/uview-ui/components/u-verification-code/u-verification-code.vue similarity index 100% rename from uview-ui/components/u-verification-code/u-verification-code.vue rename to node_modules/uview-ui/components/u-verification-code/u-verification-code.vue diff --git a/uview-ui/components/u-waterfall/u-waterfall.vue b/node_modules/uview-ui/components/u-waterfall/u-waterfall.vue similarity index 100% rename from uview-ui/components/u-waterfall/u-waterfall.vue rename to node_modules/uview-ui/components/u-waterfall/u-waterfall.vue diff --git a/uview-ui/iconfont.css b/node_modules/uview-ui/iconfont.css similarity index 100% rename from uview-ui/iconfont.css rename to node_modules/uview-ui/iconfont.css diff --git a/uview-ui/index.js b/node_modules/uview-ui/index.js similarity index 100% rename from uview-ui/index.js rename to node_modules/uview-ui/index.js diff --git a/uview-ui/index.scss b/node_modules/uview-ui/index.scss similarity index 100% rename from uview-ui/index.scss rename to node_modules/uview-ui/index.scss diff --git a/uview-ui/libs/config/config.js b/node_modules/uview-ui/libs/config/config.js similarity index 71% rename from uview-ui/libs/config/config.js rename to node_modules/uview-ui/libs/config/config.js index c2dfb74..116f220 100644 --- a/uview-ui/libs/config/config.js +++ b/node_modules/uview-ui/libs/config/config.js @@ -1,5 +1,5 @@ -// 此版本发布于2020-11-11 -let version = '1.8.0'; +// 此版本发布于2020-11-16 +let version = '1.8.1'; export default { v: version, diff --git a/uview-ui/libs/config/zIndex.js b/node_modules/uview-ui/libs/config/zIndex.js similarity index 100% rename from uview-ui/libs/config/zIndex.js rename to node_modules/uview-ui/libs/config/zIndex.js diff --git a/uview-ui/libs/css/color.scss b/node_modules/uview-ui/libs/css/color.scss similarity index 100% rename from uview-ui/libs/css/color.scss rename to node_modules/uview-ui/libs/css/color.scss diff --git a/uview-ui/libs/css/common.scss b/node_modules/uview-ui/libs/css/common.scss similarity index 100% rename from uview-ui/libs/css/common.scss rename to node_modules/uview-ui/libs/css/common.scss diff --git a/uview-ui/libs/css/style.components.scss b/node_modules/uview-ui/libs/css/style.components.scss similarity index 100% rename from uview-ui/libs/css/style.components.scss rename to node_modules/uview-ui/libs/css/style.components.scss diff --git a/uview-ui/libs/css/style.h5.scss b/node_modules/uview-ui/libs/css/style.h5.scss similarity index 100% rename from uview-ui/libs/css/style.h5.scss rename to node_modules/uview-ui/libs/css/style.h5.scss diff --git a/uview-ui/libs/css/style.mp.scss b/node_modules/uview-ui/libs/css/style.mp.scss similarity index 100% rename from uview-ui/libs/css/style.mp.scss rename to node_modules/uview-ui/libs/css/style.mp.scss diff --git a/uview-ui/libs/css/style.nvue.scss b/node_modules/uview-ui/libs/css/style.nvue.scss similarity index 100% rename from uview-ui/libs/css/style.nvue.scss rename to node_modules/uview-ui/libs/css/style.nvue.scss diff --git a/uview-ui/libs/css/style.vue.scss b/node_modules/uview-ui/libs/css/style.vue.scss similarity index 100% rename from uview-ui/libs/css/style.vue.scss rename to node_modules/uview-ui/libs/css/style.vue.scss diff --git a/uview-ui/libs/function/$parent.js b/node_modules/uview-ui/libs/function/$parent.js similarity index 100% rename from uview-ui/libs/function/$parent.js rename to node_modules/uview-ui/libs/function/$parent.js diff --git a/uview-ui/libs/function/addUnit.js b/node_modules/uview-ui/libs/function/addUnit.js similarity index 100% rename from uview-ui/libs/function/addUnit.js rename to node_modules/uview-ui/libs/function/addUnit.js diff --git a/uview-ui/libs/function/bem.js b/node_modules/uview-ui/libs/function/bem.js similarity index 100% rename from uview-ui/libs/function/bem.js rename to node_modules/uview-ui/libs/function/bem.js diff --git a/uview-ui/libs/function/color.js b/node_modules/uview-ui/libs/function/color.js similarity index 100% rename from uview-ui/libs/function/color.js rename to node_modules/uview-ui/libs/function/color.js diff --git a/uview-ui/libs/function/colorGradient.js b/node_modules/uview-ui/libs/function/colorGradient.js similarity index 100% rename from uview-ui/libs/function/colorGradient.js rename to node_modules/uview-ui/libs/function/colorGradient.js diff --git a/uview-ui/libs/function/debounce.js b/node_modules/uview-ui/libs/function/debounce.js similarity index 100% rename from uview-ui/libs/function/debounce.js rename to node_modules/uview-ui/libs/function/debounce.js diff --git a/uview-ui/libs/function/deepClone.js b/node_modules/uview-ui/libs/function/deepClone.js similarity index 100% rename from uview-ui/libs/function/deepClone.js rename to node_modules/uview-ui/libs/function/deepClone.js diff --git a/uview-ui/libs/function/deepMerge.js b/node_modules/uview-ui/libs/function/deepMerge.js similarity index 100% rename from uview-ui/libs/function/deepMerge.js rename to node_modules/uview-ui/libs/function/deepMerge.js diff --git a/uview-ui/libs/function/getParent.js b/node_modules/uview-ui/libs/function/getParent.js similarity index 100% rename from uview-ui/libs/function/getParent.js rename to node_modules/uview-ui/libs/function/getParent.js diff --git a/uview-ui/libs/function/guid.js b/node_modules/uview-ui/libs/function/guid.js similarity index 100% rename from uview-ui/libs/function/guid.js rename to node_modules/uview-ui/libs/function/guid.js diff --git a/uview-ui/libs/function/md5.js b/node_modules/uview-ui/libs/function/md5.js similarity index 100% rename from uview-ui/libs/function/md5.js rename to node_modules/uview-ui/libs/function/md5.js diff --git a/uview-ui/libs/function/queryParams.js b/node_modules/uview-ui/libs/function/queryParams.js similarity index 100% rename from uview-ui/libs/function/queryParams.js rename to node_modules/uview-ui/libs/function/queryParams.js diff --git a/uview-ui/libs/function/random.js b/node_modules/uview-ui/libs/function/random.js similarity index 100% rename from uview-ui/libs/function/random.js rename to node_modules/uview-ui/libs/function/random.js diff --git a/uview-ui/libs/function/randomArray.js b/node_modules/uview-ui/libs/function/randomArray.js similarity index 100% rename from uview-ui/libs/function/randomArray.js rename to node_modules/uview-ui/libs/function/randomArray.js diff --git a/uview-ui/libs/function/route.js b/node_modules/uview-ui/libs/function/route.js similarity index 88% rename from uview-ui/libs/function/route.js rename to node_modules/uview-ui/libs/function/route.js index 7589807..cee22ab 100644 --- a/uview-ui/libs/function/route.js +++ b/node_modules/uview-ui/libs/function/route.js @@ -4,17 +4,18 @@ */ class Router { + // 原始属性定义 + config = { + type: 'navigateTo', + url: '', + delta: 1, // navigateBack页面后退时,回退的层数 + params: {}, // 传递的参数 + animationType: 'pop-in', // 窗口动画,只在APP有效 + animationDuration: 300, // 窗口动画持续时间,单位毫秒,只在APP有效 + intercept: false, // 是否需要拦截 + } + constructor() { - // 原始属性定义 - this.config = { - type: 'navigateTo', - url: '', - delta: 1, // navigateBack页面后退时,回退的层数 - params: {}, // 传递的参数 - animationType: 'pop-in', // 窗口动画,只在APP有效 - animationDuration: 300, // 窗口动画持续时间,单位毫秒,只在APP有效 - intercept: false, // 是否需要拦截 - } // 因为route方法是需要对外赋值给另外的对象使用,同时route内部有使用this,会导致route失去上下文 // 这里在构造函数中进行this绑定 this.route = this.route.bind(this) @@ -22,11 +23,13 @@ class Router { // 判断url前面是否有"/",如果没有则加上,否则无法跳转 addRootPath(url) { - return String(url).indexOf('/') >= 0 ? url : `/${url}` + return url[0] === '/' ? url : `/${url}` } // 整合路由参数 mixinParam(url, params) { + url = this.addRootPath(url) + // 使用正则匹配,主要依据是判断是否有"/","?","="等,如“/page/index/index?name=mary" // 如果有url中有get参数,转换后无需带上"?" let query = '' @@ -64,7 +67,6 @@ class Router { mergeConfig.params = params // 合并内外部参数 mergeConfig = uni.$u.deepMerge(this.config, mergeConfig) - // 判断用户是否定义了拦截器 if (typeof uni.$u.routeIntercept === 'function') { // 定一个promise,根据用户执行resolve(true)或者resolve(false)来决定是否进行路由跳转 diff --git a/uview-ui/libs/function/sys.js b/node_modules/uview-ui/libs/function/sys.js similarity index 100% rename from uview-ui/libs/function/sys.js rename to node_modules/uview-ui/libs/function/sys.js diff --git a/uview-ui/libs/function/test.js b/node_modules/uview-ui/libs/function/test.js similarity index 100% rename from uview-ui/libs/function/test.js rename to node_modules/uview-ui/libs/function/test.js diff --git a/uview-ui/libs/function/throttle.js b/node_modules/uview-ui/libs/function/throttle.js similarity index 100% rename from uview-ui/libs/function/throttle.js rename to node_modules/uview-ui/libs/function/throttle.js diff --git a/uview-ui/libs/function/timeFormat.js b/node_modules/uview-ui/libs/function/timeFormat.js similarity index 100% rename from uview-ui/libs/function/timeFormat.js rename to node_modules/uview-ui/libs/function/timeFormat.js diff --git a/uview-ui/libs/function/timeFrom.js b/node_modules/uview-ui/libs/function/timeFrom.js similarity index 100% rename from uview-ui/libs/function/timeFrom.js rename to node_modules/uview-ui/libs/function/timeFrom.js diff --git a/uview-ui/libs/function/toast.js b/node_modules/uview-ui/libs/function/toast.js similarity index 100% rename from uview-ui/libs/function/toast.js rename to node_modules/uview-ui/libs/function/toast.js diff --git a/uview-ui/libs/function/trim.js b/node_modules/uview-ui/libs/function/trim.js similarity index 100% rename from uview-ui/libs/function/trim.js rename to node_modules/uview-ui/libs/function/trim.js diff --git a/uview-ui/libs/function/type2icon.js b/node_modules/uview-ui/libs/function/type2icon.js similarity index 100% rename from uview-ui/libs/function/type2icon.js rename to node_modules/uview-ui/libs/function/type2icon.js diff --git a/uview-ui/libs/mixin/mixin.js b/node_modules/uview-ui/libs/mixin/mixin.js similarity index 100% rename from uview-ui/libs/mixin/mixin.js rename to node_modules/uview-ui/libs/mixin/mixin.js diff --git a/uview-ui/libs/mixin/mpShare.js b/node_modules/uview-ui/libs/mixin/mpShare.js similarity index 100% rename from uview-ui/libs/mixin/mpShare.js rename to node_modules/uview-ui/libs/mixin/mpShare.js diff --git a/uview-ui/libs/request/index.js b/node_modules/uview-ui/libs/request/index.js similarity index 100% rename from uview-ui/libs/request/index.js rename to node_modules/uview-ui/libs/request/index.js diff --git a/uview-ui/libs/store/index.js b/node_modules/uview-ui/libs/store/index.js similarity index 100% rename from uview-ui/libs/store/index.js rename to node_modules/uview-ui/libs/store/index.js diff --git a/uview-ui/libs/util/area.js b/node_modules/uview-ui/libs/util/area.js similarity index 100% rename from uview-ui/libs/util/area.js rename to node_modules/uview-ui/libs/util/area.js diff --git a/uview-ui/libs/util/async-validator.js b/node_modules/uview-ui/libs/util/async-validator.js similarity index 100% rename from uview-ui/libs/util/async-validator.js rename to node_modules/uview-ui/libs/util/async-validator.js diff --git a/uview-ui/libs/util/city.js b/node_modules/uview-ui/libs/util/city.js similarity index 100% rename from uview-ui/libs/util/city.js rename to node_modules/uview-ui/libs/util/city.js diff --git a/uview-ui/libs/util/emitter.js b/node_modules/uview-ui/libs/util/emitter.js similarity index 100% rename from uview-ui/libs/util/emitter.js rename to node_modules/uview-ui/libs/util/emitter.js diff --git a/uview-ui/libs/util/province.js b/node_modules/uview-ui/libs/util/province.js similarity index 100% rename from uview-ui/libs/util/province.js rename to node_modules/uview-ui/libs/util/province.js diff --git a/node_modules/uview-ui/package.json b/node_modules/uview-ui/package.json new file mode 100644 index 0000000..6baebc7 --- /dev/null +++ b/node_modules/uview-ui/package.json @@ -0,0 +1,67 @@ +{ + "_from": "uview-ui@^1.8.1", + "_id": "uview-ui@1.8.1", + "_inBundle": false, + "_integrity": "sha1-HVeMmx2fVsTdtIXFgP4669pFTyQ=", + "_location": "/uview-ui", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "uview-ui@^1.8.1", + "name": "uview-ui", + "escapedName": "uview-ui", + "rawSpec": "^1.8.1", + "saveSpec": null, + "fetchSpec": "^1.8.1" + }, + "_requiredBy": [ + "#USER", + "/" + ], + "_resolved": "https://registry.npm.taobao.org/uview-ui/download/uview-ui-1.8.1.tgz", + "_shasum": "1d578c9b1d9f56c4ddb485c580fe3aebda454f24", + "_spec": "uview-ui@^1.8.1", + "_where": "D:\\github\\zyplayer", + "author": { + "name": "uView" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "uView UI,是uni-app生态优秀的UI框架,全面的组件和便捷的工具会让您信手拈来,如鱼得水", + "devDependencies": { + "node-sass": "^4.14.0", + "sass-loader": "^8.0.2" + }, + "keywords": [ + "uview", + "uView", + "uni-app", + "uni-app ui", + "uniapp", + "uviewui", + "uview ui", + "uviewUI", + "uViewui", + "uViewUI", + "uView UI", + "uni ui", + "uni UI", + "uniapp ui", + "ui", + "UI框架", + "uniapp ui框架", + "uniapp UI" + ], + "license": "MIT", + "main": "index.js", + "name": "uview-ui", + "repository": { + "type": "git", + "url": "" + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "version": "1.8.1" +} diff --git a/uview-ui/theme.scss b/node_modules/uview-ui/theme.scss similarity index 100% rename from uview-ui/theme.scss rename to node_modules/uview-ui/theme.scss diff --git a/node_modules/vue-i18n/CHANGELOG.md b/node_modules/vue-i18n/CHANGELOG.md deleted file mode 100644 index 50a63cc..0000000 --- a/node_modules/vue-i18n/CHANGELOG.md +++ /dev/null @@ -1,1631 +0,0 @@ - -## v8.20.0 (2020-07-30) - -#### :star: New Features -* [#959](https://github.com/kazupon/vue-i18n/pull/959) i18n-n component local components passing ([@kazupon](https://github.com/kazupon)) -* [#928](https://github.com/kazupon/vue-i18n/pull/928) :zap: improvement(interpolation): enable passage of local components to tag prop ([@vhoyer](https://github.com/vhoyer)) - -#### Committers: 2 -- Vinícius Hoyer ([@vhoyer](https://github.com/vhoyer)) -- kazuya kawaguchi ([@kazupon](https://github.com/kazupon)) - - -## v8.19.0 (2020-07-25) - -#### :star: New Features -* [#942](https://github.com/kazupon/vue-i18n/pull/942) Add vetur support for tags and attributes ([@phiter](https://github.com/phiter)) - -#### :pencil: Documentation -* [#925](https://github.com/kazupon/vue-i18n/pull/925) Added missing quote ([@fschlag](https://github.com/fschlag)) -* [#921](https://github.com/kazupon/vue-i18n/pull/921) Add lost pluralizationRules option to documentation ([@AleksandrSl](https://github.com/AleksandrSl)) -* [#920](https://github.com/kazupon/vue-i18n/pull/920) Make link to API and Guide top level ([@AleksandrSl](https://github.com/AleksandrSl)) - -#### Committers: 3 -- Aleksandr ([@AleksandrSl](https://github.com/AleksandrSl)) -- Florian Schlag ([@fschlag](https://github.com/fschlag)) -- Phiter Fernandes ([@phiter](https://github.com/phiter)) - - -## v8.18.2 (2020-06-08) - -#### :zap: Improved Features -* [#917](https://github.com/kazupon/vue-i18n/pull/917) fix: improve IVueI18n interface ([@kazupon](https://github.com/kazupon)) - -#### :pencil: Documentation -* [#902](https://github.com/kazupon/vue-i18n/pull/902) docs: [RU] Translation update ([@Alex-Sokolov](https://github.com/Alex-Sokolov)) -* [#901](https://github.com/kazupon/vue-i18n/pull/901) docs: (zh) inverse $d $n ([@stan-chen](https://github.com/stan-chen)) - -#### Committers: 4 -- Alexander Sokolov ([@Alex-Sokolov](https://github.com/Alex-Sokolov)) -- Rafał Chłodnicki ([@rchl](https://github.com/rchl)) -- Stanley Chen ([@stan-chen](https://github.com/stan-chen)) -- kazuya kawaguchi ([@kazupon](https://github.com/kazupon)) - - -## v8.18.1 (2020-05-27) - -#### :bug: Bug Fixes -* [#896](https://github.com/kazupon/vue-i18n/pull/896) Fix flow types and enable flow types testing on CI ([@rchl](https://github.com/rchl)) - -#### Committers: 1 -- Rafał Chłodnicki ([@rchl](https://github.com/rchl)) - - -## v8.18.0 (2020-05-26) - -#### :star: New Features -* [#892](https://github.com/kazupon/vue-i18n/pull/892) Add onComponentInstanceCreated constructor option ([@rchl](https://github.com/rchl)) - -#### :zap: Improved Features -* [#890](https://github.com/kazupon/vue-i18n/pull/890) chore: set up linting for typescript definitions ([@rchl](https://github.com/rchl)) - -#### Committers: 1 -- Rafał Chłodnicki ([@rchl](https://github.com/rchl)) - - -## v8.17.7 (2020-05-19) - -#### :bug: Bug Fixes -* [#882](https://github.com/kazupon/vue-i18n/pull/882) fix v-t pluralisation when choice is 0 ([@mikejacoutot](https://github.com/mikejacoutot)) - -#### Committers: 1 -- [@mikejacoutot](https://github.com/mikejacoutot) - - -## v8.17.6 (2020-05-15) - -#### :bug: Bug Fixes -* [#880](https://github.com/kazupon/vue-i18n/pull/880) Don't delete _i18n in beforeDestroy ([@danimoh](https://github.com/danimoh)) - -#### :zap: Improved Features -* [#878](https://github.com/kazupon/vue-i18n/pull/878) Allow component interpolation without root element ([@danimoh](https://github.com/danimoh)) - -#### :pencil: Documentation -* [#875](https://github.com/kazupon/vue-i18n/pull/875) Add new 3rd party tool ([@danigayosog](https://github.com/danigayosog)) -* [#872](https://github.com/kazupon/vue-i18n/pull/872) docs: fixes ([@Alex-Sokolov](https://github.com/Alex-Sokolov)) -* [#871](https://github.com/kazupon/vue-i18n/pull/871) update pluralization.md ([@Timibadass](https://github.com/Timibadass)) - -#### Committers: 4 -- Alexander Sokolov ([@Alex-Sokolov](https://github.com/Alex-Sokolov)) -- Daniel ([@danigayosog](https://github.com/danigayosog)) -- Timi Omoyeni ([@Timibadass](https://github.com/Timibadass)) -- [@danimoh](https://github.com/danimoh) - - -## v8.17.5 (2020-05-10) - -#### :bug: Bug Fixes -* [#869](https://github.com/kazupon/vue-i18n/pull/869) fix: not string method access error ([@kazupon](https://github.com/kazupon)) - -#### :pencil: Documentation -* [#867](https://github.com/kazupon/vue-i18n/pull/867) docs: [RU] Translation ([@Alex-Sokolov](https://github.com/Alex-Sokolov)) -* [#865](https://github.com/kazupon/vue-i18n/pull/865) improvement(docs): extend Hot reloading section ([@caugner](https://github.com/caugner)) - -#### Committers: 3 -- Alexander Sokolov ([@Alex-Sokolov](https://github.com/Alex-Sokolov)) -- Claas Augner ([@caugner](https://github.com/caugner)) -- kazuya kawaguchi ([@kazupon](https://github.com/kazupon)) - - -## v8.17.4 (2020-04-26) - -#### :bug: Bug Fixes -* [#859](https://github.com/kazupon/vue-i18n/pull/859) fix datetime format cache ([@kazupon](https://github.com/kazupon)) -* [#858](https://github.com/kazupon/vue-i18n/pull/858) fix datetime and number format fallbacking ([@kazupon](https://github.com/kazupon)) -* [#857](https://github.com/kazupon/vue-i18n/pull/857) fix: alternative array includes ([@kazupon](https://github.com/kazupon)) - -#### Committers: 1 -- kazuya kawaguchi ([@kazupon](https://github.com/kazupon)) - - -## v8.17.3 (2020-04-19) - -#### :zap: Improved Features -* [#846](https://github.com/kazupon/vue-i18n/pull/846) add key to postTranslation ([@dmitryuk](https://github.com/dmitryuk)) - -#### :pencil: Documentation -* [#847](https://github.com/kazupon/vue-i18n/pull/847) docs: Update /api/README.md ([@Alex-Sokolov](https://github.com/Alex-Sokolov)) - -#### Committers: 2 -- Alexander Dmitryuk ([@dmitryuk](https://github.com/dmitryuk)) -- Alexander Sokolov ([@Alex-Sokolov](https://github.com/Alex-Sokolov)) - - -## v8.17.2 (2020-04-18) - -#### :zap: Improved Features -* [#844](https://github.com/kazupon/vue-i18n/pull/844) Use plain object instead of Map, which is not supported in IE9/10 ([@exoego](https://github.com/exoego)) - -#### Committers: 1 -- TATSUNO Yasuhiro ([@exoego](https://github.com/exoego)) - - -## v8.17.1 (2020-04-16) - -#### :bug: Bug Fixes -* [#840](https://github.com/kazupon/vue-i18n/pull/840) fix: altnative endsWidth ([@kazupon](https://github.com/kazupon)) - -#### :pencil: Documentation -* [#837](https://github.com/kazupon/vue-i18n/pull/837) Fix typo ([@ninofiliu](https://github.com/ninofiliu)) - -#### Committers: 2 -- Nino Filiu ([@ninofiliu](https://github.com/ninofiliu)) -- kazuya kawaguchi ([@kazupon](https://github.com/kazupon)) - - -## v8.17.0 (2020-04-11) - -#### :star: New Features -* [#829](https://github.com/kazupon/vue-i18n/pull/829) #138 Fallback Locale as array for cascading fallbacks ([@mmokross](https://github.com/mmokross)) - -#### :pencil: Documentation -* [#834](https://github.com/kazupon/vue-i18n/pull/834) Add capitalize default modifier in doc ([@alexandreDavid](https://github.com/alexandreDavid)) -* [#832](https://github.com/kazupon/vue-i18n/pull/832) fix in examples of "Custom pluralization" ([@Perlover](https://github.com/Perlover)) - -#### Committers: 4 -- Alexandre David ([@alexandreDavid](https://github.com/alexandreDavid)) -- Kobayashi Kazuhiro ([@kzhrk](https://github.com/kzhrk)) -- Michael Mokroß ([@mmokross](https://github.com/mmokross)) -- Perlover ([@Perlover](https://github.com/Perlover)) - - -## v8.16.0 (2020-03-27) - -#### :star: New Features -* [#822](https://github.com/kazupon/vue-i18n/pull/822) post translation hooking feature ([@kazupon](https://github.com/kazupon)) - -#### Committers: 1 -- kazuya kawaguchi ([@kazupon](https://github.com/kazupon)) - - -## v8.15.7 (2020-03-25) - -#### :bug: Bug Fixes -* [#819](https://github.com/kazupon/vue-i18n/pull/819) Fixed bug when changing number format runtime ([@slischka](https://github.com/slischka)) - -#### Committers: 1 -- Jiří Slischka ([@slischka](https://github.com/slischka)) - - -## v8.15.6 (2020-03-23) - -#### :bug: Bug Fixes -* [#817](https://github.com/kazupon/vue-i18n/pull/817) Bugfix : 'setLocaleMessage' / 'mergeLocaleMessage' doesn't work if 'warnHtmlInMessage' is set to 'error' ([@aym3nb](https://github.com/aym3nb)) - -#### :pencil: Documentation -* [#816](https://github.com/kazupon/vue-i18n/pull/816) Update fallback.md ([@scoutrul](https://github.com/scoutrul)) - -#### Committers: 3 -- Anton ([@scoutrul](https://github.com/scoutrul)) -- Aymen Bareche ([@aym3nb](https://github.com/aym3nb)) -- TATSUNO Yasuhiro ([@exoego](https://github.com/exoego)) - - -## v8.15.5 (2020-03-07) - -#### :star: Features -* [#787](https://github.com/kazupon/vue-i18n/pull/787) Add a 'capitalize' default modifier for linked message ([@charlesmass](https://github.com/charlesmass)) - -#### :zap: Improvement Features -* [#794](https://github.com/kazupon/vue-i18n/pull/794) Support returning 'string' type for customized interpolation ([@sihyeonn](https://github.com/sihyeonn)) - -#### :pencil: Documentation -* [#791](https://github.com/kazupon/vue-i18n/pull/791) Revise fallback.md ([@jlebar](https://github.com/jlebar)) - -#### Committers: 4 -- Justin Lebar ([@jlebar](https://github.com/jlebar)) -- L M ([@charlesmass](https://github.com/charlesmass)) -- Sihyeon Jang ([@sihyeonn](https://github.com/sihyeonn)) -- kazuya kawaguchi ([@kazupon](https://github.com/kazupon)) - - -## [8.15.4](https://github.com/kazupon/vue-i18n/compare/v8.15.3...v8.15.4) (2020-02-25) - - -### :bug: Bug Fixes - -* **index:** improve formatFallbackMessages code (#779) (#783) by [@masongzhi](https://github.com/masongzhi) ([53895b9](https://github.com/kazupon/vue-i18n/commit/53895b9))) - -### :up: Updates - -* some fixes ([8a9a950](https://github.com/kazupon/vue-i18n/commit/8a9a950)) - - - - -## [8.15.3](https://github.com/kazupon/vue-i18n/compare/v8.15.2...v8.15.3) (2019-12-18) - - -### :zap: Improvements - -* **index:** fix mergeLocaleMessage. add changes notification on merging with an empty target object ([#752](https://github.com/kazupon/vue-i18n/issues/752)) by [@jekill](https://github.com/jekill) ([048eac5](https://github.com/kazupon/vue-i18n/commit/048eac5)), closes [#752](https://github.com/kazupon/vue-i18n/issues/752) - - - - -## [8.15.2](https://github.com/kazupon/vue-i18n/compare/v8.15.1...v8.15.2) (2019-12-18) - - -### :bug: Bug Fixes - -* **index:** Fix exception when using unit number formatting by [@simonjodet](https://github.com/simonjodet) ([194b801](https://github.com/kazupon/vue-i18n/commit/194b801)), closes [#750](https://github.com/kazupon/vue-i18n/issues/750) [#751](https://github.com/kazupon/vue-i18n/issues/751) - - - - -## [8.15.1](https://github.com/kazupon/vue-i18n/compare/v8.15.0...v8.15.1) (2019-11-27) - - -### :zap: Improvements - -* **mixin:** change to custom blocks parse error ([a9858be](https://github.com/kazupon/vue-i18n/commit/a9858be)) - - - - -# [8.15.0](https://github.com/kazupon/vue-i18n/compare/v8.14.1...v8.15.0) (2019-10-16) - - -### :star: New Features - -* Add constructor option for custom modifiers ([#724](https://github.com/kazupon/vue-i18n/issues/724)) by [@epaezrubio](https://github.com/epaezrubio) ([3217212](https://github.com/kazupon/vue-i18n/commit/3217212)), closes [#724](https://github.com/kazupon/vue-i18n/issues/724) - - - - -## [8.14.1](https://github.com/kazupon/vue-i18n/compare/v8.14.0...v8.14.1) (2019-09-12) - - -### :bug: Bug Fixes - -* **path:** fix branket key error ([8d2aba7](https://github.com/kazupon/vue-i18n/commit/8d2aba7)) -* **component:** Fix interpolation component when there are empty text nodes ([547cdd1](https://github.com/kazupon/vue-i18n/commit/547cdd1)) by [@Demivan](https://github.com/Demivan) - - - - -# [8.14.0](https://github.com/kazupon/vue-i18n/compare/v8.13.0...v8.14.0) (2019-08-12) - - -### :star: New Features - -* fallback formatting ([#637](https://github.com/kazupon/vue-i18n/issues/637)) by [@sebwas](https://github.com/sebwas) ([bf9929c](https://github.com/kazupon/vue-i18n/commit/bf9929c)), closes [#637](https://github.com/kazupon/vue-i18n/issues/637) -* support slots syntax for component interpolation ([#685](https://github.com/kazupon/vue-i18n/issues/685)) by [@aavondet](https://github.com/aavondet) ([71ca843](https://github.com/kazupon/vue-i18n/commit/71ca843)), closes [#685](https://github.com/kazupon/vue-i18n/issues/685) - - - - -# [8.13.0](https://github.com/kazupon/vue-i18n/compare/v8.12.0...v8.13.0) (2019-08-09) - - -### :star: New Features - -* datetime/number formats fallback warning filter ([46de19e](https://github.com/kazupon/vue-i18n/commit/46de19e)), closes [#558](https://github.com/kazupon/vue-i18n/issues/558) -* fallback translation warning filter ([69fc798](https://github.com/kazupon/vue-i18n/commit/69fc798)) -* translation missing warning filter ([666dc9d](https://github.com/kazupon/vue-i18n/commit/666dc9d)) - - - - -# [8.12.0](https://github.com/kazupon/vue-i18n/compare/v8.11.2...v8.12.0) (2019-07-09) - - -### :star: New Features - -* **mixin:** shared locale messages feature ([82543de](https://github.com/kazupon/vue-i18n/commit/82543de)) - - -### :zap: Improvements - -* **typing:** sharedMessages option type ([6967a15](https://github.com/kazupon/vue-i18n/commit/6967a15)) - - - - -## [8.11.2](https://github.com/kazupon/vue-i18n/compare/v8.11.1...v8.11.2) (2019-04-30) - - -### :bug: Bug Fixes - -* bug(mixin): fix SSR memory leak by moving subscribeDataChanging calls into beforeMount ([#572](https://github.com/kazupon/vue-i18n/issues/572)) by [@Pindar](https://github.com/Pindar) ([32b5795](https://github.com/kazupon/vue-i18n/commit/32b5795)), closes [#572](https://github.com/kazupon/vue-i18n/issues/572) - - - - -## [8.11.1](https://github.com/kazupon/vue-i18n/compare/v8.11.0...v8.11.1) (2019-04-26) - - -### :bug: Bug Fixes - -* fix ES Modules distribution ([bb631a1](https://github.com/kazupon/vue-i18n/commit/bb631a1)) - - - - -# [8.11.0](https://github.com/kazupon/vue-i18n/compare/v8.10.0...v8.11.0) (2019-04-26) - - -### :star: New Features - -* ES modules for browser ([#561](https://github.com/kazupon/vue-i18n/issues/561)) ([c9b9adf](https://github.com/kazupon/vue-i18n/commit/c9b9adf)), closes [#561](https://github.com/kazupon/vue-i18n/issues/561) -* HTML locale message warning option ([#567](https://github.com/kazupon/vue-i18n/issues/567)) ([4aecf03](https://github.com/kazupon/vue-i18n/commit/4aecf03)), closes [#567](https://github.com/kazupon/vue-i18n/issues/567) - - - - -# [8.10.0](https://github.com/kazupon/vue-i18n/compare/v8.9.0...v8.10.0) (2019-03-28) - - -### :star: New Features - -* **number:** i18n-n functional component ([#541](https://github.com/kazupon/vue-i18n/issues/541)) by [@bponomarenko](https://github.com/bponomarenko) ([b33579d](https://github.com/kazupon/vue-i18n/commit/b33579d)), closes [#541](https://github.com/kazupon/vue-i18n/issues/541) -* **path:** Keypath should parse if sub path contains spaces. ([#533](https://github.com/kazupon/vue-i18n/issues/533)) by [@exoego](https://github.com/exoego) ([640daaf](https://github.com/kazupon/vue-i18n/commit/640daaf)), closes [#533](https://github.com/kazupon/vue-i18n/issues/533) - - -### :zap: Improvements - -* **number:** support data fall through in i18n-n ([#545](https://github.com/kazupon/vue-i18n/issues/545)) ([71cadbf](https://github.com/kazupon/vue-i18n/commit/71cadbf)), closes [#545](https://github.com/kazupon/vue-i18n/issues/545) - - -### :pencil: docs - -* **vuepress:** translate documents for chinese ([#536](https://github.com/kazupon/vue-i18n/issues/536)) by [@xuhongbo](https://github.com/xuhongbo) ([ccf29f8](https://github.com/kazupon/vue-i18n/commit/ccf29f8)), closes [#536](https://github.com/kazupon/vue-i18n/issues/536) [#531](https://github.com/kazupon/vue-i18n/issues/531) [#1](https://github.com/kazupon/vue-i18n/issues/1) [#533](https://github.com/kazupon/vue-i18n/issues/533) [#540](https://github.com/kazupon/vue-i18n/issues/540) [#541](https://github.com/kazupon/vue-i18n/issues/541) [#1](https://github.com/kazupon/vue-i18n/issues/1) [#2](https://github.com/kazupon/vue-i18n/issues/2) - - - -# [8.9.0](https://github.com/kazupon/vue-i18n/compare/v8.8.2...v8.9.0) (2019-03-08) - - -### :bug: Bug Fixes - -* **index:** Fix [#515](https://github.com/kazupon/vue-i18n/issues/515) empty string not returning true ([#525](https://github.com/kazupon/vue-i18n/issues/525)) by [@kimuraz](https://github.com/kimuraz) ([396c5ca](https://github.com/kazupon/vue-i18n/commit/396c5ca)), closes [#515](https://github.com/kazupon/vue-i18n/issues/515) [#525](https://github.com/kazupon/vue-i18n/issues/525) [#515](https://github.com/kazupon/vue-i18n/issues/515) - - -### :star: New Features - -* **index:** add availableLocales (related issue [#193](https://github.com/kazupon/vue-i18n/issues/193), PR [#528](https://github.com/kazupon/vue-i18n/issues/528)) by [@exoego](https://github.com/exoego) ([8f75b1f](https://github.com/kazupon/vue-i18n/commit/8f75b1f)), closes [#193](https://github.com/kazupon/vue-i18n/issues/193) [#528](https://github.com/kazupon/vue-i18n/issues/528) [#193](https://github.com/kazupon/vue-i18n/issues/193) [#193](https://github.com/kazupon/vue-i18n/issues/193) [#193](https://github.com/kazupon/vue-i18n/issues/193) [#193](https://github.com/kazupon/vue-i18n/issues/193) - - -### :zap: Improvements - -* **flowtype:** Fix missing type declarations in flow type ([#529](https://github.com/kazupon/vue-i18n/issues/529)) by [@exoego](https://github.com/exoego) ([4173764](https://github.com/kazupon/vue-i18n/commit/4173764)), closes [#529](https://github.com/kazupon/vue-i18n/issues/529) - - - - -## [8.8.2](https://github.com/kazupon/vue-i18n/compare/v8.8.1...v8.8.2) (2019-02-17) - - -### :bug: Bug Fixes - -* **mixin:** fix memory leak ([135058d](https://github.com/kazupon/vue-i18n/commit/135058d)), closes [#514](https://github.com/kazupon/vue-i18n/issues/514) - - - - -## [8.8.1](https://github.com/kazupon/vue-i18n/compare/v8.8.0...v8.8.1) (2019-02-10) - - -### :bug: Bug Fixes - -* **index:** fixed [#478](https://github.com/kazupon/vue-i18n/issues/478) ([#518](https://github.com/kazupon/vue-i18n/issues/518)) by [@stroncium](https://github.com/stroncium) ([469edd9](https://github.com/kazupon/vue-i18n/commit/469edd9)), closes [#478](https://github.com/kazupon/vue-i18n/issues/478) [#518](https://github.com/kazupon/vue-i18n/issues/518) [#478](https://github.com/kazupon/vue-i18n/issues/478) - - -### :zap: Improvements - -* **flowtype:** update typings ([44e04e7](https://github.com/kazupon/vue-i18n/commit/44e04e7)) -* **typescript:** update typings ([dee35b9](https://github.com/kazupon/vue-i18n/commit/dee35b9)) - - - - -# [8.8.0](https://github.com/kazupon/vue-i18n/compare/v8.7.0...v8.8.0) (2019-01-29) - - -### :bug: Bug Fixes - -* **index:** fix flat path based key issue ([bed9c39](https://github.com/kazupon/vue-i18n/commit/bed9c39)), closes [#349](https://github.com/kazupon/vue-i18n/issues/349) -* **mixin:** fix beforeDestroy can not find this.$t ([#500](https://github.com/kazupon/vue-i18n/issues/500)) by [@masongzhi](https://github.com/masongzhi) ([311b8f3](https://github.com/kazupon/vue-i18n/commit/311b8f3)), closes [#500](https://github.com/kazupon/vue-i18n/issues/500) - - -### :zap: Improvements - -* **directive:** Fix typo on warning message ([#509](https://github.com/kazupon/vue-i18n/issues/509)) by [@kimuraz](https://github.com/kimuraz) ([e879024](https://github.com/kazupon/vue-i18n/commit/e879024)), closes [#509](https://github.com/kazupon/vue-i18n/issues/509) -* **index:** silence fallback warnings ([#510](https://github.com/kazupon/vue-i18n/issues/510)) by [@SzNagyMisu](https://github.com/SzNagyMisu) ([ddc0c79](https://github.com/kazupon/vue-i18n/commit/ddc0c79)), closes [#510](https://github.com/kazupon/vue-i18n/issues/510) [#139](https://github.com/kazupon/vue-i18n/issues/139) - - - - -# [8.7.0](https://github.com/kazupon/vue-i18n/compare/v8.6.0...v8.7.0) (2019-01-02) - - -### :zap: Improvements - -* **directive:** Preserve directive content ([#495](https://github.com/kazupon/vue-i18n/issues/495)) by [@bponomarenko](https://github.com/bponomarenko) ([c29edba](https://github.com/kazupon/vue-i18n/commit/c29edba)), closes [#495](https://github.com/kazupon/vue-i18n/issues/495) [#408](https://github.com/kazupon/vue-i18n/issues/408) [#408](https://github.com/kazupon/vue-i18n/issues/408) - - - - -# [8.6.0](https://github.com/kazupon/vue-i18n/compare/v8.5.0...v8.6.0) (2018-12-25) - - -### :bug: Bug Fixes - -* **pluralization:** inherit pluralization rules ⚠ ([#493](https://github.com/kazupon/vue-i18n/issues/493)) by [@Raiondesu](https://github.com/Raiondesu) ([7a23f32](https://github.com/kazupon/vue-i18n/commit/7a23f32)), closes [#493](https://github.com/kazupon/vue-i18n/issues/493) - - -### :zap: Improvements - -* **format:** Add the path as argument to the custom formatter ([#489](https://github.com/kazupon/vue-i18n/issues/489)) by [@Raiondesu](https://github.com/Raiondesu) ([b9437ea](https://github.com/kazupon/vue-i18n/commit/b9437ea)), closes [#489](https://github.com/kazupon/vue-i18n/issues/489) [#484](https://github.com/kazupon/vue-i18n/issues/484) [#484](https://github.com/kazupon/vue-i18n/issues/484) - - - - -# [8.5.0](https://github.com/kazupon/vue-i18n/compare/v8.4.0...v8.5.0) (2018-12-17) - - -### :bug: Bug Fixes - -* **index:** evaluate availabilities lazily (fix [#477](https://github.com/kazupon/vue-i18n/issues/477)) ([#483](https://github.com/kazupon/vue-i18n/issues/483)) by [@gamtiq](https://github.com/gamtiq) ([b66f02e](https://github.com/kazupon/vue-i18n/commit/b66f02e)), closes [#477](https://github.com/kazupon/vue-i18n/issues/477) [#483](https://github.com/kazupon/vue-i18n/issues/483) - - -### :zap: Improvements - -* **index:** Allow pluralization customization via constructor options (closes [#464](https://github.com/kazupon/vue-i18n/issues/464)) ([#482](https://github.com/kazupon/vue-i18n/issues/482)) by [@Raiondesu](https://github.com/Raiondesu) ([ef4b1a6](https://github.com/kazupon/vue-i18n/commit/ef4b1a6)), closes [#464](https://github.com/kazupon/vue-i18n/issues/464) [#482](https://github.com/kazupon/vue-i18n/issues/482) [#464](https://github.com/kazupon/vue-i18n/issues/464) [#464](https://github.com/kazupon/vue-i18n/issues/464) [#464](https://github.com/kazupon/vue-i18n/issues/464) [#464](https://github.com/kazupon/vue-i18n/issues/464) [#451](https://github.com/kazupon/vue-i18n/issues/451) -* **index:** make silentTranslationWarn work for dates and numbers too ([#481](https://github.com/kazupon/vue-i18n/issues/481)) by [@Raiondesu](https://github.com/Raiondesu) ([402092b](https://github.com/kazupon/vue-i18n/commit/402092b)), closes [#481](https://github.com/kazupon/vue-i18n/issues/481) -* **types:** typed autocomplete in date and number format options ([#485](https://github.com/kazupon/vue-i18n/issues/485)) by [@Raiondesu](https://github.com/Raiondesu) ([e2e5993](https://github.com/kazupon/vue-i18n/commit/e2e5993)), closes [#485](https://github.com/kazupon/vue-i18n/issues/485) - - - - -# [8.4.0](https://github.com/kazupon/vue-i18n/compare/v8.3.2...v8.4.0) (2018-11-30) - - -### :star: New Features - -* **index:** Add linked message formatting ([#467](https://github.com/kazupon/vue-i18n/issues/467)) by [@exoego](https://github.com/exoego) ([776b81b](https://github.com/kazupon/vue-i18n/commit/776b81b)), closes [#467](https://github.com/kazupon/vue-i18n/issues/467) - - - - -## [8.3.2](https://github.com/kazupon/vue-i18n/compare/v8.3.1...v8.3.2) (2018-11-16) - - -### :chart_with_upwards_trend: Performance Fixes - -* **index:** Optimize unnecessary capturing. ([#462](https://github.com/kazupon/vue-i18n/issues/462)) by [@exoego](https://github.com/exoego) ([116845e](https://github.com/kazupon/vue-i18n/commit/116845e)), closes [#462](https://github.com/kazupon/vue-i18n/issues/462) - - - - -## [8.3.1](https://github.com/kazupon/vue-i18n/compare/v8.3.0...v8.3.1) (2018-11-08) - - -### :bug: Bug Fixes - -* **directive:** fix cannnot update with v-t when had been changed locale message ([4895a2e](https://github.com/kazupon/vue-i18n/commit/4895a2e)), closes [#450](https://github.com/kazupon/vue-i18n/issues/450) -* **index:** fix merge bug ([1798490](https://github.com/kazupon/vue-i18n/commit/1798490)), closes [#458](https://github.com/kazupon/vue-i18n/issues/458) -* **missing:** fix vm argument passing ([dc48099](https://github.com/kazupon/vue-i18n/commit/dc48099)), closes [#453](https://github.com/kazupon/vue-i18n/issues/453) - - -### :zap: Improvements - -* Optimize path.js and format.js ([#456](https://github.com/kazupon/vue-i18n/issues/456)) by [@exoego](https://github.com/exoego) ([639453c](https://github.com/kazupon/vue-i18n/commit/639453c)), closes [#456](https://github.com/kazupon/vue-i18n/issues/456) - - - - -# [8.3.0](https://github.com/kazupon/vue-i18n/compare/v8.2.1...v8.3.0) (2018-10-29) - - -### :zap: Improvements - -* **pluralization:** Extendable pluralization by [@Raiondesu](https://github.com/Raiondesu) ([bbab90b](https://github.com/kazupon/vue-i18n/commit/bbab90b)) - - - - -## [8.2.1](https://github.com/kazupon/vue-i18n/compare/v8.2.0...v8.2.1) (2018-10-15) - - -### :bug: Bug Fixes - -* **extend:** fix TypeError: Cannot redefine property: $i18n ([#422](https://github.com/kazupon/vue-i18n/issues/422)) by [@HadiChen](https://github.com/HadiChen) ([cb19082](https://github.com/kazupon/vue-i18n/commit/cb19082)), closes [#422](https://github.com/kazupon/vue-i18n/issues/422) - - -### :zap: Improvements - -* **index:** Suppress some warnings in production: smaller min.js and performance gain. ([#441](https://github.com/kazupon/vue-i18n/issues/441)) by @ exoego ([43931f5](https://github.com/kazupon/vue-i18n/commit/43931f5)), closes [#441](https://github.com/kazupon/vue-i18n/issues/441) - - - - -# [8.2.0](https://github.com/kazupon/vue-i18n/compare/v8.1.1...v8.2.0) (2018-10-13) - - -### :bug: Bug Fixes - -* **index:** Add warning for circular reference in linked message ([#438](https://github.com/kazupon/vue-i18n/issues/438)) by [@exoego](https://github.com/exoego) ([7583485](https://github.com/kazupon/vue-i18n/commit/7583485)), closes [#438](https://github.com/kazupon/vue-i18n/issues/438) - - -### :zap: Improvements - -* **index:** Allow escaping link key like @:(foo.bar). ([#437](https://github.com/kazupon/vue-i18n/issues/437)) by [@exoego](https://github.com/exoego) ([acfc458](https://github.com/kazupon/vue-i18n/commit/acfc458)), closes [#437](https://github.com/kazupon/vue-i18n/issues/437) -* **index:** Pre-defined named arguments for Pluraization ([#440](https://github.com/kazupon/vue-i18n/issues/440)) by [@exoego](https://github.com/exoego) ([e84f0fb](https://github.com/kazupon/vue-i18n/commit/e84f0fb)), closes [#440](https://github.com/kazupon/vue-i18n/issues/440) -* **path:** Allow non-ascii chars including numbers. ([#436](https://github.com/kazupon/vue-i18n/issues/436)) by [@exoego](https://github.com/exoego) ([a556c58](https://github.com/kazupon/vue-i18n/commit/a556c58)), closes [#436](https://github.com/kazupon/vue-i18n/issues/436) - - - - -## [8.1.1](https://github.com/kazupon/vue-i18n/compare/v8.1.0...v8.1.1) (2018-10-12) - - -### :bug: Bug Fixes - -* **build:** fix rollup building issues ([1a1958a](https://github.com/kazupon/vue-i18n/commit/1a1958a)) -* **format:** Should warn as unknown if named format is not closed. ([#435](https://github.com/kazupon/vue-i18n/issues/435)) by [@exoego](https://github.com/exoego) ([d1f6ed0](https://github.com/kazupon/vue-i18n/commit/d1f6ed0)), closes [#435](https://github.com/kazupon/vue-i18n/issues/435) -* **install:** fix cannot redfine error ([6d5ec61](https://github.com/kazupon/vue-i18n/commit/6d5ec61)) - - -### :zap: Improvements - -* **package.json:** tree shaking optimization ([38948c5](https://github.com/kazupon/vue-i18n/commit/38948c5)) - - - - -# [8.1.0](https://github.com/kazupon/vue-i18n/compare/v8.0.0...v8.1.0) (2018-09-03) - - -### :bug: Bug Fixes - -* **install:** add support for Vue.extend vue-i18n instance ([#420](https://github.com/kazupon/vue-i18n/issues/420)) by [@jaredzhu1993](https://github.com/jaredzhu1993) ([a60ea8b](https://github.com/kazupon/vue-i18n/commit/a60ea8b)), closes [#420](https://github.com/kazupon/vue-i18n/issues/420) - - -### :zap: Improvements - -* **warnings:** make warning messages clearer ([#396](https://github.com/kazupon/vue-i18n/issues/396)) by [@kimuraz](https://github.com/kimuraz) ([79eee1b](https://github.com/kazupon/vue-i18n/commit/79eee1b)), closes [#396](https://github.com/kazupon/vue-i18n/issues/396) - - - - -# [8.0.0](https://github.com/kazupon/vue-i18n/compare/v7.8.1...v8.0.0) (2018-06-23) - - -### :boom: Breaking changes - -* **extend:** fix this context binding ([aa0e831](https://github.com/kazupon/vue-i18n/commit/aa0e831)), closes [#306](https://github.com/kazupon/vue-i18n/issues/306) [#286](https://github.com/kazupon/vue-i18n/issues/286) [#259](https://github.com/kazupon/vue-i18n/issues/259), revert [#260](https://github.com/kazupon/vue-i18n/issues/260) - -Note that you need to guarantee this context equal to component instance in lifecycle methods (e.g. in `data` options, `const $t = this.$t.bind(this)`). - -```js -export default { - data () { - const $t = this.$t.bind(this) - return { msg: $t('msg') } - } -} -``` - -see the [API docs](https://kazupon.github.io/vue-i18n/api/) - -### :bug: Bug Fixes - -* bug(directive): fix guard checking at unbind ([c74888c](https://github.com/kazupon/vue-i18n/commit/c74888c)), closes [#340](https://github.com/kazupon/vue-i18n/issues/340) - - -### NOTE - -* extend: - - - - -## [7.8.1](https://github.com/kazupon/vue-i18n/compare/v7.8.0...v7.8.1) (2018-06-18) - - -### :bug: Bug Fixes - -* **directive:** fix cannot unbind bug ([105888d](https://github.com/kazupon/vue-i18n/commit/105888d)), closes [#377](https://github.com/kazupon/vue-i18n/issues/377) - - - - -# [7.8.0](https://github.com/kazupon/vue-i18n/compare/v7.7.0...v7.8.0) (2018-06-01) - - -### :zap: Improvements - -* **typescript:** add type exportings ([a7cb8da](https://github.com/kazupon/vue-i18n/commit/a7cb8da)) - - - - -# [7.7.0](https://github.com/kazupon/vue-i18n/compare/v7.6.0...v7.7.0) (2018-05-20) - - -### :zap: Improvements - -* **index:** resource reactivity ([887a137](https://github.com/kazupon/vue-i18n/commit/887a137)), closes [#253](https://github.com/kazupon/vue-i18n/issues/253) -* **typescript:** Fix typings in components ([#344](https://github.com/kazupon/vue-i18n/issues/344)) by [@Demivan](https://github.com/Demivan) ([2402893](https://github.com/kazupon/vue-i18n/commit/2402893)), closes [#344](https://github.com/kazupon/vue-i18n/issues/344) - - - - -# [7.6.0](https://github.com/kazupon/vue-i18n/compare/v7.5.0...v7.6.0) (2018-03-13) - - -### :zap: Improvements - -* **index:** support retunable missing handler ([#256](https://github.com/kazupon/vue-i18n/issues/256)) by [@houd1ni](https://github.com/houd1ni) ([9fbe467](https://github.com/kazupon/vue-i18n/commit/9fbe467)) -* **typescript:** update TranslateResult type interface ([dffc678](https://github.com/kazupon/vue-i18n/commit/dffc678)) - - - - -# [7.5.0](https://github.com/kazupon/vue-i18n/compare/v7.4.2...v7.5.0) (2018-03-11) - - -### :star: New Features - -* **directive:** Add pluralization feature to directive ([#304](https://github.com/kazupon/vue-i18n/issues/304)) by [@SirLamer](https://github.com/SirLamer) ([8378859](https://github.com/kazupon/vue-i18n/commit/8378859)) - - -### :zap: Improvements - -* **flow:** update TranslateResult type interface ([59f4658](https://github.com/kazupon/vue-i18n/commit/59f4658)) -* **index:** support object localization ([#311](https://github.com/kazupon/vue-i18n/issues/311)) by [@manniL](https://github.com/manniL) ([99e5006](https://github.com/kazupon/vue-i18n/commit/99e5006)) -* **missing:** Add interpolation values to missing handler ([#308](https://github.com/kazupon/vue-i18n/issues/308)) by [@sebwas](https://github.com/sebwas) ([b912d8a](https://github.com/kazupon/vue-i18n/commit/b912d8a)) -* **numberformat:** Explicit number format options ([#305](https://github.com/kazupon/vue-i18n/issues/305)) by [@bponomarenko](https://github.com/bponomarenko) ([aa07450](https://github.com/kazupon/vue-i18n/commit/aa07450)) - - - - -## [7.4.2](https://github.com/kazupon/vue-i18n/compare/v7.4.1...v7.4.2) (2018-02-01) - - -### :zap: Improvements - -* **index:** Fixes global auto installation ([#291](https://github.com/kazupon/vue-i18n/issues/291)) by [@emileber](https://github.com/emileber) ([2f016ff](https://github.com/kazupon/vue-i18n/commit/2f016ff)), closes [#291](https://github.com/kazupon/vue-i18n/issues/291) - - - - -## [7.4.1](https://github.com/kazupon/vue-i18n/compare/v7.4.0...v7.4.1) (2018-01-25) - - -### :bug: Bug Fixes - -* fix cannot react ([2a8ea1c](https://github.com/kazupon/vue-i18n/commit/2a8ea1c)), closes [#261](https://github.com/kazupon/vue-i18n/issues/261) - - -### :zap: Improvements - -* **formatter:** interpolate messages without values ([#282](https://github.com/kazupon/vue-i18n/issues/282)) by [@cb8](https://github.com/cb8) ([b792ce2](https://github.com/kazupon/vue-i18n/commit/b792ce2)) - - - - -# [7.4.0](https://github.com/kazupon/vue-i18n/compare/v7.3.4...v7.4.0) (2018-01-10) - - -### :star: New Features - -* **typescript:** Allow module augmentation ([#273](https://github.com/kazupon/vue-i18n/issues/273)) by [@CKGrafico](https://github.com/CKGrafico) ([4371344](https://github.com/kazupon/vue-i18n/commit/4371344)) - - - - -## [7.3.4](https://github.com/kazupon/vue-i18n/compare/v7.3.3...v7.3.4) (2018-01-07) - - -### :bug: Bug Fixes - -* **formatter:** Inherit formatter ([#269](https://github.com/kazupon/vue-i18n/issues/269)) by [@podkot](https://github.com/podkot) ([26a33ad](https://github.com/kazupon/vue-i18n/commit/26a33ad)) - - - - -## [7.3.3](https://github.com/kazupon/vue-i18n/compare/v7.3.2...v7.3.3) (2017-12-19) - - -### :bug: Bug Fixes - -* **extend:** Fix this not found [#259](https://github.com/kazupon/vue-i18n/issues/259) ([#260](https://github.com/kazupon/vue-i18n/issues/260)) by [@lzxb](https://github.com/lzxb) ([c29007e](https://github.com/kazupon/vue-i18n/commit/c29007e)), closes [#259](https://github.com/kazupon/vue-i18n/issues/259) [#260](https://github.com/kazupon/vue-i18n/issues/260) -* **types:** fix using old export ([#263](https://github.com/kazupon/vue-i18n/issues/263)) by [@jmigual](https://github.com/jmigual) ([b295fee](https://github.com/kazupon/vue-i18n/commit/b295fee)), closes [#263](https://github.com/kazupon/vue-i18n/issues/263) - - - -## [7.3.2](https://github.com/kazupon/vue-i18n/compare/v7.3.1...v7.3.2) (2017-10-19) - - -### :zap: Improvements - -* **typescript:** fix import problem of vue2.5 because of the types update ([#238](https://github.com/kazupon/vue-i18n/issues/238)) by [@peterchealse](https://github.com/peterchealse) ([cb98347](https://github.com/kazupon/vue-i18n/commit/cb98347)), closes [#238](https://github.com/kazupon/vue-i18n/issues/238) - - - - -## [7.3.1](https://github.com/kazupon/vue-i18n/compare/v7.3.0...v7.3.1) (2017-10-04) - - -### :bug: Bug Fixes - -* **directive:** fix cannot locale reactivity ([e1fc12e](https://github.com/kazupon/vue-i18n/commit/e1fc12e)), closes [#227](https://github.com/kazupon/vue-i18n/issues/227) - - - - -# [7.3.0](https://github.com/kazupon/vue-i18n/compare/v7.2.0...v7.3.0) (2017-09-22) - - -### :star: New Features - -* **directives:** support v-t custom directive (welcome back!) ([af9a2e7](https://github.com/kazupon/vue-i18n/commit/af9a2e7)) - - -### :up: Updates - -* **typing:** fix flowtype ([fa06f44](https://github.com/kazupon/vue-i18n/commit/fa06f44)) - - - - -# [7.2.0](https://github.com/kazupon/vue-i18n/compare/v7.1.2...v7.2.0) (2017-08-28) - - -### :star: New Features - -* **interpolation:** list formatting refactor and places/place feature ([#218](https://github.com/kazupon/vue-i18n/issues/218)) by [@myst729](https://github.com/myst729) ([0f0f3ff](https://github.com/kazupon/vue-i18n/commit/0f0f3ff)) - - - - -## [7.1.2](https://github.com/kazupon/vue-i18n/compare/v7.1.1...v7.1.2) (2017-08-25) - - -### :zap: Improvements - -* **interpolation:** skip non-element VNode in interpolation ([#211](https://github.com/kazupon/vue-i18n/issues/211)) by [@myst729](https://github.com/myst729) ([6be1756](https://github.com/kazupon/vue-i18n/commit/6be1756)) - - - - -## [7.1.1](https://github.com/kazupon/vue-i18n/compare/v7.1.0...v7.1.1) (2017-08-03) - - -### :bug: Bug Fixes - -* **mixin:** fix cannot setup VueI18n instance ([13585a4](https://github.com/kazupon/vue-i18n/commit/13585a4)), closes [#203](https://github.com/kazupon/vue-i18n/issues/203) - - - - -# [7.1.0](https://github.com/kazupon/vue-i18n/compare/v7.0.5...v7.1.0) (2017-07-30) - - -### :zap: Improvements - -* **custom-block:** support multiple custom blocks ([ab955a5](https://github.com/kazupon/vue-i18n/commit/ab955a5)), closes [#189](https://github.com/kazupon/vue-i18n/issues/189) - - - - -## [7.0.5](https://github.com/kazupon/vue-i18n/compare/v7.0.4...v7.0.5) (2017-07-08) - - -### :bug: Bug Fixes - -* **format:** fix cannot collectly parse percent ([fc71eda](https://github.com/kazupon/vue-i18n/commit/fc71eda)), closes [#191](https://github.com/kazupon/vue-i18n/issues/191) - - - - -## [7.0.4](https://github.com/kazupon/vue-i18n/compare/v7.0.3...v7.0.4) (2017-07-01) - - -### :bug: Bug Fixes - -* **link:** fix ie traverse custom Array.prototype method ([#188](https://github.com/kazupon/vue-i18n/issues/188)) by [@632781460](https://github.com/632781460) ([d3b308b](https://github.com/kazupon/vue-i18n/commit/d3b308b)), closes [#188](https://github.com/kazupon/vue-i18n/issues/188) - - -### :chart_with_upwards_trend: Performance Fixes - -* fix blocking at beforeDestroy ([570b215](https://github.com/kazupon/vue-i18n/commit/570b215)), closes [#187](https://github.com/kazupon/vue-i18n/issues/187) - - - - -## [7.0.3](https://github.com/kazupon/vue-i18n/compare/v7.0.2...v7.0.3) (2017-06-13) - - -### :bug: Bug Fixes - -* **fallback:** fix cannot fallabck localization ([694e6f2](https://github.com/kazupon/vue-i18n/commit/694e6f2)), closes [#176](https://github.com/kazupon/vue-i18n/issues/176) -* **fallback:** fix fallback locale issue ([d9ceddc](https://github.com/kazupon/vue-i18n/commit/d9ceddc)), closes [#174](https://github.com/kazupon/vue-i18n/issues/174) -* **linked:** fix cannot fallback linked localization ([0c572f3](https://github.com/kazupon/vue-i18n/commit/0c572f3)), closes [#172](https://github.com/kazupon/vue-i18n/issues/172) - - - - -## [7.0.2](https://github.com/kazupon/vue-i18n/compare/v7.0.1...v7.0.2) (2017-06-10) - - -### :bug: Bug Fixes - -* **sfc:** fix cannot parse custom block locale messages ([32eb3a7](https://github.com/kazupon/vue-i18n/commit/32eb3a7)), closes [#173](https://github.com/kazupon/vue-i18n/issues/173) - - - - -## [7.0.1](https://github.com/kazupon/vue-i18n/compare/v7.0.0...v7.0.1) (2017-06-04) - - -### :bug: Bug Fixes - -* fix cannat single file component translation ([687d406](https://github.com/kazupon/vue-i18n/commit/687d406)), closes [#169](https://github.com/kazupon/vue-i18n/issues/169) -* fix cannnot resolve linked localization with component interpolation ([c973619](https://github.com/kazupon/vue-i18n/commit/c973619)), closes [#171](https://github.com/kazupon/vue-i18n/issues/171) -* fix datetime and number fallback localization ([be9e1bd](https://github.com/kazupon/vue-i18n/commit/be9e1bd)), closes [#168](https://github.com/kazupon/vue-i18n/issues/168) -* fix linked translation with using hyphen or underscore keypath ([6e9f151](https://github.com/kazupon/vue-i18n/commit/6e9f151)), closes [#170](https://github.com/kazupon/vue-i18n/issues/170) - - - -# [7.0.0](https://github.com/kazupon/vue-i18n/compare/v7.0.0-rc.1...v7.0.0) (2017-05-29) - -:tada: :tada: :tada: - -See the [docs](https://kazupon.github.io/vue-i18n/en/) - - -### :star: New Features - -* **datetime localization:** - * [documentation](https://github.com/kazupon/vue-i18n/blob/dev/gitbook/en/datetime.md) - * [example](https://github.com/kazupon/vue-i18n/tree/dev/examples/datetime) -* **number localization:** - * [documentation](https://github.com/kazupon/vue-i18n/blob/dev/gitbook/en/number.md) - * [example](https://github.com/kazupon/vue-i18n/tree/dev/examples/number) -* **component interpolation:** - * [documentation](https://github.com/kazupon/vue-i18n/blob/dev/gitbook/en/interpolation.md) - * [example](https://github.com/kazupon/vue-i18n/tree/dev/examples/interpolation) -* **typescript:** - * [type definitions](https://github.com/kazupon/vue-i18n/blob/dev/types/index.d.ts) - - -### :chart_with_upwards_trend: Performance Fixes - -* fix translation performance issue ([6032a51](https://github.com/kazupon/vue-i18n/commit/6032a51)) - - -### :zap: Improvements - -* **path:** tweak for ssr - - -### :boom: Breaking changes - -* **format:** re-impelement formatter -* **formatter:** change method nam -* **flowtype:** fix locale message related type changing and remove underscore type - - -### :bug: Bug Fixes - -* **examples:** fix ssr demo ([059034f](https://github.com/kazupon/vue-i18n/commit/059034f)) -* **pluralization:** fix default choice ([240cfed](https://github.com/kazupon/vue-i18n/commit/240cfed)) - - - -# [7.0.0-rc.1](https://github.com/kazupon/vue-i18n/compare/v7.0.0-beta.4...v7.0.0-rc.1) (2017-05-26) - - -### :chart_with_upwards_trend: Performance Fixes - -* fix translation performance issue ([6032a51](https://github.com/kazupon/vue-i18n/commit/6032a51)), closes [#165](https://github.com/kazupon/vue-i18n/issues/165) - - -### :up: Updates - -* **flowtype:** remove unneccesary type ([eb60156](https://github.com/kazupon/vue-i18n/commit/eb60156)) - - - - -# [7.0.0-beta.4](https://github.com/kazupon/vue-i18n/compare/v7.0.0-beta.3...v7.0.0-beta.4) (2017-05-23) - - -### :bug: Bug Fixes - -* **pluralization:** fix default choice ([240cfed](https://github.com/kazupon/vue-i18n/commit/240cfed)), closes [#164](https://github.com/kazupon/vue-i18n/issues/164) - - - - -# [7.0.0-beta.3](https://github.com/kazupon/vue-i18n/compare/v7.0.0-beta.2...v7.0.0-beta.3) (2017-05-15) - -### :up: Updates - -* bring back from bug fix ([95be4ea](https://github.com/kazupon/vue-i18n/commit/95be4ea)) - - - -# [7.0.0-beta.2](https://github.com/kazupon/vue-i18n/compare/v7.0.0-beta.1...v7.0.0-beta.2) (2017-05-14) - - -### :zap: Improvements - -* **path:** tweak for ssr ([eb21921](https://github.com/kazupon/vue-i18n/commit/eb21921)) -* **typescript:** change custom formatter method name ([c5f043f](https://github.com/kazupon/vue-i18n/commit/c5f043f)) - - - - -# [7.0.0-beta.1](https://github.com/kazupon/vue-i18n/compare/v6.1.1...v7.0.0-beta.1) (2017-05-11) - -### :star: New Features - -* **datetime localization:** add datetime localization ([3282075](https://github.com/kazupon/vue-i18n/commit/3282075)) - * [documentation](https://github.com/kazupon/vue-i18n/blob/dev/gitbook/en/datetime.md) - * [example](https://github.com/kazupon/vue-i18n/tree/dev/examples/datetime) -* **number localization:** add number localization ([87ee7b3](https://github.com/kazupon/vue-i18n/commit/87ee7b3)) - * [documentation](https://github.com/kazupon/vue-i18n/blob/dev/gitbook/en/number.md) - * [example](https://github.com/kazupon/vue-i18n/tree/dev/examples/number) -* **component interpolation:** ([23f7d34](https://github.com/kazupon/vue-i18n/commit/23f7d34)), closes [#145](https://github.com/kazupon/vue-i18n/issues/145) [#144](https://github.com/kazupon/vue-i18n/issues/144) [#37](https://github.com/kazupon/vue-i18n/issues/37) - * [documentation](https://github.com/kazupon/vue-i18n/blob/dev/gitbook/en/interpolation.md) - * [example](https://github.com/kazupon/vue-i18n/tree/dev/examples/interpolation) -* **typescript:** add TypeScript type definitions ([#161](https://github.com/kazupon/vue-i18n/issues/161)) by [@aicest](https://github.com/aicest) ([61cebca](https://github.com/kazupon/vue-i18n/commit/61cebca)) - * [type definitions](https://github.com/kazupon/vue-i18n/blob/dev/types/index.d.ts) - - -### :boom: Breaking changes - -* **format:** re-impelement formatter ([a8c046d](https://github.com/kazupon/vue-i18n/commit/a8c046d)) -* **formatter:** change method name ([6eed51c](https://github.com/kazupon/vue-i18n/commit/6eed51c)) -* **flowtype:** fix locale message related type changing ([c30d576](https://github.com/kazupon/vue-i18n/commit/c30d576)) - - -### :bug: Bug Fixes - -* **examples:** fix ssr demo ([059034f](https://github.com/kazupon/vue-i18n/commit/059034f)), closes [#151](https://github.com/kazupon/vue-i18n/issues/151) - - - -## [6.1.3](https://github.com/kazupon/vue-i18n/compare/v6.1.1...v6.1.3) (2017-05-15) - - -### :bug: Bug Fixes - -* fix memory leaks ([95be4ea](https://github.com/kazupon/vue-i18n/commit/95be4ea)), closes [#162](https://github.com/kazupon/vue-i18n/issues/162) - - - - -## [6.1.2](https://github.com/kazupon/vue-i18n/compare/v6.1.1...v6.1.2) (2017-05-15) - - - -## [6.1.1](https://github.com/kazupon/vue-i18n/compare/v6.1.0...v6.1.1) (2017-04-19) - - -### :bug: Bug Fixes - -* **te:** Fix `te()` that always uses `this.locale`, even when `locale` supplied ([#147](https://github.com/kazupon/vue-i18n/issues/147)) by [@aicest](https://github.com/aicest) ([bf15eeb](https://github.com/kazupon/vue-i18n/commit/bf15eeb)), closes [#147](https://github.com/kazupon/vue-i18n/issues/147) - - - - -# [6.1.0](https://github.com/kazupon/vue-i18n/compare/v6.0.0...v6.1.0) (2017-04-14) - - -### :star: New Features - -* **api:** add 'mergeLocaleMessage' method ([ef21621](https://github.com/kazupon/vue-i18n/commit/ef21621)), closes [#131](https://github.com/kazupon/vue-i18n/issues/131) -* **silent:** add silent translation missing option ([29b3a17](https://github.com/kazupon/vue-i18n/commit/29b3a17)), closes [#139](https://github.com/kazupon/vue-i18n/issues/139) - - -### :zap: Improvements - -* change to method from computed property ([9135a59](https://github.com/kazupon/vue-i18n/commit/9135a59)), closes [#141](https://github.com/kazupon/vue-i18n/issues/141) - - - - -# [6.0.0](https://github.com/kazupon/vue-i18n/compare/v6.0.0-beta.1...v6.0.0) (2017-04-05) - -:tada: :tada: :tada: - -See the [docs](https://kazupon.github.io/vue-i18n/en/) - -### :zap: Improvements - -- Server-Side Rendering: [example](https://github.com/kazupon/vue-i18n/tree/dev/examples/ssr) -- Custom formatter: [example](https://github.com/kazupon/vue-i18n/tree/dev/examples/formatting/custom) - - -### :star: NEW Features - -- Single File Components: [example](https://github.com/kazupon/vue-i18n/tree/dev/examples/sfc) - - -### :boom: Breaking changes - -- API -- Dynamic locale DEPRECATED - - - -# [6.0.0-beta.1](https://github.com/kazupon/vue-i18n/compare/v6.0.0-alpha.6...v6.0.0-beta.1) (2017-03-22) - - -### :boom: Breaking changes - -* change `fallbackRoot` and `sync` option default `true` value ([0890b44](https://github.com/kazupon/vue-i18n/commit/0890b44)) -* remove messages settter, and add getLocaleMessage API ([0f0914d](https://github.com/kazupon/vue-i18n/commit/0f0914d)) - - -### :bug: Bug Fixes - -* **mixin:** fix computed props errors ([a6b7e37](https://github.com/kazupon/vue-i18n/commit/a6b7e37)) - - -### :up: Updates - -* **flowtype:** argument names ([cf14425](https://github.com/kazupon/vue-i18n/commit/cf14425)) - - -### :zap: Improvements - -* **fallbackLocale:** support reactivity ([ed758be](https://github.com/kazupon/vue-i18n/commit/ed758be)) -* **warn:** suppress warning messages for production ([6e417d2](https://github.com/kazupon/vue-i18n/commit/6e417d2)) - - - - -# [6.0.0-alpha.6](https://github.com/kazupon/vue-i18n/compare/v6.0.0-alpha.5...v6.0.0-alpha.6) (2017-03-16) - - -### :star: New Features - -* add 'setLocaleMessage' API ([8b71eda](https://github.com/kazupon/vue-i18n/commit/8b71eda)) - - - - -# [6.0.0-alpha.5](https://github.com/kazupon/vue-i18n/compare/v6.0.0-alpha.3...v6.0.0-alpha.5) (2017-03-11) - - -### :bug: Bug Fixes - -* **mixin:** fix cannot create VueI18n instance error for minify production ([7eeb29f](https://github.com/kazupon/vue-i18n/commit/7eeb29f)) - - - - -# [6.0.0-alpha.4](https://github.com/kazupon/vue-i18n/compare/v6.0.0-alpha.3...v6.0.0-alpha.4) (2017-03-11) - - - - -# [6.0.0-alpha.3](https://github.com/kazupon/vue-i18n/compare/v6.0.0-alpha.2...v6.0.0-alpha.3) (2017-03-08) - - -### :star: New Features - -* add `sync` option ([5c46c07](https://github.com/kazupon/vue-i18n/commit/5c46c07)) - - -### :zap: Improvements - -* **mixin:** add error throwings and a warning ([0e4ac39](https://github.com/kazupon/vue-i18n/commit/0e4ac39)) - - - - -# [6.0.0-alpha.2](https://github.com/kazupon/vue-i18n/compare/v6.0.0-alpha.1...v6.0.0-alpha.2) (2017-02-27) - - -### :zap: Improvements - -* **mixin:** release i18n instance ([cc362a3](https://github.com/kazupon/vue-i18n/commit/cc362a3)) -* **vue:** support vue 2.2 ([5e7bf5e](https://github.com/kazupon/vue-i18n/commit/5e7bf5e)) - - - - -# [6.0.0-alpha.1](https://github.com/kazupon/vue-i18n/compare/v5.0.2...v6.0.0-alpha.1) (2017-02-23) - -This is the first release of 6.0. -In this version, we are some big breaking changes. - -- Recommended for: experiments, prototypes, upgrading small, non-critical apps -- **NOT** recommended for: production use, upgrading production apps - -:warning: Documentation still needs to be worked on. And also, we might change some APIs and features. - -In the examples, please refer to this [examples](https://github.com/kazupon/vue-i18n/tree/dev/examples) directory. - - -## Improvements -- Server-Side Rendering: [example](https://github.com/kazupon/vue-i18n/tree/dev/examples/formatting/custom) -- Custom formatter: [example](https://github.com/kazupon/vue-i18n/tree/dev/examples/ssr) - -## Features -- Formatting support -- Pluralization support -- Locale and KeyPath Syntax support -- Linked translation support -- Fallback translation support -- Component locale support -- Dynamic locale DEPRECATED -- Hot reload support - -## API - -### Global Config -- Vue.config.lang DEPRECATED, use VueI18n constructor `locale` option, or VueI18n#locale -- Vue.config.fallbackLang DEPRECATED, use VueI18n constructor `fallbackLocale` option, or VueI18n#fallbackLocale -- Vue.config.missingHandler DEPRECATED, use VueI18n constructor `missing` option, or VueI18n#missing -- Vue.config.i18nFormatter DEPRECATED, use VueI18n constructor `formatter` option, or VueI18n#formatter - -### Global Method -- Vue.locale DEPRECATED, use VueI18n constructor `messages` option, or VueI18n#messages -- Vue.t DEPRECATED, use VueI18n#t -- Vue.tc DEPRECATED, use VueI18n#tc -- Vue.te DEPRECATED, use VueI18n#te - -### Constructor Options -- locales DEPRECATED, use `messages` of `i18n` option (e.g `{ i18n: { messaes: ... } }`) - -### Instance Properties -- $lang DEPRECATED, use `locale` of Vue instance property `$i18n` (e.g `vm.$i18n.locale = 'en'`) - -### VueI18n class NEW -- constructor options: See the [`I18nOptions` type](https://github.com/kazupon/vue-i18n/blob/dev/decls/i18n.js#L7-L15) of flowtype. -- methods / properties: See the [`I18n` interface definition](https://github.com/kazupon/vue-i18n/blob/dev/decls/i18n.js#L17-L33) of flowtype. - - - -## [5.0.2](https://github.com/kazupon/vue-i18n/compare/v5.0.1...v5.0.2) (2017-02-18) - - -### :zap: Improvements - -* **npm:** revert node >= 6.0 engine restriction ([#110](https://github.com/kazupon/vue-i18n/issues/110)) by [@syxolk](https://github.com/syxolk) ([92b1bd1](https://github.com/kazupon/vue-i18n/commit/92b1bd1)), closes [#109](https://github.com/kazupon/vue-i18n/issues/109) - - - - -## [5.0.1](https://github.com/kazupon/vue-i18n/compare/v5.0.0...v5.0.1) (2017-02-16) - - -### :zap: Improvements - -* **asset:** update locale reactivity setting ([b42fd9a](https://github.com/kazupon/vue-i18n/commit/b42fd9a)) - - - - -# [5.0.0](https://github.com/kazupon/vue-i18n/compare/v4.10.0...v5.0.0) (2017-02-04) - - -### :boom: Breaking changes - -* drop vue 1.0 supporting ([4da26cf](https://github.com/kazupon/vue-i18n/commit/4da26cf)), closes [#105](https://github.com/kazupon/vue-i18n/issues/105) - - - - -# [4.10.0](https://github.com/kazupon/vue-i18n/compare/v4.9.0...v4.10.0) (2017-01-01) - - -### :star: New Features - -* `$lang` property for all component ([#99](https://github.com/kazupon/vue-i18n/issues/99)) by [@albert](https://github.com/albert)-zhang ([5ed69f8](https://github.com/kazupon/vue-i18n/commit/5ed69f8)) - - -### :up: Updates - -* **override:** change langVM keeping variable name ([3ec1bb2](https://github.com/kazupon/vue-i18n/commit/3ec1bb2)) - - - - -# [4.9.0](https://github.com/kazupon/vue-i18n/compare/v4.8.0...v4.9.0) (2016-12-17) - - -### :bug: Bug Fixes - -* **path:** fix nested key translation ([e15ead4](https://github.com/kazupon/vue-i18n/commit/e15ead4)), closes [#97](https://github.com/kazupon/vue-i18n/issues/97) - - -### :star: New Features - -* add globally locale checking ([4cac8b9](https://github.com/kazupon/vue-i18n/commit/4cac8b9)) -* locale checking ([#98](https://github.com/kazupon/vue-i18n/issues/98)) by [@long](https://github.com/long)-long-float ([0bc0a6b](https://github.com/kazupon/vue-i18n/commit/0bc0a6b)) - - - -# [4.8.0](https://github.com/kazupon/vue-i18n/compare/v4.7.4...v4.8.0) (2016-12-08) - - -### :zap: Improvements - -* **extend:** disable no translation warning when set missingHandler ([168a97c](https://github.com/kazupon/vue-i18n/commit/168a97c)), closes [#96](https://github.com/kazupon/vue-i18n/issues/96) - - - - -## [4.7.4](https://github.com/kazupon/vue-i18n/compare/v4.7.3...v4.7.4) (2016-11-29) - - -### :bug: Bug Fixes - -* **extend:** fix interpolate error [@tariq86](https://github.com/tariq86) ([5f24e17](https://github.com/kazupon/vue-i18n/commit/5f24e17)) - - - - -## [4.7.3](https://github.com/kazupon/vue-i18n/compare/v4.7.2...v4.7.3) (2016-11-24) - - -### :bug: Bug Fixes - -* **extend:** fix array local ([35c268a](https://github.com/kazupon/vue-i18n/commit/35c268a)), closes [#91](https://github.com/kazupon/vue-i18n/issues/91) [#59](https://github.com/kazupon/vue-i18n/issues/59) - - - - -## [4.7.2](https://github.com/kazupon/vue-i18n/compare/v4.7.1...v4.7.2) (2016-11-19) - - -### :bug: Bug Fixes - -* **observer:** fix dep undefined error ([#88](https://github.com/kazupon/vue-i18n/issues/88)) by [@fandaa](https://github.com/fandaa) ([724974e](https://github.com/kazupon/vue-i18n/commit/724974e)), closes [#88](https://github.com/kazupon/vue-i18n/issues/88) - - -### :zap: Improvements - -* **extend:** support translate empty string ([#86](https://github.com/kazupon/vue-i18n/issues/86)) by [@QingWei](https://github.com/QingWei)-Li ([8e6d154](https://github.com/kazupon/vue-i18n/commit/8e6d154)) - - - - -## [4.7.1](https://github.com/kazupon/vue-i18n/compare/v4.7.0...v4.7.1) (2016-10-29) - - -### :bug: Bug Fixes - -* **interpolate:** named formatting: use name if value is missing ([#77](https://github.com/kazupon/vue-i18n/issues/77)) by [@SebastianS90](https://github.com/SebastianS90) ([a0cc343](https://github.com/kazupon/vue-i18n/commit/a0cc343)) - - -### :zap: Improvements - -* **named:** using default use nmae when value is missing ([c34e8f1](https://github.com/kazupon/vue-i18n/commit/c34e8f1)) - - - - -# [4.7.0](https://github.com/kazupon/vue-i18n/compare/v4.6.0...v4.7.0) (2016-10-28) - - -### :star: New Features - -* hot reloading ([#71](https://github.com/kazupon/vue-i18n/issues/71)) by [@gglnx](https://github.com/gglnx) ([7bb94ac](https://github.com/kazupon/vue-i18n/commit/7bb94ac)) - - -### :zap: Improvements - -* **pluralization:** zero choice ([#70](https://github.com/kazupon/vue-i18n/issues/70)) by [@sebwas](https://github.com/sebwas) ([5f0004f](https://github.com/kazupon/vue-i18n/commit/5f0004f)) - - - - -# [4.6.0](https://github.com/kazupon/vue-i18n/compare/v4.5.0...v4.6.0) (2016-09-24) - - -### :star: New Features - -* **config:** custom message formatter ([#57](https://github.com/kazupon/vue-i18n/issues/57)) by [@jvmccarthy](https://github.com/jvmccarthy) ([2748eb4](https://github.com/kazupon/vue-i18n/commit/2748eb4)) - - - - -# [4.5.0](https://github.com/kazupon/vue-i18n/compare/v4.4.1...v4.5.0) (2016-09-15) - - -### :star: New Features - -* **config:** translation miss capturing configration ([aca0ed6](https://github.com/kazupon/vue-i18n/commit/aca0ed6)), closes [#54](https://github.com/kazupon/vue-i18n/issues/54) - - - - -## [4.4.1](https://github.com/kazupon/vue-i18n/compare/v4.4.0...v4.4.1) (2016-09-10) - - -### :zap: Improvements - -* **translate:** support hyphenated key ([#52](https://github.com/kazupon/vue-i18n/issues/52)) by [@tariq86](https://github.com/tariq86) ([a40acfd](https://github.com/kazupon/vue-i18n/commit/a40acfd)) - - - - -# [4.4.0](https://github.com/kazupon/vue-i18n/compare/v4.3.1...v4.4.0) (2016-08-29) - - -### :star: New Features - -* add linked translations ([#50](https://github.com/kazupon/vue-i18n/issues/50)) by [@mmochetti](https://github.com/mmochetti) ([f7ae073](https://github.com/kazupon/vue-i18n/commit/f7ae073)) - - - - -## [4.3.1](https://github.com/kazupon/vue-i18n/compare/v4.3.0...v4.3.1) (2016-08-26) - - -### :bug: Bug Fixes - -* **npm:** fix installing bug ([57e66aa](https://github.com/kazupon/vue-i18n/commit/57e66aa)), closes [#46](https://github.com/kazupon/vue-i18n/issues/46) - - - - -# [4.3.0](https://github.com/kazupon/vue-i18n/compare/v4.2.3...v4.3.0) (2016-08-26) - - -### :star: New Features - -* add pluralization ([#44](https://github.com/kazupon/vue-i18n/issues/44)) by [@mmochetti](https://github.com/mmochetti) ([b5b84d8](https://github.com/kazupon/vue-i18n/commit/b5b84d8)) - - - - -## [4.2.3](https://github.com/kazupon/vue-i18n/compare/v4.2.2...v4.2.3) (2016-08-23) - - -### :chart_with_upwards_trend: Performance Fixes - -* improve re-rendering cost when change the lang ([0707338](https://github.com/kazupon/vue-i18n/commit/0707338)) - - - - -## [4.2.2](https://github.com/kazupon/vue-i18n/compare/v4.2.1...v4.2.2) (2016-08-15) - - -### :bug: Bug Fixes - -* **path:** fix array path syntax error ([bc9dbee](https://github.com/kazupon/vue-i18n/commit/bc9dbee)), closes [#42](https://github.com/kazupon/vue-i18n/issues/42) [#43](https://github.com/kazupon/vue-i18n/issues/43) - - - - -## [4.2.1](https://github.com/kazupon/vue-i18n/compare/v4.2.0...v4.2.1) (2016-08-13) - - -### :zap: Improvements - -* **translate:** fallback translation warning ([5f6b271](https://github.com/kazupon/vue-i18n/commit/5f6b271)) - - - - -# [4.2.0](https://github.com/kazupon/vue-i18n/compare/v4.1.0...v4.2.0) (2016-08-12) - - -### :chart_with_upwards_trend: Performance Fixes - -* **format:** use hasOwn function of Vue.util ([a8a19a0](https://github.com/kazupon/vue-i18n/commit/a8a19a0)) - - -### :star: New Features - -* **fallback:** add fallback translation feature ([1d1f0f2](https://github.com/kazupon/vue-i18n/commit/1d1f0f2)), closes [#36](https://github.com/kazupon/vue-i18n/issues/36) - - - - -# [4.1.0](https://github.com/kazupon/vue-i18n/compare/v4.0.1...v4.1.0) (2016-07-25) - - -### :bug: Bug Fixes - -* **util:** fixed isArray reference errors ([0c6f6a0](https://github.com/kazupon/vue-i18n/commit/0c6f6a0)) - - -### :star: New Features - -* support vue 2.0.0.beta later ([0e1d2f7](https://github.com/kazupon/vue-i18n/commit/0e1d2f7)) - - - - -## [4.0.1](https://github.com/kazupon/vue-i18n/compare/v4.0.0...v4.0.1) (2016-06-06) - - -### :bug: Bug Fixes - -* **translate:** fix underscore named argument translate issue ([eeaf936](https://github.com/kazupon/vue-i18n/commit/eeaf936)) - - - - -# [4.0.0](https://github.com/kazupon/vue-i18n/compare/v3.1.1...v4.0.0) (2016-05-10) - - -### :zap: Improvements - -* support vue 2.0-pre-alpha ([f6517bc](https://github.com/kazupon/vue-i18n/commit/f6517bc)) - - - - -## [3.1.1](https://github.com/kazupon/vue-i18n/compare/v3.1.0...v3.1.1) (2016-05-09) - - -### :star: New Features - -* auto installation for standalone ([2b0dc09](https://github.com/kazupon/vue-i18n/commit/2b0dc09)) - - - - -# [3.1.0](https://github.com/kazupon/vue-i18n/compare/v3.0.0...v3.1.0) (2016-05-09) - - -### :star: New Features - -* component locales ([12fe695](https://github.com/kazupon/vue-i18n/commit/12fe695)), closes [#29](https://github.com/kazupon/vue-i18n/issues/29) - - -### :warning: Depcreted - -* **options:** remove Vue.use options ([d87b59b](https://github.com/kazupon/vue-i18n/commit/d87b59b)) - - -### :zap: Improvements - -* **keypath:** port the object path parser ([3ae04b7](https://github.com/kazupon/vue-i18n/commit/3ae04b7)) -* **translation:** fix hypenate included key translating ([d0a415f](https://github.com/kazupon/vue-i18n/commit/d0a415f)), closes [#24](https://github.com/kazupon/vue-i18n/issues/24) -* **translation:** warning outputing when cannot translate with keypath ([b4c7c0e](https://github.com/kazupon/vue-i18n/commit/b4c7c0e)), closes [#22](https://github.com/kazupon/vue-i18n/issues/22) - - - - -# [3.0.0](https://github.com/kazupon/vue-i18n/compare/v2.4.1...v3.0.0) (2016-04-18) - - -### Features - -* **lang:** support lang reactive changing ([203ee85](https://github.com/kazupon/vue-i18n/commit/203ee85)), closes [#2](https://github.com/kazupon/vue-i18n/issues/2) [#15](https://github.com/kazupon/vue-i18n/issues/15) -* **locale:** support dynamic local ([4d61e8d](https://github.com/kazupon/vue-i18n/commit/4d61e8d)), closes [#6](https://github.com/kazupon/vue-i18n/issues/6) [#21](https://github.com/kazupon/vue-i18n/issues/21) - -### DEPRECATED - -* **index:** plugin install `Vue.use` options (`options.locales`, `options.lang`). See [README](https://github.com/kazupon/vue-i18n/blob/dev/README.md) - - - -## [2.4.1](https://github.com/kazupon/vue-i18n/compare/v2.4.0...v2.4.1) (2016-02-29) - -### Features - -* **i18n:** support ruby on rails i18n interpolation format ([b6b2490](https://github.com/kazupon/vue-i18n/commit/b6b2490)) - - - - -# [2.4.0](https://github.com/kazupon/vue-i18n/compare/v2.3.3...v2.4.0) (2016-02-06) - - -### Features - -* **i18n:** add Vue.t function ([68935e3](https://github.com/kazupon/vue-i18n/commit/68935e3)), closes [#17](https://github.com/kazupon/vue-i18n/issues/17) - - - - -## [2.3.3](https://github.com/kazupon/vue-i18n/compare/v2.3.2...v2.3.3) (2015-12-09) - - -### Bug Fixes - -* **npm:** npm install error ([e31e89e](https://github.com/kazupon/vue-i18n/commit/e31e89e)) - -### Features - -* **bower:** good-bye bower :wink: ([d99eb15](https://github.com/kazupon/vue-i18n/commit/d99eb15)) - - -### BREAKING CHANGES - -* bower: not support `bower` package manager - -I think that bower is dead. :no_good: - - - - -## [2.3.2](https://github.com/kazupon/vue-i18n/compare/v2.3.1...v2.3.2) (2015-12-09) - - -### Features - -* **bundle:** more compact the vue-i18n distribution file ([2f32ecc](https://github.com/kazupon/vue-i18n/commit/2f32ecc)) - - - - -## [2.3.1](https://github.com/kazupon/vue-i18n/compare/v2.3.0...v2.3.1) (2015-12-01) - -### Reverts - -* **index:** automatically install for standalone ([25b8059](https://github.com/kazupon/vue-i18n/commit/25b8059)) - - - - -# [2.3.0](https://github.com/kazupon/vue-i18n/compare/v2.2.0...v2.3.0) (2015-11-26) - - -### Bug Fixes - -* **index:** cannot work at Vue 1.0.10 later ([6fd543e](https://github.com/kazupon/vue-i18n/commit/6fd543e)), closes [#9](https://github.com/kazupon/vue-i18n/issues/9) - -### Features - -* **index:** support automatically install for standalone ([ada2673](https://github.com/kazupon/vue-i18n/commit/ada2673)) - - - -# v2.2.0 / 2015-09-16 - -* Re-implemetation with ES6 (babel) - -# v2.1.0 / 2015-07-03 - -* Add global local language setting with `Vue.config.lang` - -# v2.0.0 / 2015-06-29 - -* Support Vue.js 0.12 -* Remove the followings (Breaking Changes) - * `Vue.t` function - * `v-t` directive - -# v1.1.1 / 2015-04-21 - -* Fix unit test error - -# v1.1.0 / 2015-01-10 - -* Support template string in `$t` method -* Support language changing in `$t` method - -# v1.0.0 / 2015-01-10 - -* Add `$t` method - -# v0.11.0 / 2014-11-07 - -* Bump to 0.11.0 - -# v0.2.0 / 2014-10-08 - -* Support Vue.js 0.11.0-rc - -# v0.1.2 / 2014-10-07 - -* Support bower - -# v0.1.1 / 2014-10-06 - -* Add `Vue.t` function - -# v0.1.0 / 2014-05-06 - -* Release first - -# v0.0.0 / 2014-05-03 - -* Initial project diff --git a/node_modules/vue-i18n/README.md b/node_modules/vue-i18n/README.md deleted file mode 100644 index cbc79b7..0000000 --- a/node_modules/vue-i18n/README.md +++ /dev/null @@ -1,73 +0,0 @@ -

    Vue I18n logo

    -

    vue-i18n

    -

    - Build Status - Coverage Status - NPM version - vue-i18n channel on Discord - vue-i18n Dev Token -

    - -

    Internationalization plugin for Vue.js

    - -
    - -

    Silver Sponsors

    - -

    - - - -

    - -

    Bronze Sponsors

    - -

    - - - -

    - -
    - -

    - - Become a Patreon - -

    - -
    - -## :loudspeaker: Notice - -vue-i18n will soon be transferred to [intlify organization](https://github.com/intlify). After that, it will be developed and maintained on intlify. - -The `vue-i18n` that has been released on npm will be released as `@intlify/vue-i18n` in near future. - -`@intlify/vue-i18n` repo is [here](https://github.com/intlify/vue-i18n-next) - -Intlify is a new i18n project kickoff by @kazupon. 😉 - -## :book: Documentation - -See [here](http://kazupon.github.io/vue-i18n/) - - -## :scroll: Changelog - -Detailed changes for each release are documented in the [CHANGELOG.md](https://github.com/kazupon/vue-i18n/blob/dev/CHANGELOG.md). - - -## :exclamation: Issues - -Please make sure to read the [Issue Reporting Checklist](https://github.com/kazupon/vue-i18n/blob/dev/CONTRIBUTING.md#issue-reporting-guidelines) before opening an issue. Issues not conforming to the guidelines may be closed immediately. - - -## :muscle: Contribution - -Please make sure to read the [Contributing Guide](https://github.com/kazupon/vue-i18n/blob/dev/CONTRIBUTING.md) before making a pull request. - - -## :copyright: License - -[MIT](http://opensource.org/licenses/MIT) diff --git a/node_modules/vue-i18n/decls/i18n.js b/node_modules/vue-i18n/decls/i18n.js deleted file mode 100644 index d89ba9a..0000000 --- a/node_modules/vue-i18n/decls/i18n.js +++ /dev/null @@ -1,155 +0,0 @@ -declare var Intl: any; - -declare type Path = string; -declare type Locale = string; -declare type FallbackLocale = string | string[] | false | { [locale: string]: string[] }; -declare type LocaleMessage = string | LocaleMessageObject | LocaleMessageArray; -declare type LocaleMessageObject = { [key: Path]: LocaleMessage }; -declare type LocaleMessageArray = Array; -declare type LocaleMessages = { [key: Locale]: LocaleMessageObject }; - -// This options is the same as Intl.DateTimeFormat constructor options: -// http://www.ecma-international.org/ecma-402/2.0/#sec-intl-datetimeformat-constructor -declare type DateTimeFormatOptions = { - year?: 'numeric' | '2-digit', - month?: 'numeric' | '2-digit' | 'narrow' | 'short' | 'long', - day?: 'numeric' | '2-digit', - hour?: 'numeric' | '2-digit', - minute?: 'numeric' | '2-digit', - second?: 'numeric' | '2-digit', - weekday?: 'narrow' | 'short' | 'long', - hour12?: boolean, - era?: 'narrow' | 'short' | 'long', - timeZone?: string, // IANA time zone - timeZoneName?: 'short' | 'long', - localeMatcher?: 'lookup' | 'best fit', - formatMatcher?: 'basic' | 'best fit' -}; -declare type DateTimeFormat = { [key: string]: DateTimeFormatOptions }; -declare type DateTimeFormats = { [key: Locale]: DateTimeFormat }; - -// This options is the same as Intl.NumberFormat constructor options: -// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/NumberFormat -declare type NumberFormatOptions = { - style?: 'decimal' | 'currency' | 'percent', - currency?: string, // ISO 4217 currency codes - currencyDisplay?: 'symbol' | 'code' | 'name', - useGrouping?: boolean, - minimumIntegerDigits?: number, - minimumFractionDigits?: number, - maximumFractionDigits?: number, - minimumSignificantDigits?: number, - maximumSignificantDigits?: number, - localeMatcher?: 'lookup' | 'best fit', - formatMatcher?: 'basic' | 'best fit' -}; -declare type NumberFormat = { [key: string]: NumberFormatOptions }; -declare type NumberFormats = { [key: Locale]: NumberFormat }; -declare type Modifiers = { [key: string]: (str: string) => string }; - -declare type TranslateResult = string | LocaleMessages; -declare type DateTimeFormatResult = string; -declare type NumberFormatResult = string; -declare type MissingHandler = (locale: Locale, key: Path, vm?: any) => string | void; -declare type PostTranslationHandler = (str: string, key?: string) => string; -declare type GetChoiceIndex = (choice: number, choicesLength: number) => number -declare type ComponentInstanceCreatedListener = (newI18n: I18n, rootI18n: I18n) => void; - -declare type FormattedNumberPartType = 'currency' | 'decimal' | 'fraction' | 'group' | 'infinity' | 'integer' | 'literal' | 'minusSign' | 'nan' | 'plusSign' | 'percentSign'; -declare type FormattedNumberPart = { - type: FormattedNumberPartType, - value: string, -}; -// This array is the same as Intl.NumberFormat.formatToParts() return value: -// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/NumberFormat/formatToParts#Return_value -declare type NumberFormatToPartsResult = Array; - -declare type WarnHtmlInMessageLevel = 'off' | 'warn' | 'error'; - -declare type I18nOptions = { - locale?: Locale, - fallbackLocale?: FallbackLocale, - messages?: LocaleMessages, - dateTimeFormats?: DateTimeFormats, - numberFormats?: NumberFormats, - formatter?: Formatter, - missing?: MissingHandler, - modifiers?: Modifiers, - root?: I18n, // for internal - fallbackRoot?: boolean, - formatFallbackMessages?: boolean, - sync?: boolean, - silentTranslationWarn?: boolean | RegExp, - silentFallbackWarn?: boolean | RegExp, - pluralizationRules?: PluralizationRules, - preserveDirectiveContent?: boolean, - warnHtmlInMessage?: WarnHtmlInMessageLevel, - sharedMessages?: LocaleMessage, - postTranslation?: PostTranslationHandler, - componentInstanceCreatedListener?: ComponentInstanceCreatedListener, -}; - -declare type IntlAvailability = { - dateTimeFormat: boolean, - numberFormat: boolean -}; - -declare type PluralizationRules = { - [lang: string]: GetChoiceIndex, -} - -declare interface I18n { - static install: () => void, // for Vue plugin interface - static version: string, - static availabilities: IntlAvailability, - get vm (): any, // for internal - get locale (): Locale, - set locale (locale: Locale): void, - get fallbackLocale (): FallbackLocale, - set fallbackLocale (locale: FallbackLocale): void, - get messages (): LocaleMessages, - get dateTimeFormats (): DateTimeFormats, - get numberFormats (): NumberFormats, - get availableLocales (): Locale[], - get missing (): ?MissingHandler, - set missing (handler: MissingHandler): void, - get formatter (): Formatter, - set formatter (formatter: Formatter): void, - get formatFallbackMessages (): boolean, - set formatFallbackMessages (fallback: boolean): void, - get silentTranslationWarn (): boolean | RegExp, - set silentTranslationWarn (silent: boolean | RegExp): void, - get silentFallbackWarn (): boolean | RegExp, - set silentFallbackWarn (slient: boolean | RegExp): void, - get pluralizationRules (): PluralizationRules, - set pluralizationRules (rules: PluralizationRules): void, - get preserveDirectiveContent (): boolean, - set preserveDirectiveContent (preserve: boolean): void, - get warnHtmlInMessage (): WarnHtmlInMessageLevel, - set warnHtmlInMessage (level: WarnHtmlInMessageLevel): void, - get postTranslation (): ?PostTranslationHandler, - set postTranslation (handler: PostTranslationHandler): void, - - getLocaleMessage (locale: Locale): LocaleMessageObject, - setLocaleMessage (locale: Locale, message: LocaleMessageObject): void, - mergeLocaleMessage (locale: Locale, message: LocaleMessageObject): void, - t (key: Path, ...values: any): TranslateResult, - i (key: Path, locale: Locale, values: Object): TranslateResult, - tc (key: Path, choice?: number, ...values: any): TranslateResult, - te (key: Path, locale?: Locale): boolean, - getDateTimeFormat (locale: Locale): DateTimeFormat, - setDateTimeFormat (locale: Locale, format: DateTimeFormat): void, - mergeDateTimeFormat (locale: Locale, format: DateTimeFormat): void, - d (value: number | Date, ...args: any): DateTimeFormatResult, - getNumberFormat (locale: Locale): NumberFormat, - setNumberFormat (locale: Locale, format: NumberFormat): void, - mergeNumberFormat (locale: Locale, format: NumberFormat): void, - n (value: number, ...args: any): NumberFormatResult, - getChoiceIndex: GetChoiceIndex, - pluralizationRules: PluralizationRules, - preserveDirectiveContent: boolean -}; - -declare interface Formatter { - interpolate (message: string, values: any, path: string): (Array | null) -}; diff --git a/node_modules/vue-i18n/decls/module.js b/node_modules/vue-i18n/decls/module.js deleted file mode 100644 index da1873d..0000000 --- a/node_modules/vue-i18n/decls/module.js +++ /dev/null @@ -1,30 +0,0 @@ -declare type $npm$Vue$Dictionaly = { [key: string]: T } - -declare type Util = { - extend: (to: Object, from: ?Object) => Object, - hasOwn: (obj: Object, key: string) => boolean, - isPlainObject: (obj: any) => boolean, - isObject: (obj: mixed) => boolean, -} - -declare type Config = { - optionMergeStrategies: $npm$Vue$Dictionaly, - silent: boolean, - productionTip: boolean, - performance: boolean, - devtools: boolean, - errorHandler: ?(err: Error, vm: Vue, info: string) => void, - ignoredElements: Array, - keyCodes: $npm$Vue$Dictionaly, - isReservedTag: (x?: string) => boolean, - parsePlatformTagName: (x: string) => string, - isUnknownElement: (x?: string) => boolean, - getTagNamespace: (x?: string) => string | void, - mustUseProp: (tag: string, type: ?string, name: string) => boolean, -} - -declare interface Vue { - static config: Config, - static util: Util, - static version: string, -} diff --git a/node_modules/vue-i18n/dist/vue-i18n.common.js b/node_modules/vue-i18n/dist/vue-i18n.common.js deleted file mode 100644 index 48e2000..0000000 --- a/node_modules/vue-i18n/dist/vue-i18n.common.js +++ /dev/null @@ -1,2132 +0,0 @@ -/*! - * vue-i18n v8.20.0 - * (c) 2020 kazuya kawaguchi - * Released under the MIT License. - */ -'use strict'; - -/* */ - -/** - * constants - */ - -var numberFormatKeys = [ - 'style', - 'currency', - 'currencyDisplay', - 'useGrouping', - 'minimumIntegerDigits', - 'minimumFractionDigits', - 'maximumFractionDigits', - 'minimumSignificantDigits', - 'maximumSignificantDigits', - 'localeMatcher', - 'formatMatcher', - 'unit' -]; - -/** - * utilities - */ - -function warn (msg, err) { - if (typeof console !== 'undefined') { - console.warn('[vue-i18n] ' + msg); - /* istanbul ignore if */ - if (err) { - console.warn(err.stack); - } - } -} - -function error (msg, err) { - if (typeof console !== 'undefined') { - console.error('[vue-i18n] ' + msg); - /* istanbul ignore if */ - if (err) { - console.error(err.stack); - } - } -} - -var isArray = Array.isArray; - -function isObject (obj) { - return obj !== null && typeof obj === 'object' -} - -function isBoolean (val) { - return typeof val === 'boolean' -} - -function isString (val) { - return typeof val === 'string' -} - -var toString = Object.prototype.toString; -var OBJECT_STRING = '[object Object]'; -function isPlainObject (obj) { - return toString.call(obj) === OBJECT_STRING -} - -function isNull (val) { - return val === null || val === undefined -} - -function parseArgs () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - var locale = null; - var params = null; - if (args.length === 1) { - if (isObject(args[0]) || Array.isArray(args[0])) { - params = args[0]; - } else if (typeof args[0] === 'string') { - locale = args[0]; - } - } else if (args.length === 2) { - if (typeof args[0] === 'string') { - locale = args[0]; - } - /* istanbul ignore if */ - if (isObject(args[1]) || Array.isArray(args[1])) { - params = args[1]; - } - } - - return { locale: locale, params: params } -} - -function looseClone (obj) { - return JSON.parse(JSON.stringify(obj)) -} - -function remove (arr, item) { - if (arr.length) { - var index = arr.indexOf(item); - if (index > -1) { - return arr.splice(index, 1) - } - } -} - -function includes (arr, item) { - return !!~arr.indexOf(item) -} - -var hasOwnProperty = Object.prototype.hasOwnProperty; -function hasOwn (obj, key) { - return hasOwnProperty.call(obj, key) -} - -function merge (target) { - var arguments$1 = arguments; - - var output = Object(target); - for (var i = 1; i < arguments.length; i++) { - var source = arguments$1[i]; - if (source !== undefined && source !== null) { - var key = (void 0); - for (key in source) { - if (hasOwn(source, key)) { - if (isObject(source[key])) { - output[key] = merge(output[key], source[key]); - } else { - output[key] = source[key]; - } - } - } - } - } - return output -} - -function looseEqual (a, b) { - if (a === b) { return true } - var isObjectA = isObject(a); - var isObjectB = isObject(b); - if (isObjectA && isObjectB) { - try { - var isArrayA = Array.isArray(a); - var isArrayB = Array.isArray(b); - if (isArrayA && isArrayB) { - return a.length === b.length && a.every(function (e, i) { - return looseEqual(e, b[i]) - }) - } else if (!isArrayA && !isArrayB) { - var keysA = Object.keys(a); - var keysB = Object.keys(b); - return keysA.length === keysB.length && keysA.every(function (key) { - return looseEqual(a[key], b[key]) - }) - } else { - /* istanbul ignore next */ - return false - } - } catch (e) { - /* istanbul ignore next */ - return false - } - } else if (!isObjectA && !isObjectB) { - return String(a) === String(b) - } else { - return false - } -} - -/* */ - -function extend (Vue) { - if (!Vue.prototype.hasOwnProperty('$i18n')) { - // $FlowFixMe - Object.defineProperty(Vue.prototype, '$i18n', { - get: function get () { return this._i18n } - }); - } - - Vue.prototype.$t = function (key) { - var values = [], len = arguments.length - 1; - while ( len-- > 0 ) values[ len ] = arguments[ len + 1 ]; - - var i18n = this.$i18n; - return i18n._t.apply(i18n, [ key, i18n.locale, i18n._getMessages(), this ].concat( values )) - }; - - Vue.prototype.$tc = function (key, choice) { - var values = [], len = arguments.length - 2; - while ( len-- > 0 ) values[ len ] = arguments[ len + 2 ]; - - var i18n = this.$i18n; - return i18n._tc.apply(i18n, [ key, i18n.locale, i18n._getMessages(), this, choice ].concat( values )) - }; - - Vue.prototype.$te = function (key, locale) { - var i18n = this.$i18n; - return i18n._te(key, i18n.locale, i18n._getMessages(), locale) - }; - - Vue.prototype.$d = function (value) { - var ref; - - var args = [], len = arguments.length - 1; - while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ]; - return (ref = this.$i18n).d.apply(ref, [ value ].concat( args )) - }; - - Vue.prototype.$n = function (value) { - var ref; - - var args = [], len = arguments.length - 1; - while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ]; - return (ref = this.$i18n).n.apply(ref, [ value ].concat( args )) - }; -} - -/* */ - -var mixin = { - beforeCreate: function beforeCreate () { - var options = this.$options; - options.i18n = options.i18n || (options.__i18n ? {} : null); - - if (options.i18n) { - if (options.i18n instanceof VueI18n) { - // init locale messages via custom blocks - if (options.__i18n) { - try { - var localeMessages = {}; - options.__i18n.forEach(function (resource) { - localeMessages = merge(localeMessages, JSON.parse(resource)); - }); - Object.keys(localeMessages).forEach(function (locale) { - options.i18n.mergeLocaleMessage(locale, localeMessages[locale]); - }); - } catch (e) { - if (process.env.NODE_ENV !== 'production') { - error("Cannot parse locale messages via custom blocks.", e); - } - } - } - this._i18n = options.i18n; - this._i18nWatcher = this._i18n.watchI18nData(); - } else if (isPlainObject(options.i18n)) { - var rootI18n = this.$root && this.$root.$i18n && this.$root.$i18n instanceof VueI18n - ? this.$root.$i18n - : null; - // component local i18n - if (rootI18n) { - options.i18n.root = this.$root; - options.i18n.formatter = rootI18n.formatter; - options.i18n.fallbackLocale = rootI18n.fallbackLocale; - options.i18n.formatFallbackMessages = rootI18n.formatFallbackMessages; - options.i18n.silentTranslationWarn = rootI18n.silentTranslationWarn; - options.i18n.silentFallbackWarn = rootI18n.silentFallbackWarn; - options.i18n.pluralizationRules = rootI18n.pluralizationRules; - options.i18n.preserveDirectiveContent = rootI18n.preserveDirectiveContent; - } - - // init locale messages via custom blocks - if (options.__i18n) { - try { - var localeMessages$1 = {}; - options.__i18n.forEach(function (resource) { - localeMessages$1 = merge(localeMessages$1, JSON.parse(resource)); - }); - options.i18n.messages = localeMessages$1; - } catch (e) { - if (process.env.NODE_ENV !== 'production') { - warn("Cannot parse locale messages via custom blocks.", e); - } - } - } - - var ref = options.i18n; - var sharedMessages = ref.sharedMessages; - if (sharedMessages && isPlainObject(sharedMessages)) { - options.i18n.messages = merge(options.i18n.messages, sharedMessages); - } - - this._i18n = new VueI18n(options.i18n); - this._i18nWatcher = this._i18n.watchI18nData(); - - if (options.i18n.sync === undefined || !!options.i18n.sync) { - this._localeWatcher = this.$i18n.watchLocale(); - } - - if (rootI18n) { - rootI18n.onComponentInstanceCreated(this._i18n); - } - } else { - if (process.env.NODE_ENV !== 'production') { - warn("Cannot be interpreted 'i18n' option."); - } - } - } else if (this.$root && this.$root.$i18n && this.$root.$i18n instanceof VueI18n) { - // root i18n - this._i18n = this.$root.$i18n; - } else if (options.parent && options.parent.$i18n && options.parent.$i18n instanceof VueI18n) { - // parent i18n - this._i18n = options.parent.$i18n; - } - }, - - beforeMount: function beforeMount () { - var options = this.$options; - options.i18n = options.i18n || (options.__i18n ? {} : null); - - if (options.i18n) { - if (options.i18n instanceof VueI18n) { - // init locale messages via custom blocks - this._i18n.subscribeDataChanging(this); - this._subscribing = true; - } else if (isPlainObject(options.i18n)) { - this._i18n.subscribeDataChanging(this); - this._subscribing = true; - } else { - if (process.env.NODE_ENV !== 'production') { - warn("Cannot be interpreted 'i18n' option."); - } - } - } else if (this.$root && this.$root.$i18n && this.$root.$i18n instanceof VueI18n) { - this._i18n.subscribeDataChanging(this); - this._subscribing = true; - } else if (options.parent && options.parent.$i18n && options.parent.$i18n instanceof VueI18n) { - this._i18n.subscribeDataChanging(this); - this._subscribing = true; - } - }, - - beforeDestroy: function beforeDestroy () { - if (!this._i18n) { return } - - var self = this; - this.$nextTick(function () { - if (self._subscribing) { - self._i18n.unsubscribeDataChanging(self); - delete self._subscribing; - } - - if (self._i18nWatcher) { - self._i18nWatcher(); - self._i18n.destroyVM(); - delete self._i18nWatcher; - } - - if (self._localeWatcher) { - self._localeWatcher(); - delete self._localeWatcher; - } - }); - } -}; - -/* */ - -var interpolationComponent = { - name: 'i18n', - functional: true, - props: { - tag: { - type: [String, Boolean, Object], - default: 'span' - }, - path: { - type: String, - required: true - }, - locale: { - type: String - }, - places: { - type: [Array, Object] - } - }, - render: function render (h, ref) { - var data = ref.data; - var parent = ref.parent; - var props = ref.props; - var slots = ref.slots; - - var $i18n = parent.$i18n; - if (!$i18n) { - if (process.env.NODE_ENV !== 'production') { - warn('Cannot find VueI18n instance!'); - } - return - } - - var path = props.path; - var locale = props.locale; - var places = props.places; - var params = slots(); - var children = $i18n.i( - path, - locale, - onlyHasDefaultPlace(params) || places - ? useLegacyPlaces(params.default, places) - : params - ); - - var tag = (!!props.tag && props.tag !== true) || props.tag === false ? props.tag : 'span'; - return tag ? h(tag, data, children) : children - } -}; - -function onlyHasDefaultPlace (params) { - var prop; - for (prop in params) { - if (prop !== 'default') { return false } - } - return Boolean(prop) -} - -function useLegacyPlaces (children, places) { - var params = places ? createParamsFromPlaces(places) : {}; - - if (!children) { return params } - - // Filter empty text nodes - children = children.filter(function (child) { - return child.tag || child.text.trim() !== '' - }); - - var everyPlace = children.every(vnodeHasPlaceAttribute); - if (process.env.NODE_ENV !== 'production' && everyPlace) { - warn('`place` attribute is deprecated in next major version. Please switch to Vue slots.'); - } - - return children.reduce( - everyPlace ? assignChildPlace : assignChildIndex, - params - ) -} - -function createParamsFromPlaces (places) { - if (process.env.NODE_ENV !== 'production') { - warn('`places` prop is deprecated in next major version. Please switch to Vue slots.'); - } - - return Array.isArray(places) - ? places.reduce(assignChildIndex, {}) - : Object.assign({}, places) -} - -function assignChildPlace (params, child) { - if (child.data && child.data.attrs && child.data.attrs.place) { - params[child.data.attrs.place] = child; - } - return params -} - -function assignChildIndex (params, child, index) { - params[index] = child; - return params -} - -function vnodeHasPlaceAttribute (vnode) { - return Boolean(vnode.data && vnode.data.attrs && vnode.data.attrs.place) -} - -/* */ - -var numberComponent = { - name: 'i18n-n', - functional: true, - props: { - tag: { - type: [String, Boolean, Object], - default: 'span' - }, - value: { - type: Number, - required: true - }, - format: { - type: [String, Object] - }, - locale: { - type: String - } - }, - render: function render (h, ref) { - var props = ref.props; - var parent = ref.parent; - var data = ref.data; - - var i18n = parent.$i18n; - - if (!i18n) { - if (process.env.NODE_ENV !== 'production') { - warn('Cannot find VueI18n instance!'); - } - return null - } - - var key = null; - var options = null; - - if (isString(props.format)) { - key = props.format; - } else if (isObject(props.format)) { - if (props.format.key) { - key = props.format.key; - } - - // Filter out number format options only - options = Object.keys(props.format).reduce(function (acc, prop) { - var obj; - - if (includes(numberFormatKeys, prop)) { - return Object.assign({}, acc, ( obj = {}, obj[prop] = props.format[prop], obj )) - } - return acc - }, null); - } - - var locale = props.locale || i18n.locale; - var parts = i18n._ntp(props.value, locale, key, options); - - var values = parts.map(function (part, index) { - var obj; - - var slot = data.scopedSlots && data.scopedSlots[part.type]; - return slot ? slot(( obj = {}, obj[part.type] = part.value, obj.index = index, obj.parts = parts, obj )) : part.value - }); - - var tag = (!!props.tag && props.tag !== true) || props.tag === false ? props.tag : 'span'; - return tag - ? h(tag, { - attrs: data.attrs, - 'class': data['class'], - staticClass: data.staticClass - }, values) - : values - } -}; - -/* */ - -function bind (el, binding, vnode) { - if (!assert(el, vnode)) { return } - - t(el, binding, vnode); -} - -function update (el, binding, vnode, oldVNode) { - if (!assert(el, vnode)) { return } - - var i18n = vnode.context.$i18n; - if (localeEqual(el, vnode) && - (looseEqual(binding.value, binding.oldValue) && - looseEqual(el._localeMessage, i18n.getLocaleMessage(i18n.locale)))) { return } - - t(el, binding, vnode); -} - -function unbind (el, binding, vnode, oldVNode) { - var vm = vnode.context; - if (!vm) { - warn('Vue instance does not exists in VNode context'); - return - } - - var i18n = vnode.context.$i18n || {}; - if (!binding.modifiers.preserve && !i18n.preserveDirectiveContent) { - el.textContent = ''; - } - el._vt = undefined; - delete el['_vt']; - el._locale = undefined; - delete el['_locale']; - el._localeMessage = undefined; - delete el['_localeMessage']; -} - -function assert (el, vnode) { - var vm = vnode.context; - if (!vm) { - warn('Vue instance does not exists in VNode context'); - return false - } - - if (!vm.$i18n) { - warn('VueI18n instance does not exists in Vue instance'); - return false - } - - return true -} - -function localeEqual (el, vnode) { - var vm = vnode.context; - return el._locale === vm.$i18n.locale -} - -function t (el, binding, vnode) { - var ref$1, ref$2; - - var value = binding.value; - - var ref = parseValue(value); - var path = ref.path; - var locale = ref.locale; - var args = ref.args; - var choice = ref.choice; - if (!path && !locale && !args) { - warn('value type not supported'); - return - } - - if (!path) { - warn('`path` is required in v-t directive'); - return - } - - var vm = vnode.context; - if (choice != null) { - el._vt = el.textContent = (ref$1 = vm.$i18n).tc.apply(ref$1, [ path, choice ].concat( makeParams(locale, args) )); - } else { - el._vt = el.textContent = (ref$2 = vm.$i18n).t.apply(ref$2, [ path ].concat( makeParams(locale, args) )); - } - el._locale = vm.$i18n.locale; - el._localeMessage = vm.$i18n.getLocaleMessage(vm.$i18n.locale); -} - -function parseValue (value) { - var path; - var locale; - var args; - var choice; - - if (isString(value)) { - path = value; - } else if (isPlainObject(value)) { - path = value.path; - locale = value.locale; - args = value.args; - choice = value.choice; - } - - return { path: path, locale: locale, args: args, choice: choice } -} - -function makeParams (locale, args) { - var params = []; - - locale && params.push(locale); - if (args && (Array.isArray(args) || isPlainObject(args))) { - params.push(args); - } - - return params -} - -var Vue; - -function install (_Vue) { - /* istanbul ignore if */ - if (process.env.NODE_ENV !== 'production' && install.installed && _Vue === Vue) { - warn('already installed.'); - return - } - install.installed = true; - - Vue = _Vue; - - var version = (Vue.version && Number(Vue.version.split('.')[0])) || -1; - /* istanbul ignore if */ - if (process.env.NODE_ENV !== 'production' && version < 2) { - warn(("vue-i18n (" + (install.version) + ") need to use Vue 2.0 or later (Vue: " + (Vue.version) + ").")); - return - } - - extend(Vue); - Vue.mixin(mixin); - Vue.directive('t', { bind: bind, update: update, unbind: unbind }); - Vue.component(interpolationComponent.name, interpolationComponent); - Vue.component(numberComponent.name, numberComponent); - - // use simple mergeStrategies to prevent i18n instance lose '__proto__' - var strats = Vue.config.optionMergeStrategies; - strats.i18n = function (parentVal, childVal) { - return childVal === undefined - ? parentVal - : childVal - }; -} - -/* */ - -var BaseFormatter = function BaseFormatter () { - this._caches = Object.create(null); -}; - -BaseFormatter.prototype.interpolate = function interpolate (message, values) { - if (!values) { - return [message] - } - var tokens = this._caches[message]; - if (!tokens) { - tokens = parse(message); - this._caches[message] = tokens; - } - return compile(tokens, values) -}; - - - -var RE_TOKEN_LIST_VALUE = /^(?:\d)+/; -var RE_TOKEN_NAMED_VALUE = /^(?:\w)+/; - -function parse (format) { - var tokens = []; - var position = 0; - - var text = ''; - while (position < format.length) { - var char = format[position++]; - if (char === '{') { - if (text) { - tokens.push({ type: 'text', value: text }); - } - - text = ''; - var sub = ''; - char = format[position++]; - while (char !== undefined && char !== '}') { - sub += char; - char = format[position++]; - } - var isClosed = char === '}'; - - var type = RE_TOKEN_LIST_VALUE.test(sub) - ? 'list' - : isClosed && RE_TOKEN_NAMED_VALUE.test(sub) - ? 'named' - : 'unknown'; - tokens.push({ value: sub, type: type }); - } else if (char === '%') { - // when found rails i18n syntax, skip text capture - if (format[(position)] !== '{') { - text += char; - } - } else { - text += char; - } - } - - text && tokens.push({ type: 'text', value: text }); - - return tokens -} - -function compile (tokens, values) { - var compiled = []; - var index = 0; - - var mode = Array.isArray(values) - ? 'list' - : isObject(values) - ? 'named' - : 'unknown'; - if (mode === 'unknown') { return compiled } - - while (index < tokens.length) { - var token = tokens[index]; - switch (token.type) { - case 'text': - compiled.push(token.value); - break - case 'list': - compiled.push(values[parseInt(token.value, 10)]); - break - case 'named': - if (mode === 'named') { - compiled.push((values)[token.value]); - } else { - if (process.env.NODE_ENV !== 'production') { - warn(("Type of token '" + (token.type) + "' and format of value '" + mode + "' don't match!")); - } - } - break - case 'unknown': - if (process.env.NODE_ENV !== 'production') { - warn("Detect 'unknown' type of token!"); - } - break - } - index++; - } - - return compiled -} - -/* */ - -/** - * Path parser - * - Inspired: - * Vue.js Path parser - */ - -// actions -var APPEND = 0; -var PUSH = 1; -var INC_SUB_PATH_DEPTH = 2; -var PUSH_SUB_PATH = 3; - -// states -var BEFORE_PATH = 0; -var IN_PATH = 1; -var BEFORE_IDENT = 2; -var IN_IDENT = 3; -var IN_SUB_PATH = 4; -var IN_SINGLE_QUOTE = 5; -var IN_DOUBLE_QUOTE = 6; -var AFTER_PATH = 7; -var ERROR = 8; - -var pathStateMachine = []; - -pathStateMachine[BEFORE_PATH] = { - 'ws': [BEFORE_PATH], - 'ident': [IN_IDENT, APPEND], - '[': [IN_SUB_PATH], - 'eof': [AFTER_PATH] -}; - -pathStateMachine[IN_PATH] = { - 'ws': [IN_PATH], - '.': [BEFORE_IDENT], - '[': [IN_SUB_PATH], - 'eof': [AFTER_PATH] -}; - -pathStateMachine[BEFORE_IDENT] = { - 'ws': [BEFORE_IDENT], - 'ident': [IN_IDENT, APPEND], - '0': [IN_IDENT, APPEND], - 'number': [IN_IDENT, APPEND] -}; - -pathStateMachine[IN_IDENT] = { - 'ident': [IN_IDENT, APPEND], - '0': [IN_IDENT, APPEND], - 'number': [IN_IDENT, APPEND], - 'ws': [IN_PATH, PUSH], - '.': [BEFORE_IDENT, PUSH], - '[': [IN_SUB_PATH, PUSH], - 'eof': [AFTER_PATH, PUSH] -}; - -pathStateMachine[IN_SUB_PATH] = { - "'": [IN_SINGLE_QUOTE, APPEND], - '"': [IN_DOUBLE_QUOTE, APPEND], - '[': [IN_SUB_PATH, INC_SUB_PATH_DEPTH], - ']': [IN_PATH, PUSH_SUB_PATH], - 'eof': ERROR, - 'else': [IN_SUB_PATH, APPEND] -}; - -pathStateMachine[IN_SINGLE_QUOTE] = { - "'": [IN_SUB_PATH, APPEND], - 'eof': ERROR, - 'else': [IN_SINGLE_QUOTE, APPEND] -}; - -pathStateMachine[IN_DOUBLE_QUOTE] = { - '"': [IN_SUB_PATH, APPEND], - 'eof': ERROR, - 'else': [IN_DOUBLE_QUOTE, APPEND] -}; - -/** - * Check if an expression is a literal value. - */ - -var literalValueRE = /^\s?(?:true|false|-?[\d.]+|'[^']*'|"[^"]*")\s?$/; -function isLiteral (exp) { - return literalValueRE.test(exp) -} - -/** - * Strip quotes from a string - */ - -function stripQuotes (str) { - var a = str.charCodeAt(0); - var b = str.charCodeAt(str.length - 1); - return a === b && (a === 0x22 || a === 0x27) - ? str.slice(1, -1) - : str -} - -/** - * Determine the type of a character in a keypath. - */ - -function getPathCharType (ch) { - if (ch === undefined || ch === null) { return 'eof' } - - var code = ch.charCodeAt(0); - - switch (code) { - case 0x5B: // [ - case 0x5D: // ] - case 0x2E: // . - case 0x22: // " - case 0x27: // ' - return ch - - case 0x5F: // _ - case 0x24: // $ - case 0x2D: // - - return 'ident' - - case 0x09: // Tab - case 0x0A: // Newline - case 0x0D: // Return - case 0xA0: // No-break space - case 0xFEFF: // Byte Order Mark - case 0x2028: // Line Separator - case 0x2029: // Paragraph Separator - return 'ws' - } - - return 'ident' -} - -/** - * Format a subPath, return its plain form if it is - * a literal string or number. Otherwise prepend the - * dynamic indicator (*). - */ - -function formatSubPath (path) { - var trimmed = path.trim(); - // invalid leading 0 - if (path.charAt(0) === '0' && isNaN(path)) { return false } - - return isLiteral(trimmed) ? stripQuotes(trimmed) : '*' + trimmed -} - -/** - * Parse a string path into an array of segments - */ - -function parse$1 (path) { - var keys = []; - var index = -1; - var mode = BEFORE_PATH; - var subPathDepth = 0; - var c; - var key; - var newChar; - var type; - var transition; - var action; - var typeMap; - var actions = []; - - actions[PUSH] = function () { - if (key !== undefined) { - keys.push(key); - key = undefined; - } - }; - - actions[APPEND] = function () { - if (key === undefined) { - key = newChar; - } else { - key += newChar; - } - }; - - actions[INC_SUB_PATH_DEPTH] = function () { - actions[APPEND](); - subPathDepth++; - }; - - actions[PUSH_SUB_PATH] = function () { - if (subPathDepth > 0) { - subPathDepth--; - mode = IN_SUB_PATH; - actions[APPEND](); - } else { - subPathDepth = 0; - if (key === undefined) { return false } - key = formatSubPath(key); - if (key === false) { - return false - } else { - actions[PUSH](); - } - } - }; - - function maybeUnescapeQuote () { - var nextChar = path[index + 1]; - if ((mode === IN_SINGLE_QUOTE && nextChar === "'") || - (mode === IN_DOUBLE_QUOTE && nextChar === '"')) { - index++; - newChar = '\\' + nextChar; - actions[APPEND](); - return true - } - } - - while (mode !== null) { - index++; - c = path[index]; - - if (c === '\\' && maybeUnescapeQuote()) { - continue - } - - type = getPathCharType(c); - typeMap = pathStateMachine[mode]; - transition = typeMap[type] || typeMap['else'] || ERROR; - - if (transition === ERROR) { - return // parse error - } - - mode = transition[0]; - action = actions[transition[1]]; - if (action) { - newChar = transition[2]; - newChar = newChar === undefined - ? c - : newChar; - if (action() === false) { - return - } - } - - if (mode === AFTER_PATH) { - return keys - } - } -} - - - - - -var I18nPath = function I18nPath () { - this._cache = Object.create(null); -}; - -/** - * External parse that check for a cache hit first - */ -I18nPath.prototype.parsePath = function parsePath (path) { - var hit = this._cache[path]; - if (!hit) { - hit = parse$1(path); - if (hit) { - this._cache[path] = hit; - } - } - return hit || [] -}; - -/** - * Get path value from path string - */ -I18nPath.prototype.getPathValue = function getPathValue (obj, path) { - if (!isObject(obj)) { return null } - - var paths = this.parsePath(path); - if (paths.length === 0) { - return null - } else { - var length = paths.length; - var last = obj; - var i = 0; - while (i < length) { - var value = last[paths[i]]; - if (value === undefined) { - return null - } - last = value; - i++; - } - - return last - } -}; - -/* */ - - - -var htmlTagMatcher = /<\/?[\w\s="/.':;#-\/]+>/; -var linkKeyMatcher = /(?:@(?:\.[a-z]+)?:(?:[\w\-_|.]+|\([\w\-_|.]+\)))/g; -var linkKeyPrefixMatcher = /^@(?:\.([a-z]+))?:/; -var bracketsMatcher = /[()]/g; -var defaultModifiers = { - 'upper': function (str) { return str.toLocaleUpperCase(); }, - 'lower': function (str) { return str.toLocaleLowerCase(); }, - 'capitalize': function (str) { return ("" + (str.charAt(0).toLocaleUpperCase()) + (str.substr(1))); } -}; - -var defaultFormatter = new BaseFormatter(); - -var VueI18n = function VueI18n (options) { - var this$1 = this; - if ( options === void 0 ) options = {}; - - // Auto install if it is not done yet and `window` has `Vue`. - // To allow users to avoid auto-installation in some cases, - // this code should be placed here. See #290 - /* istanbul ignore if */ - if (!Vue && typeof window !== 'undefined' && window.Vue) { - install(window.Vue); - } - - var locale = options.locale || 'en-US'; - var fallbackLocale = options.fallbackLocale === false - ? false - : options.fallbackLocale || 'en-US'; - var messages = options.messages || {}; - var dateTimeFormats = options.dateTimeFormats || {}; - var numberFormats = options.numberFormats || {}; - - this._vm = null; - this._formatter = options.formatter || defaultFormatter; - this._modifiers = options.modifiers || {}; - this._missing = options.missing || null; - this._root = options.root || null; - this._sync = options.sync === undefined ? true : !!options.sync; - this._fallbackRoot = options.fallbackRoot === undefined - ? true - : !!options.fallbackRoot; - this._formatFallbackMessages = options.formatFallbackMessages === undefined - ? false - : !!options.formatFallbackMessages; - this._silentTranslationWarn = options.silentTranslationWarn === undefined - ? false - : options.silentTranslationWarn; - this._silentFallbackWarn = options.silentFallbackWarn === undefined - ? false - : !!options.silentFallbackWarn; - this._dateTimeFormatters = {}; - this._numberFormatters = {}; - this._path = new I18nPath(); - this._dataListeners = []; - this._componentInstanceCreatedListener = options.componentInstanceCreatedListener || null; - this._preserveDirectiveContent = options.preserveDirectiveContent === undefined - ? false - : !!options.preserveDirectiveContent; - this.pluralizationRules = options.pluralizationRules || {}; - this._warnHtmlInMessage = options.warnHtmlInMessage || 'off'; - this._postTranslation = options.postTranslation || null; - - /** - * @param choice {number} a choice index given by the input to $tc: `$tc('path.to.rule', choiceIndex)` - * @param choicesLength {number} an overall amount of available choices - * @returns a final choice index - */ - this.getChoiceIndex = function (choice, choicesLength) { - var thisPrototype = Object.getPrototypeOf(this$1); - if (thisPrototype && thisPrototype.getChoiceIndex) { - var prototypeGetChoiceIndex = (thisPrototype.getChoiceIndex); - return (prototypeGetChoiceIndex).call(this$1, choice, choicesLength) - } - - // Default (old) getChoiceIndex implementation - english-compatible - var defaultImpl = function (_choice, _choicesLength) { - _choice = Math.abs(_choice); - - if (_choicesLength === 2) { - return _choice - ? _choice > 1 - ? 1 - : 0 - : 1 - } - - return _choice ? Math.min(_choice, 2) : 0 - }; - - if (this$1.locale in this$1.pluralizationRules) { - return this$1.pluralizationRules[this$1.locale].apply(this$1, [choice, choicesLength]) - } else { - return defaultImpl(choice, choicesLength) - } - }; - - - this._exist = function (message, key) { - if (!message || !key) { return false } - if (!isNull(this$1._path.getPathValue(message, key))) { return true } - // fallback for flat key - if (message[key]) { return true } - return false - }; - - if (this._warnHtmlInMessage === 'warn' || this._warnHtmlInMessage === 'error') { - Object.keys(messages).forEach(function (locale) { - this$1._checkLocaleMessage(locale, this$1._warnHtmlInMessage, messages[locale]); - }); - } - - this._initVM({ - locale: locale, - fallbackLocale: fallbackLocale, - messages: messages, - dateTimeFormats: dateTimeFormats, - numberFormats: numberFormats - }); -}; - -var prototypeAccessors = { vm: { configurable: true },messages: { configurable: true },dateTimeFormats: { configurable: true },numberFormats: { configurable: true },availableLocales: { configurable: true },locale: { configurable: true },fallbackLocale: { configurable: true },formatFallbackMessages: { configurable: true },missing: { configurable: true },formatter: { configurable: true },silentTranslationWarn: { configurable: true },silentFallbackWarn: { configurable: true },preserveDirectiveContent: { configurable: true },warnHtmlInMessage: { configurable: true },postTranslation: { configurable: true } }; - -VueI18n.prototype._checkLocaleMessage = function _checkLocaleMessage (locale, level, message) { - var paths = []; - - var fn = function (level, locale, message, paths) { - if (isPlainObject(message)) { - Object.keys(message).forEach(function (key) { - var val = message[key]; - if (isPlainObject(val)) { - paths.push(key); - paths.push('.'); - fn(level, locale, val, paths); - paths.pop(); - paths.pop(); - } else { - paths.push(key); - fn(level, locale, val, paths); - paths.pop(); - } - }); - } else if (Array.isArray(message)) { - message.forEach(function (item, index) { - if (isPlainObject(item)) { - paths.push(("[" + index + "]")); - paths.push('.'); - fn(level, locale, item, paths); - paths.pop(); - paths.pop(); - } else { - paths.push(("[" + index + "]")); - fn(level, locale, item, paths); - paths.pop(); - } - }); - } else if (isString(message)) { - var ret = htmlTagMatcher.test(message); - if (ret) { - var msg = "Detected HTML in message '" + message + "' of keypath '" + (paths.join('')) + "' at '" + locale + "'. Consider component interpolation with '' to avoid XSS. See https://bit.ly/2ZqJzkp"; - if (level === 'warn') { - warn(msg); - } else if (level === 'error') { - error(msg); - } - } - } - }; - - fn(level, locale, message, paths); -}; - -VueI18n.prototype._initVM = function _initVM (data) { - var silent = Vue.config.silent; - Vue.config.silent = true; - this._vm = new Vue({ data: data }); - Vue.config.silent = silent; -}; - -VueI18n.prototype.destroyVM = function destroyVM () { - this._vm.$destroy(); -}; - -VueI18n.prototype.subscribeDataChanging = function subscribeDataChanging (vm) { - this._dataListeners.push(vm); -}; - -VueI18n.prototype.unsubscribeDataChanging = function unsubscribeDataChanging (vm) { - remove(this._dataListeners, vm); -}; - -VueI18n.prototype.watchI18nData = function watchI18nData () { - var self = this; - return this._vm.$watch('$data', function () { - var i = self._dataListeners.length; - while (i--) { - Vue.nextTick(function () { - self._dataListeners[i] && self._dataListeners[i].$forceUpdate(); - }); - } - }, { deep: true }) -}; - -VueI18n.prototype.watchLocale = function watchLocale () { - /* istanbul ignore if */ - if (!this._sync || !this._root) { return null } - var target = this._vm; - return this._root.$i18n.vm.$watch('locale', function (val) { - target.$set(target, 'locale', val); - target.$forceUpdate(); - }, { immediate: true }) -}; - -VueI18n.prototype.onComponentInstanceCreated = function onComponentInstanceCreated (newI18n) { - if (this._componentInstanceCreatedListener) { - this._componentInstanceCreatedListener(newI18n, this); - } -}; - -prototypeAccessors.vm.get = function () { return this._vm }; - -prototypeAccessors.messages.get = function () { return looseClone(this._getMessages()) }; -prototypeAccessors.dateTimeFormats.get = function () { return looseClone(this._getDateTimeFormats()) }; -prototypeAccessors.numberFormats.get = function () { return looseClone(this._getNumberFormats()) }; -prototypeAccessors.availableLocales.get = function () { return Object.keys(this.messages).sort() }; - -prototypeAccessors.locale.get = function () { return this._vm.locale }; -prototypeAccessors.locale.set = function (locale) { - this._vm.$set(this._vm, 'locale', locale); -}; - -prototypeAccessors.fallbackLocale.get = function () { return this._vm.fallbackLocale }; -prototypeAccessors.fallbackLocale.set = function (locale) { - this._localeChainCache = {}; - this._vm.$set(this._vm, 'fallbackLocale', locale); -}; - -prototypeAccessors.formatFallbackMessages.get = function () { return this._formatFallbackMessages }; -prototypeAccessors.formatFallbackMessages.set = function (fallback) { this._formatFallbackMessages = fallback; }; - -prototypeAccessors.missing.get = function () { return this._missing }; -prototypeAccessors.missing.set = function (handler) { this._missing = handler; }; - -prototypeAccessors.formatter.get = function () { return this._formatter }; -prototypeAccessors.formatter.set = function (formatter) { this._formatter = formatter; }; - -prototypeAccessors.silentTranslationWarn.get = function () { return this._silentTranslationWarn }; -prototypeAccessors.silentTranslationWarn.set = function (silent) { this._silentTranslationWarn = silent; }; - -prototypeAccessors.silentFallbackWarn.get = function () { return this._silentFallbackWarn }; -prototypeAccessors.silentFallbackWarn.set = function (silent) { this._silentFallbackWarn = silent; }; - -prototypeAccessors.preserveDirectiveContent.get = function () { return this._preserveDirectiveContent }; -prototypeAccessors.preserveDirectiveContent.set = function (preserve) { this._preserveDirectiveContent = preserve; }; - -prototypeAccessors.warnHtmlInMessage.get = function () { return this._warnHtmlInMessage }; -prototypeAccessors.warnHtmlInMessage.set = function (level) { - var this$1 = this; - - var orgLevel = this._warnHtmlInMessage; - this._warnHtmlInMessage = level; - if (orgLevel !== level && (level === 'warn' || level === 'error')) { - var messages = this._getMessages(); - Object.keys(messages).forEach(function (locale) { - this$1._checkLocaleMessage(locale, this$1._warnHtmlInMessage, messages[locale]); - }); - } -}; - -prototypeAccessors.postTranslation.get = function () { return this._postTranslation }; -prototypeAccessors.postTranslation.set = function (handler) { this._postTranslation = handler; }; - -VueI18n.prototype._getMessages = function _getMessages () { return this._vm.messages }; -VueI18n.prototype._getDateTimeFormats = function _getDateTimeFormats () { return this._vm.dateTimeFormats }; -VueI18n.prototype._getNumberFormats = function _getNumberFormats () { return this._vm.numberFormats }; - -VueI18n.prototype._warnDefault = function _warnDefault (locale, key, result, vm, values, interpolateMode) { - if (!isNull(result)) { return result } - if (this._missing) { - var missingRet = this._missing.apply(null, [locale, key, vm, values]); - if (isString(missingRet)) { - return missingRet - } - } else { - if (process.env.NODE_ENV !== 'production' && !this._isSilentTranslationWarn(key)) { - warn( - "Cannot translate the value of keypath '" + key + "'. " + - 'Use the value of keypath as default.' - ); - } - } - - if (this._formatFallbackMessages) { - var parsedArgs = parseArgs.apply(void 0, values); - return this._render(key, interpolateMode, parsedArgs.params, key) - } else { - return key - } -}; - -VueI18n.prototype._isFallbackRoot = function _isFallbackRoot (val) { - return !val && !isNull(this._root) && this._fallbackRoot -}; - -VueI18n.prototype._isSilentFallbackWarn = function _isSilentFallbackWarn (key) { - return this._silentFallbackWarn instanceof RegExp - ? this._silentFallbackWarn.test(key) - : this._silentFallbackWarn -}; - -VueI18n.prototype._isSilentFallback = function _isSilentFallback (locale, key) { - return this._isSilentFallbackWarn(key) && (this._isFallbackRoot() || locale !== this.fallbackLocale) -}; - -VueI18n.prototype._isSilentTranslationWarn = function _isSilentTranslationWarn (key) { - return this._silentTranslationWarn instanceof RegExp - ? this._silentTranslationWarn.test(key) - : this._silentTranslationWarn -}; - -VueI18n.prototype._interpolate = function _interpolate ( - locale, - message, - key, - host, - interpolateMode, - values, - visitedLinkStack -) { - if (!message) { return null } - - var pathRet = this._path.getPathValue(message, key); - if (Array.isArray(pathRet) || isPlainObject(pathRet)) { return pathRet } - - var ret; - if (isNull(pathRet)) { - /* istanbul ignore else */ - if (isPlainObject(message)) { - ret = message[key]; - if (!isString(ret)) { - if (process.env.NODE_ENV !== 'production' && !this._isSilentTranslationWarn(key) && !this._isSilentFallback(locale, key)) { - warn(("Value of key '" + key + "' is not a string!")); - } - return null - } - } else { - return null - } - } else { - /* istanbul ignore else */ - if (isString(pathRet)) { - ret = pathRet; - } else { - if (process.env.NODE_ENV !== 'production' && !this._isSilentTranslationWarn(key) && !this._isSilentFallback(locale, key)) { - warn(("Value of key '" + key + "' is not a string!")); - } - return null - } - } - - // Check for the existence of links within the translated string - if (ret.indexOf('@:') >= 0 || ret.indexOf('@.') >= 0) { - ret = this._link(locale, message, ret, host, 'raw', values, visitedLinkStack); - } - - return this._render(ret, interpolateMode, values, key) -}; - -VueI18n.prototype._link = function _link ( - locale, - message, - str, - host, - interpolateMode, - values, - visitedLinkStack -) { - var ret = str; - - // Match all the links within the local - // We are going to replace each of - // them with its translation - var matches = ret.match(linkKeyMatcher); - for (var idx in matches) { - // ie compatible: filter custom array - // prototype method - if (!matches.hasOwnProperty(idx)) { - continue - } - var link = matches[idx]; - var linkKeyPrefixMatches = link.match(linkKeyPrefixMatcher); - var linkPrefix = linkKeyPrefixMatches[0]; - var formatterName = linkKeyPrefixMatches[1]; - - // Remove the leading @:, @.case: and the brackets - var linkPlaceholder = link.replace(linkPrefix, '').replace(bracketsMatcher, ''); - - if (includes(visitedLinkStack, linkPlaceholder)) { - if (process.env.NODE_ENV !== 'production') { - warn(("Circular reference found. \"" + link + "\" is already visited in the chain of " + (visitedLinkStack.reverse().join(' <- ')))); - } - return ret - } - visitedLinkStack.push(linkPlaceholder); - - // Translate the link - var translated = this._interpolate( - locale, message, linkPlaceholder, host, - interpolateMode === 'raw' ? 'string' : interpolateMode, - interpolateMode === 'raw' ? undefined : values, - visitedLinkStack - ); - - if (this._isFallbackRoot(translated)) { - if (process.env.NODE_ENV !== 'production' && !this._isSilentTranslationWarn(linkPlaceholder)) { - warn(("Fall back to translate the link placeholder '" + linkPlaceholder + "' with root locale.")); - } - /* istanbul ignore if */ - if (!this._root) { throw Error('unexpected error') } - var root = this._root.$i18n; - translated = root._translate( - root._getMessages(), root.locale, root.fallbackLocale, - linkPlaceholder, host, interpolateMode, values - ); - } - translated = this._warnDefault( - locale, linkPlaceholder, translated, host, - Array.isArray(values) ? values : [values], - interpolateMode - ); - - if (this._modifiers.hasOwnProperty(formatterName)) { - translated = this._modifiers[formatterName](translated); - } else if (defaultModifiers.hasOwnProperty(formatterName)) { - translated = defaultModifiers[formatterName](translated); - } - - visitedLinkStack.pop(); - - // Replace the link with the translated - ret = !translated ? ret : ret.replace(link, translated); - } - - return ret -}; - -VueI18n.prototype._render = function _render (message, interpolateMode, values, path) { - var ret = this._formatter.interpolate(message, values, path); - - // If the custom formatter refuses to work - apply the default one - if (!ret) { - ret = defaultFormatter.interpolate(message, values, path); - } - - // if interpolateMode is **not** 'string' ('row'), - // return the compiled data (e.g. ['foo', VNode, 'bar']) with formatter - return interpolateMode === 'string' && !isString(ret) ? ret.join('') : ret -}; - -VueI18n.prototype._appendItemToChain = function _appendItemToChain (chain, item, blocks) { - var follow = false; - if (!includes(chain, item)) { - follow = true; - if (item) { - follow = item[item.length - 1] !== '!'; - item = item.replace(/!/g, ''); - chain.push(item); - if (blocks && blocks[item]) { - follow = blocks[item]; - } - } - } - return follow -}; - -VueI18n.prototype._appendLocaleToChain = function _appendLocaleToChain (chain, locale, blocks) { - var follow; - var tokens = locale.split('-'); - do { - var item = tokens.join('-'); - follow = this._appendItemToChain(chain, item, blocks); - tokens.splice(-1, 1); - } while (tokens.length && (follow === true)) - return follow -}; - -VueI18n.prototype._appendBlockToChain = function _appendBlockToChain (chain, block, blocks) { - var follow = true; - for (var i = 0; (i < block.length) && (isBoolean(follow)); i++) { - var locale = block[i]; - if (isString(locale)) { - follow = this._appendLocaleToChain(chain, locale, blocks); - } - } - return follow -}; - -VueI18n.prototype._getLocaleChain = function _getLocaleChain (start, fallbackLocale) { - if (start === '') { return [] } - - if (!this._localeChainCache) { - this._localeChainCache = {}; - } - - var chain = this._localeChainCache[start]; - if (!chain) { - if (!fallbackLocale) { - fallbackLocale = this.fallbackLocale; - } - chain = []; - - // first block defined by start - var block = [start]; - - // while any intervening block found - while (isArray(block)) { - block = this._appendBlockToChain( - chain, - block, - fallbackLocale - ); - } - - // last block defined by default - var defaults; - if (isArray(fallbackLocale)) { - defaults = fallbackLocale; - } else if (isObject(fallbackLocale)) { - /* $FlowFixMe */ - if (fallbackLocale['default']) { - defaults = fallbackLocale['default']; - } else { - defaults = null; - } - } else { - defaults = fallbackLocale; - } - - // convert defaults to array - if (isString(defaults)) { - block = [defaults]; - } else { - block = defaults; - } - if (block) { - this._appendBlockToChain( - chain, - block, - null - ); - } - this._localeChainCache[start] = chain; - } - return chain -}; - -VueI18n.prototype._translate = function _translate ( - messages, - locale, - fallback, - key, - host, - interpolateMode, - args -) { - var chain = this._getLocaleChain(locale, fallback); - var res; - for (var i = 0; i < chain.length; i++) { - var step = chain[i]; - res = - this._interpolate(step, messages[step], key, host, interpolateMode, args, [key]); - if (!isNull(res)) { - if (step !== locale && process.env.NODE_ENV !== 'production' && !this._isSilentTranslationWarn(key) && !this._isSilentFallbackWarn(key)) { - warn(("Fall back to translate the keypath '" + key + "' with '" + step + "' locale.")); - } - return res - } - } - return null -}; - -VueI18n.prototype._t = function _t (key, _locale, messages, host) { - var ref; - - var values = [], len = arguments.length - 4; - while ( len-- > 0 ) values[ len ] = arguments[ len + 4 ]; - if (!key) { return '' } - - var parsedArgs = parseArgs.apply(void 0, values); - var locale = parsedArgs.locale || _locale; - - var ret = this._translate( - messages, locale, this.fallbackLocale, key, - host, 'string', parsedArgs.params - ); - if (this._isFallbackRoot(ret)) { - if (process.env.NODE_ENV !== 'production' && !this._isSilentTranslationWarn(key) && !this._isSilentFallbackWarn(key)) { - warn(("Fall back to translate the keypath '" + key + "' with root locale.")); - } - /* istanbul ignore if */ - if (!this._root) { throw Error('unexpected error') } - return (ref = this._root).$t.apply(ref, [ key ].concat( values )) - } else { - ret = this._warnDefault(locale, key, ret, host, values, 'string'); - if (this._postTranslation && ret !== null && ret !== undefined) { - ret = this._postTranslation(ret, key); - } - return ret - } -}; - -VueI18n.prototype.t = function t (key) { - var ref; - - var values = [], len = arguments.length - 1; - while ( len-- > 0 ) values[ len ] = arguments[ len + 1 ]; - return (ref = this)._t.apply(ref, [ key, this.locale, this._getMessages(), null ].concat( values )) -}; - -VueI18n.prototype._i = function _i (key, locale, messages, host, values) { - var ret = - this._translate(messages, locale, this.fallbackLocale, key, host, 'raw', values); - if (this._isFallbackRoot(ret)) { - if (process.env.NODE_ENV !== 'production' && !this._isSilentTranslationWarn(key)) { - warn(("Fall back to interpolate the keypath '" + key + "' with root locale.")); - } - if (!this._root) { throw Error('unexpected error') } - return this._root.$i18n.i(key, locale, values) - } else { - return this._warnDefault(locale, key, ret, host, [values], 'raw') - } -}; - -VueI18n.prototype.i = function i (key, locale, values) { - /* istanbul ignore if */ - if (!key) { return '' } - - if (!isString(locale)) { - locale = this.locale; - } - - return this._i(key, locale, this._getMessages(), null, values) -}; - -VueI18n.prototype._tc = function _tc ( - key, - _locale, - messages, - host, - choice -) { - var ref; - - var values = [], len = arguments.length - 5; - while ( len-- > 0 ) values[ len ] = arguments[ len + 5 ]; - if (!key) { return '' } - if (choice === undefined) { - choice = 1; - } - - var predefined = { 'count': choice, 'n': choice }; - var parsedArgs = parseArgs.apply(void 0, values); - parsedArgs.params = Object.assign(predefined, parsedArgs.params); - values = parsedArgs.locale === null ? [parsedArgs.params] : [parsedArgs.locale, parsedArgs.params]; - return this.fetchChoice((ref = this)._t.apply(ref, [ key, _locale, messages, host ].concat( values )), choice) -}; - -VueI18n.prototype.fetchChoice = function fetchChoice (message, choice) { - /* istanbul ignore if */ - if (!message && !isString(message)) { return null } - var choices = message.split('|'); - - choice = this.getChoiceIndex(choice, choices.length); - if (!choices[choice]) { return message } - return choices[choice].trim() -}; - -VueI18n.prototype.tc = function tc (key, choice) { - var ref; - - var values = [], len = arguments.length - 2; - while ( len-- > 0 ) values[ len ] = arguments[ len + 2 ]; - return (ref = this)._tc.apply(ref, [ key, this.locale, this._getMessages(), null, choice ].concat( values )) -}; - -VueI18n.prototype._te = function _te (key, locale, messages) { - var args = [], len = arguments.length - 3; - while ( len-- > 0 ) args[ len ] = arguments[ len + 3 ]; - - var _locale = parseArgs.apply(void 0, args).locale || locale; - return this._exist(messages[_locale], key) -}; - -VueI18n.prototype.te = function te (key, locale) { - return this._te(key, this.locale, this._getMessages(), locale) -}; - -VueI18n.prototype.getLocaleMessage = function getLocaleMessage (locale) { - return looseClone(this._vm.messages[locale] || {}) -}; - -VueI18n.prototype.setLocaleMessage = function setLocaleMessage (locale, message) { - if (this._warnHtmlInMessage === 'warn' || this._warnHtmlInMessage === 'error') { - this._checkLocaleMessage(locale, this._warnHtmlInMessage, message); - } - this._vm.$set(this._vm.messages, locale, message); -}; - -VueI18n.prototype.mergeLocaleMessage = function mergeLocaleMessage (locale, message) { - if (this._warnHtmlInMessage === 'warn' || this._warnHtmlInMessage === 'error') { - this._checkLocaleMessage(locale, this._warnHtmlInMessage, message); - } - this._vm.$set(this._vm.messages, locale, merge({}, this._vm.messages[locale] || {}, message)); -}; - -VueI18n.prototype.getDateTimeFormat = function getDateTimeFormat (locale) { - return looseClone(this._vm.dateTimeFormats[locale] || {}) -}; - -VueI18n.prototype.setDateTimeFormat = function setDateTimeFormat (locale, format) { - this._vm.$set(this._vm.dateTimeFormats, locale, format); - this._clearDateTimeFormat(locale, format); -}; - -VueI18n.prototype.mergeDateTimeFormat = function mergeDateTimeFormat (locale, format) { - this._vm.$set(this._vm.dateTimeFormats, locale, merge(this._vm.dateTimeFormats[locale] || {}, format)); - this._clearDateTimeFormat(locale, format); -}; - -VueI18n.prototype._clearDateTimeFormat = function _clearDateTimeFormat (locale, format) { - for (var key in format) { - var id = locale + "__" + key; - - if (!this._dateTimeFormatters.hasOwnProperty(id)) { - continue - } - - delete this._dateTimeFormatters[id]; - } -}; - -VueI18n.prototype._localizeDateTime = function _localizeDateTime ( - value, - locale, - fallback, - dateTimeFormats, - key -) { - var _locale = locale; - var formats = dateTimeFormats[_locale]; - - var chain = this._getLocaleChain(locale, fallback); - for (var i = 0; i < chain.length; i++) { - var current = _locale; - var step = chain[i]; - formats = dateTimeFormats[step]; - _locale = step; - // fallback locale - if (isNull(formats) || isNull(formats[key])) { - if (step !== locale && process.env.NODE_ENV !== 'production' && !this._isSilentTranslationWarn(key) && !this._isSilentFallbackWarn(key)) { - warn(("Fall back to '" + step + "' datetime formats from '" + current + "' datetime formats.")); - } - } else { - break - } - } - - if (isNull(formats) || isNull(formats[key])) { - return null - } else { - var format = formats[key]; - var id = _locale + "__" + key; - var formatter = this._dateTimeFormatters[id]; - if (!formatter) { - formatter = this._dateTimeFormatters[id] = new Intl.DateTimeFormat(_locale, format); - } - return formatter.format(value) - } -}; - -VueI18n.prototype._d = function _d (value, locale, key) { - /* istanbul ignore if */ - if (process.env.NODE_ENV !== 'production' && !VueI18n.availabilities.dateTimeFormat) { - warn('Cannot format a Date value due to not supported Intl.DateTimeFormat.'); - return '' - } - - if (!key) { - return new Intl.DateTimeFormat(locale).format(value) - } - - var ret = - this._localizeDateTime(value, locale, this.fallbackLocale, this._getDateTimeFormats(), key); - if (this._isFallbackRoot(ret)) { - if (process.env.NODE_ENV !== 'production' && !this._isSilentTranslationWarn(key) && !this._isSilentFallbackWarn(key)) { - warn(("Fall back to datetime localization of root: key '" + key + "'.")); - } - /* istanbul ignore if */ - if (!this._root) { throw Error('unexpected error') } - return this._root.$i18n.d(value, key, locale) - } else { - return ret || '' - } -}; - -VueI18n.prototype.d = function d (value) { - var args = [], len = arguments.length - 1; - while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ]; - - var locale = this.locale; - var key = null; - - if (args.length === 1) { - if (isString(args[0])) { - key = args[0]; - } else if (isObject(args[0])) { - if (args[0].locale) { - locale = args[0].locale; - } - if (args[0].key) { - key = args[0].key; - } - } - } else if (args.length === 2) { - if (isString(args[0])) { - key = args[0]; - } - if (isString(args[1])) { - locale = args[1]; - } - } - - return this._d(value, locale, key) -}; - -VueI18n.prototype.getNumberFormat = function getNumberFormat (locale) { - return looseClone(this._vm.numberFormats[locale] || {}) -}; - -VueI18n.prototype.setNumberFormat = function setNumberFormat (locale, format) { - this._vm.$set(this._vm.numberFormats, locale, format); - this._clearNumberFormat(locale, format); -}; - -VueI18n.prototype.mergeNumberFormat = function mergeNumberFormat (locale, format) { - this._vm.$set(this._vm.numberFormats, locale, merge(this._vm.numberFormats[locale] || {}, format)); - this._clearNumberFormat(locale, format); -}; - -VueI18n.prototype._clearNumberFormat = function _clearNumberFormat (locale, format) { - for (var key in format) { - var id = locale + "__" + key; - - if (!this._numberFormatters.hasOwnProperty(id)) { - continue - } - - delete this._numberFormatters[id]; - } -}; - -VueI18n.prototype._getNumberFormatter = function _getNumberFormatter ( - value, - locale, - fallback, - numberFormats, - key, - options -) { - var _locale = locale; - var formats = numberFormats[_locale]; - - var chain = this._getLocaleChain(locale, fallback); - for (var i = 0; i < chain.length; i++) { - var current = _locale; - var step = chain[i]; - formats = numberFormats[step]; - _locale = step; - // fallback locale - if (isNull(formats) || isNull(formats[key])) { - if (step !== locale && process.env.NODE_ENV !== 'production' && !this._isSilentTranslationWarn(key) && !this._isSilentFallbackWarn(key)) { - warn(("Fall back to '" + step + "' number formats from '" + current + "' number formats.")); - } - } else { - break - } - } - - if (isNull(formats) || isNull(formats[key])) { - return null - } else { - var format = formats[key]; - - var formatter; - if (options) { - // If options specified - create one time number formatter - formatter = new Intl.NumberFormat(_locale, Object.assign({}, format, options)); - } else { - var id = _locale + "__" + key; - formatter = this._numberFormatters[id]; - if (!formatter) { - formatter = this._numberFormatters[id] = new Intl.NumberFormat(_locale, format); - } - } - return formatter - } -}; - -VueI18n.prototype._n = function _n (value, locale, key, options) { - /* istanbul ignore if */ - if (!VueI18n.availabilities.numberFormat) { - if (process.env.NODE_ENV !== 'production') { - warn('Cannot format a Number value due to not supported Intl.NumberFormat.'); - } - return '' - } - - if (!key) { - var nf = !options ? new Intl.NumberFormat(locale) : new Intl.NumberFormat(locale, options); - return nf.format(value) - } - - var formatter = this._getNumberFormatter(value, locale, this.fallbackLocale, this._getNumberFormats(), key, options); - var ret = formatter && formatter.format(value); - if (this._isFallbackRoot(ret)) { - if (process.env.NODE_ENV !== 'production' && !this._isSilentTranslationWarn(key) && !this._isSilentFallbackWarn(key)) { - warn(("Fall back to number localization of root: key '" + key + "'.")); - } - /* istanbul ignore if */ - if (!this._root) { throw Error('unexpected error') } - return this._root.$i18n.n(value, Object.assign({}, { key: key, locale: locale }, options)) - } else { - return ret || '' - } -}; - -VueI18n.prototype.n = function n (value) { - var args = [], len = arguments.length - 1; - while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ]; - - var locale = this.locale; - var key = null; - var options = null; - - if (args.length === 1) { - if (isString(args[0])) { - key = args[0]; - } else if (isObject(args[0])) { - if (args[0].locale) { - locale = args[0].locale; - } - if (args[0].key) { - key = args[0].key; - } - - // Filter out number format options only - options = Object.keys(args[0]).reduce(function (acc, key) { - var obj; - - if (includes(numberFormatKeys, key)) { - return Object.assign({}, acc, ( obj = {}, obj[key] = args[0][key], obj )) - } - return acc - }, null); - } - } else if (args.length === 2) { - if (isString(args[0])) { - key = args[0]; - } - if (isString(args[1])) { - locale = args[1]; - } - } - - return this._n(value, locale, key, options) -}; - -VueI18n.prototype._ntp = function _ntp (value, locale, key, options) { - /* istanbul ignore if */ - if (!VueI18n.availabilities.numberFormat) { - if (process.env.NODE_ENV !== 'production') { - warn('Cannot format to parts a Number value due to not supported Intl.NumberFormat.'); - } - return [] - } - - if (!key) { - var nf = !options ? new Intl.NumberFormat(locale) : new Intl.NumberFormat(locale, options); - return nf.formatToParts(value) - } - - var formatter = this._getNumberFormatter(value, locale, this.fallbackLocale, this._getNumberFormats(), key, options); - var ret = formatter && formatter.formatToParts(value); - if (this._isFallbackRoot(ret)) { - if (process.env.NODE_ENV !== 'production' && !this._isSilentTranslationWarn(key)) { - warn(("Fall back to format number to parts of root: key '" + key + "' .")); - } - /* istanbul ignore if */ - if (!this._root) { throw Error('unexpected error') } - return this._root.$i18n._ntp(value, locale, key, options) - } else { - return ret || [] - } -}; - -Object.defineProperties( VueI18n.prototype, prototypeAccessors ); - -var availabilities; -// $FlowFixMe -Object.defineProperty(VueI18n, 'availabilities', { - get: function get () { - if (!availabilities) { - var intlDefined = typeof Intl !== 'undefined'; - availabilities = { - dateTimeFormat: intlDefined && typeof Intl.DateTimeFormat !== 'undefined', - numberFormat: intlDefined && typeof Intl.NumberFormat !== 'undefined' - }; - } - - return availabilities - } -}); - -VueI18n.install = install; -VueI18n.version = '8.20.0'; - -module.exports = VueI18n; diff --git a/node_modules/vue-i18n/dist/vue-i18n.esm.browser.js b/node_modules/vue-i18n/dist/vue-i18n.esm.browser.js deleted file mode 100644 index d996b59..0000000 --- a/node_modules/vue-i18n/dist/vue-i18n.esm.browser.js +++ /dev/null @@ -1,2085 +0,0 @@ -/* */ - -/** - * constants - */ - -const numberFormatKeys = [ - 'style', - 'currency', - 'currencyDisplay', - 'useGrouping', - 'minimumIntegerDigits', - 'minimumFractionDigits', - 'maximumFractionDigits', - 'minimumSignificantDigits', - 'maximumSignificantDigits', - 'localeMatcher', - 'formatMatcher', - 'unit' -]; - -/** - * utilities - */ - -function warn (msg, err) { - if (typeof console !== 'undefined') { - console.warn('[vue-i18n] ' + msg); - /* istanbul ignore if */ - if (err) { - console.warn(err.stack); - } - } -} - -function error (msg, err) { - if (typeof console !== 'undefined') { - console.error('[vue-i18n] ' + msg); - /* istanbul ignore if */ - if (err) { - console.error(err.stack); - } - } -} - -const isArray = Array.isArray; - -function isObject (obj) { - return obj !== null && typeof obj === 'object' -} - -function isBoolean (val) { - return typeof val === 'boolean' -} - -function isString (val) { - return typeof val === 'string' -} - -const toString = Object.prototype.toString; -const OBJECT_STRING = '[object Object]'; -function isPlainObject (obj) { - return toString.call(obj) === OBJECT_STRING -} - -function isNull (val) { - return val === null || val === undefined -} - -function parseArgs (...args) { - let locale = null; - let params = null; - if (args.length === 1) { - if (isObject(args[0]) || Array.isArray(args[0])) { - params = args[0]; - } else if (typeof args[0] === 'string') { - locale = args[0]; - } - } else if (args.length === 2) { - if (typeof args[0] === 'string') { - locale = args[0]; - } - /* istanbul ignore if */ - if (isObject(args[1]) || Array.isArray(args[1])) { - params = args[1]; - } - } - - return { locale, params } -} - -function looseClone (obj) { - return JSON.parse(JSON.stringify(obj)) -} - -function remove (arr, item) { - if (arr.length) { - const index = arr.indexOf(item); - if (index > -1) { - return arr.splice(index, 1) - } - } -} - -function includes (arr, item) { - return !!~arr.indexOf(item) -} - -const hasOwnProperty = Object.prototype.hasOwnProperty; -function hasOwn (obj, key) { - return hasOwnProperty.call(obj, key) -} - -function merge (target) { - const output = Object(target); - for (let i = 1; i < arguments.length; i++) { - const source = arguments[i]; - if (source !== undefined && source !== null) { - let key; - for (key in source) { - if (hasOwn(source, key)) { - if (isObject(source[key])) { - output[key] = merge(output[key], source[key]); - } else { - output[key] = source[key]; - } - } - } - } - } - return output -} - -function looseEqual (a, b) { - if (a === b) { return true } - const isObjectA = isObject(a); - const isObjectB = isObject(b); - if (isObjectA && isObjectB) { - try { - const isArrayA = Array.isArray(a); - const isArrayB = Array.isArray(b); - if (isArrayA && isArrayB) { - return a.length === b.length && a.every((e, i) => { - return looseEqual(e, b[i]) - }) - } else if (!isArrayA && !isArrayB) { - const keysA = Object.keys(a); - const keysB = Object.keys(b); - return keysA.length === keysB.length && keysA.every((key) => { - return looseEqual(a[key], b[key]) - }) - } else { - /* istanbul ignore next */ - return false - } - } catch (e) { - /* istanbul ignore next */ - return false - } - } else if (!isObjectA && !isObjectB) { - return String(a) === String(b) - } else { - return false - } -} - -/* */ - -function extend (Vue) { - if (!Vue.prototype.hasOwnProperty('$i18n')) { - // $FlowFixMe - Object.defineProperty(Vue.prototype, '$i18n', { - get () { return this._i18n } - }); - } - - Vue.prototype.$t = function (key, ...values) { - const i18n = this.$i18n; - return i18n._t(key, i18n.locale, i18n._getMessages(), this, ...values) - }; - - Vue.prototype.$tc = function (key, choice, ...values) { - const i18n = this.$i18n; - return i18n._tc(key, i18n.locale, i18n._getMessages(), this, choice, ...values) - }; - - Vue.prototype.$te = function (key, locale) { - const i18n = this.$i18n; - return i18n._te(key, i18n.locale, i18n._getMessages(), locale) - }; - - Vue.prototype.$d = function (value, ...args) { - return this.$i18n.d(value, ...args) - }; - - Vue.prototype.$n = function (value, ...args) { - return this.$i18n.n(value, ...args) - }; -} - -/* */ - -var mixin = { - beforeCreate () { - const options = this.$options; - options.i18n = options.i18n || (options.__i18n ? {} : null); - - if (options.i18n) { - if (options.i18n instanceof VueI18n) { - // init locale messages via custom blocks - if (options.__i18n) { - try { - let localeMessages = {}; - options.__i18n.forEach(resource => { - localeMessages = merge(localeMessages, JSON.parse(resource)); - }); - Object.keys(localeMessages).forEach((locale) => { - options.i18n.mergeLocaleMessage(locale, localeMessages[locale]); - }); - } catch (e) { - { - error(`Cannot parse locale messages via custom blocks.`, e); - } - } - } - this._i18n = options.i18n; - this._i18nWatcher = this._i18n.watchI18nData(); - } else if (isPlainObject(options.i18n)) { - const rootI18n = this.$root && this.$root.$i18n && this.$root.$i18n instanceof VueI18n - ? this.$root.$i18n - : null; - // component local i18n - if (rootI18n) { - options.i18n.root = this.$root; - options.i18n.formatter = rootI18n.formatter; - options.i18n.fallbackLocale = rootI18n.fallbackLocale; - options.i18n.formatFallbackMessages = rootI18n.formatFallbackMessages; - options.i18n.silentTranslationWarn = rootI18n.silentTranslationWarn; - options.i18n.silentFallbackWarn = rootI18n.silentFallbackWarn; - options.i18n.pluralizationRules = rootI18n.pluralizationRules; - options.i18n.preserveDirectiveContent = rootI18n.preserveDirectiveContent; - } - - // init locale messages via custom blocks - if (options.__i18n) { - try { - let localeMessages = {}; - options.__i18n.forEach(resource => { - localeMessages = merge(localeMessages, JSON.parse(resource)); - }); - options.i18n.messages = localeMessages; - } catch (e) { - { - warn(`Cannot parse locale messages via custom blocks.`, e); - } - } - } - - const { sharedMessages } = options.i18n; - if (sharedMessages && isPlainObject(sharedMessages)) { - options.i18n.messages = merge(options.i18n.messages, sharedMessages); - } - - this._i18n = new VueI18n(options.i18n); - this._i18nWatcher = this._i18n.watchI18nData(); - - if (options.i18n.sync === undefined || !!options.i18n.sync) { - this._localeWatcher = this.$i18n.watchLocale(); - } - - if (rootI18n) { - rootI18n.onComponentInstanceCreated(this._i18n); - } - } else { - { - warn(`Cannot be interpreted 'i18n' option.`); - } - } - } else if (this.$root && this.$root.$i18n && this.$root.$i18n instanceof VueI18n) { - // root i18n - this._i18n = this.$root.$i18n; - } else if (options.parent && options.parent.$i18n && options.parent.$i18n instanceof VueI18n) { - // parent i18n - this._i18n = options.parent.$i18n; - } - }, - - beforeMount () { - const options = this.$options; - options.i18n = options.i18n || (options.__i18n ? {} : null); - - if (options.i18n) { - if (options.i18n instanceof VueI18n) { - // init locale messages via custom blocks - this._i18n.subscribeDataChanging(this); - this._subscribing = true; - } else if (isPlainObject(options.i18n)) { - this._i18n.subscribeDataChanging(this); - this._subscribing = true; - } else { - { - warn(`Cannot be interpreted 'i18n' option.`); - } - } - } else if (this.$root && this.$root.$i18n && this.$root.$i18n instanceof VueI18n) { - this._i18n.subscribeDataChanging(this); - this._subscribing = true; - } else if (options.parent && options.parent.$i18n && options.parent.$i18n instanceof VueI18n) { - this._i18n.subscribeDataChanging(this); - this._subscribing = true; - } - }, - - beforeDestroy () { - if (!this._i18n) { return } - - const self = this; - this.$nextTick(() => { - if (self._subscribing) { - self._i18n.unsubscribeDataChanging(self); - delete self._subscribing; - } - - if (self._i18nWatcher) { - self._i18nWatcher(); - self._i18n.destroyVM(); - delete self._i18nWatcher; - } - - if (self._localeWatcher) { - self._localeWatcher(); - delete self._localeWatcher; - } - }); - } -}; - -/* */ - -var interpolationComponent = { - name: 'i18n', - functional: true, - props: { - tag: { - type: [String, Boolean, Object], - default: 'span' - }, - path: { - type: String, - required: true - }, - locale: { - type: String - }, - places: { - type: [Array, Object] - } - }, - render (h, { data, parent, props, slots }) { - const { $i18n } = parent; - if (!$i18n) { - { - warn('Cannot find VueI18n instance!'); - } - return - } - - const { path, locale, places } = props; - const params = slots(); - const children = $i18n.i( - path, - locale, - onlyHasDefaultPlace(params) || places - ? useLegacyPlaces(params.default, places) - : params - ); - - const tag = (!!props.tag && props.tag !== true) || props.tag === false ? props.tag : 'span'; - return tag ? h(tag, data, children) : children - } -}; - -function onlyHasDefaultPlace (params) { - let prop; - for (prop in params) { - if (prop !== 'default') { return false } - } - return Boolean(prop) -} - -function useLegacyPlaces (children, places) { - const params = places ? createParamsFromPlaces(places) : {}; - - if (!children) { return params } - - // Filter empty text nodes - children = children.filter(child => { - return child.tag || child.text.trim() !== '' - }); - - const everyPlace = children.every(vnodeHasPlaceAttribute); - if (everyPlace) { - warn('`place` attribute is deprecated in next major version. Please switch to Vue slots.'); - } - - return children.reduce( - everyPlace ? assignChildPlace : assignChildIndex, - params - ) -} - -function createParamsFromPlaces (places) { - { - warn('`places` prop is deprecated in next major version. Please switch to Vue slots.'); - } - - return Array.isArray(places) - ? places.reduce(assignChildIndex, {}) - : Object.assign({}, places) -} - -function assignChildPlace (params, child) { - if (child.data && child.data.attrs && child.data.attrs.place) { - params[child.data.attrs.place] = child; - } - return params -} - -function assignChildIndex (params, child, index) { - params[index] = child; - return params -} - -function vnodeHasPlaceAttribute (vnode) { - return Boolean(vnode.data && vnode.data.attrs && vnode.data.attrs.place) -} - -/* */ - -var numberComponent = { - name: 'i18n-n', - functional: true, - props: { - tag: { - type: [String, Boolean, Object], - default: 'span' - }, - value: { - type: Number, - required: true - }, - format: { - type: [String, Object] - }, - locale: { - type: String - } - }, - render (h, { props, parent, data }) { - const i18n = parent.$i18n; - - if (!i18n) { - { - warn('Cannot find VueI18n instance!'); - } - return null - } - - let key = null; - let options = null; - - if (isString(props.format)) { - key = props.format; - } else if (isObject(props.format)) { - if (props.format.key) { - key = props.format.key; - } - - // Filter out number format options only - options = Object.keys(props.format).reduce((acc, prop) => { - if (includes(numberFormatKeys, prop)) { - return Object.assign({}, acc, { [prop]: props.format[prop] }) - } - return acc - }, null); - } - - const locale = props.locale || i18n.locale; - const parts = i18n._ntp(props.value, locale, key, options); - - const values = parts.map((part, index) => { - const slot = data.scopedSlots && data.scopedSlots[part.type]; - return slot ? slot({ [part.type]: part.value, index, parts }) : part.value - }); - - const tag = (!!props.tag && props.tag !== true) || props.tag === false ? props.tag : 'span'; - return tag - ? h(tag, { - attrs: data.attrs, - 'class': data['class'], - staticClass: data.staticClass - }, values) - : values - } -}; - -/* */ - -function bind (el, binding, vnode) { - if (!assert(el, vnode)) { return } - - t(el, binding, vnode); -} - -function update (el, binding, vnode, oldVNode) { - if (!assert(el, vnode)) { return } - - const i18n = vnode.context.$i18n; - if (localeEqual(el, vnode) && - (looseEqual(binding.value, binding.oldValue) && - looseEqual(el._localeMessage, i18n.getLocaleMessage(i18n.locale)))) { return } - - t(el, binding, vnode); -} - -function unbind (el, binding, vnode, oldVNode) { - const vm = vnode.context; - if (!vm) { - warn('Vue instance does not exists in VNode context'); - return - } - - const i18n = vnode.context.$i18n || {}; - if (!binding.modifiers.preserve && !i18n.preserveDirectiveContent) { - el.textContent = ''; - } - el._vt = undefined; - delete el['_vt']; - el._locale = undefined; - delete el['_locale']; - el._localeMessage = undefined; - delete el['_localeMessage']; -} - -function assert (el, vnode) { - const vm = vnode.context; - if (!vm) { - warn('Vue instance does not exists in VNode context'); - return false - } - - if (!vm.$i18n) { - warn('VueI18n instance does not exists in Vue instance'); - return false - } - - return true -} - -function localeEqual (el, vnode) { - const vm = vnode.context; - return el._locale === vm.$i18n.locale -} - -function t (el, binding, vnode) { - const value = binding.value; - - const { path, locale, args, choice } = parseValue(value); - if (!path && !locale && !args) { - warn('value type not supported'); - return - } - - if (!path) { - warn('`path` is required in v-t directive'); - return - } - - const vm = vnode.context; - if (choice != null) { - el._vt = el.textContent = vm.$i18n.tc(path, choice, ...makeParams(locale, args)); - } else { - el._vt = el.textContent = vm.$i18n.t(path, ...makeParams(locale, args)); - } - el._locale = vm.$i18n.locale; - el._localeMessage = vm.$i18n.getLocaleMessage(vm.$i18n.locale); -} - -function parseValue (value) { - let path; - let locale; - let args; - let choice; - - if (isString(value)) { - path = value; - } else if (isPlainObject(value)) { - path = value.path; - locale = value.locale; - args = value.args; - choice = value.choice; - } - - return { path, locale, args, choice } -} - -function makeParams (locale, args) { - const params = []; - - locale && params.push(locale); - if (args && (Array.isArray(args) || isPlainObject(args))) { - params.push(args); - } - - return params -} - -let Vue; - -function install (_Vue) { - /* istanbul ignore if */ - if (install.installed && _Vue === Vue) { - warn('already installed.'); - return - } - install.installed = true; - - Vue = _Vue; - - const version = (Vue.version && Number(Vue.version.split('.')[0])) || -1; - /* istanbul ignore if */ - if (version < 2) { - warn(`vue-i18n (${install.version}) need to use Vue 2.0 or later (Vue: ${Vue.version}).`); - return - } - - extend(Vue); - Vue.mixin(mixin); - Vue.directive('t', { bind, update, unbind }); - Vue.component(interpolationComponent.name, interpolationComponent); - Vue.component(numberComponent.name, numberComponent); - - // use simple mergeStrategies to prevent i18n instance lose '__proto__' - const strats = Vue.config.optionMergeStrategies; - strats.i18n = function (parentVal, childVal) { - return childVal === undefined - ? parentVal - : childVal - }; -} - -/* */ - -class BaseFormatter { - - - constructor () { - this._caches = Object.create(null); - } - - interpolate (message, values) { - if (!values) { - return [message] - } - let tokens = this._caches[message]; - if (!tokens) { - tokens = parse(message); - this._caches[message] = tokens; - } - return compile(tokens, values) - } -} - - - -const RE_TOKEN_LIST_VALUE = /^(?:\d)+/; -const RE_TOKEN_NAMED_VALUE = /^(?:\w)+/; - -function parse (format) { - const tokens = []; - let position = 0; - - let text = ''; - while (position < format.length) { - let char = format[position++]; - if (char === '{') { - if (text) { - tokens.push({ type: 'text', value: text }); - } - - text = ''; - let sub = ''; - char = format[position++]; - while (char !== undefined && char !== '}') { - sub += char; - char = format[position++]; - } - const isClosed = char === '}'; - - const type = RE_TOKEN_LIST_VALUE.test(sub) - ? 'list' - : isClosed && RE_TOKEN_NAMED_VALUE.test(sub) - ? 'named' - : 'unknown'; - tokens.push({ value: sub, type }); - } else if (char === '%') { - // when found rails i18n syntax, skip text capture - if (format[(position)] !== '{') { - text += char; - } - } else { - text += char; - } - } - - text && tokens.push({ type: 'text', value: text }); - - return tokens -} - -function compile (tokens, values) { - const compiled = []; - let index = 0; - - const mode = Array.isArray(values) - ? 'list' - : isObject(values) - ? 'named' - : 'unknown'; - if (mode === 'unknown') { return compiled } - - while (index < tokens.length) { - const token = tokens[index]; - switch (token.type) { - case 'text': - compiled.push(token.value); - break - case 'list': - compiled.push(values[parseInt(token.value, 10)]); - break - case 'named': - if (mode === 'named') { - compiled.push((values)[token.value]); - } else { - { - warn(`Type of token '${token.type}' and format of value '${mode}' don't match!`); - } - } - break - case 'unknown': - { - warn(`Detect 'unknown' type of token!`); - } - break - } - index++; - } - - return compiled -} - -/* */ - -/** - * Path parser - * - Inspired: - * Vue.js Path parser - */ - -// actions -const APPEND = 0; -const PUSH = 1; -const INC_SUB_PATH_DEPTH = 2; -const PUSH_SUB_PATH = 3; - -// states -const BEFORE_PATH = 0; -const IN_PATH = 1; -const BEFORE_IDENT = 2; -const IN_IDENT = 3; -const IN_SUB_PATH = 4; -const IN_SINGLE_QUOTE = 5; -const IN_DOUBLE_QUOTE = 6; -const AFTER_PATH = 7; -const ERROR = 8; - -const pathStateMachine = []; - -pathStateMachine[BEFORE_PATH] = { - 'ws': [BEFORE_PATH], - 'ident': [IN_IDENT, APPEND], - '[': [IN_SUB_PATH], - 'eof': [AFTER_PATH] -}; - -pathStateMachine[IN_PATH] = { - 'ws': [IN_PATH], - '.': [BEFORE_IDENT], - '[': [IN_SUB_PATH], - 'eof': [AFTER_PATH] -}; - -pathStateMachine[BEFORE_IDENT] = { - 'ws': [BEFORE_IDENT], - 'ident': [IN_IDENT, APPEND], - '0': [IN_IDENT, APPEND], - 'number': [IN_IDENT, APPEND] -}; - -pathStateMachine[IN_IDENT] = { - 'ident': [IN_IDENT, APPEND], - '0': [IN_IDENT, APPEND], - 'number': [IN_IDENT, APPEND], - 'ws': [IN_PATH, PUSH], - '.': [BEFORE_IDENT, PUSH], - '[': [IN_SUB_PATH, PUSH], - 'eof': [AFTER_PATH, PUSH] -}; - -pathStateMachine[IN_SUB_PATH] = { - "'": [IN_SINGLE_QUOTE, APPEND], - '"': [IN_DOUBLE_QUOTE, APPEND], - '[': [IN_SUB_PATH, INC_SUB_PATH_DEPTH], - ']': [IN_PATH, PUSH_SUB_PATH], - 'eof': ERROR, - 'else': [IN_SUB_PATH, APPEND] -}; - -pathStateMachine[IN_SINGLE_QUOTE] = { - "'": [IN_SUB_PATH, APPEND], - 'eof': ERROR, - 'else': [IN_SINGLE_QUOTE, APPEND] -}; - -pathStateMachine[IN_DOUBLE_QUOTE] = { - '"': [IN_SUB_PATH, APPEND], - 'eof': ERROR, - 'else': [IN_DOUBLE_QUOTE, APPEND] -}; - -/** - * Check if an expression is a literal value. - */ - -const literalValueRE = /^\s?(?:true|false|-?[\d.]+|'[^']*'|"[^"]*")\s?$/; -function isLiteral (exp) { - return literalValueRE.test(exp) -} - -/** - * Strip quotes from a string - */ - -function stripQuotes (str) { - const a = str.charCodeAt(0); - const b = str.charCodeAt(str.length - 1); - return a === b && (a === 0x22 || a === 0x27) - ? str.slice(1, -1) - : str -} - -/** - * Determine the type of a character in a keypath. - */ - -function getPathCharType (ch) { - if (ch === undefined || ch === null) { return 'eof' } - - const code = ch.charCodeAt(0); - - switch (code) { - case 0x5B: // [ - case 0x5D: // ] - case 0x2E: // . - case 0x22: // " - case 0x27: // ' - return ch - - case 0x5F: // _ - case 0x24: // $ - case 0x2D: // - - return 'ident' - - case 0x09: // Tab - case 0x0A: // Newline - case 0x0D: // Return - case 0xA0: // No-break space - case 0xFEFF: // Byte Order Mark - case 0x2028: // Line Separator - case 0x2029: // Paragraph Separator - return 'ws' - } - - return 'ident' -} - -/** - * Format a subPath, return its plain form if it is - * a literal string or number. Otherwise prepend the - * dynamic indicator (*). - */ - -function formatSubPath (path) { - const trimmed = path.trim(); - // invalid leading 0 - if (path.charAt(0) === '0' && isNaN(path)) { return false } - - return isLiteral(trimmed) ? stripQuotes(trimmed) : '*' + trimmed -} - -/** - * Parse a string path into an array of segments - */ - -function parse$1 (path) { - const keys = []; - let index = -1; - let mode = BEFORE_PATH; - let subPathDepth = 0; - let c; - let key; - let newChar; - let type; - let transition; - let action; - let typeMap; - const actions = []; - - actions[PUSH] = function () { - if (key !== undefined) { - keys.push(key); - key = undefined; - } - }; - - actions[APPEND] = function () { - if (key === undefined) { - key = newChar; - } else { - key += newChar; - } - }; - - actions[INC_SUB_PATH_DEPTH] = function () { - actions[APPEND](); - subPathDepth++; - }; - - actions[PUSH_SUB_PATH] = function () { - if (subPathDepth > 0) { - subPathDepth--; - mode = IN_SUB_PATH; - actions[APPEND](); - } else { - subPathDepth = 0; - if (key === undefined) { return false } - key = formatSubPath(key); - if (key === false) { - return false - } else { - actions[PUSH](); - } - } - }; - - function maybeUnescapeQuote () { - const nextChar = path[index + 1]; - if ((mode === IN_SINGLE_QUOTE && nextChar === "'") || - (mode === IN_DOUBLE_QUOTE && nextChar === '"')) { - index++; - newChar = '\\' + nextChar; - actions[APPEND](); - return true - } - } - - while (mode !== null) { - index++; - c = path[index]; - - if (c === '\\' && maybeUnescapeQuote()) { - continue - } - - type = getPathCharType(c); - typeMap = pathStateMachine[mode]; - transition = typeMap[type] || typeMap['else'] || ERROR; - - if (transition === ERROR) { - return // parse error - } - - mode = transition[0]; - action = actions[transition[1]]; - if (action) { - newChar = transition[2]; - newChar = newChar === undefined - ? c - : newChar; - if (action() === false) { - return - } - } - - if (mode === AFTER_PATH) { - return keys - } - } -} - - - - - -class I18nPath { - - - constructor () { - this._cache = Object.create(null); - } - - /** - * External parse that check for a cache hit first - */ - parsePath (path) { - let hit = this._cache[path]; - if (!hit) { - hit = parse$1(path); - if (hit) { - this._cache[path] = hit; - } - } - return hit || [] - } - - /** - * Get path value from path string - */ - getPathValue (obj, path) { - if (!isObject(obj)) { return null } - - const paths = this.parsePath(path); - if (paths.length === 0) { - return null - } else { - const length = paths.length; - let last = obj; - let i = 0; - while (i < length) { - const value = last[paths[i]]; - if (value === undefined) { - return null - } - last = value; - i++; - } - - return last - } - } -} - -/* */ - - - -const htmlTagMatcher = /<\/?[\w\s="/.':;#-\/]+>/; -const linkKeyMatcher = /(?:@(?:\.[a-z]+)?:(?:[\w\-_|.]+|\([\w\-_|.]+\)))/g; -const linkKeyPrefixMatcher = /^@(?:\.([a-z]+))?:/; -const bracketsMatcher = /[()]/g; -const defaultModifiers = { - 'upper': str => str.toLocaleUpperCase(), - 'lower': str => str.toLocaleLowerCase(), - 'capitalize': str => `${str.charAt(0).toLocaleUpperCase()}${str.substr(1)}` -}; - -const defaultFormatter = new BaseFormatter(); - -class VueI18n { - - - - - - - - - - - - - - - - - - - - - - - - - - - - constructor (options = {}) { - // Auto install if it is not done yet and `window` has `Vue`. - // To allow users to avoid auto-installation in some cases, - // this code should be placed here. See #290 - /* istanbul ignore if */ - if (!Vue && typeof window !== 'undefined' && window.Vue) { - install(window.Vue); - } - - const locale = options.locale || 'en-US'; - const fallbackLocale = options.fallbackLocale === false - ? false - : options.fallbackLocale || 'en-US'; - const messages = options.messages || {}; - const dateTimeFormats = options.dateTimeFormats || {}; - const numberFormats = options.numberFormats || {}; - - this._vm = null; - this._formatter = options.formatter || defaultFormatter; - this._modifiers = options.modifiers || {}; - this._missing = options.missing || null; - this._root = options.root || null; - this._sync = options.sync === undefined ? true : !!options.sync; - this._fallbackRoot = options.fallbackRoot === undefined - ? true - : !!options.fallbackRoot; - this._formatFallbackMessages = options.formatFallbackMessages === undefined - ? false - : !!options.formatFallbackMessages; - this._silentTranslationWarn = options.silentTranslationWarn === undefined - ? false - : options.silentTranslationWarn; - this._silentFallbackWarn = options.silentFallbackWarn === undefined - ? false - : !!options.silentFallbackWarn; - this._dateTimeFormatters = {}; - this._numberFormatters = {}; - this._path = new I18nPath(); - this._dataListeners = []; - this._componentInstanceCreatedListener = options.componentInstanceCreatedListener || null; - this._preserveDirectiveContent = options.preserveDirectiveContent === undefined - ? false - : !!options.preserveDirectiveContent; - this.pluralizationRules = options.pluralizationRules || {}; - this._warnHtmlInMessage = options.warnHtmlInMessage || 'off'; - this._postTranslation = options.postTranslation || null; - - /** - * @param choice {number} a choice index given by the input to $tc: `$tc('path.to.rule', choiceIndex)` - * @param choicesLength {number} an overall amount of available choices - * @returns a final choice index - */ - this.getChoiceIndex = (choice, choicesLength) => { - const thisPrototype = Object.getPrototypeOf(this); - if (thisPrototype && thisPrototype.getChoiceIndex) { - const prototypeGetChoiceIndex = (thisPrototype.getChoiceIndex); - return (prototypeGetChoiceIndex).call(this, choice, choicesLength) - } - - // Default (old) getChoiceIndex implementation - english-compatible - const defaultImpl = (_choice, _choicesLength) => { - _choice = Math.abs(_choice); - - if (_choicesLength === 2) { - return _choice - ? _choice > 1 - ? 1 - : 0 - : 1 - } - - return _choice ? Math.min(_choice, 2) : 0 - }; - - if (this.locale in this.pluralizationRules) { - return this.pluralizationRules[this.locale].apply(this, [choice, choicesLength]) - } else { - return defaultImpl(choice, choicesLength) - } - }; - - - this._exist = (message, key) => { - if (!message || !key) { return false } - if (!isNull(this._path.getPathValue(message, key))) { return true } - // fallback for flat key - if (message[key]) { return true } - return false - }; - - if (this._warnHtmlInMessage === 'warn' || this._warnHtmlInMessage === 'error') { - Object.keys(messages).forEach(locale => { - this._checkLocaleMessage(locale, this._warnHtmlInMessage, messages[locale]); - }); - } - - this._initVM({ - locale, - fallbackLocale, - messages, - dateTimeFormats, - numberFormats - }); - } - - _checkLocaleMessage (locale, level, message) { - const paths = []; - - const fn = (level, locale, message, paths) => { - if (isPlainObject(message)) { - Object.keys(message).forEach(key => { - const val = message[key]; - if (isPlainObject(val)) { - paths.push(key); - paths.push('.'); - fn(level, locale, val, paths); - paths.pop(); - paths.pop(); - } else { - paths.push(key); - fn(level, locale, val, paths); - paths.pop(); - } - }); - } else if (Array.isArray(message)) { - message.forEach((item, index) => { - if (isPlainObject(item)) { - paths.push(`[${index}]`); - paths.push('.'); - fn(level, locale, item, paths); - paths.pop(); - paths.pop(); - } else { - paths.push(`[${index}]`); - fn(level, locale, item, paths); - paths.pop(); - } - }); - } else if (isString(message)) { - const ret = htmlTagMatcher.test(message); - if (ret) { - const msg = `Detected HTML in message '${message}' of keypath '${paths.join('')}' at '${locale}'. Consider component interpolation with '' to avoid XSS. See https://bit.ly/2ZqJzkp`; - if (level === 'warn') { - warn(msg); - } else if (level === 'error') { - error(msg); - } - } - } - }; - - fn(level, locale, message, paths); - } - - _initVM (data) { - const silent = Vue.config.silent; - Vue.config.silent = true; - this._vm = new Vue({ data }); - Vue.config.silent = silent; - } - - destroyVM () { - this._vm.$destroy(); - } - - subscribeDataChanging (vm) { - this._dataListeners.push(vm); - } - - unsubscribeDataChanging (vm) { - remove(this._dataListeners, vm); - } - - watchI18nData () { - const self = this; - return this._vm.$watch('$data', () => { - let i = self._dataListeners.length; - while (i--) { - Vue.nextTick(() => { - self._dataListeners[i] && self._dataListeners[i].$forceUpdate(); - }); - } - }, { deep: true }) - } - - watchLocale () { - /* istanbul ignore if */ - if (!this._sync || !this._root) { return null } - const target = this._vm; - return this._root.$i18n.vm.$watch('locale', (val) => { - target.$set(target, 'locale', val); - target.$forceUpdate(); - }, { immediate: true }) - } - - onComponentInstanceCreated (newI18n) { - if (this._componentInstanceCreatedListener) { - this._componentInstanceCreatedListener(newI18n, this); - } - } - - get vm () { return this._vm } - - get messages () { return looseClone(this._getMessages()) } - get dateTimeFormats () { return looseClone(this._getDateTimeFormats()) } - get numberFormats () { return looseClone(this._getNumberFormats()) } - get availableLocales () { return Object.keys(this.messages).sort() } - - get locale () { return this._vm.locale } - set locale (locale) { - this._vm.$set(this._vm, 'locale', locale); - } - - get fallbackLocale () { return this._vm.fallbackLocale } - set fallbackLocale (locale) { - this._localeChainCache = {}; - this._vm.$set(this._vm, 'fallbackLocale', locale); - } - - get formatFallbackMessages () { return this._formatFallbackMessages } - set formatFallbackMessages (fallback) { this._formatFallbackMessages = fallback; } - - get missing () { return this._missing } - set missing (handler) { this._missing = handler; } - - get formatter () { return this._formatter } - set formatter (formatter) { this._formatter = formatter; } - - get silentTranslationWarn () { return this._silentTranslationWarn } - set silentTranslationWarn (silent) { this._silentTranslationWarn = silent; } - - get silentFallbackWarn () { return this._silentFallbackWarn } - set silentFallbackWarn (silent) { this._silentFallbackWarn = silent; } - - get preserveDirectiveContent () { return this._preserveDirectiveContent } - set preserveDirectiveContent (preserve) { this._preserveDirectiveContent = preserve; } - - get warnHtmlInMessage () { return this._warnHtmlInMessage } - set warnHtmlInMessage (level) { - const orgLevel = this._warnHtmlInMessage; - this._warnHtmlInMessage = level; - if (orgLevel !== level && (level === 'warn' || level === 'error')) { - const messages = this._getMessages(); - Object.keys(messages).forEach(locale => { - this._checkLocaleMessage(locale, this._warnHtmlInMessage, messages[locale]); - }); - } - } - - get postTranslation () { return this._postTranslation } - set postTranslation (handler) { this._postTranslation = handler; } - - _getMessages () { return this._vm.messages } - _getDateTimeFormats () { return this._vm.dateTimeFormats } - _getNumberFormats () { return this._vm.numberFormats } - - _warnDefault (locale, key, result, vm, values, interpolateMode) { - if (!isNull(result)) { return result } - if (this._missing) { - const missingRet = this._missing.apply(null, [locale, key, vm, values]); - if (isString(missingRet)) { - return missingRet - } - } else { - if (!this._isSilentTranslationWarn(key)) { - warn( - `Cannot translate the value of keypath '${key}'. ` + - 'Use the value of keypath as default.' - ); - } - } - - if (this._formatFallbackMessages) { - const parsedArgs = parseArgs(...values); - return this._render(key, interpolateMode, parsedArgs.params, key) - } else { - return key - } - } - - _isFallbackRoot (val) { - return !val && !isNull(this._root) && this._fallbackRoot - } - - _isSilentFallbackWarn (key) { - return this._silentFallbackWarn instanceof RegExp - ? this._silentFallbackWarn.test(key) - : this._silentFallbackWarn - } - - _isSilentFallback (locale, key) { - return this._isSilentFallbackWarn(key) && (this._isFallbackRoot() || locale !== this.fallbackLocale) - } - - _isSilentTranslationWarn (key) { - return this._silentTranslationWarn instanceof RegExp - ? this._silentTranslationWarn.test(key) - : this._silentTranslationWarn - } - - _interpolate ( - locale, - message, - key, - host, - interpolateMode, - values, - visitedLinkStack - ) { - if (!message) { return null } - - const pathRet = this._path.getPathValue(message, key); - if (Array.isArray(pathRet) || isPlainObject(pathRet)) { return pathRet } - - let ret; - if (isNull(pathRet)) { - /* istanbul ignore else */ - if (isPlainObject(message)) { - ret = message[key]; - if (!isString(ret)) { - if (!this._isSilentTranslationWarn(key) && !this._isSilentFallback(locale, key)) { - warn(`Value of key '${key}' is not a string!`); - } - return null - } - } else { - return null - } - } else { - /* istanbul ignore else */ - if (isString(pathRet)) { - ret = pathRet; - } else { - if (!this._isSilentTranslationWarn(key) && !this._isSilentFallback(locale, key)) { - warn(`Value of key '${key}' is not a string!`); - } - return null - } - } - - // Check for the existence of links within the translated string - if (ret.indexOf('@:') >= 0 || ret.indexOf('@.') >= 0) { - ret = this._link(locale, message, ret, host, 'raw', values, visitedLinkStack); - } - - return this._render(ret, interpolateMode, values, key) - } - - _link ( - locale, - message, - str, - host, - interpolateMode, - values, - visitedLinkStack - ) { - let ret = str; - - // Match all the links within the local - // We are going to replace each of - // them with its translation - const matches = ret.match(linkKeyMatcher); - for (let idx in matches) { - // ie compatible: filter custom array - // prototype method - if (!matches.hasOwnProperty(idx)) { - continue - } - const link = matches[idx]; - const linkKeyPrefixMatches = link.match(linkKeyPrefixMatcher); - const [linkPrefix, formatterName] = linkKeyPrefixMatches; - - // Remove the leading @:, @.case: and the brackets - const linkPlaceholder = link.replace(linkPrefix, '').replace(bracketsMatcher, ''); - - if (includes(visitedLinkStack, linkPlaceholder)) { - { - warn(`Circular reference found. "${link}" is already visited in the chain of ${visitedLinkStack.reverse().join(' <- ')}`); - } - return ret - } - visitedLinkStack.push(linkPlaceholder); - - // Translate the link - let translated = this._interpolate( - locale, message, linkPlaceholder, host, - interpolateMode === 'raw' ? 'string' : interpolateMode, - interpolateMode === 'raw' ? undefined : values, - visitedLinkStack - ); - - if (this._isFallbackRoot(translated)) { - if (!this._isSilentTranslationWarn(linkPlaceholder)) { - warn(`Fall back to translate the link placeholder '${linkPlaceholder}' with root locale.`); - } - /* istanbul ignore if */ - if (!this._root) { throw Error('unexpected error') } - const root = this._root.$i18n; - translated = root._translate( - root._getMessages(), root.locale, root.fallbackLocale, - linkPlaceholder, host, interpolateMode, values - ); - } - translated = this._warnDefault( - locale, linkPlaceholder, translated, host, - Array.isArray(values) ? values : [values], - interpolateMode - ); - - if (this._modifiers.hasOwnProperty(formatterName)) { - translated = this._modifiers[formatterName](translated); - } else if (defaultModifiers.hasOwnProperty(formatterName)) { - translated = defaultModifiers[formatterName](translated); - } - - visitedLinkStack.pop(); - - // Replace the link with the translated - ret = !translated ? ret : ret.replace(link, translated); - } - - return ret - } - - _render (message, interpolateMode, values, path) { - let ret = this._formatter.interpolate(message, values, path); - - // If the custom formatter refuses to work - apply the default one - if (!ret) { - ret = defaultFormatter.interpolate(message, values, path); - } - - // if interpolateMode is **not** 'string' ('row'), - // return the compiled data (e.g. ['foo', VNode, 'bar']) with formatter - return interpolateMode === 'string' && !isString(ret) ? ret.join('') : ret - } - - _appendItemToChain (chain, item, blocks) { - let follow = false; - if (!includes(chain, item)) { - follow = true; - if (item) { - follow = item[item.length - 1] !== '!'; - item = item.replace(/!/g, ''); - chain.push(item); - if (blocks && blocks[item]) { - follow = blocks[item]; - } - } - } - return follow - } - - _appendLocaleToChain (chain, locale, blocks) { - let follow; - const tokens = locale.split('-'); - do { - const item = tokens.join('-'); - follow = this._appendItemToChain(chain, item, blocks); - tokens.splice(-1, 1); - } while (tokens.length && (follow === true)) - return follow - } - - _appendBlockToChain (chain, block, blocks) { - let follow = true; - for (let i = 0; (i < block.length) && (isBoolean(follow)); i++) { - const locale = block[i]; - if (isString(locale)) { - follow = this._appendLocaleToChain(chain, locale, blocks); - } - } - return follow - } - - _getLocaleChain (start, fallbackLocale) { - if (start === '') { return [] } - - if (!this._localeChainCache) { - this._localeChainCache = {}; - } - - let chain = this._localeChainCache[start]; - if (!chain) { - if (!fallbackLocale) { - fallbackLocale = this.fallbackLocale; - } - chain = []; - - // first block defined by start - let block = [start]; - - // while any intervening block found - while (isArray(block)) { - block = this._appendBlockToChain( - chain, - block, - fallbackLocale - ); - } - - // last block defined by default - let defaults; - if (isArray(fallbackLocale)) { - defaults = fallbackLocale; - } else if (isObject(fallbackLocale)) { - /* $FlowFixMe */ - if (fallbackLocale['default']) { - defaults = fallbackLocale['default']; - } else { - defaults = null; - } - } else { - defaults = fallbackLocale; - } - - // convert defaults to array - if (isString(defaults)) { - block = [defaults]; - } else { - block = defaults; - } - if (block) { - this._appendBlockToChain( - chain, - block, - null - ); - } - this._localeChainCache[start] = chain; - } - return chain - } - - _translate ( - messages, - locale, - fallback, - key, - host, - interpolateMode, - args - ) { - const chain = this._getLocaleChain(locale, fallback); - let res; - for (let i = 0; i < chain.length; i++) { - const step = chain[i]; - res = - this._interpolate(step, messages[step], key, host, interpolateMode, args, [key]); - if (!isNull(res)) { - if (step !== locale && "development" !== 'production' && !this._isSilentTranslationWarn(key) && !this._isSilentFallbackWarn(key)) { - warn(("Fall back to translate the keypath '" + key + "' with '" + step + "' locale.")); - } - return res - } - } - return null - } - - _t (key, _locale, messages, host, ...values) { - if (!key) { return '' } - - const parsedArgs = parseArgs(...values); - const locale = parsedArgs.locale || _locale; - - let ret = this._translate( - messages, locale, this.fallbackLocale, key, - host, 'string', parsedArgs.params - ); - if (this._isFallbackRoot(ret)) { - if (!this._isSilentTranslationWarn(key) && !this._isSilentFallbackWarn(key)) { - warn(`Fall back to translate the keypath '${key}' with root locale.`); - } - /* istanbul ignore if */ - if (!this._root) { throw Error('unexpected error') } - return this._root.$t(key, ...values) - } else { - ret = this._warnDefault(locale, key, ret, host, values, 'string'); - if (this._postTranslation && ret !== null && ret !== undefined) { - ret = this._postTranslation(ret, key); - } - return ret - } - } - - t (key, ...values) { - return this._t(key, this.locale, this._getMessages(), null, ...values) - } - - _i (key, locale, messages, host, values) { - const ret = - this._translate(messages, locale, this.fallbackLocale, key, host, 'raw', values); - if (this._isFallbackRoot(ret)) { - if (!this._isSilentTranslationWarn(key)) { - warn(`Fall back to interpolate the keypath '${key}' with root locale.`); - } - if (!this._root) { throw Error('unexpected error') } - return this._root.$i18n.i(key, locale, values) - } else { - return this._warnDefault(locale, key, ret, host, [values], 'raw') - } - } - - i (key, locale, values) { - /* istanbul ignore if */ - if (!key) { return '' } - - if (!isString(locale)) { - locale = this.locale; - } - - return this._i(key, locale, this._getMessages(), null, values) - } - - _tc ( - key, - _locale, - messages, - host, - choice, - ...values - ) { - if (!key) { return '' } - if (choice === undefined) { - choice = 1; - } - - const predefined = { 'count': choice, 'n': choice }; - const parsedArgs = parseArgs(...values); - parsedArgs.params = Object.assign(predefined, parsedArgs.params); - values = parsedArgs.locale === null ? [parsedArgs.params] : [parsedArgs.locale, parsedArgs.params]; - return this.fetchChoice(this._t(key, _locale, messages, host, ...values), choice) - } - - fetchChoice (message, choice) { - /* istanbul ignore if */ - if (!message && !isString(message)) { return null } - const choices = message.split('|'); - - choice = this.getChoiceIndex(choice, choices.length); - if (!choices[choice]) { return message } - return choices[choice].trim() - } - - tc (key, choice, ...values) { - return this._tc(key, this.locale, this._getMessages(), null, choice, ...values) - } - - _te (key, locale, messages, ...args) { - const _locale = parseArgs(...args).locale || locale; - return this._exist(messages[_locale], key) - } - - te (key, locale) { - return this._te(key, this.locale, this._getMessages(), locale) - } - - getLocaleMessage (locale) { - return looseClone(this._vm.messages[locale] || {}) - } - - setLocaleMessage (locale, message) { - if (this._warnHtmlInMessage === 'warn' || this._warnHtmlInMessage === 'error') { - this._checkLocaleMessage(locale, this._warnHtmlInMessage, message); - } - this._vm.$set(this._vm.messages, locale, message); - } - - mergeLocaleMessage (locale, message) { - if (this._warnHtmlInMessage === 'warn' || this._warnHtmlInMessage === 'error') { - this._checkLocaleMessage(locale, this._warnHtmlInMessage, message); - } - this._vm.$set(this._vm.messages, locale, merge({}, this._vm.messages[locale] || {}, message)); - } - - getDateTimeFormat (locale) { - return looseClone(this._vm.dateTimeFormats[locale] || {}) - } - - setDateTimeFormat (locale, format) { - this._vm.$set(this._vm.dateTimeFormats, locale, format); - this._clearDateTimeFormat(locale, format); - } - - mergeDateTimeFormat (locale, format) { - this._vm.$set(this._vm.dateTimeFormats, locale, merge(this._vm.dateTimeFormats[locale] || {}, format)); - this._clearDateTimeFormat(locale, format); - } - - _clearDateTimeFormat (locale, format) { - for (let key in format) { - const id = `${locale}__${key}`; - - if (!this._dateTimeFormatters.hasOwnProperty(id)) { - continue - } - - delete this._dateTimeFormatters[id]; - } - } - - _localizeDateTime ( - value, - locale, - fallback, - dateTimeFormats, - key - ) { - let _locale = locale; - let formats = dateTimeFormats[_locale]; - - const chain = this._getLocaleChain(locale, fallback); - for (let i = 0; i < chain.length; i++) { - const current = _locale; - const step = chain[i]; - formats = dateTimeFormats[step]; - _locale = step; - // fallback locale - if (isNull(formats) || isNull(formats[key])) { - if (step !== locale && "development" !== 'production' && !this._isSilentTranslationWarn(key) && !this._isSilentFallbackWarn(key)) { - warn(`Fall back to '${step}' datetime formats from '${current}' datetime formats.`); - } - } else { - break - } - } - - if (isNull(formats) || isNull(formats[key])) { - return null - } else { - const format = formats[key]; - const id = `${_locale}__${key}`; - let formatter = this._dateTimeFormatters[id]; - if (!formatter) { - formatter = this._dateTimeFormatters[id] = new Intl.DateTimeFormat(_locale, format); - } - return formatter.format(value) - } - } - - _d (value, locale, key) { - /* istanbul ignore if */ - if (!VueI18n.availabilities.dateTimeFormat) { - warn('Cannot format a Date value due to not supported Intl.DateTimeFormat.'); - return '' - } - - if (!key) { - return new Intl.DateTimeFormat(locale).format(value) - } - - const ret = - this._localizeDateTime(value, locale, this.fallbackLocale, this._getDateTimeFormats(), key); - if (this._isFallbackRoot(ret)) { - if (!this._isSilentTranslationWarn(key) && !this._isSilentFallbackWarn(key)) { - warn(`Fall back to datetime localization of root: key '${key}'.`); - } - /* istanbul ignore if */ - if (!this._root) { throw Error('unexpected error') } - return this._root.$i18n.d(value, key, locale) - } else { - return ret || '' - } - } - - d (value, ...args) { - let locale = this.locale; - let key = null; - - if (args.length === 1) { - if (isString(args[0])) { - key = args[0]; - } else if (isObject(args[0])) { - if (args[0].locale) { - locale = args[0].locale; - } - if (args[0].key) { - key = args[0].key; - } - } - } else if (args.length === 2) { - if (isString(args[0])) { - key = args[0]; - } - if (isString(args[1])) { - locale = args[1]; - } - } - - return this._d(value, locale, key) - } - - getNumberFormat (locale) { - return looseClone(this._vm.numberFormats[locale] || {}) - } - - setNumberFormat (locale, format) { - this._vm.$set(this._vm.numberFormats, locale, format); - this._clearNumberFormat(locale, format); - } - - mergeNumberFormat (locale, format) { - this._vm.$set(this._vm.numberFormats, locale, merge(this._vm.numberFormats[locale] || {}, format)); - this._clearNumberFormat(locale, format); - } - - _clearNumberFormat (locale, format) { - for (let key in format) { - const id = `${locale}__${key}`; - - if (!this._numberFormatters.hasOwnProperty(id)) { - continue - } - - delete this._numberFormatters[id]; - } - } - - _getNumberFormatter ( - value, - locale, - fallback, - numberFormats, - key, - options - ) { - let _locale = locale; - let formats = numberFormats[_locale]; - - const chain = this._getLocaleChain(locale, fallback); - for (let i = 0; i < chain.length; i++) { - const current = _locale; - const step = chain[i]; - formats = numberFormats[step]; - _locale = step; - // fallback locale - if (isNull(formats) || isNull(formats[key])) { - if (step !== locale && "development" !== 'production' && !this._isSilentTranslationWarn(key) && !this._isSilentFallbackWarn(key)) { - warn(`Fall back to '${step}' number formats from '${current}' number formats.`); - } - } else { - break - } - } - - if (isNull(formats) || isNull(formats[key])) { - return null - } else { - const format = formats[key]; - - let formatter; - if (options) { - // If options specified - create one time number formatter - formatter = new Intl.NumberFormat(_locale, Object.assign({}, format, options)); - } else { - const id = `${_locale}__${key}`; - formatter = this._numberFormatters[id]; - if (!formatter) { - formatter = this._numberFormatters[id] = new Intl.NumberFormat(_locale, format); - } - } - return formatter - } - } - - _n (value, locale, key, options) { - /* istanbul ignore if */ - if (!VueI18n.availabilities.numberFormat) { - { - warn('Cannot format a Number value due to not supported Intl.NumberFormat.'); - } - return '' - } - - if (!key) { - const nf = !options ? new Intl.NumberFormat(locale) : new Intl.NumberFormat(locale, options); - return nf.format(value) - } - - const formatter = this._getNumberFormatter(value, locale, this.fallbackLocale, this._getNumberFormats(), key, options); - const ret = formatter && formatter.format(value); - if (this._isFallbackRoot(ret)) { - if (!this._isSilentTranslationWarn(key) && !this._isSilentFallbackWarn(key)) { - warn(`Fall back to number localization of root: key '${key}'.`); - } - /* istanbul ignore if */ - if (!this._root) { throw Error('unexpected error') } - return this._root.$i18n.n(value, Object.assign({}, { key, locale }, options)) - } else { - return ret || '' - } - } - - n (value, ...args) { - let locale = this.locale; - let key = null; - let options = null; - - if (args.length === 1) { - if (isString(args[0])) { - key = args[0]; - } else if (isObject(args[0])) { - if (args[0].locale) { - locale = args[0].locale; - } - if (args[0].key) { - key = args[0].key; - } - - // Filter out number format options only - options = Object.keys(args[0]).reduce((acc, key) => { - if (includes(numberFormatKeys, key)) { - return Object.assign({}, acc, { [key]: args[0][key] }) - } - return acc - }, null); - } - } else if (args.length === 2) { - if (isString(args[0])) { - key = args[0]; - } - if (isString(args[1])) { - locale = args[1]; - } - } - - return this._n(value, locale, key, options) - } - - _ntp (value, locale, key, options) { - /* istanbul ignore if */ - if (!VueI18n.availabilities.numberFormat) { - { - warn('Cannot format to parts a Number value due to not supported Intl.NumberFormat.'); - } - return [] - } - - if (!key) { - const nf = !options ? new Intl.NumberFormat(locale) : new Intl.NumberFormat(locale, options); - return nf.formatToParts(value) - } - - const formatter = this._getNumberFormatter(value, locale, this.fallbackLocale, this._getNumberFormats(), key, options); - const ret = formatter && formatter.formatToParts(value); - if (this._isFallbackRoot(ret)) { - if (!this._isSilentTranslationWarn(key)) { - warn(`Fall back to format number to parts of root: key '${key}' .`); - } - /* istanbul ignore if */ - if (!this._root) { throw Error('unexpected error') } - return this._root.$i18n._ntp(value, locale, key, options) - } else { - return ret || [] - } - } -} - -let availabilities; -// $FlowFixMe -Object.defineProperty(VueI18n, 'availabilities', { - get () { - if (!availabilities) { - const intlDefined = typeof Intl !== 'undefined'; - availabilities = { - dateTimeFormat: intlDefined && typeof Intl.DateTimeFormat !== 'undefined', - numberFormat: intlDefined && typeof Intl.NumberFormat !== 'undefined' - }; - } - - return availabilities - } -}); - -VueI18n.install = install; -VueI18n.version = '8.20.0'; - -export default VueI18n; diff --git a/node_modules/vue-i18n/dist/vue-i18n.esm.browser.min.js b/node_modules/vue-i18n/dist/vue-i18n.esm.browser.min.js deleted file mode 100644 index fa3c3cd..0000000 --- a/node_modules/vue-i18n/dist/vue-i18n.esm.browser.min.js +++ /dev/null @@ -1 +0,0 @@ -const t=["style","currency","currencyDisplay","useGrouping","minimumIntegerDigits","minimumFractionDigits","maximumFractionDigits","minimumSignificantDigits","maximumSignificantDigits","localeMatcher","formatMatcher","unit"];function e(t,e){"undefined"!=typeof console&&(console.warn("[vue-i18n] "+t),e&&console.warn(e.stack))}const n=Array.isArray;function s(t){return null!==t&&"object"==typeof t}function r(t){return"string"==typeof t}const a=Object.prototype.toString,i="[object Object]";function o(t){return a.call(t)===i}function l(t){return null==t}function c(...t){let e=null,n=null;return 1===t.length?s(t[0])||Array.isArray(t[0])?n=t[0]:"string"==typeof t[0]&&(e=t[0]):2===t.length&&("string"==typeof t[0]&&(e=t[0]),(s(t[1])||Array.isArray(t[1]))&&(n=t[1])),{locale:e,params:n}}function h(t){return JSON.parse(JSON.stringify(t))}function u(t,e){return!!~t.indexOf(e)}const m=Object.prototype.hasOwnProperty;function _(t,e){return m.call(t,e)}function f(t){const e=Object(t);for(let t=1;tp(t,e[n]));if(n||s)return!1;{const n=Object.keys(t),s=Object.keys(e);return n.length===s.length&&n.every(n=>p(t[n],e[n]))}}catch(t){return!1}}var g={beforeCreate(){const t=this.$options;if(t.i18n=t.i18n||(t.__i18n?{}:null),t.i18n){if(t.i18n instanceof Y){if(t.__i18n)try{let e={};t.__i18n.forEach(t=>{e=f(e,JSON.parse(t))}),Object.keys(e).forEach(n=>{t.i18n.mergeLocaleMessage(n,e[n])})}catch(t){}this._i18n=t.i18n,this._i18nWatcher=this._i18n.watchI18nData()}else if(o(t.i18n)){const e=this.$root&&this.$root.$i18n&&this.$root.$i18n instanceof Y?this.$root.$i18n:null;if(e&&(t.i18n.root=this.$root,t.i18n.formatter=e.formatter,t.i18n.fallbackLocale=e.fallbackLocale,t.i18n.formatFallbackMessages=e.formatFallbackMessages,t.i18n.silentTranslationWarn=e.silentTranslationWarn,t.i18n.silentFallbackWarn=e.silentFallbackWarn,t.i18n.pluralizationRules=e.pluralizationRules,t.i18n.preserveDirectiveContent=e.preserveDirectiveContent),t.__i18n)try{let e={};t.__i18n.forEach(t=>{e=f(e,JSON.parse(t))}),t.i18n.messages=e}catch(t){}const{sharedMessages:n}=t.i18n;n&&o(n)&&(t.i18n.messages=f(t.i18n.messages,n)),this._i18n=new Y(t.i18n),this._i18nWatcher=this._i18n.watchI18nData(),(void 0===t.i18n.sync||t.i18n.sync)&&(this._localeWatcher=this.$i18n.watchLocale()),e&&e.onComponentInstanceCreated(this._i18n)}}else this.$root&&this.$root.$i18n&&this.$root.$i18n instanceof Y?this._i18n=this.$root.$i18n:t.parent&&t.parent.$i18n&&t.parent.$i18n instanceof Y&&(this._i18n=t.parent.$i18n)},beforeMount(){const t=this.$options;t.i18n=t.i18n||(t.__i18n?{}:null),t.i18n?t.i18n instanceof Y?(this._i18n.subscribeDataChanging(this),this._subscribing=!0):o(t.i18n)&&(this._i18n.subscribeDataChanging(this),this._subscribing=!0):this.$root&&this.$root.$i18n&&this.$root.$i18n instanceof Y?(this._i18n.subscribeDataChanging(this),this._subscribing=!0):t.parent&&t.parent.$i18n&&t.parent.$i18n instanceof Y&&(this._i18n.subscribeDataChanging(this),this._subscribing=!0)},beforeDestroy(){if(!this._i18n)return;const t=this;this.$nextTick(()=>{t._subscribing&&(t._i18n.unsubscribeDataChanging(t),delete t._subscribing),t._i18nWatcher&&(t._i18nWatcher(),t._i18n.destroyVM(),delete t._i18nWatcher),t._localeWatcher&&(t._localeWatcher(),delete t._localeWatcher)})}},d={name:"i18n",functional:!0,props:{tag:{type:[String,Boolean,Object],default:"span"},path:{type:String,required:!0},locale:{type:String},places:{type:[Array,Object]}},render(t,{data:e,parent:n,props:s,slots:r}){const{$i18n:a}=n;if(!a)return;const{path:i,locale:o,places:l}=s,c=r(),h=a.i(i,o,function(t){let e;for(e in t)if("default"!==e)return!1;return Boolean(e)}(c)||l?function(t,e){const n=e?function(t){return Array.isArray(t)?t.reduce(v,{}):Object.assign({},t)}(e):{};if(!t)return n;const s=(t=t.filter(t=>t.tag||""!==t.text.trim())).every(y);return t.reduce(s?b:v,n)}(c.default,l):c),u=s.tag&&!0!==s.tag||!1===s.tag?s.tag:"span";return u?t(u,e,h):h}};function b(t,e){return e.data&&e.data.attrs&&e.data.attrs.place&&(t[e.data.attrs.place]=e),t}function v(t,e,n){return t[n]=e,t}function y(t){return Boolean(t.data&&t.data.attrs&&t.data.attrs.place)}var F={name:"i18n-n",functional:!0,props:{tag:{type:[String,Boolean,Object],default:"span"},value:{type:Number,required:!0},format:{type:[String,Object]},locale:{type:String}},render(e,{props:n,parent:a,data:i}){const o=a.$i18n;if(!o)return null;let l=null,c=null;r(n.format)?l=n.format:s(n.format)&&(n.format.key&&(l=n.format.key),c=Object.keys(n.format).reduce((e,s)=>u(t,s)?Object.assign({},e,{[s]:n.format[s]}):e,null));const h=n.locale||o.locale,m=o._ntp(n.value,h,l,c),_=m.map((t,e)=>{const n=i.scopedSlots&&i.scopedSlots[t.type];return n?n({[t.type]:t.value,index:e,parts:m}):t.value}),f=n.tag&&!0!==n.tag||!1===n.tag?n.tag:"span";return f?e(f,{attrs:i.attrs,class:i.class,staticClass:i.staticClass},_):_}};function k(t,e,n){M(t,n)&&C(t,e,n)}function $(t,e,n,s){if(!M(t,n))return;const r=n.context.$i18n;(function(t,e){const n=e.context;return t._locale===n.$i18n.locale})(t,n)&&p(e.value,e.oldValue)&&p(t._localeMessage,r.getLocaleMessage(r.locale))||C(t,e,n)}function w(t,n,s,r){if(!s.context)return void e("Vue instance does not exists in VNode context");const a=s.context.$i18n||{};n.modifiers.preserve||a.preserveDirectiveContent||(t.textContent=""),t._vt=void 0,delete t._vt,t._locale=void 0,delete t._locale,t._localeMessage=void 0,delete t._localeMessage}function M(t,n){const s=n.context;return s?!!s.$i18n||(e("VueI18n instance does not exists in Vue instance"),!1):(e("Vue instance does not exists in VNode context"),!1)}function C(t,n,s){const a=n.value,{path:i,locale:l,args:c,choice:h}=function(t){let e,n,s,a;r(t)?e=t:o(t)&&(e=t.path,n=t.locale,s=t.args,a=t.choice);return{path:e,locale:n,args:s,choice:a}}(a);if(!i&&!l&&!c)return void e("value type not supported");if(!i)return void e("`path` is required in v-t directive");const u=s.context;t._vt=t.textContent=null!=h?u.$i18n.tc(i,h,...T(l,c)):u.$i18n.t(i,...T(l,c)),t._locale=u.$i18n.locale,t._localeMessage=u.$i18n.getLocaleMessage(u.$i18n.locale)}function T(t,e){const n=[];return t&&n.push(t),e&&(Array.isArray(e)||o(e))&&n.push(e),n}let L;function D(t){D.installed=!0;(L=t).version&&Number(L.version.split(".")[0]);!function(t){t.prototype.hasOwnProperty("$i18n")||Object.defineProperty(t.prototype,"$i18n",{get(){return this._i18n}}),t.prototype.$t=function(t,...e){const n=this.$i18n;return n._t(t,n.locale,n._getMessages(),this,...e)},t.prototype.$tc=function(t,e,...n){const s=this.$i18n;return s._tc(t,s.locale,s._getMessages(),this,e,...n)},t.prototype.$te=function(t,e){const n=this.$i18n;return n._te(t,n.locale,n._getMessages(),e)},t.prototype.$d=function(t,...e){return this.$i18n.d(t,...e)},t.prototype.$n=function(t,...e){return this.$i18n.n(t,...e)}}(L),L.mixin(g),L.directive("t",{bind:k,update:$,unbind:w}),L.component(d.name,d),L.component(F.name,F),L.config.optionMergeStrategies.i18n=function(t,e){return void 0===e?t:e}}const I=/^(?:\d)+/,O=/^(?:\w)+/;const x=0,W=1,j=2,N=3,A=0,S=4,R=5,H=6,P=7,V=8,E=[];E[A]={ws:[A],ident:[3,x],"[":[S],eof:[P]},E[1]={ws:[1],".":[2],"[":[S],eof:[P]},E[2]={ws:[2],ident:[3,x],0:[3,x],number:[3,x]},E[3]={ident:[3,x],0:[3,x],number:[3,x],ws:[1,W],".":[2,W],"[":[S,W],eof:[P,W]},E[S]={"'":[R,x],'"':[H,x],"[":[S,j],"]":[1,N],eof:V,else:[S,x]},E[R]={"'":[S,x],eof:V,else:[R,x]},E[H]={'"':[S,x],eof:V,else:[H,x]};const z=/^\s?(?:true|false|-?[\d.]+|'[^']*'|"[^"]*")\s?$/;function B(t){if(null==t)return"eof";switch(t.charCodeAt(0)){case 91:case 93:case 46:case 34:case 39:return t;case 95:case 36:case 45:return"ident";case 9:case 10:case 13:case 160:case 65279:case 8232:case 8233:return"ws"}return"ident"}function U(t){const e=t.trim();return("0"!==t.charAt(0)||!isNaN(t))&&(n=e,z.test(n)?function(t){const e=t.charCodeAt(0);return e!==t.charCodeAt(t.length-1)||34!==e&&39!==e?t:t.slice(1,-1)}(e):"*"+e);var n}class J{constructor(){this._cache=Object.create(null)}parsePath(t){let e=this._cache[t];return e||(e=function(t){const e=[];let n,s,r,a,i,o,l,c=-1,h=A,u=0;const m=[];function _(){const e=t[c+1];if(h===R&&"'"===e||h===H&&'"'===e)return c++,r="\\"+e,m[x](),!0}for(m[W]=function(){void 0!==s&&(e.push(s),s=void 0)},m[x]=function(){void 0===s?s=r:s+=r},m[j]=function(){m[x](),u++},m[N]=function(){if(u>0)u--,h=S,m[x]();else{if(u=0,void 0===s)return!1;if(!1===(s=U(s)))return!1;m[W]()}};null!==h;)if("\\"!==(n=t[++c])||!_()){if(a=B(n),(i=(l=E[h])[a]||l.else||V)===V)return;if(h=i[0],(o=m[i[1]])&&(r=void 0===(r=i[2])?n:r,!1===o()))return;if(h===P)return e}}(t))&&(this._cache[t]=e),e||[]}getPathValue(t,e){if(!s(t))return null;const n=this.parsePath(e);if(0===n.length)return null;{const e=n.length;let s=t,r=0;for(;r/,G=/(?:@(?:\.[a-z]+)?:(?:[\w\-_|.]+|\([\w\-_|.]+\)))/g,X=/^@(?:\.([a-z]+))?:/,Z=/[()]/g,K={upper:t=>t.toLocaleUpperCase(),lower:t=>t.toLocaleLowerCase(),capitalize:t=>`${t.charAt(0).toLocaleUpperCase()}${t.substr(1)}`},Q=new class{constructor(){this._caches=Object.create(null)}interpolate(t,e){if(!e)return[t];let n=this._caches[t];return n||(n=function(t){const e=[];let n=0,s="";for(;n{const n=Object.getPrototypeOf(this);if(n&&n.getChoiceIndex){return n.getChoiceIndex.call(this,t,e)}return this.locale in this.pluralizationRules?this.pluralizationRules[this.locale].apply(this,[t,e]):((t,e)=>(t=Math.abs(t),2===e?t?t>1?1:0:1:t?Math.min(t,2):0))(t,e)}),this._exist=((t,e)=>!(!t||!e)&&(!l(this._path.getPathValue(t,e))||!!t[e])),"warn"!==this._warnHtmlInMessage&&"error"!==this._warnHtmlInMessage||Object.keys(s).forEach(t=>{this._checkLocaleMessage(t,this._warnHtmlInMessage,s[t])}),this._initVM({locale:e,fallbackLocale:n,messages:s,dateTimeFormats:r,numberFormats:a})}_checkLocaleMessage(t,n,s){const a=(t,n,s,i)=>{if(o(s))Object.keys(s).forEach(e=>{const r=s[e];o(r)?(i.push(e),i.push("."),a(t,n,r,i),i.pop(),i.pop()):(i.push(e),a(t,n,r,i),i.pop())});else if(Array.isArray(s))s.forEach((e,s)=>{o(e)?(i.push(`[${s}]`),i.push("."),a(t,n,e,i),i.pop(),i.pop()):(i.push(`[${s}]`),a(t,n,e,i),i.pop())});else if(r(s)){if(q.test(s)){const r=`Detected HTML in message '${s}' of keypath '${i.join("")}' at '${n}'. Consider component interpolation with '' to avoid XSS. See https://bit.ly/2ZqJzkp`;"warn"===t?e(r):"error"===t&&function(t,e){"undefined"!=typeof console&&(console.error("[vue-i18n] "+t),e&&console.error(e.stack))}(r)}}};a(n,t,s,[])}_initVM(t){const e=L.config.silent;L.config.silent=!0,this._vm=new L({data:t}),L.config.silent=e}destroyVM(){this._vm.$destroy()}subscribeDataChanging(t){this._dataListeners.push(t)}unsubscribeDataChanging(t){!function(t,e){if(t.length){const n=t.indexOf(e);if(n>-1)t.splice(n,1)}}(this._dataListeners,t)}watchI18nData(){const t=this;return this._vm.$watch("$data",()=>{let e=t._dataListeners.length;for(;e--;)L.nextTick(()=>{t._dataListeners[e]&&t._dataListeners[e].$forceUpdate()})},{deep:!0})}watchLocale(){if(!this._sync||!this._root)return null;const t=this._vm;return this._root.$i18n.vm.$watch("locale",e=>{t.$set(t,"locale",e),t.$forceUpdate()},{immediate:!0})}onComponentInstanceCreated(t){this._componentInstanceCreatedListener&&this._componentInstanceCreatedListener(t,this)}get vm(){return this._vm}get messages(){return h(this._getMessages())}get dateTimeFormats(){return h(this._getDateTimeFormats())}get numberFormats(){return h(this._getNumberFormats())}get availableLocales(){return Object.keys(this.messages).sort()}get locale(){return this._vm.locale}set locale(t){this._vm.$set(this._vm,"locale",t)}get fallbackLocale(){return this._vm.fallbackLocale}set fallbackLocale(t){this._localeChainCache={},this._vm.$set(this._vm,"fallbackLocale",t)}get formatFallbackMessages(){return this._formatFallbackMessages}set formatFallbackMessages(t){this._formatFallbackMessages=t}get missing(){return this._missing}set missing(t){this._missing=t}get formatter(){return this._formatter}set formatter(t){this._formatter=t}get silentTranslationWarn(){return this._silentTranslationWarn}set silentTranslationWarn(t){this._silentTranslationWarn=t}get silentFallbackWarn(){return this._silentFallbackWarn}set silentFallbackWarn(t){this._silentFallbackWarn=t}get preserveDirectiveContent(){return this._preserveDirectiveContent}set preserveDirectiveContent(t){this._preserveDirectiveContent=t}get warnHtmlInMessage(){return this._warnHtmlInMessage}set warnHtmlInMessage(t){const e=this._warnHtmlInMessage;if(this._warnHtmlInMessage=t,e!==t&&("warn"===t||"error"===t)){const t=this._getMessages();Object.keys(t).forEach(e=>{this._checkLocaleMessage(e,this._warnHtmlInMessage,t[e])})}}get postTranslation(){return this._postTranslation}set postTranslation(t){this._postTranslation=t}_getMessages(){return this._vm.messages}_getDateTimeFormats(){return this._vm.dateTimeFormats}_getNumberFormats(){return this._vm.numberFormats}_warnDefault(t,e,n,s,a,i){if(!l(n))return n;if(this._missing){const n=this._missing.apply(null,[t,e,s,a]);if(r(n))return n}if(this._formatFallbackMessages){const t=c(...a);return this._render(e,i,t.params,e)}return e}_isFallbackRoot(t){return!t&&!l(this._root)&&this._fallbackRoot}_isSilentFallbackWarn(t){return this._silentFallbackWarn instanceof RegExp?this._silentFallbackWarn.test(t):this._silentFallbackWarn}_isSilentFallback(t,e){return this._isSilentFallbackWarn(e)&&(this._isFallbackRoot()||t!==this.fallbackLocale)}_isSilentTranslationWarn(t){return this._silentTranslationWarn instanceof RegExp?this._silentTranslationWarn.test(t):this._silentTranslationWarn}_interpolate(t,e,n,s,a,i,c){if(!e)return null;const h=this._path.getPathValue(e,n);if(Array.isArray(h)||o(h))return h;let u;if(l(h)){if(!o(e))return null;if(!r(u=e[n]))return null}else{if(!r(h))return null;u=h}return(u.indexOf("@:")>=0||u.indexOf("@.")>=0)&&(u=this._link(t,e,u,s,"raw",i,c)),this._render(u,a,i,n)}_link(t,e,n,s,r,a,i){let o=n;const l=o.match(G);for(let n in l){if(!l.hasOwnProperty(n))continue;const c=l[n],h=c.match(X),[m,_]=h,f=c.replace(m,"").replace(Z,"");if(u(i,f))return o;i.push(f);let p=this._interpolate(t,e,f,s,"raw"===r?"string":r,"raw"===r?void 0:a,i);if(this._isFallbackRoot(p)){if(!this._root)throw Error("unexpected error");const t=this._root.$i18n;p=t._translate(t._getMessages(),t.locale,t.fallbackLocale,f,s,r,a)}p=this._warnDefault(t,f,p,s,Array.isArray(a)?a:[a],r),this._modifiers.hasOwnProperty(_)?p=this._modifiers[_](p):K.hasOwnProperty(_)&&(p=K[_](p)),i.pop(),o=p?o.replace(c,p):o}return o}_render(t,e,n,s){let a=this._formatter.interpolate(t,n,s);return a||(a=Q.interpolate(t,n,s)),"string"!==e||r(a)?a:a.join("")}_appendItemToChain(t,e,n){let s=!1;return u(t,e)||(s=!0,e&&(s="!"!==e[e.length-1],e=e.replace(/!/g,""),t.push(e),n&&n[e]&&(s=n[e]))),s}_appendLocaleToChain(t,e,n){let s;const r=e.split("-");do{const e=r.join("-");s=this._appendItemToChain(t,e,n),r.splice(-1,1)}while(r.length&&!0===s);return s}_appendBlockToChain(t,e,n){let s=!0;for(let a=0;au(t,s)?Object.assign({},e,{[s]:n[0][s]}):e,null)):2===n.length&&(r(n[0])&&(i=n[0]),r(n[1])&&(a=n[1])),this._n(e,a,i,o)}_ntp(t,e,n,s){if(!Y.availabilities.numberFormat)return[];if(!n){return(s?new Intl.NumberFormat(e,s):new Intl.NumberFormat(e)).formatToParts(t)}const r=this._getNumberFormatter(t,e,this.fallbackLocale,this._getNumberFormats(),n,s),a=r&&r.formatToParts(t);if(this._isFallbackRoot(a)){if(!this._root)throw Error("unexpected error");return this._root.$i18n._ntp(t,e,n,s)}return a||[]}}let tt;Object.defineProperty(Y,"availabilities",{get(){if(!tt){const t="undefined"!=typeof Intl;tt={dateTimeFormat:t&&void 0!==Intl.DateTimeFormat,numberFormat:t&&void 0!==Intl.NumberFormat}}return tt}}),Y.install=D,Y.version="8.20.0";export default Y; \ No newline at end of file diff --git a/node_modules/vue-i18n/dist/vue-i18n.esm.js b/node_modules/vue-i18n/dist/vue-i18n.esm.js deleted file mode 100644 index 676850a..0000000 --- a/node_modules/vue-i18n/dist/vue-i18n.esm.js +++ /dev/null @@ -1,2130 +0,0 @@ -/*! - * vue-i18n v8.20.0 - * (c) 2020 kazuya kawaguchi - * Released under the MIT License. - */ -/* */ - -/** - * constants - */ - -var numberFormatKeys = [ - 'style', - 'currency', - 'currencyDisplay', - 'useGrouping', - 'minimumIntegerDigits', - 'minimumFractionDigits', - 'maximumFractionDigits', - 'minimumSignificantDigits', - 'maximumSignificantDigits', - 'localeMatcher', - 'formatMatcher', - 'unit' -]; - -/** - * utilities - */ - -function warn (msg, err) { - if (typeof console !== 'undefined') { - console.warn('[vue-i18n] ' + msg); - /* istanbul ignore if */ - if (err) { - console.warn(err.stack); - } - } -} - -function error (msg, err) { - if (typeof console !== 'undefined') { - console.error('[vue-i18n] ' + msg); - /* istanbul ignore if */ - if (err) { - console.error(err.stack); - } - } -} - -var isArray = Array.isArray; - -function isObject (obj) { - return obj !== null && typeof obj === 'object' -} - -function isBoolean (val) { - return typeof val === 'boolean' -} - -function isString (val) { - return typeof val === 'string' -} - -var toString = Object.prototype.toString; -var OBJECT_STRING = '[object Object]'; -function isPlainObject (obj) { - return toString.call(obj) === OBJECT_STRING -} - -function isNull (val) { - return val === null || val === undefined -} - -function parseArgs () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - var locale = null; - var params = null; - if (args.length === 1) { - if (isObject(args[0]) || Array.isArray(args[0])) { - params = args[0]; - } else if (typeof args[0] === 'string') { - locale = args[0]; - } - } else if (args.length === 2) { - if (typeof args[0] === 'string') { - locale = args[0]; - } - /* istanbul ignore if */ - if (isObject(args[1]) || Array.isArray(args[1])) { - params = args[1]; - } - } - - return { locale: locale, params: params } -} - -function looseClone (obj) { - return JSON.parse(JSON.stringify(obj)) -} - -function remove (arr, item) { - if (arr.length) { - var index = arr.indexOf(item); - if (index > -1) { - return arr.splice(index, 1) - } - } -} - -function includes (arr, item) { - return !!~arr.indexOf(item) -} - -var hasOwnProperty = Object.prototype.hasOwnProperty; -function hasOwn (obj, key) { - return hasOwnProperty.call(obj, key) -} - -function merge (target) { - var arguments$1 = arguments; - - var output = Object(target); - for (var i = 1; i < arguments.length; i++) { - var source = arguments$1[i]; - if (source !== undefined && source !== null) { - var key = (void 0); - for (key in source) { - if (hasOwn(source, key)) { - if (isObject(source[key])) { - output[key] = merge(output[key], source[key]); - } else { - output[key] = source[key]; - } - } - } - } - } - return output -} - -function looseEqual (a, b) { - if (a === b) { return true } - var isObjectA = isObject(a); - var isObjectB = isObject(b); - if (isObjectA && isObjectB) { - try { - var isArrayA = Array.isArray(a); - var isArrayB = Array.isArray(b); - if (isArrayA && isArrayB) { - return a.length === b.length && a.every(function (e, i) { - return looseEqual(e, b[i]) - }) - } else if (!isArrayA && !isArrayB) { - var keysA = Object.keys(a); - var keysB = Object.keys(b); - return keysA.length === keysB.length && keysA.every(function (key) { - return looseEqual(a[key], b[key]) - }) - } else { - /* istanbul ignore next */ - return false - } - } catch (e) { - /* istanbul ignore next */ - return false - } - } else if (!isObjectA && !isObjectB) { - return String(a) === String(b) - } else { - return false - } -} - -/* */ - -function extend (Vue) { - if (!Vue.prototype.hasOwnProperty('$i18n')) { - // $FlowFixMe - Object.defineProperty(Vue.prototype, '$i18n', { - get: function get () { return this._i18n } - }); - } - - Vue.prototype.$t = function (key) { - var values = [], len = arguments.length - 1; - while ( len-- > 0 ) values[ len ] = arguments[ len + 1 ]; - - var i18n = this.$i18n; - return i18n._t.apply(i18n, [ key, i18n.locale, i18n._getMessages(), this ].concat( values )) - }; - - Vue.prototype.$tc = function (key, choice) { - var values = [], len = arguments.length - 2; - while ( len-- > 0 ) values[ len ] = arguments[ len + 2 ]; - - var i18n = this.$i18n; - return i18n._tc.apply(i18n, [ key, i18n.locale, i18n._getMessages(), this, choice ].concat( values )) - }; - - Vue.prototype.$te = function (key, locale) { - var i18n = this.$i18n; - return i18n._te(key, i18n.locale, i18n._getMessages(), locale) - }; - - Vue.prototype.$d = function (value) { - var ref; - - var args = [], len = arguments.length - 1; - while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ]; - return (ref = this.$i18n).d.apply(ref, [ value ].concat( args )) - }; - - Vue.prototype.$n = function (value) { - var ref; - - var args = [], len = arguments.length - 1; - while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ]; - return (ref = this.$i18n).n.apply(ref, [ value ].concat( args )) - }; -} - -/* */ - -var mixin = { - beforeCreate: function beforeCreate () { - var options = this.$options; - options.i18n = options.i18n || (options.__i18n ? {} : null); - - if (options.i18n) { - if (options.i18n instanceof VueI18n) { - // init locale messages via custom blocks - if (options.__i18n) { - try { - var localeMessages = {}; - options.__i18n.forEach(function (resource) { - localeMessages = merge(localeMessages, JSON.parse(resource)); - }); - Object.keys(localeMessages).forEach(function (locale) { - options.i18n.mergeLocaleMessage(locale, localeMessages[locale]); - }); - } catch (e) { - if (process.env.NODE_ENV !== 'production') { - error("Cannot parse locale messages via custom blocks.", e); - } - } - } - this._i18n = options.i18n; - this._i18nWatcher = this._i18n.watchI18nData(); - } else if (isPlainObject(options.i18n)) { - var rootI18n = this.$root && this.$root.$i18n && this.$root.$i18n instanceof VueI18n - ? this.$root.$i18n - : null; - // component local i18n - if (rootI18n) { - options.i18n.root = this.$root; - options.i18n.formatter = rootI18n.formatter; - options.i18n.fallbackLocale = rootI18n.fallbackLocale; - options.i18n.formatFallbackMessages = rootI18n.formatFallbackMessages; - options.i18n.silentTranslationWarn = rootI18n.silentTranslationWarn; - options.i18n.silentFallbackWarn = rootI18n.silentFallbackWarn; - options.i18n.pluralizationRules = rootI18n.pluralizationRules; - options.i18n.preserveDirectiveContent = rootI18n.preserveDirectiveContent; - } - - // init locale messages via custom blocks - if (options.__i18n) { - try { - var localeMessages$1 = {}; - options.__i18n.forEach(function (resource) { - localeMessages$1 = merge(localeMessages$1, JSON.parse(resource)); - }); - options.i18n.messages = localeMessages$1; - } catch (e) { - if (process.env.NODE_ENV !== 'production') { - warn("Cannot parse locale messages via custom blocks.", e); - } - } - } - - var ref = options.i18n; - var sharedMessages = ref.sharedMessages; - if (sharedMessages && isPlainObject(sharedMessages)) { - options.i18n.messages = merge(options.i18n.messages, sharedMessages); - } - - this._i18n = new VueI18n(options.i18n); - this._i18nWatcher = this._i18n.watchI18nData(); - - if (options.i18n.sync === undefined || !!options.i18n.sync) { - this._localeWatcher = this.$i18n.watchLocale(); - } - - if (rootI18n) { - rootI18n.onComponentInstanceCreated(this._i18n); - } - } else { - if (process.env.NODE_ENV !== 'production') { - warn("Cannot be interpreted 'i18n' option."); - } - } - } else if (this.$root && this.$root.$i18n && this.$root.$i18n instanceof VueI18n) { - // root i18n - this._i18n = this.$root.$i18n; - } else if (options.parent && options.parent.$i18n && options.parent.$i18n instanceof VueI18n) { - // parent i18n - this._i18n = options.parent.$i18n; - } - }, - - beforeMount: function beforeMount () { - var options = this.$options; - options.i18n = options.i18n || (options.__i18n ? {} : null); - - if (options.i18n) { - if (options.i18n instanceof VueI18n) { - // init locale messages via custom blocks - this._i18n.subscribeDataChanging(this); - this._subscribing = true; - } else if (isPlainObject(options.i18n)) { - this._i18n.subscribeDataChanging(this); - this._subscribing = true; - } else { - if (process.env.NODE_ENV !== 'production') { - warn("Cannot be interpreted 'i18n' option."); - } - } - } else if (this.$root && this.$root.$i18n && this.$root.$i18n instanceof VueI18n) { - this._i18n.subscribeDataChanging(this); - this._subscribing = true; - } else if (options.parent && options.parent.$i18n && options.parent.$i18n instanceof VueI18n) { - this._i18n.subscribeDataChanging(this); - this._subscribing = true; - } - }, - - beforeDestroy: function beforeDestroy () { - if (!this._i18n) { return } - - var self = this; - this.$nextTick(function () { - if (self._subscribing) { - self._i18n.unsubscribeDataChanging(self); - delete self._subscribing; - } - - if (self._i18nWatcher) { - self._i18nWatcher(); - self._i18n.destroyVM(); - delete self._i18nWatcher; - } - - if (self._localeWatcher) { - self._localeWatcher(); - delete self._localeWatcher; - } - }); - } -}; - -/* */ - -var interpolationComponent = { - name: 'i18n', - functional: true, - props: { - tag: { - type: [String, Boolean, Object], - default: 'span' - }, - path: { - type: String, - required: true - }, - locale: { - type: String - }, - places: { - type: [Array, Object] - } - }, - render: function render (h, ref) { - var data = ref.data; - var parent = ref.parent; - var props = ref.props; - var slots = ref.slots; - - var $i18n = parent.$i18n; - if (!$i18n) { - if (process.env.NODE_ENV !== 'production') { - warn('Cannot find VueI18n instance!'); - } - return - } - - var path = props.path; - var locale = props.locale; - var places = props.places; - var params = slots(); - var children = $i18n.i( - path, - locale, - onlyHasDefaultPlace(params) || places - ? useLegacyPlaces(params.default, places) - : params - ); - - var tag = (!!props.tag && props.tag !== true) || props.tag === false ? props.tag : 'span'; - return tag ? h(tag, data, children) : children - } -}; - -function onlyHasDefaultPlace (params) { - var prop; - for (prop in params) { - if (prop !== 'default') { return false } - } - return Boolean(prop) -} - -function useLegacyPlaces (children, places) { - var params = places ? createParamsFromPlaces(places) : {}; - - if (!children) { return params } - - // Filter empty text nodes - children = children.filter(function (child) { - return child.tag || child.text.trim() !== '' - }); - - var everyPlace = children.every(vnodeHasPlaceAttribute); - if (process.env.NODE_ENV !== 'production' && everyPlace) { - warn('`place` attribute is deprecated in next major version. Please switch to Vue slots.'); - } - - return children.reduce( - everyPlace ? assignChildPlace : assignChildIndex, - params - ) -} - -function createParamsFromPlaces (places) { - if (process.env.NODE_ENV !== 'production') { - warn('`places` prop is deprecated in next major version. Please switch to Vue slots.'); - } - - return Array.isArray(places) - ? places.reduce(assignChildIndex, {}) - : Object.assign({}, places) -} - -function assignChildPlace (params, child) { - if (child.data && child.data.attrs && child.data.attrs.place) { - params[child.data.attrs.place] = child; - } - return params -} - -function assignChildIndex (params, child, index) { - params[index] = child; - return params -} - -function vnodeHasPlaceAttribute (vnode) { - return Boolean(vnode.data && vnode.data.attrs && vnode.data.attrs.place) -} - -/* */ - -var numberComponent = { - name: 'i18n-n', - functional: true, - props: { - tag: { - type: [String, Boolean, Object], - default: 'span' - }, - value: { - type: Number, - required: true - }, - format: { - type: [String, Object] - }, - locale: { - type: String - } - }, - render: function render (h, ref) { - var props = ref.props; - var parent = ref.parent; - var data = ref.data; - - var i18n = parent.$i18n; - - if (!i18n) { - if (process.env.NODE_ENV !== 'production') { - warn('Cannot find VueI18n instance!'); - } - return null - } - - var key = null; - var options = null; - - if (isString(props.format)) { - key = props.format; - } else if (isObject(props.format)) { - if (props.format.key) { - key = props.format.key; - } - - // Filter out number format options only - options = Object.keys(props.format).reduce(function (acc, prop) { - var obj; - - if (includes(numberFormatKeys, prop)) { - return Object.assign({}, acc, ( obj = {}, obj[prop] = props.format[prop], obj )) - } - return acc - }, null); - } - - var locale = props.locale || i18n.locale; - var parts = i18n._ntp(props.value, locale, key, options); - - var values = parts.map(function (part, index) { - var obj; - - var slot = data.scopedSlots && data.scopedSlots[part.type]; - return slot ? slot(( obj = {}, obj[part.type] = part.value, obj.index = index, obj.parts = parts, obj )) : part.value - }); - - var tag = (!!props.tag && props.tag !== true) || props.tag === false ? props.tag : 'span'; - return tag - ? h(tag, { - attrs: data.attrs, - 'class': data['class'], - staticClass: data.staticClass - }, values) - : values - } -}; - -/* */ - -function bind (el, binding, vnode) { - if (!assert(el, vnode)) { return } - - t(el, binding, vnode); -} - -function update (el, binding, vnode, oldVNode) { - if (!assert(el, vnode)) { return } - - var i18n = vnode.context.$i18n; - if (localeEqual(el, vnode) && - (looseEqual(binding.value, binding.oldValue) && - looseEqual(el._localeMessage, i18n.getLocaleMessage(i18n.locale)))) { return } - - t(el, binding, vnode); -} - -function unbind (el, binding, vnode, oldVNode) { - var vm = vnode.context; - if (!vm) { - warn('Vue instance does not exists in VNode context'); - return - } - - var i18n = vnode.context.$i18n || {}; - if (!binding.modifiers.preserve && !i18n.preserveDirectiveContent) { - el.textContent = ''; - } - el._vt = undefined; - delete el['_vt']; - el._locale = undefined; - delete el['_locale']; - el._localeMessage = undefined; - delete el['_localeMessage']; -} - -function assert (el, vnode) { - var vm = vnode.context; - if (!vm) { - warn('Vue instance does not exists in VNode context'); - return false - } - - if (!vm.$i18n) { - warn('VueI18n instance does not exists in Vue instance'); - return false - } - - return true -} - -function localeEqual (el, vnode) { - var vm = vnode.context; - return el._locale === vm.$i18n.locale -} - -function t (el, binding, vnode) { - var ref$1, ref$2; - - var value = binding.value; - - var ref = parseValue(value); - var path = ref.path; - var locale = ref.locale; - var args = ref.args; - var choice = ref.choice; - if (!path && !locale && !args) { - warn('value type not supported'); - return - } - - if (!path) { - warn('`path` is required in v-t directive'); - return - } - - var vm = vnode.context; - if (choice != null) { - el._vt = el.textContent = (ref$1 = vm.$i18n).tc.apply(ref$1, [ path, choice ].concat( makeParams(locale, args) )); - } else { - el._vt = el.textContent = (ref$2 = vm.$i18n).t.apply(ref$2, [ path ].concat( makeParams(locale, args) )); - } - el._locale = vm.$i18n.locale; - el._localeMessage = vm.$i18n.getLocaleMessage(vm.$i18n.locale); -} - -function parseValue (value) { - var path; - var locale; - var args; - var choice; - - if (isString(value)) { - path = value; - } else if (isPlainObject(value)) { - path = value.path; - locale = value.locale; - args = value.args; - choice = value.choice; - } - - return { path: path, locale: locale, args: args, choice: choice } -} - -function makeParams (locale, args) { - var params = []; - - locale && params.push(locale); - if (args && (Array.isArray(args) || isPlainObject(args))) { - params.push(args); - } - - return params -} - -var Vue; - -function install (_Vue) { - /* istanbul ignore if */ - if (process.env.NODE_ENV !== 'production' && install.installed && _Vue === Vue) { - warn('already installed.'); - return - } - install.installed = true; - - Vue = _Vue; - - var version = (Vue.version && Number(Vue.version.split('.')[0])) || -1; - /* istanbul ignore if */ - if (process.env.NODE_ENV !== 'production' && version < 2) { - warn(("vue-i18n (" + (install.version) + ") need to use Vue 2.0 or later (Vue: " + (Vue.version) + ").")); - return - } - - extend(Vue); - Vue.mixin(mixin); - Vue.directive('t', { bind: bind, update: update, unbind: unbind }); - Vue.component(interpolationComponent.name, interpolationComponent); - Vue.component(numberComponent.name, numberComponent); - - // use simple mergeStrategies to prevent i18n instance lose '__proto__' - var strats = Vue.config.optionMergeStrategies; - strats.i18n = function (parentVal, childVal) { - return childVal === undefined - ? parentVal - : childVal - }; -} - -/* */ - -var BaseFormatter = function BaseFormatter () { - this._caches = Object.create(null); -}; - -BaseFormatter.prototype.interpolate = function interpolate (message, values) { - if (!values) { - return [message] - } - var tokens = this._caches[message]; - if (!tokens) { - tokens = parse(message); - this._caches[message] = tokens; - } - return compile(tokens, values) -}; - - - -var RE_TOKEN_LIST_VALUE = /^(?:\d)+/; -var RE_TOKEN_NAMED_VALUE = /^(?:\w)+/; - -function parse (format) { - var tokens = []; - var position = 0; - - var text = ''; - while (position < format.length) { - var char = format[position++]; - if (char === '{') { - if (text) { - tokens.push({ type: 'text', value: text }); - } - - text = ''; - var sub = ''; - char = format[position++]; - while (char !== undefined && char !== '}') { - sub += char; - char = format[position++]; - } - var isClosed = char === '}'; - - var type = RE_TOKEN_LIST_VALUE.test(sub) - ? 'list' - : isClosed && RE_TOKEN_NAMED_VALUE.test(sub) - ? 'named' - : 'unknown'; - tokens.push({ value: sub, type: type }); - } else if (char === '%') { - // when found rails i18n syntax, skip text capture - if (format[(position)] !== '{') { - text += char; - } - } else { - text += char; - } - } - - text && tokens.push({ type: 'text', value: text }); - - return tokens -} - -function compile (tokens, values) { - var compiled = []; - var index = 0; - - var mode = Array.isArray(values) - ? 'list' - : isObject(values) - ? 'named' - : 'unknown'; - if (mode === 'unknown') { return compiled } - - while (index < tokens.length) { - var token = tokens[index]; - switch (token.type) { - case 'text': - compiled.push(token.value); - break - case 'list': - compiled.push(values[parseInt(token.value, 10)]); - break - case 'named': - if (mode === 'named') { - compiled.push((values)[token.value]); - } else { - if (process.env.NODE_ENV !== 'production') { - warn(("Type of token '" + (token.type) + "' and format of value '" + mode + "' don't match!")); - } - } - break - case 'unknown': - if (process.env.NODE_ENV !== 'production') { - warn("Detect 'unknown' type of token!"); - } - break - } - index++; - } - - return compiled -} - -/* */ - -/** - * Path parser - * - Inspired: - * Vue.js Path parser - */ - -// actions -var APPEND = 0; -var PUSH = 1; -var INC_SUB_PATH_DEPTH = 2; -var PUSH_SUB_PATH = 3; - -// states -var BEFORE_PATH = 0; -var IN_PATH = 1; -var BEFORE_IDENT = 2; -var IN_IDENT = 3; -var IN_SUB_PATH = 4; -var IN_SINGLE_QUOTE = 5; -var IN_DOUBLE_QUOTE = 6; -var AFTER_PATH = 7; -var ERROR = 8; - -var pathStateMachine = []; - -pathStateMachine[BEFORE_PATH] = { - 'ws': [BEFORE_PATH], - 'ident': [IN_IDENT, APPEND], - '[': [IN_SUB_PATH], - 'eof': [AFTER_PATH] -}; - -pathStateMachine[IN_PATH] = { - 'ws': [IN_PATH], - '.': [BEFORE_IDENT], - '[': [IN_SUB_PATH], - 'eof': [AFTER_PATH] -}; - -pathStateMachine[BEFORE_IDENT] = { - 'ws': [BEFORE_IDENT], - 'ident': [IN_IDENT, APPEND], - '0': [IN_IDENT, APPEND], - 'number': [IN_IDENT, APPEND] -}; - -pathStateMachine[IN_IDENT] = { - 'ident': [IN_IDENT, APPEND], - '0': [IN_IDENT, APPEND], - 'number': [IN_IDENT, APPEND], - 'ws': [IN_PATH, PUSH], - '.': [BEFORE_IDENT, PUSH], - '[': [IN_SUB_PATH, PUSH], - 'eof': [AFTER_PATH, PUSH] -}; - -pathStateMachine[IN_SUB_PATH] = { - "'": [IN_SINGLE_QUOTE, APPEND], - '"': [IN_DOUBLE_QUOTE, APPEND], - '[': [IN_SUB_PATH, INC_SUB_PATH_DEPTH], - ']': [IN_PATH, PUSH_SUB_PATH], - 'eof': ERROR, - 'else': [IN_SUB_PATH, APPEND] -}; - -pathStateMachine[IN_SINGLE_QUOTE] = { - "'": [IN_SUB_PATH, APPEND], - 'eof': ERROR, - 'else': [IN_SINGLE_QUOTE, APPEND] -}; - -pathStateMachine[IN_DOUBLE_QUOTE] = { - '"': [IN_SUB_PATH, APPEND], - 'eof': ERROR, - 'else': [IN_DOUBLE_QUOTE, APPEND] -}; - -/** - * Check if an expression is a literal value. - */ - -var literalValueRE = /^\s?(?:true|false|-?[\d.]+|'[^']*'|"[^"]*")\s?$/; -function isLiteral (exp) { - return literalValueRE.test(exp) -} - -/** - * Strip quotes from a string - */ - -function stripQuotes (str) { - var a = str.charCodeAt(0); - var b = str.charCodeAt(str.length - 1); - return a === b && (a === 0x22 || a === 0x27) - ? str.slice(1, -1) - : str -} - -/** - * Determine the type of a character in a keypath. - */ - -function getPathCharType (ch) { - if (ch === undefined || ch === null) { return 'eof' } - - var code = ch.charCodeAt(0); - - switch (code) { - case 0x5B: // [ - case 0x5D: // ] - case 0x2E: // . - case 0x22: // " - case 0x27: // ' - return ch - - case 0x5F: // _ - case 0x24: // $ - case 0x2D: // - - return 'ident' - - case 0x09: // Tab - case 0x0A: // Newline - case 0x0D: // Return - case 0xA0: // No-break space - case 0xFEFF: // Byte Order Mark - case 0x2028: // Line Separator - case 0x2029: // Paragraph Separator - return 'ws' - } - - return 'ident' -} - -/** - * Format a subPath, return its plain form if it is - * a literal string or number. Otherwise prepend the - * dynamic indicator (*). - */ - -function formatSubPath (path) { - var trimmed = path.trim(); - // invalid leading 0 - if (path.charAt(0) === '0' && isNaN(path)) { return false } - - return isLiteral(trimmed) ? stripQuotes(trimmed) : '*' + trimmed -} - -/** - * Parse a string path into an array of segments - */ - -function parse$1 (path) { - var keys = []; - var index = -1; - var mode = BEFORE_PATH; - var subPathDepth = 0; - var c; - var key; - var newChar; - var type; - var transition; - var action; - var typeMap; - var actions = []; - - actions[PUSH] = function () { - if (key !== undefined) { - keys.push(key); - key = undefined; - } - }; - - actions[APPEND] = function () { - if (key === undefined) { - key = newChar; - } else { - key += newChar; - } - }; - - actions[INC_SUB_PATH_DEPTH] = function () { - actions[APPEND](); - subPathDepth++; - }; - - actions[PUSH_SUB_PATH] = function () { - if (subPathDepth > 0) { - subPathDepth--; - mode = IN_SUB_PATH; - actions[APPEND](); - } else { - subPathDepth = 0; - if (key === undefined) { return false } - key = formatSubPath(key); - if (key === false) { - return false - } else { - actions[PUSH](); - } - } - }; - - function maybeUnescapeQuote () { - var nextChar = path[index + 1]; - if ((mode === IN_SINGLE_QUOTE && nextChar === "'") || - (mode === IN_DOUBLE_QUOTE && nextChar === '"')) { - index++; - newChar = '\\' + nextChar; - actions[APPEND](); - return true - } - } - - while (mode !== null) { - index++; - c = path[index]; - - if (c === '\\' && maybeUnescapeQuote()) { - continue - } - - type = getPathCharType(c); - typeMap = pathStateMachine[mode]; - transition = typeMap[type] || typeMap['else'] || ERROR; - - if (transition === ERROR) { - return // parse error - } - - mode = transition[0]; - action = actions[transition[1]]; - if (action) { - newChar = transition[2]; - newChar = newChar === undefined - ? c - : newChar; - if (action() === false) { - return - } - } - - if (mode === AFTER_PATH) { - return keys - } - } -} - - - - - -var I18nPath = function I18nPath () { - this._cache = Object.create(null); -}; - -/** - * External parse that check for a cache hit first - */ -I18nPath.prototype.parsePath = function parsePath (path) { - var hit = this._cache[path]; - if (!hit) { - hit = parse$1(path); - if (hit) { - this._cache[path] = hit; - } - } - return hit || [] -}; - -/** - * Get path value from path string - */ -I18nPath.prototype.getPathValue = function getPathValue (obj, path) { - if (!isObject(obj)) { return null } - - var paths = this.parsePath(path); - if (paths.length === 0) { - return null - } else { - var length = paths.length; - var last = obj; - var i = 0; - while (i < length) { - var value = last[paths[i]]; - if (value === undefined) { - return null - } - last = value; - i++; - } - - return last - } -}; - -/* */ - - - -var htmlTagMatcher = /<\/?[\w\s="/.':;#-\/]+>/; -var linkKeyMatcher = /(?:@(?:\.[a-z]+)?:(?:[\w\-_|.]+|\([\w\-_|.]+\)))/g; -var linkKeyPrefixMatcher = /^@(?:\.([a-z]+))?:/; -var bracketsMatcher = /[()]/g; -var defaultModifiers = { - 'upper': function (str) { return str.toLocaleUpperCase(); }, - 'lower': function (str) { return str.toLocaleLowerCase(); }, - 'capitalize': function (str) { return ("" + (str.charAt(0).toLocaleUpperCase()) + (str.substr(1))); } -}; - -var defaultFormatter = new BaseFormatter(); - -var VueI18n = function VueI18n (options) { - var this$1 = this; - if ( options === void 0 ) options = {}; - - // Auto install if it is not done yet and `window` has `Vue`. - // To allow users to avoid auto-installation in some cases, - // this code should be placed here. See #290 - /* istanbul ignore if */ - if (!Vue && typeof window !== 'undefined' && window.Vue) { - install(window.Vue); - } - - var locale = options.locale || 'en-US'; - var fallbackLocale = options.fallbackLocale === false - ? false - : options.fallbackLocale || 'en-US'; - var messages = options.messages || {}; - var dateTimeFormats = options.dateTimeFormats || {}; - var numberFormats = options.numberFormats || {}; - - this._vm = null; - this._formatter = options.formatter || defaultFormatter; - this._modifiers = options.modifiers || {}; - this._missing = options.missing || null; - this._root = options.root || null; - this._sync = options.sync === undefined ? true : !!options.sync; - this._fallbackRoot = options.fallbackRoot === undefined - ? true - : !!options.fallbackRoot; - this._formatFallbackMessages = options.formatFallbackMessages === undefined - ? false - : !!options.formatFallbackMessages; - this._silentTranslationWarn = options.silentTranslationWarn === undefined - ? false - : options.silentTranslationWarn; - this._silentFallbackWarn = options.silentFallbackWarn === undefined - ? false - : !!options.silentFallbackWarn; - this._dateTimeFormatters = {}; - this._numberFormatters = {}; - this._path = new I18nPath(); - this._dataListeners = []; - this._componentInstanceCreatedListener = options.componentInstanceCreatedListener || null; - this._preserveDirectiveContent = options.preserveDirectiveContent === undefined - ? false - : !!options.preserveDirectiveContent; - this.pluralizationRules = options.pluralizationRules || {}; - this._warnHtmlInMessage = options.warnHtmlInMessage || 'off'; - this._postTranslation = options.postTranslation || null; - - /** - * @param choice {number} a choice index given by the input to $tc: `$tc('path.to.rule', choiceIndex)` - * @param choicesLength {number} an overall amount of available choices - * @returns a final choice index - */ - this.getChoiceIndex = function (choice, choicesLength) { - var thisPrototype = Object.getPrototypeOf(this$1); - if (thisPrototype && thisPrototype.getChoiceIndex) { - var prototypeGetChoiceIndex = (thisPrototype.getChoiceIndex); - return (prototypeGetChoiceIndex).call(this$1, choice, choicesLength) - } - - // Default (old) getChoiceIndex implementation - english-compatible - var defaultImpl = function (_choice, _choicesLength) { - _choice = Math.abs(_choice); - - if (_choicesLength === 2) { - return _choice - ? _choice > 1 - ? 1 - : 0 - : 1 - } - - return _choice ? Math.min(_choice, 2) : 0 - }; - - if (this$1.locale in this$1.pluralizationRules) { - return this$1.pluralizationRules[this$1.locale].apply(this$1, [choice, choicesLength]) - } else { - return defaultImpl(choice, choicesLength) - } - }; - - - this._exist = function (message, key) { - if (!message || !key) { return false } - if (!isNull(this$1._path.getPathValue(message, key))) { return true } - // fallback for flat key - if (message[key]) { return true } - return false - }; - - if (this._warnHtmlInMessage === 'warn' || this._warnHtmlInMessage === 'error') { - Object.keys(messages).forEach(function (locale) { - this$1._checkLocaleMessage(locale, this$1._warnHtmlInMessage, messages[locale]); - }); - } - - this._initVM({ - locale: locale, - fallbackLocale: fallbackLocale, - messages: messages, - dateTimeFormats: dateTimeFormats, - numberFormats: numberFormats - }); -}; - -var prototypeAccessors = { vm: { configurable: true },messages: { configurable: true },dateTimeFormats: { configurable: true },numberFormats: { configurable: true },availableLocales: { configurable: true },locale: { configurable: true },fallbackLocale: { configurable: true },formatFallbackMessages: { configurable: true },missing: { configurable: true },formatter: { configurable: true },silentTranslationWarn: { configurable: true },silentFallbackWarn: { configurable: true },preserveDirectiveContent: { configurable: true },warnHtmlInMessage: { configurable: true },postTranslation: { configurable: true } }; - -VueI18n.prototype._checkLocaleMessage = function _checkLocaleMessage (locale, level, message) { - var paths = []; - - var fn = function (level, locale, message, paths) { - if (isPlainObject(message)) { - Object.keys(message).forEach(function (key) { - var val = message[key]; - if (isPlainObject(val)) { - paths.push(key); - paths.push('.'); - fn(level, locale, val, paths); - paths.pop(); - paths.pop(); - } else { - paths.push(key); - fn(level, locale, val, paths); - paths.pop(); - } - }); - } else if (Array.isArray(message)) { - message.forEach(function (item, index) { - if (isPlainObject(item)) { - paths.push(("[" + index + "]")); - paths.push('.'); - fn(level, locale, item, paths); - paths.pop(); - paths.pop(); - } else { - paths.push(("[" + index + "]")); - fn(level, locale, item, paths); - paths.pop(); - } - }); - } else if (isString(message)) { - var ret = htmlTagMatcher.test(message); - if (ret) { - var msg = "Detected HTML in message '" + message + "' of keypath '" + (paths.join('')) + "' at '" + locale + "'. Consider component interpolation with '' to avoid XSS. See https://bit.ly/2ZqJzkp"; - if (level === 'warn') { - warn(msg); - } else if (level === 'error') { - error(msg); - } - } - } - }; - - fn(level, locale, message, paths); -}; - -VueI18n.prototype._initVM = function _initVM (data) { - var silent = Vue.config.silent; - Vue.config.silent = true; - this._vm = new Vue({ data: data }); - Vue.config.silent = silent; -}; - -VueI18n.prototype.destroyVM = function destroyVM () { - this._vm.$destroy(); -}; - -VueI18n.prototype.subscribeDataChanging = function subscribeDataChanging (vm) { - this._dataListeners.push(vm); -}; - -VueI18n.prototype.unsubscribeDataChanging = function unsubscribeDataChanging (vm) { - remove(this._dataListeners, vm); -}; - -VueI18n.prototype.watchI18nData = function watchI18nData () { - var self = this; - return this._vm.$watch('$data', function () { - var i = self._dataListeners.length; - while (i--) { - Vue.nextTick(function () { - self._dataListeners[i] && self._dataListeners[i].$forceUpdate(); - }); - } - }, { deep: true }) -}; - -VueI18n.prototype.watchLocale = function watchLocale () { - /* istanbul ignore if */ - if (!this._sync || !this._root) { return null } - var target = this._vm; - return this._root.$i18n.vm.$watch('locale', function (val) { - target.$set(target, 'locale', val); - target.$forceUpdate(); - }, { immediate: true }) -}; - -VueI18n.prototype.onComponentInstanceCreated = function onComponentInstanceCreated (newI18n) { - if (this._componentInstanceCreatedListener) { - this._componentInstanceCreatedListener(newI18n, this); - } -}; - -prototypeAccessors.vm.get = function () { return this._vm }; - -prototypeAccessors.messages.get = function () { return looseClone(this._getMessages()) }; -prototypeAccessors.dateTimeFormats.get = function () { return looseClone(this._getDateTimeFormats()) }; -prototypeAccessors.numberFormats.get = function () { return looseClone(this._getNumberFormats()) }; -prototypeAccessors.availableLocales.get = function () { return Object.keys(this.messages).sort() }; - -prototypeAccessors.locale.get = function () { return this._vm.locale }; -prototypeAccessors.locale.set = function (locale) { - this._vm.$set(this._vm, 'locale', locale); -}; - -prototypeAccessors.fallbackLocale.get = function () { return this._vm.fallbackLocale }; -prototypeAccessors.fallbackLocale.set = function (locale) { - this._localeChainCache = {}; - this._vm.$set(this._vm, 'fallbackLocale', locale); -}; - -prototypeAccessors.formatFallbackMessages.get = function () { return this._formatFallbackMessages }; -prototypeAccessors.formatFallbackMessages.set = function (fallback) { this._formatFallbackMessages = fallback; }; - -prototypeAccessors.missing.get = function () { return this._missing }; -prototypeAccessors.missing.set = function (handler) { this._missing = handler; }; - -prototypeAccessors.formatter.get = function () { return this._formatter }; -prototypeAccessors.formatter.set = function (formatter) { this._formatter = formatter; }; - -prototypeAccessors.silentTranslationWarn.get = function () { return this._silentTranslationWarn }; -prototypeAccessors.silentTranslationWarn.set = function (silent) { this._silentTranslationWarn = silent; }; - -prototypeAccessors.silentFallbackWarn.get = function () { return this._silentFallbackWarn }; -prototypeAccessors.silentFallbackWarn.set = function (silent) { this._silentFallbackWarn = silent; }; - -prototypeAccessors.preserveDirectiveContent.get = function () { return this._preserveDirectiveContent }; -prototypeAccessors.preserveDirectiveContent.set = function (preserve) { this._preserveDirectiveContent = preserve; }; - -prototypeAccessors.warnHtmlInMessage.get = function () { return this._warnHtmlInMessage }; -prototypeAccessors.warnHtmlInMessage.set = function (level) { - var this$1 = this; - - var orgLevel = this._warnHtmlInMessage; - this._warnHtmlInMessage = level; - if (orgLevel !== level && (level === 'warn' || level === 'error')) { - var messages = this._getMessages(); - Object.keys(messages).forEach(function (locale) { - this$1._checkLocaleMessage(locale, this$1._warnHtmlInMessage, messages[locale]); - }); - } -}; - -prototypeAccessors.postTranslation.get = function () { return this._postTranslation }; -prototypeAccessors.postTranslation.set = function (handler) { this._postTranslation = handler; }; - -VueI18n.prototype._getMessages = function _getMessages () { return this._vm.messages }; -VueI18n.prototype._getDateTimeFormats = function _getDateTimeFormats () { return this._vm.dateTimeFormats }; -VueI18n.prototype._getNumberFormats = function _getNumberFormats () { return this._vm.numberFormats }; - -VueI18n.prototype._warnDefault = function _warnDefault (locale, key, result, vm, values, interpolateMode) { - if (!isNull(result)) { return result } - if (this._missing) { - var missingRet = this._missing.apply(null, [locale, key, vm, values]); - if (isString(missingRet)) { - return missingRet - } - } else { - if (process.env.NODE_ENV !== 'production' && !this._isSilentTranslationWarn(key)) { - warn( - "Cannot translate the value of keypath '" + key + "'. " + - 'Use the value of keypath as default.' - ); - } - } - - if (this._formatFallbackMessages) { - var parsedArgs = parseArgs.apply(void 0, values); - return this._render(key, interpolateMode, parsedArgs.params, key) - } else { - return key - } -}; - -VueI18n.prototype._isFallbackRoot = function _isFallbackRoot (val) { - return !val && !isNull(this._root) && this._fallbackRoot -}; - -VueI18n.prototype._isSilentFallbackWarn = function _isSilentFallbackWarn (key) { - return this._silentFallbackWarn instanceof RegExp - ? this._silentFallbackWarn.test(key) - : this._silentFallbackWarn -}; - -VueI18n.prototype._isSilentFallback = function _isSilentFallback (locale, key) { - return this._isSilentFallbackWarn(key) && (this._isFallbackRoot() || locale !== this.fallbackLocale) -}; - -VueI18n.prototype._isSilentTranslationWarn = function _isSilentTranslationWarn (key) { - return this._silentTranslationWarn instanceof RegExp - ? this._silentTranslationWarn.test(key) - : this._silentTranslationWarn -}; - -VueI18n.prototype._interpolate = function _interpolate ( - locale, - message, - key, - host, - interpolateMode, - values, - visitedLinkStack -) { - if (!message) { return null } - - var pathRet = this._path.getPathValue(message, key); - if (Array.isArray(pathRet) || isPlainObject(pathRet)) { return pathRet } - - var ret; - if (isNull(pathRet)) { - /* istanbul ignore else */ - if (isPlainObject(message)) { - ret = message[key]; - if (!isString(ret)) { - if (process.env.NODE_ENV !== 'production' && !this._isSilentTranslationWarn(key) && !this._isSilentFallback(locale, key)) { - warn(("Value of key '" + key + "' is not a string!")); - } - return null - } - } else { - return null - } - } else { - /* istanbul ignore else */ - if (isString(pathRet)) { - ret = pathRet; - } else { - if (process.env.NODE_ENV !== 'production' && !this._isSilentTranslationWarn(key) && !this._isSilentFallback(locale, key)) { - warn(("Value of key '" + key + "' is not a string!")); - } - return null - } - } - - // Check for the existence of links within the translated string - if (ret.indexOf('@:') >= 0 || ret.indexOf('@.') >= 0) { - ret = this._link(locale, message, ret, host, 'raw', values, visitedLinkStack); - } - - return this._render(ret, interpolateMode, values, key) -}; - -VueI18n.prototype._link = function _link ( - locale, - message, - str, - host, - interpolateMode, - values, - visitedLinkStack -) { - var ret = str; - - // Match all the links within the local - // We are going to replace each of - // them with its translation - var matches = ret.match(linkKeyMatcher); - for (var idx in matches) { - // ie compatible: filter custom array - // prototype method - if (!matches.hasOwnProperty(idx)) { - continue - } - var link = matches[idx]; - var linkKeyPrefixMatches = link.match(linkKeyPrefixMatcher); - var linkPrefix = linkKeyPrefixMatches[0]; - var formatterName = linkKeyPrefixMatches[1]; - - // Remove the leading @:, @.case: and the brackets - var linkPlaceholder = link.replace(linkPrefix, '').replace(bracketsMatcher, ''); - - if (includes(visitedLinkStack, linkPlaceholder)) { - if (process.env.NODE_ENV !== 'production') { - warn(("Circular reference found. \"" + link + "\" is already visited in the chain of " + (visitedLinkStack.reverse().join(' <- ')))); - } - return ret - } - visitedLinkStack.push(linkPlaceholder); - - // Translate the link - var translated = this._interpolate( - locale, message, linkPlaceholder, host, - interpolateMode === 'raw' ? 'string' : interpolateMode, - interpolateMode === 'raw' ? undefined : values, - visitedLinkStack - ); - - if (this._isFallbackRoot(translated)) { - if (process.env.NODE_ENV !== 'production' && !this._isSilentTranslationWarn(linkPlaceholder)) { - warn(("Fall back to translate the link placeholder '" + linkPlaceholder + "' with root locale.")); - } - /* istanbul ignore if */ - if (!this._root) { throw Error('unexpected error') } - var root = this._root.$i18n; - translated = root._translate( - root._getMessages(), root.locale, root.fallbackLocale, - linkPlaceholder, host, interpolateMode, values - ); - } - translated = this._warnDefault( - locale, linkPlaceholder, translated, host, - Array.isArray(values) ? values : [values], - interpolateMode - ); - - if (this._modifiers.hasOwnProperty(formatterName)) { - translated = this._modifiers[formatterName](translated); - } else if (defaultModifiers.hasOwnProperty(formatterName)) { - translated = defaultModifiers[formatterName](translated); - } - - visitedLinkStack.pop(); - - // Replace the link with the translated - ret = !translated ? ret : ret.replace(link, translated); - } - - return ret -}; - -VueI18n.prototype._render = function _render (message, interpolateMode, values, path) { - var ret = this._formatter.interpolate(message, values, path); - - // If the custom formatter refuses to work - apply the default one - if (!ret) { - ret = defaultFormatter.interpolate(message, values, path); - } - - // if interpolateMode is **not** 'string' ('row'), - // return the compiled data (e.g. ['foo', VNode, 'bar']) with formatter - return interpolateMode === 'string' && !isString(ret) ? ret.join('') : ret -}; - -VueI18n.prototype._appendItemToChain = function _appendItemToChain (chain, item, blocks) { - var follow = false; - if (!includes(chain, item)) { - follow = true; - if (item) { - follow = item[item.length - 1] !== '!'; - item = item.replace(/!/g, ''); - chain.push(item); - if (blocks && blocks[item]) { - follow = blocks[item]; - } - } - } - return follow -}; - -VueI18n.prototype._appendLocaleToChain = function _appendLocaleToChain (chain, locale, blocks) { - var follow; - var tokens = locale.split('-'); - do { - var item = tokens.join('-'); - follow = this._appendItemToChain(chain, item, blocks); - tokens.splice(-1, 1); - } while (tokens.length && (follow === true)) - return follow -}; - -VueI18n.prototype._appendBlockToChain = function _appendBlockToChain (chain, block, blocks) { - var follow = true; - for (var i = 0; (i < block.length) && (isBoolean(follow)); i++) { - var locale = block[i]; - if (isString(locale)) { - follow = this._appendLocaleToChain(chain, locale, blocks); - } - } - return follow -}; - -VueI18n.prototype._getLocaleChain = function _getLocaleChain (start, fallbackLocale) { - if (start === '') { return [] } - - if (!this._localeChainCache) { - this._localeChainCache = {}; - } - - var chain = this._localeChainCache[start]; - if (!chain) { - if (!fallbackLocale) { - fallbackLocale = this.fallbackLocale; - } - chain = []; - - // first block defined by start - var block = [start]; - - // while any intervening block found - while (isArray(block)) { - block = this._appendBlockToChain( - chain, - block, - fallbackLocale - ); - } - - // last block defined by default - var defaults; - if (isArray(fallbackLocale)) { - defaults = fallbackLocale; - } else if (isObject(fallbackLocale)) { - /* $FlowFixMe */ - if (fallbackLocale['default']) { - defaults = fallbackLocale['default']; - } else { - defaults = null; - } - } else { - defaults = fallbackLocale; - } - - // convert defaults to array - if (isString(defaults)) { - block = [defaults]; - } else { - block = defaults; - } - if (block) { - this._appendBlockToChain( - chain, - block, - null - ); - } - this._localeChainCache[start] = chain; - } - return chain -}; - -VueI18n.prototype._translate = function _translate ( - messages, - locale, - fallback, - key, - host, - interpolateMode, - args -) { - var chain = this._getLocaleChain(locale, fallback); - var res; - for (var i = 0; i < chain.length; i++) { - var step = chain[i]; - res = - this._interpolate(step, messages[step], key, host, interpolateMode, args, [key]); - if (!isNull(res)) { - if (step !== locale && process.env.NODE_ENV !== 'production' && !this._isSilentTranslationWarn(key) && !this._isSilentFallbackWarn(key)) { - warn(("Fall back to translate the keypath '" + key + "' with '" + step + "' locale.")); - } - return res - } - } - return null -}; - -VueI18n.prototype._t = function _t (key, _locale, messages, host) { - var ref; - - var values = [], len = arguments.length - 4; - while ( len-- > 0 ) values[ len ] = arguments[ len + 4 ]; - if (!key) { return '' } - - var parsedArgs = parseArgs.apply(void 0, values); - var locale = parsedArgs.locale || _locale; - - var ret = this._translate( - messages, locale, this.fallbackLocale, key, - host, 'string', parsedArgs.params - ); - if (this._isFallbackRoot(ret)) { - if (process.env.NODE_ENV !== 'production' && !this._isSilentTranslationWarn(key) && !this._isSilentFallbackWarn(key)) { - warn(("Fall back to translate the keypath '" + key + "' with root locale.")); - } - /* istanbul ignore if */ - if (!this._root) { throw Error('unexpected error') } - return (ref = this._root).$t.apply(ref, [ key ].concat( values )) - } else { - ret = this._warnDefault(locale, key, ret, host, values, 'string'); - if (this._postTranslation && ret !== null && ret !== undefined) { - ret = this._postTranslation(ret, key); - } - return ret - } -}; - -VueI18n.prototype.t = function t (key) { - var ref; - - var values = [], len = arguments.length - 1; - while ( len-- > 0 ) values[ len ] = arguments[ len + 1 ]; - return (ref = this)._t.apply(ref, [ key, this.locale, this._getMessages(), null ].concat( values )) -}; - -VueI18n.prototype._i = function _i (key, locale, messages, host, values) { - var ret = - this._translate(messages, locale, this.fallbackLocale, key, host, 'raw', values); - if (this._isFallbackRoot(ret)) { - if (process.env.NODE_ENV !== 'production' && !this._isSilentTranslationWarn(key)) { - warn(("Fall back to interpolate the keypath '" + key + "' with root locale.")); - } - if (!this._root) { throw Error('unexpected error') } - return this._root.$i18n.i(key, locale, values) - } else { - return this._warnDefault(locale, key, ret, host, [values], 'raw') - } -}; - -VueI18n.prototype.i = function i (key, locale, values) { - /* istanbul ignore if */ - if (!key) { return '' } - - if (!isString(locale)) { - locale = this.locale; - } - - return this._i(key, locale, this._getMessages(), null, values) -}; - -VueI18n.prototype._tc = function _tc ( - key, - _locale, - messages, - host, - choice -) { - var ref; - - var values = [], len = arguments.length - 5; - while ( len-- > 0 ) values[ len ] = arguments[ len + 5 ]; - if (!key) { return '' } - if (choice === undefined) { - choice = 1; - } - - var predefined = { 'count': choice, 'n': choice }; - var parsedArgs = parseArgs.apply(void 0, values); - parsedArgs.params = Object.assign(predefined, parsedArgs.params); - values = parsedArgs.locale === null ? [parsedArgs.params] : [parsedArgs.locale, parsedArgs.params]; - return this.fetchChoice((ref = this)._t.apply(ref, [ key, _locale, messages, host ].concat( values )), choice) -}; - -VueI18n.prototype.fetchChoice = function fetchChoice (message, choice) { - /* istanbul ignore if */ - if (!message && !isString(message)) { return null } - var choices = message.split('|'); - - choice = this.getChoiceIndex(choice, choices.length); - if (!choices[choice]) { return message } - return choices[choice].trim() -}; - -VueI18n.prototype.tc = function tc (key, choice) { - var ref; - - var values = [], len = arguments.length - 2; - while ( len-- > 0 ) values[ len ] = arguments[ len + 2 ]; - return (ref = this)._tc.apply(ref, [ key, this.locale, this._getMessages(), null, choice ].concat( values )) -}; - -VueI18n.prototype._te = function _te (key, locale, messages) { - var args = [], len = arguments.length - 3; - while ( len-- > 0 ) args[ len ] = arguments[ len + 3 ]; - - var _locale = parseArgs.apply(void 0, args).locale || locale; - return this._exist(messages[_locale], key) -}; - -VueI18n.prototype.te = function te (key, locale) { - return this._te(key, this.locale, this._getMessages(), locale) -}; - -VueI18n.prototype.getLocaleMessage = function getLocaleMessage (locale) { - return looseClone(this._vm.messages[locale] || {}) -}; - -VueI18n.prototype.setLocaleMessage = function setLocaleMessage (locale, message) { - if (this._warnHtmlInMessage === 'warn' || this._warnHtmlInMessage === 'error') { - this._checkLocaleMessage(locale, this._warnHtmlInMessage, message); - } - this._vm.$set(this._vm.messages, locale, message); -}; - -VueI18n.prototype.mergeLocaleMessage = function mergeLocaleMessage (locale, message) { - if (this._warnHtmlInMessage === 'warn' || this._warnHtmlInMessage === 'error') { - this._checkLocaleMessage(locale, this._warnHtmlInMessage, message); - } - this._vm.$set(this._vm.messages, locale, merge({}, this._vm.messages[locale] || {}, message)); -}; - -VueI18n.prototype.getDateTimeFormat = function getDateTimeFormat (locale) { - return looseClone(this._vm.dateTimeFormats[locale] || {}) -}; - -VueI18n.prototype.setDateTimeFormat = function setDateTimeFormat (locale, format) { - this._vm.$set(this._vm.dateTimeFormats, locale, format); - this._clearDateTimeFormat(locale, format); -}; - -VueI18n.prototype.mergeDateTimeFormat = function mergeDateTimeFormat (locale, format) { - this._vm.$set(this._vm.dateTimeFormats, locale, merge(this._vm.dateTimeFormats[locale] || {}, format)); - this._clearDateTimeFormat(locale, format); -}; - -VueI18n.prototype._clearDateTimeFormat = function _clearDateTimeFormat (locale, format) { - for (var key in format) { - var id = locale + "__" + key; - - if (!this._dateTimeFormatters.hasOwnProperty(id)) { - continue - } - - delete this._dateTimeFormatters[id]; - } -}; - -VueI18n.prototype._localizeDateTime = function _localizeDateTime ( - value, - locale, - fallback, - dateTimeFormats, - key -) { - var _locale = locale; - var formats = dateTimeFormats[_locale]; - - var chain = this._getLocaleChain(locale, fallback); - for (var i = 0; i < chain.length; i++) { - var current = _locale; - var step = chain[i]; - formats = dateTimeFormats[step]; - _locale = step; - // fallback locale - if (isNull(formats) || isNull(formats[key])) { - if (step !== locale && process.env.NODE_ENV !== 'production' && !this._isSilentTranslationWarn(key) && !this._isSilentFallbackWarn(key)) { - warn(("Fall back to '" + step + "' datetime formats from '" + current + "' datetime formats.")); - } - } else { - break - } - } - - if (isNull(formats) || isNull(formats[key])) { - return null - } else { - var format = formats[key]; - var id = _locale + "__" + key; - var formatter = this._dateTimeFormatters[id]; - if (!formatter) { - formatter = this._dateTimeFormatters[id] = new Intl.DateTimeFormat(_locale, format); - } - return formatter.format(value) - } -}; - -VueI18n.prototype._d = function _d (value, locale, key) { - /* istanbul ignore if */ - if (process.env.NODE_ENV !== 'production' && !VueI18n.availabilities.dateTimeFormat) { - warn('Cannot format a Date value due to not supported Intl.DateTimeFormat.'); - return '' - } - - if (!key) { - return new Intl.DateTimeFormat(locale).format(value) - } - - var ret = - this._localizeDateTime(value, locale, this.fallbackLocale, this._getDateTimeFormats(), key); - if (this._isFallbackRoot(ret)) { - if (process.env.NODE_ENV !== 'production' && !this._isSilentTranslationWarn(key) && !this._isSilentFallbackWarn(key)) { - warn(("Fall back to datetime localization of root: key '" + key + "'.")); - } - /* istanbul ignore if */ - if (!this._root) { throw Error('unexpected error') } - return this._root.$i18n.d(value, key, locale) - } else { - return ret || '' - } -}; - -VueI18n.prototype.d = function d (value) { - var args = [], len = arguments.length - 1; - while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ]; - - var locale = this.locale; - var key = null; - - if (args.length === 1) { - if (isString(args[0])) { - key = args[0]; - } else if (isObject(args[0])) { - if (args[0].locale) { - locale = args[0].locale; - } - if (args[0].key) { - key = args[0].key; - } - } - } else if (args.length === 2) { - if (isString(args[0])) { - key = args[0]; - } - if (isString(args[1])) { - locale = args[1]; - } - } - - return this._d(value, locale, key) -}; - -VueI18n.prototype.getNumberFormat = function getNumberFormat (locale) { - return looseClone(this._vm.numberFormats[locale] || {}) -}; - -VueI18n.prototype.setNumberFormat = function setNumberFormat (locale, format) { - this._vm.$set(this._vm.numberFormats, locale, format); - this._clearNumberFormat(locale, format); -}; - -VueI18n.prototype.mergeNumberFormat = function mergeNumberFormat (locale, format) { - this._vm.$set(this._vm.numberFormats, locale, merge(this._vm.numberFormats[locale] || {}, format)); - this._clearNumberFormat(locale, format); -}; - -VueI18n.prototype._clearNumberFormat = function _clearNumberFormat (locale, format) { - for (var key in format) { - var id = locale + "__" + key; - - if (!this._numberFormatters.hasOwnProperty(id)) { - continue - } - - delete this._numberFormatters[id]; - } -}; - -VueI18n.prototype._getNumberFormatter = function _getNumberFormatter ( - value, - locale, - fallback, - numberFormats, - key, - options -) { - var _locale = locale; - var formats = numberFormats[_locale]; - - var chain = this._getLocaleChain(locale, fallback); - for (var i = 0; i < chain.length; i++) { - var current = _locale; - var step = chain[i]; - formats = numberFormats[step]; - _locale = step; - // fallback locale - if (isNull(formats) || isNull(formats[key])) { - if (step !== locale && process.env.NODE_ENV !== 'production' && !this._isSilentTranslationWarn(key) && !this._isSilentFallbackWarn(key)) { - warn(("Fall back to '" + step + "' number formats from '" + current + "' number formats.")); - } - } else { - break - } - } - - if (isNull(formats) || isNull(formats[key])) { - return null - } else { - var format = formats[key]; - - var formatter; - if (options) { - // If options specified - create one time number formatter - formatter = new Intl.NumberFormat(_locale, Object.assign({}, format, options)); - } else { - var id = _locale + "__" + key; - formatter = this._numberFormatters[id]; - if (!formatter) { - formatter = this._numberFormatters[id] = new Intl.NumberFormat(_locale, format); - } - } - return formatter - } -}; - -VueI18n.prototype._n = function _n (value, locale, key, options) { - /* istanbul ignore if */ - if (!VueI18n.availabilities.numberFormat) { - if (process.env.NODE_ENV !== 'production') { - warn('Cannot format a Number value due to not supported Intl.NumberFormat.'); - } - return '' - } - - if (!key) { - var nf = !options ? new Intl.NumberFormat(locale) : new Intl.NumberFormat(locale, options); - return nf.format(value) - } - - var formatter = this._getNumberFormatter(value, locale, this.fallbackLocale, this._getNumberFormats(), key, options); - var ret = formatter && formatter.format(value); - if (this._isFallbackRoot(ret)) { - if (process.env.NODE_ENV !== 'production' && !this._isSilentTranslationWarn(key) && !this._isSilentFallbackWarn(key)) { - warn(("Fall back to number localization of root: key '" + key + "'.")); - } - /* istanbul ignore if */ - if (!this._root) { throw Error('unexpected error') } - return this._root.$i18n.n(value, Object.assign({}, { key: key, locale: locale }, options)) - } else { - return ret || '' - } -}; - -VueI18n.prototype.n = function n (value) { - var args = [], len = arguments.length - 1; - while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ]; - - var locale = this.locale; - var key = null; - var options = null; - - if (args.length === 1) { - if (isString(args[0])) { - key = args[0]; - } else if (isObject(args[0])) { - if (args[0].locale) { - locale = args[0].locale; - } - if (args[0].key) { - key = args[0].key; - } - - // Filter out number format options only - options = Object.keys(args[0]).reduce(function (acc, key) { - var obj; - - if (includes(numberFormatKeys, key)) { - return Object.assign({}, acc, ( obj = {}, obj[key] = args[0][key], obj )) - } - return acc - }, null); - } - } else if (args.length === 2) { - if (isString(args[0])) { - key = args[0]; - } - if (isString(args[1])) { - locale = args[1]; - } - } - - return this._n(value, locale, key, options) -}; - -VueI18n.prototype._ntp = function _ntp (value, locale, key, options) { - /* istanbul ignore if */ - if (!VueI18n.availabilities.numberFormat) { - if (process.env.NODE_ENV !== 'production') { - warn('Cannot format to parts a Number value due to not supported Intl.NumberFormat.'); - } - return [] - } - - if (!key) { - var nf = !options ? new Intl.NumberFormat(locale) : new Intl.NumberFormat(locale, options); - return nf.formatToParts(value) - } - - var formatter = this._getNumberFormatter(value, locale, this.fallbackLocale, this._getNumberFormats(), key, options); - var ret = formatter && formatter.formatToParts(value); - if (this._isFallbackRoot(ret)) { - if (process.env.NODE_ENV !== 'production' && !this._isSilentTranslationWarn(key)) { - warn(("Fall back to format number to parts of root: key '" + key + "' .")); - } - /* istanbul ignore if */ - if (!this._root) { throw Error('unexpected error') } - return this._root.$i18n._ntp(value, locale, key, options) - } else { - return ret || [] - } -}; - -Object.defineProperties( VueI18n.prototype, prototypeAccessors ); - -var availabilities; -// $FlowFixMe -Object.defineProperty(VueI18n, 'availabilities', { - get: function get () { - if (!availabilities) { - var intlDefined = typeof Intl !== 'undefined'; - availabilities = { - dateTimeFormat: intlDefined && typeof Intl.DateTimeFormat !== 'undefined', - numberFormat: intlDefined && typeof Intl.NumberFormat !== 'undefined' - }; - } - - return availabilities - } -}); - -VueI18n.install = install; -VueI18n.version = '8.20.0'; - -export default VueI18n; diff --git a/node_modules/vue-i18n/dist/vue-i18n.js b/node_modules/vue-i18n/dist/vue-i18n.js deleted file mode 100644 index 9509917..0000000 --- a/node_modules/vue-i18n/dist/vue-i18n.js +++ /dev/null @@ -1,2138 +0,0 @@ -/*! - * vue-i18n v8.20.0 - * (c) 2020 kazuya kawaguchi - * Released under the MIT License. - */ -(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : - typeof define === 'function' && define.amd ? define(factory) : - (global.VueI18n = factory()); -}(this, (function () { 'use strict'; - - /* */ - - /** - * constants - */ - - var numberFormatKeys = [ - 'style', - 'currency', - 'currencyDisplay', - 'useGrouping', - 'minimumIntegerDigits', - 'minimumFractionDigits', - 'maximumFractionDigits', - 'minimumSignificantDigits', - 'maximumSignificantDigits', - 'localeMatcher', - 'formatMatcher', - 'unit' - ]; - - /** - * utilities - */ - - function warn (msg, err) { - if (typeof console !== 'undefined') { - console.warn('[vue-i18n] ' + msg); - /* istanbul ignore if */ - if (err) { - console.warn(err.stack); - } - } - } - - function error (msg, err) { - if (typeof console !== 'undefined') { - console.error('[vue-i18n] ' + msg); - /* istanbul ignore if */ - if (err) { - console.error(err.stack); - } - } - } - - var isArray = Array.isArray; - - function isObject (obj) { - return obj !== null && typeof obj === 'object' - } - - function isBoolean (val) { - return typeof val === 'boolean' - } - - function isString (val) { - return typeof val === 'string' - } - - var toString = Object.prototype.toString; - var OBJECT_STRING = '[object Object]'; - function isPlainObject (obj) { - return toString.call(obj) === OBJECT_STRING - } - - function isNull (val) { - return val === null || val === undefined - } - - function parseArgs () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - var locale = null; - var params = null; - if (args.length === 1) { - if (isObject(args[0]) || Array.isArray(args[0])) { - params = args[0]; - } else if (typeof args[0] === 'string') { - locale = args[0]; - } - } else if (args.length === 2) { - if (typeof args[0] === 'string') { - locale = args[0]; - } - /* istanbul ignore if */ - if (isObject(args[1]) || Array.isArray(args[1])) { - params = args[1]; - } - } - - return { locale: locale, params: params } - } - - function looseClone (obj) { - return JSON.parse(JSON.stringify(obj)) - } - - function remove (arr, item) { - if (arr.length) { - var index = arr.indexOf(item); - if (index > -1) { - return arr.splice(index, 1) - } - } - } - - function includes (arr, item) { - return !!~arr.indexOf(item) - } - - var hasOwnProperty = Object.prototype.hasOwnProperty; - function hasOwn (obj, key) { - return hasOwnProperty.call(obj, key) - } - - function merge (target) { - var arguments$1 = arguments; - - var output = Object(target); - for (var i = 1; i < arguments.length; i++) { - var source = arguments$1[i]; - if (source !== undefined && source !== null) { - var key = (void 0); - for (key in source) { - if (hasOwn(source, key)) { - if (isObject(source[key])) { - output[key] = merge(output[key], source[key]); - } else { - output[key] = source[key]; - } - } - } - } - } - return output - } - - function looseEqual (a, b) { - if (a === b) { return true } - var isObjectA = isObject(a); - var isObjectB = isObject(b); - if (isObjectA && isObjectB) { - try { - var isArrayA = Array.isArray(a); - var isArrayB = Array.isArray(b); - if (isArrayA && isArrayB) { - return a.length === b.length && a.every(function (e, i) { - return looseEqual(e, b[i]) - }) - } else if (!isArrayA && !isArrayB) { - var keysA = Object.keys(a); - var keysB = Object.keys(b); - return keysA.length === keysB.length && keysA.every(function (key) { - return looseEqual(a[key], b[key]) - }) - } else { - /* istanbul ignore next */ - return false - } - } catch (e) { - /* istanbul ignore next */ - return false - } - } else if (!isObjectA && !isObjectB) { - return String(a) === String(b) - } else { - return false - } - } - - /* */ - - function extend (Vue) { - if (!Vue.prototype.hasOwnProperty('$i18n')) { - // $FlowFixMe - Object.defineProperty(Vue.prototype, '$i18n', { - get: function get () { return this._i18n } - }); - } - - Vue.prototype.$t = function (key) { - var values = [], len = arguments.length - 1; - while ( len-- > 0 ) values[ len ] = arguments[ len + 1 ]; - - var i18n = this.$i18n; - return i18n._t.apply(i18n, [ key, i18n.locale, i18n._getMessages(), this ].concat( values )) - }; - - Vue.prototype.$tc = function (key, choice) { - var values = [], len = arguments.length - 2; - while ( len-- > 0 ) values[ len ] = arguments[ len + 2 ]; - - var i18n = this.$i18n; - return i18n._tc.apply(i18n, [ key, i18n.locale, i18n._getMessages(), this, choice ].concat( values )) - }; - - Vue.prototype.$te = function (key, locale) { - var i18n = this.$i18n; - return i18n._te(key, i18n.locale, i18n._getMessages(), locale) - }; - - Vue.prototype.$d = function (value) { - var ref; - - var args = [], len = arguments.length - 1; - while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ]; - return (ref = this.$i18n).d.apply(ref, [ value ].concat( args )) - }; - - Vue.prototype.$n = function (value) { - var ref; - - var args = [], len = arguments.length - 1; - while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ]; - return (ref = this.$i18n).n.apply(ref, [ value ].concat( args )) - }; - } - - /* */ - - var mixin = { - beforeCreate: function beforeCreate () { - var options = this.$options; - options.i18n = options.i18n || (options.__i18n ? {} : null); - - if (options.i18n) { - if (options.i18n instanceof VueI18n) { - // init locale messages via custom blocks - if (options.__i18n) { - try { - var localeMessages = {}; - options.__i18n.forEach(function (resource) { - localeMessages = merge(localeMessages, JSON.parse(resource)); - }); - Object.keys(localeMessages).forEach(function (locale) { - options.i18n.mergeLocaleMessage(locale, localeMessages[locale]); - }); - } catch (e) { - { - error("Cannot parse locale messages via custom blocks.", e); - } - } - } - this._i18n = options.i18n; - this._i18nWatcher = this._i18n.watchI18nData(); - } else if (isPlainObject(options.i18n)) { - var rootI18n = this.$root && this.$root.$i18n && this.$root.$i18n instanceof VueI18n - ? this.$root.$i18n - : null; - // component local i18n - if (rootI18n) { - options.i18n.root = this.$root; - options.i18n.formatter = rootI18n.formatter; - options.i18n.fallbackLocale = rootI18n.fallbackLocale; - options.i18n.formatFallbackMessages = rootI18n.formatFallbackMessages; - options.i18n.silentTranslationWarn = rootI18n.silentTranslationWarn; - options.i18n.silentFallbackWarn = rootI18n.silentFallbackWarn; - options.i18n.pluralizationRules = rootI18n.pluralizationRules; - options.i18n.preserveDirectiveContent = rootI18n.preserveDirectiveContent; - } - - // init locale messages via custom blocks - if (options.__i18n) { - try { - var localeMessages$1 = {}; - options.__i18n.forEach(function (resource) { - localeMessages$1 = merge(localeMessages$1, JSON.parse(resource)); - }); - options.i18n.messages = localeMessages$1; - } catch (e) { - { - warn("Cannot parse locale messages via custom blocks.", e); - } - } - } - - var ref = options.i18n; - var sharedMessages = ref.sharedMessages; - if (sharedMessages && isPlainObject(sharedMessages)) { - options.i18n.messages = merge(options.i18n.messages, sharedMessages); - } - - this._i18n = new VueI18n(options.i18n); - this._i18nWatcher = this._i18n.watchI18nData(); - - if (options.i18n.sync === undefined || !!options.i18n.sync) { - this._localeWatcher = this.$i18n.watchLocale(); - } - - if (rootI18n) { - rootI18n.onComponentInstanceCreated(this._i18n); - } - } else { - { - warn("Cannot be interpreted 'i18n' option."); - } - } - } else if (this.$root && this.$root.$i18n && this.$root.$i18n instanceof VueI18n) { - // root i18n - this._i18n = this.$root.$i18n; - } else if (options.parent && options.parent.$i18n && options.parent.$i18n instanceof VueI18n) { - // parent i18n - this._i18n = options.parent.$i18n; - } - }, - - beforeMount: function beforeMount () { - var options = this.$options; - options.i18n = options.i18n || (options.__i18n ? {} : null); - - if (options.i18n) { - if (options.i18n instanceof VueI18n) { - // init locale messages via custom blocks - this._i18n.subscribeDataChanging(this); - this._subscribing = true; - } else if (isPlainObject(options.i18n)) { - this._i18n.subscribeDataChanging(this); - this._subscribing = true; - } else { - { - warn("Cannot be interpreted 'i18n' option."); - } - } - } else if (this.$root && this.$root.$i18n && this.$root.$i18n instanceof VueI18n) { - this._i18n.subscribeDataChanging(this); - this._subscribing = true; - } else if (options.parent && options.parent.$i18n && options.parent.$i18n instanceof VueI18n) { - this._i18n.subscribeDataChanging(this); - this._subscribing = true; - } - }, - - beforeDestroy: function beforeDestroy () { - if (!this._i18n) { return } - - var self = this; - this.$nextTick(function () { - if (self._subscribing) { - self._i18n.unsubscribeDataChanging(self); - delete self._subscribing; - } - - if (self._i18nWatcher) { - self._i18nWatcher(); - self._i18n.destroyVM(); - delete self._i18nWatcher; - } - - if (self._localeWatcher) { - self._localeWatcher(); - delete self._localeWatcher; - } - }); - } - }; - - /* */ - - var interpolationComponent = { - name: 'i18n', - functional: true, - props: { - tag: { - type: [String, Boolean, Object], - default: 'span' - }, - path: { - type: String, - required: true - }, - locale: { - type: String - }, - places: { - type: [Array, Object] - } - }, - render: function render (h, ref) { - var data = ref.data; - var parent = ref.parent; - var props = ref.props; - var slots = ref.slots; - - var $i18n = parent.$i18n; - if (!$i18n) { - { - warn('Cannot find VueI18n instance!'); - } - return - } - - var path = props.path; - var locale = props.locale; - var places = props.places; - var params = slots(); - var children = $i18n.i( - path, - locale, - onlyHasDefaultPlace(params) || places - ? useLegacyPlaces(params.default, places) - : params - ); - - var tag = (!!props.tag && props.tag !== true) || props.tag === false ? props.tag : 'span'; - return tag ? h(tag, data, children) : children - } - }; - - function onlyHasDefaultPlace (params) { - var prop; - for (prop in params) { - if (prop !== 'default') { return false } - } - return Boolean(prop) - } - - function useLegacyPlaces (children, places) { - var params = places ? createParamsFromPlaces(places) : {}; - - if (!children) { return params } - - // Filter empty text nodes - children = children.filter(function (child) { - return child.tag || child.text.trim() !== '' - }); - - var everyPlace = children.every(vnodeHasPlaceAttribute); - if (everyPlace) { - warn('`place` attribute is deprecated in next major version. Please switch to Vue slots.'); - } - - return children.reduce( - everyPlace ? assignChildPlace : assignChildIndex, - params - ) - } - - function createParamsFromPlaces (places) { - { - warn('`places` prop is deprecated in next major version. Please switch to Vue slots.'); - } - - return Array.isArray(places) - ? places.reduce(assignChildIndex, {}) - : Object.assign({}, places) - } - - function assignChildPlace (params, child) { - if (child.data && child.data.attrs && child.data.attrs.place) { - params[child.data.attrs.place] = child; - } - return params - } - - function assignChildIndex (params, child, index) { - params[index] = child; - return params - } - - function vnodeHasPlaceAttribute (vnode) { - return Boolean(vnode.data && vnode.data.attrs && vnode.data.attrs.place) - } - - /* */ - - var numberComponent = { - name: 'i18n-n', - functional: true, - props: { - tag: { - type: [String, Boolean, Object], - default: 'span' - }, - value: { - type: Number, - required: true - }, - format: { - type: [String, Object] - }, - locale: { - type: String - } - }, - render: function render (h, ref) { - var props = ref.props; - var parent = ref.parent; - var data = ref.data; - - var i18n = parent.$i18n; - - if (!i18n) { - { - warn('Cannot find VueI18n instance!'); - } - return null - } - - var key = null; - var options = null; - - if (isString(props.format)) { - key = props.format; - } else if (isObject(props.format)) { - if (props.format.key) { - key = props.format.key; - } - - // Filter out number format options only - options = Object.keys(props.format).reduce(function (acc, prop) { - var obj; - - if (includes(numberFormatKeys, prop)) { - return Object.assign({}, acc, ( obj = {}, obj[prop] = props.format[prop], obj )) - } - return acc - }, null); - } - - var locale = props.locale || i18n.locale; - var parts = i18n._ntp(props.value, locale, key, options); - - var values = parts.map(function (part, index) { - var obj; - - var slot = data.scopedSlots && data.scopedSlots[part.type]; - return slot ? slot(( obj = {}, obj[part.type] = part.value, obj.index = index, obj.parts = parts, obj )) : part.value - }); - - var tag = (!!props.tag && props.tag !== true) || props.tag === false ? props.tag : 'span'; - return tag - ? h(tag, { - attrs: data.attrs, - 'class': data['class'], - staticClass: data.staticClass - }, values) - : values - } - }; - - /* */ - - function bind (el, binding, vnode) { - if (!assert(el, vnode)) { return } - - t(el, binding, vnode); - } - - function update (el, binding, vnode, oldVNode) { - if (!assert(el, vnode)) { return } - - var i18n = vnode.context.$i18n; - if (localeEqual(el, vnode) && - (looseEqual(binding.value, binding.oldValue) && - looseEqual(el._localeMessage, i18n.getLocaleMessage(i18n.locale)))) { return } - - t(el, binding, vnode); - } - - function unbind (el, binding, vnode, oldVNode) { - var vm = vnode.context; - if (!vm) { - warn('Vue instance does not exists in VNode context'); - return - } - - var i18n = vnode.context.$i18n || {}; - if (!binding.modifiers.preserve && !i18n.preserveDirectiveContent) { - el.textContent = ''; - } - el._vt = undefined; - delete el['_vt']; - el._locale = undefined; - delete el['_locale']; - el._localeMessage = undefined; - delete el['_localeMessage']; - } - - function assert (el, vnode) { - var vm = vnode.context; - if (!vm) { - warn('Vue instance does not exists in VNode context'); - return false - } - - if (!vm.$i18n) { - warn('VueI18n instance does not exists in Vue instance'); - return false - } - - return true - } - - function localeEqual (el, vnode) { - var vm = vnode.context; - return el._locale === vm.$i18n.locale - } - - function t (el, binding, vnode) { - var ref$1, ref$2; - - var value = binding.value; - - var ref = parseValue(value); - var path = ref.path; - var locale = ref.locale; - var args = ref.args; - var choice = ref.choice; - if (!path && !locale && !args) { - warn('value type not supported'); - return - } - - if (!path) { - warn('`path` is required in v-t directive'); - return - } - - var vm = vnode.context; - if (choice != null) { - el._vt = el.textContent = (ref$1 = vm.$i18n).tc.apply(ref$1, [ path, choice ].concat( makeParams(locale, args) )); - } else { - el._vt = el.textContent = (ref$2 = vm.$i18n).t.apply(ref$2, [ path ].concat( makeParams(locale, args) )); - } - el._locale = vm.$i18n.locale; - el._localeMessage = vm.$i18n.getLocaleMessage(vm.$i18n.locale); - } - - function parseValue (value) { - var path; - var locale; - var args; - var choice; - - if (isString(value)) { - path = value; - } else if (isPlainObject(value)) { - path = value.path; - locale = value.locale; - args = value.args; - choice = value.choice; - } - - return { path: path, locale: locale, args: args, choice: choice } - } - - function makeParams (locale, args) { - var params = []; - - locale && params.push(locale); - if (args && (Array.isArray(args) || isPlainObject(args))) { - params.push(args); - } - - return params - } - - var Vue; - - function install (_Vue) { - /* istanbul ignore if */ - if (install.installed && _Vue === Vue) { - warn('already installed.'); - return - } - install.installed = true; - - Vue = _Vue; - - var version = (Vue.version && Number(Vue.version.split('.')[0])) || -1; - /* istanbul ignore if */ - if (version < 2) { - warn(("vue-i18n (" + (install.version) + ") need to use Vue 2.0 or later (Vue: " + (Vue.version) + ").")); - return - } - - extend(Vue); - Vue.mixin(mixin); - Vue.directive('t', { bind: bind, update: update, unbind: unbind }); - Vue.component(interpolationComponent.name, interpolationComponent); - Vue.component(numberComponent.name, numberComponent); - - // use simple mergeStrategies to prevent i18n instance lose '__proto__' - var strats = Vue.config.optionMergeStrategies; - strats.i18n = function (parentVal, childVal) { - return childVal === undefined - ? parentVal - : childVal - }; - } - - /* */ - - var BaseFormatter = function BaseFormatter () { - this._caches = Object.create(null); - }; - - BaseFormatter.prototype.interpolate = function interpolate (message, values) { - if (!values) { - return [message] - } - var tokens = this._caches[message]; - if (!tokens) { - tokens = parse(message); - this._caches[message] = tokens; - } - return compile(tokens, values) - }; - - - - var RE_TOKEN_LIST_VALUE = /^(?:\d)+/; - var RE_TOKEN_NAMED_VALUE = /^(?:\w)+/; - - function parse (format) { - var tokens = []; - var position = 0; - - var text = ''; - while (position < format.length) { - var char = format[position++]; - if (char === '{') { - if (text) { - tokens.push({ type: 'text', value: text }); - } - - text = ''; - var sub = ''; - char = format[position++]; - while (char !== undefined && char !== '}') { - sub += char; - char = format[position++]; - } - var isClosed = char === '}'; - - var type = RE_TOKEN_LIST_VALUE.test(sub) - ? 'list' - : isClosed && RE_TOKEN_NAMED_VALUE.test(sub) - ? 'named' - : 'unknown'; - tokens.push({ value: sub, type: type }); - } else if (char === '%') { - // when found rails i18n syntax, skip text capture - if (format[(position)] !== '{') { - text += char; - } - } else { - text += char; - } - } - - text && tokens.push({ type: 'text', value: text }); - - return tokens - } - - function compile (tokens, values) { - var compiled = []; - var index = 0; - - var mode = Array.isArray(values) - ? 'list' - : isObject(values) - ? 'named' - : 'unknown'; - if (mode === 'unknown') { return compiled } - - while (index < tokens.length) { - var token = tokens[index]; - switch (token.type) { - case 'text': - compiled.push(token.value); - break - case 'list': - compiled.push(values[parseInt(token.value, 10)]); - break - case 'named': - if (mode === 'named') { - compiled.push((values)[token.value]); - } else { - { - warn(("Type of token '" + (token.type) + "' and format of value '" + mode + "' don't match!")); - } - } - break - case 'unknown': - { - warn("Detect 'unknown' type of token!"); - } - break - } - index++; - } - - return compiled - } - - /* */ - - /** - * Path parser - * - Inspired: - * Vue.js Path parser - */ - - // actions - var APPEND = 0; - var PUSH = 1; - var INC_SUB_PATH_DEPTH = 2; - var PUSH_SUB_PATH = 3; - - // states - var BEFORE_PATH = 0; - var IN_PATH = 1; - var BEFORE_IDENT = 2; - var IN_IDENT = 3; - var IN_SUB_PATH = 4; - var IN_SINGLE_QUOTE = 5; - var IN_DOUBLE_QUOTE = 6; - var AFTER_PATH = 7; - var ERROR = 8; - - var pathStateMachine = []; - - pathStateMachine[BEFORE_PATH] = { - 'ws': [BEFORE_PATH], - 'ident': [IN_IDENT, APPEND], - '[': [IN_SUB_PATH], - 'eof': [AFTER_PATH] - }; - - pathStateMachine[IN_PATH] = { - 'ws': [IN_PATH], - '.': [BEFORE_IDENT], - '[': [IN_SUB_PATH], - 'eof': [AFTER_PATH] - }; - - pathStateMachine[BEFORE_IDENT] = { - 'ws': [BEFORE_IDENT], - 'ident': [IN_IDENT, APPEND], - '0': [IN_IDENT, APPEND], - 'number': [IN_IDENT, APPEND] - }; - - pathStateMachine[IN_IDENT] = { - 'ident': [IN_IDENT, APPEND], - '0': [IN_IDENT, APPEND], - 'number': [IN_IDENT, APPEND], - 'ws': [IN_PATH, PUSH], - '.': [BEFORE_IDENT, PUSH], - '[': [IN_SUB_PATH, PUSH], - 'eof': [AFTER_PATH, PUSH] - }; - - pathStateMachine[IN_SUB_PATH] = { - "'": [IN_SINGLE_QUOTE, APPEND], - '"': [IN_DOUBLE_QUOTE, APPEND], - '[': [IN_SUB_PATH, INC_SUB_PATH_DEPTH], - ']': [IN_PATH, PUSH_SUB_PATH], - 'eof': ERROR, - 'else': [IN_SUB_PATH, APPEND] - }; - - pathStateMachine[IN_SINGLE_QUOTE] = { - "'": [IN_SUB_PATH, APPEND], - 'eof': ERROR, - 'else': [IN_SINGLE_QUOTE, APPEND] - }; - - pathStateMachine[IN_DOUBLE_QUOTE] = { - '"': [IN_SUB_PATH, APPEND], - 'eof': ERROR, - 'else': [IN_DOUBLE_QUOTE, APPEND] - }; - - /** - * Check if an expression is a literal value. - */ - - var literalValueRE = /^\s?(?:true|false|-?[\d.]+|'[^']*'|"[^"]*")\s?$/; - function isLiteral (exp) { - return literalValueRE.test(exp) - } - - /** - * Strip quotes from a string - */ - - function stripQuotes (str) { - var a = str.charCodeAt(0); - var b = str.charCodeAt(str.length - 1); - return a === b && (a === 0x22 || a === 0x27) - ? str.slice(1, -1) - : str - } - - /** - * Determine the type of a character in a keypath. - */ - - function getPathCharType (ch) { - if (ch === undefined || ch === null) { return 'eof' } - - var code = ch.charCodeAt(0); - - switch (code) { - case 0x5B: // [ - case 0x5D: // ] - case 0x2E: // . - case 0x22: // " - case 0x27: // ' - return ch - - case 0x5F: // _ - case 0x24: // $ - case 0x2D: // - - return 'ident' - - case 0x09: // Tab - case 0x0A: // Newline - case 0x0D: // Return - case 0xA0: // No-break space - case 0xFEFF: // Byte Order Mark - case 0x2028: // Line Separator - case 0x2029: // Paragraph Separator - return 'ws' - } - - return 'ident' - } - - /** - * Format a subPath, return its plain form if it is - * a literal string or number. Otherwise prepend the - * dynamic indicator (*). - */ - - function formatSubPath (path) { - var trimmed = path.trim(); - // invalid leading 0 - if (path.charAt(0) === '0' && isNaN(path)) { return false } - - return isLiteral(trimmed) ? stripQuotes(trimmed) : '*' + trimmed - } - - /** - * Parse a string path into an array of segments - */ - - function parse$1 (path) { - var keys = []; - var index = -1; - var mode = BEFORE_PATH; - var subPathDepth = 0; - var c; - var key; - var newChar; - var type; - var transition; - var action; - var typeMap; - var actions = []; - - actions[PUSH] = function () { - if (key !== undefined) { - keys.push(key); - key = undefined; - } - }; - - actions[APPEND] = function () { - if (key === undefined) { - key = newChar; - } else { - key += newChar; - } - }; - - actions[INC_SUB_PATH_DEPTH] = function () { - actions[APPEND](); - subPathDepth++; - }; - - actions[PUSH_SUB_PATH] = function () { - if (subPathDepth > 0) { - subPathDepth--; - mode = IN_SUB_PATH; - actions[APPEND](); - } else { - subPathDepth = 0; - if (key === undefined) { return false } - key = formatSubPath(key); - if (key === false) { - return false - } else { - actions[PUSH](); - } - } - }; - - function maybeUnescapeQuote () { - var nextChar = path[index + 1]; - if ((mode === IN_SINGLE_QUOTE && nextChar === "'") || - (mode === IN_DOUBLE_QUOTE && nextChar === '"')) { - index++; - newChar = '\\' + nextChar; - actions[APPEND](); - return true - } - } - - while (mode !== null) { - index++; - c = path[index]; - - if (c === '\\' && maybeUnescapeQuote()) { - continue - } - - type = getPathCharType(c); - typeMap = pathStateMachine[mode]; - transition = typeMap[type] || typeMap['else'] || ERROR; - - if (transition === ERROR) { - return // parse error - } - - mode = transition[0]; - action = actions[transition[1]]; - if (action) { - newChar = transition[2]; - newChar = newChar === undefined - ? c - : newChar; - if (action() === false) { - return - } - } - - if (mode === AFTER_PATH) { - return keys - } - } - } - - - - - - var I18nPath = function I18nPath () { - this._cache = Object.create(null); - }; - - /** - * External parse that check for a cache hit first - */ - I18nPath.prototype.parsePath = function parsePath (path) { - var hit = this._cache[path]; - if (!hit) { - hit = parse$1(path); - if (hit) { - this._cache[path] = hit; - } - } - return hit || [] - }; - - /** - * Get path value from path string - */ - I18nPath.prototype.getPathValue = function getPathValue (obj, path) { - if (!isObject(obj)) { return null } - - var paths = this.parsePath(path); - if (paths.length === 0) { - return null - } else { - var length = paths.length; - var last = obj; - var i = 0; - while (i < length) { - var value = last[paths[i]]; - if (value === undefined) { - return null - } - last = value; - i++; - } - - return last - } - }; - - /* */ - - - - var htmlTagMatcher = /<\/?[\w\s="/.':;#-\/]+>/; - var linkKeyMatcher = /(?:@(?:\.[a-z]+)?:(?:[\w\-_|.]+|\([\w\-_|.]+\)))/g; - var linkKeyPrefixMatcher = /^@(?:\.([a-z]+))?:/; - var bracketsMatcher = /[()]/g; - var defaultModifiers = { - 'upper': function (str) { return str.toLocaleUpperCase(); }, - 'lower': function (str) { return str.toLocaleLowerCase(); }, - 'capitalize': function (str) { return ("" + (str.charAt(0).toLocaleUpperCase()) + (str.substr(1))); } - }; - - var defaultFormatter = new BaseFormatter(); - - var VueI18n = function VueI18n (options) { - var this$1 = this; - if ( options === void 0 ) options = {}; - - // Auto install if it is not done yet and `window` has `Vue`. - // To allow users to avoid auto-installation in some cases, - // this code should be placed here. See #290 - /* istanbul ignore if */ - if (!Vue && typeof window !== 'undefined' && window.Vue) { - install(window.Vue); - } - - var locale = options.locale || 'en-US'; - var fallbackLocale = options.fallbackLocale === false - ? false - : options.fallbackLocale || 'en-US'; - var messages = options.messages || {}; - var dateTimeFormats = options.dateTimeFormats || {}; - var numberFormats = options.numberFormats || {}; - - this._vm = null; - this._formatter = options.formatter || defaultFormatter; - this._modifiers = options.modifiers || {}; - this._missing = options.missing || null; - this._root = options.root || null; - this._sync = options.sync === undefined ? true : !!options.sync; - this._fallbackRoot = options.fallbackRoot === undefined - ? true - : !!options.fallbackRoot; - this._formatFallbackMessages = options.formatFallbackMessages === undefined - ? false - : !!options.formatFallbackMessages; - this._silentTranslationWarn = options.silentTranslationWarn === undefined - ? false - : options.silentTranslationWarn; - this._silentFallbackWarn = options.silentFallbackWarn === undefined - ? false - : !!options.silentFallbackWarn; - this._dateTimeFormatters = {}; - this._numberFormatters = {}; - this._path = new I18nPath(); - this._dataListeners = []; - this._componentInstanceCreatedListener = options.componentInstanceCreatedListener || null; - this._preserveDirectiveContent = options.preserveDirectiveContent === undefined - ? false - : !!options.preserveDirectiveContent; - this.pluralizationRules = options.pluralizationRules || {}; - this._warnHtmlInMessage = options.warnHtmlInMessage || 'off'; - this._postTranslation = options.postTranslation || null; - - /** - * @param choice {number} a choice index given by the input to $tc: `$tc('path.to.rule', choiceIndex)` - * @param choicesLength {number} an overall amount of available choices - * @returns a final choice index - */ - this.getChoiceIndex = function (choice, choicesLength) { - var thisPrototype = Object.getPrototypeOf(this$1); - if (thisPrototype && thisPrototype.getChoiceIndex) { - var prototypeGetChoiceIndex = (thisPrototype.getChoiceIndex); - return (prototypeGetChoiceIndex).call(this$1, choice, choicesLength) - } - - // Default (old) getChoiceIndex implementation - english-compatible - var defaultImpl = function (_choice, _choicesLength) { - _choice = Math.abs(_choice); - - if (_choicesLength === 2) { - return _choice - ? _choice > 1 - ? 1 - : 0 - : 1 - } - - return _choice ? Math.min(_choice, 2) : 0 - }; - - if (this$1.locale in this$1.pluralizationRules) { - return this$1.pluralizationRules[this$1.locale].apply(this$1, [choice, choicesLength]) - } else { - return defaultImpl(choice, choicesLength) - } - }; - - - this._exist = function (message, key) { - if (!message || !key) { return false } - if (!isNull(this$1._path.getPathValue(message, key))) { return true } - // fallback for flat key - if (message[key]) { return true } - return false - }; - - if (this._warnHtmlInMessage === 'warn' || this._warnHtmlInMessage === 'error') { - Object.keys(messages).forEach(function (locale) { - this$1._checkLocaleMessage(locale, this$1._warnHtmlInMessage, messages[locale]); - }); - } - - this._initVM({ - locale: locale, - fallbackLocale: fallbackLocale, - messages: messages, - dateTimeFormats: dateTimeFormats, - numberFormats: numberFormats - }); - }; - - var prototypeAccessors = { vm: { configurable: true },messages: { configurable: true },dateTimeFormats: { configurable: true },numberFormats: { configurable: true },availableLocales: { configurable: true },locale: { configurable: true },fallbackLocale: { configurable: true },formatFallbackMessages: { configurable: true },missing: { configurable: true },formatter: { configurable: true },silentTranslationWarn: { configurable: true },silentFallbackWarn: { configurable: true },preserveDirectiveContent: { configurable: true },warnHtmlInMessage: { configurable: true },postTranslation: { configurable: true } }; - - VueI18n.prototype._checkLocaleMessage = function _checkLocaleMessage (locale, level, message) { - var paths = []; - - var fn = function (level, locale, message, paths) { - if (isPlainObject(message)) { - Object.keys(message).forEach(function (key) { - var val = message[key]; - if (isPlainObject(val)) { - paths.push(key); - paths.push('.'); - fn(level, locale, val, paths); - paths.pop(); - paths.pop(); - } else { - paths.push(key); - fn(level, locale, val, paths); - paths.pop(); - } - }); - } else if (Array.isArray(message)) { - message.forEach(function (item, index) { - if (isPlainObject(item)) { - paths.push(("[" + index + "]")); - paths.push('.'); - fn(level, locale, item, paths); - paths.pop(); - paths.pop(); - } else { - paths.push(("[" + index + "]")); - fn(level, locale, item, paths); - paths.pop(); - } - }); - } else if (isString(message)) { - var ret = htmlTagMatcher.test(message); - if (ret) { - var msg = "Detected HTML in message '" + message + "' of keypath '" + (paths.join('')) + "' at '" + locale + "'. Consider component interpolation with '' to avoid XSS. See https://bit.ly/2ZqJzkp"; - if (level === 'warn') { - warn(msg); - } else if (level === 'error') { - error(msg); - } - } - } - }; - - fn(level, locale, message, paths); - }; - - VueI18n.prototype._initVM = function _initVM (data) { - var silent = Vue.config.silent; - Vue.config.silent = true; - this._vm = new Vue({ data: data }); - Vue.config.silent = silent; - }; - - VueI18n.prototype.destroyVM = function destroyVM () { - this._vm.$destroy(); - }; - - VueI18n.prototype.subscribeDataChanging = function subscribeDataChanging (vm) { - this._dataListeners.push(vm); - }; - - VueI18n.prototype.unsubscribeDataChanging = function unsubscribeDataChanging (vm) { - remove(this._dataListeners, vm); - }; - - VueI18n.prototype.watchI18nData = function watchI18nData () { - var self = this; - return this._vm.$watch('$data', function () { - var i = self._dataListeners.length; - while (i--) { - Vue.nextTick(function () { - self._dataListeners[i] && self._dataListeners[i].$forceUpdate(); - }); - } - }, { deep: true }) - }; - - VueI18n.prototype.watchLocale = function watchLocale () { - /* istanbul ignore if */ - if (!this._sync || !this._root) { return null } - var target = this._vm; - return this._root.$i18n.vm.$watch('locale', function (val) { - target.$set(target, 'locale', val); - target.$forceUpdate(); - }, { immediate: true }) - }; - - VueI18n.prototype.onComponentInstanceCreated = function onComponentInstanceCreated (newI18n) { - if (this._componentInstanceCreatedListener) { - this._componentInstanceCreatedListener(newI18n, this); - } - }; - - prototypeAccessors.vm.get = function () { return this._vm }; - - prototypeAccessors.messages.get = function () { return looseClone(this._getMessages()) }; - prototypeAccessors.dateTimeFormats.get = function () { return looseClone(this._getDateTimeFormats()) }; - prototypeAccessors.numberFormats.get = function () { return looseClone(this._getNumberFormats()) }; - prototypeAccessors.availableLocales.get = function () { return Object.keys(this.messages).sort() }; - - prototypeAccessors.locale.get = function () { return this._vm.locale }; - prototypeAccessors.locale.set = function (locale) { - this._vm.$set(this._vm, 'locale', locale); - }; - - prototypeAccessors.fallbackLocale.get = function () { return this._vm.fallbackLocale }; - prototypeAccessors.fallbackLocale.set = function (locale) { - this._localeChainCache = {}; - this._vm.$set(this._vm, 'fallbackLocale', locale); - }; - - prototypeAccessors.formatFallbackMessages.get = function () { return this._formatFallbackMessages }; - prototypeAccessors.formatFallbackMessages.set = function (fallback) { this._formatFallbackMessages = fallback; }; - - prototypeAccessors.missing.get = function () { return this._missing }; - prototypeAccessors.missing.set = function (handler) { this._missing = handler; }; - - prototypeAccessors.formatter.get = function () { return this._formatter }; - prototypeAccessors.formatter.set = function (formatter) { this._formatter = formatter; }; - - prototypeAccessors.silentTranslationWarn.get = function () { return this._silentTranslationWarn }; - prototypeAccessors.silentTranslationWarn.set = function (silent) { this._silentTranslationWarn = silent; }; - - prototypeAccessors.silentFallbackWarn.get = function () { return this._silentFallbackWarn }; - prototypeAccessors.silentFallbackWarn.set = function (silent) { this._silentFallbackWarn = silent; }; - - prototypeAccessors.preserveDirectiveContent.get = function () { return this._preserveDirectiveContent }; - prototypeAccessors.preserveDirectiveContent.set = function (preserve) { this._preserveDirectiveContent = preserve; }; - - prototypeAccessors.warnHtmlInMessage.get = function () { return this._warnHtmlInMessage }; - prototypeAccessors.warnHtmlInMessage.set = function (level) { - var this$1 = this; - - var orgLevel = this._warnHtmlInMessage; - this._warnHtmlInMessage = level; - if (orgLevel !== level && (level === 'warn' || level === 'error')) { - var messages = this._getMessages(); - Object.keys(messages).forEach(function (locale) { - this$1._checkLocaleMessage(locale, this$1._warnHtmlInMessage, messages[locale]); - }); - } - }; - - prototypeAccessors.postTranslation.get = function () { return this._postTranslation }; - prototypeAccessors.postTranslation.set = function (handler) { this._postTranslation = handler; }; - - VueI18n.prototype._getMessages = function _getMessages () { return this._vm.messages }; - VueI18n.prototype._getDateTimeFormats = function _getDateTimeFormats () { return this._vm.dateTimeFormats }; - VueI18n.prototype._getNumberFormats = function _getNumberFormats () { return this._vm.numberFormats }; - - VueI18n.prototype._warnDefault = function _warnDefault (locale, key, result, vm, values, interpolateMode) { - if (!isNull(result)) { return result } - if (this._missing) { - var missingRet = this._missing.apply(null, [locale, key, vm, values]); - if (isString(missingRet)) { - return missingRet - } - } else { - if (!this._isSilentTranslationWarn(key)) { - warn( - "Cannot translate the value of keypath '" + key + "'. " + - 'Use the value of keypath as default.' - ); - } - } - - if (this._formatFallbackMessages) { - var parsedArgs = parseArgs.apply(void 0, values); - return this._render(key, interpolateMode, parsedArgs.params, key) - } else { - return key - } - }; - - VueI18n.prototype._isFallbackRoot = function _isFallbackRoot (val) { - return !val && !isNull(this._root) && this._fallbackRoot - }; - - VueI18n.prototype._isSilentFallbackWarn = function _isSilentFallbackWarn (key) { - return this._silentFallbackWarn instanceof RegExp - ? this._silentFallbackWarn.test(key) - : this._silentFallbackWarn - }; - - VueI18n.prototype._isSilentFallback = function _isSilentFallback (locale, key) { - return this._isSilentFallbackWarn(key) && (this._isFallbackRoot() || locale !== this.fallbackLocale) - }; - - VueI18n.prototype._isSilentTranslationWarn = function _isSilentTranslationWarn (key) { - return this._silentTranslationWarn instanceof RegExp - ? this._silentTranslationWarn.test(key) - : this._silentTranslationWarn - }; - - VueI18n.prototype._interpolate = function _interpolate ( - locale, - message, - key, - host, - interpolateMode, - values, - visitedLinkStack - ) { - if (!message) { return null } - - var pathRet = this._path.getPathValue(message, key); - if (Array.isArray(pathRet) || isPlainObject(pathRet)) { return pathRet } - - var ret; - if (isNull(pathRet)) { - /* istanbul ignore else */ - if (isPlainObject(message)) { - ret = message[key]; - if (!isString(ret)) { - if (!this._isSilentTranslationWarn(key) && !this._isSilentFallback(locale, key)) { - warn(("Value of key '" + key + "' is not a string!")); - } - return null - } - } else { - return null - } - } else { - /* istanbul ignore else */ - if (isString(pathRet)) { - ret = pathRet; - } else { - if (!this._isSilentTranslationWarn(key) && !this._isSilentFallback(locale, key)) { - warn(("Value of key '" + key + "' is not a string!")); - } - return null - } - } - - // Check for the existence of links within the translated string - if (ret.indexOf('@:') >= 0 || ret.indexOf('@.') >= 0) { - ret = this._link(locale, message, ret, host, 'raw', values, visitedLinkStack); - } - - return this._render(ret, interpolateMode, values, key) - }; - - VueI18n.prototype._link = function _link ( - locale, - message, - str, - host, - interpolateMode, - values, - visitedLinkStack - ) { - var ret = str; - - // Match all the links within the local - // We are going to replace each of - // them with its translation - var matches = ret.match(linkKeyMatcher); - for (var idx in matches) { - // ie compatible: filter custom array - // prototype method - if (!matches.hasOwnProperty(idx)) { - continue - } - var link = matches[idx]; - var linkKeyPrefixMatches = link.match(linkKeyPrefixMatcher); - var linkPrefix = linkKeyPrefixMatches[0]; - var formatterName = linkKeyPrefixMatches[1]; - - // Remove the leading @:, @.case: and the brackets - var linkPlaceholder = link.replace(linkPrefix, '').replace(bracketsMatcher, ''); - - if (includes(visitedLinkStack, linkPlaceholder)) { - { - warn(("Circular reference found. \"" + link + "\" is already visited in the chain of " + (visitedLinkStack.reverse().join(' <- ')))); - } - return ret - } - visitedLinkStack.push(linkPlaceholder); - - // Translate the link - var translated = this._interpolate( - locale, message, linkPlaceholder, host, - interpolateMode === 'raw' ? 'string' : interpolateMode, - interpolateMode === 'raw' ? undefined : values, - visitedLinkStack - ); - - if (this._isFallbackRoot(translated)) { - if (!this._isSilentTranslationWarn(linkPlaceholder)) { - warn(("Fall back to translate the link placeholder '" + linkPlaceholder + "' with root locale.")); - } - /* istanbul ignore if */ - if (!this._root) { throw Error('unexpected error') } - var root = this._root.$i18n; - translated = root._translate( - root._getMessages(), root.locale, root.fallbackLocale, - linkPlaceholder, host, interpolateMode, values - ); - } - translated = this._warnDefault( - locale, linkPlaceholder, translated, host, - Array.isArray(values) ? values : [values], - interpolateMode - ); - - if (this._modifiers.hasOwnProperty(formatterName)) { - translated = this._modifiers[formatterName](translated); - } else if (defaultModifiers.hasOwnProperty(formatterName)) { - translated = defaultModifiers[formatterName](translated); - } - - visitedLinkStack.pop(); - - // Replace the link with the translated - ret = !translated ? ret : ret.replace(link, translated); - } - - return ret - }; - - VueI18n.prototype._render = function _render (message, interpolateMode, values, path) { - var ret = this._formatter.interpolate(message, values, path); - - // If the custom formatter refuses to work - apply the default one - if (!ret) { - ret = defaultFormatter.interpolate(message, values, path); - } - - // if interpolateMode is **not** 'string' ('row'), - // return the compiled data (e.g. ['foo', VNode, 'bar']) with formatter - return interpolateMode === 'string' && !isString(ret) ? ret.join('') : ret - }; - - VueI18n.prototype._appendItemToChain = function _appendItemToChain (chain, item, blocks) { - var follow = false; - if (!includes(chain, item)) { - follow = true; - if (item) { - follow = item[item.length - 1] !== '!'; - item = item.replace(/!/g, ''); - chain.push(item); - if (blocks && blocks[item]) { - follow = blocks[item]; - } - } - } - return follow - }; - - VueI18n.prototype._appendLocaleToChain = function _appendLocaleToChain (chain, locale, blocks) { - var follow; - var tokens = locale.split('-'); - do { - var item = tokens.join('-'); - follow = this._appendItemToChain(chain, item, blocks); - tokens.splice(-1, 1); - } while (tokens.length && (follow === true)) - return follow - }; - - VueI18n.prototype._appendBlockToChain = function _appendBlockToChain (chain, block, blocks) { - var follow = true; - for (var i = 0; (i < block.length) && (isBoolean(follow)); i++) { - var locale = block[i]; - if (isString(locale)) { - follow = this._appendLocaleToChain(chain, locale, blocks); - } - } - return follow - }; - - VueI18n.prototype._getLocaleChain = function _getLocaleChain (start, fallbackLocale) { - if (start === '') { return [] } - - if (!this._localeChainCache) { - this._localeChainCache = {}; - } - - var chain = this._localeChainCache[start]; - if (!chain) { - if (!fallbackLocale) { - fallbackLocale = this.fallbackLocale; - } - chain = []; - - // first block defined by start - var block = [start]; - - // while any intervening block found - while (isArray(block)) { - block = this._appendBlockToChain( - chain, - block, - fallbackLocale - ); - } - - // last block defined by default - var defaults; - if (isArray(fallbackLocale)) { - defaults = fallbackLocale; - } else if (isObject(fallbackLocale)) { - /* $FlowFixMe */ - if (fallbackLocale['default']) { - defaults = fallbackLocale['default']; - } else { - defaults = null; - } - } else { - defaults = fallbackLocale; - } - - // convert defaults to array - if (isString(defaults)) { - block = [defaults]; - } else { - block = defaults; - } - if (block) { - this._appendBlockToChain( - chain, - block, - null - ); - } - this._localeChainCache[start] = chain; - } - return chain - }; - - VueI18n.prototype._translate = function _translate ( - messages, - locale, - fallback, - key, - host, - interpolateMode, - args - ) { - var chain = this._getLocaleChain(locale, fallback); - var res; - for (var i = 0; i < chain.length; i++) { - var step = chain[i]; - res = - this._interpolate(step, messages[step], key, host, interpolateMode, args, [key]); - if (!isNull(res)) { - if (step !== locale && "development" !== 'production' && !this._isSilentTranslationWarn(key) && !this._isSilentFallbackWarn(key)) { - warn(("Fall back to translate the keypath '" + key + "' with '" + step + "' locale.")); - } - return res - } - } - return null - }; - - VueI18n.prototype._t = function _t (key, _locale, messages, host) { - var ref; - - var values = [], len = arguments.length - 4; - while ( len-- > 0 ) values[ len ] = arguments[ len + 4 ]; - if (!key) { return '' } - - var parsedArgs = parseArgs.apply(void 0, values); - var locale = parsedArgs.locale || _locale; - - var ret = this._translate( - messages, locale, this.fallbackLocale, key, - host, 'string', parsedArgs.params - ); - if (this._isFallbackRoot(ret)) { - if (!this._isSilentTranslationWarn(key) && !this._isSilentFallbackWarn(key)) { - warn(("Fall back to translate the keypath '" + key + "' with root locale.")); - } - /* istanbul ignore if */ - if (!this._root) { throw Error('unexpected error') } - return (ref = this._root).$t.apply(ref, [ key ].concat( values )) - } else { - ret = this._warnDefault(locale, key, ret, host, values, 'string'); - if (this._postTranslation && ret !== null && ret !== undefined) { - ret = this._postTranslation(ret, key); - } - return ret - } - }; - - VueI18n.prototype.t = function t (key) { - var ref; - - var values = [], len = arguments.length - 1; - while ( len-- > 0 ) values[ len ] = arguments[ len + 1 ]; - return (ref = this)._t.apply(ref, [ key, this.locale, this._getMessages(), null ].concat( values )) - }; - - VueI18n.prototype._i = function _i (key, locale, messages, host, values) { - var ret = - this._translate(messages, locale, this.fallbackLocale, key, host, 'raw', values); - if (this._isFallbackRoot(ret)) { - if (!this._isSilentTranslationWarn(key)) { - warn(("Fall back to interpolate the keypath '" + key + "' with root locale.")); - } - if (!this._root) { throw Error('unexpected error') } - return this._root.$i18n.i(key, locale, values) - } else { - return this._warnDefault(locale, key, ret, host, [values], 'raw') - } - }; - - VueI18n.prototype.i = function i (key, locale, values) { - /* istanbul ignore if */ - if (!key) { return '' } - - if (!isString(locale)) { - locale = this.locale; - } - - return this._i(key, locale, this._getMessages(), null, values) - }; - - VueI18n.prototype._tc = function _tc ( - key, - _locale, - messages, - host, - choice - ) { - var ref; - - var values = [], len = arguments.length - 5; - while ( len-- > 0 ) values[ len ] = arguments[ len + 5 ]; - if (!key) { return '' } - if (choice === undefined) { - choice = 1; - } - - var predefined = { 'count': choice, 'n': choice }; - var parsedArgs = parseArgs.apply(void 0, values); - parsedArgs.params = Object.assign(predefined, parsedArgs.params); - values = parsedArgs.locale === null ? [parsedArgs.params] : [parsedArgs.locale, parsedArgs.params]; - return this.fetchChoice((ref = this)._t.apply(ref, [ key, _locale, messages, host ].concat( values )), choice) - }; - - VueI18n.prototype.fetchChoice = function fetchChoice (message, choice) { - /* istanbul ignore if */ - if (!message && !isString(message)) { return null } - var choices = message.split('|'); - - choice = this.getChoiceIndex(choice, choices.length); - if (!choices[choice]) { return message } - return choices[choice].trim() - }; - - VueI18n.prototype.tc = function tc (key, choice) { - var ref; - - var values = [], len = arguments.length - 2; - while ( len-- > 0 ) values[ len ] = arguments[ len + 2 ]; - return (ref = this)._tc.apply(ref, [ key, this.locale, this._getMessages(), null, choice ].concat( values )) - }; - - VueI18n.prototype._te = function _te (key, locale, messages) { - var args = [], len = arguments.length - 3; - while ( len-- > 0 ) args[ len ] = arguments[ len + 3 ]; - - var _locale = parseArgs.apply(void 0, args).locale || locale; - return this._exist(messages[_locale], key) - }; - - VueI18n.prototype.te = function te (key, locale) { - return this._te(key, this.locale, this._getMessages(), locale) - }; - - VueI18n.prototype.getLocaleMessage = function getLocaleMessage (locale) { - return looseClone(this._vm.messages[locale] || {}) - }; - - VueI18n.prototype.setLocaleMessage = function setLocaleMessage (locale, message) { - if (this._warnHtmlInMessage === 'warn' || this._warnHtmlInMessage === 'error') { - this._checkLocaleMessage(locale, this._warnHtmlInMessage, message); - } - this._vm.$set(this._vm.messages, locale, message); - }; - - VueI18n.prototype.mergeLocaleMessage = function mergeLocaleMessage (locale, message) { - if (this._warnHtmlInMessage === 'warn' || this._warnHtmlInMessage === 'error') { - this._checkLocaleMessage(locale, this._warnHtmlInMessage, message); - } - this._vm.$set(this._vm.messages, locale, merge({}, this._vm.messages[locale] || {}, message)); - }; - - VueI18n.prototype.getDateTimeFormat = function getDateTimeFormat (locale) { - return looseClone(this._vm.dateTimeFormats[locale] || {}) - }; - - VueI18n.prototype.setDateTimeFormat = function setDateTimeFormat (locale, format) { - this._vm.$set(this._vm.dateTimeFormats, locale, format); - this._clearDateTimeFormat(locale, format); - }; - - VueI18n.prototype.mergeDateTimeFormat = function mergeDateTimeFormat (locale, format) { - this._vm.$set(this._vm.dateTimeFormats, locale, merge(this._vm.dateTimeFormats[locale] || {}, format)); - this._clearDateTimeFormat(locale, format); - }; - - VueI18n.prototype._clearDateTimeFormat = function _clearDateTimeFormat (locale, format) { - for (var key in format) { - var id = locale + "__" + key; - - if (!this._dateTimeFormatters.hasOwnProperty(id)) { - continue - } - - delete this._dateTimeFormatters[id]; - } - }; - - VueI18n.prototype._localizeDateTime = function _localizeDateTime ( - value, - locale, - fallback, - dateTimeFormats, - key - ) { - var _locale = locale; - var formats = dateTimeFormats[_locale]; - - var chain = this._getLocaleChain(locale, fallback); - for (var i = 0; i < chain.length; i++) { - var current = _locale; - var step = chain[i]; - formats = dateTimeFormats[step]; - _locale = step; - // fallback locale - if (isNull(formats) || isNull(formats[key])) { - if (step !== locale && "development" !== 'production' && !this._isSilentTranslationWarn(key) && !this._isSilentFallbackWarn(key)) { - warn(("Fall back to '" + step + "' datetime formats from '" + current + "' datetime formats.")); - } - } else { - break - } - } - - if (isNull(formats) || isNull(formats[key])) { - return null - } else { - var format = formats[key]; - var id = _locale + "__" + key; - var formatter = this._dateTimeFormatters[id]; - if (!formatter) { - formatter = this._dateTimeFormatters[id] = new Intl.DateTimeFormat(_locale, format); - } - return formatter.format(value) - } - }; - - VueI18n.prototype._d = function _d (value, locale, key) { - /* istanbul ignore if */ - if (!VueI18n.availabilities.dateTimeFormat) { - warn('Cannot format a Date value due to not supported Intl.DateTimeFormat.'); - return '' - } - - if (!key) { - return new Intl.DateTimeFormat(locale).format(value) - } - - var ret = - this._localizeDateTime(value, locale, this.fallbackLocale, this._getDateTimeFormats(), key); - if (this._isFallbackRoot(ret)) { - if (!this._isSilentTranslationWarn(key) && !this._isSilentFallbackWarn(key)) { - warn(("Fall back to datetime localization of root: key '" + key + "'.")); - } - /* istanbul ignore if */ - if (!this._root) { throw Error('unexpected error') } - return this._root.$i18n.d(value, key, locale) - } else { - return ret || '' - } - }; - - VueI18n.prototype.d = function d (value) { - var args = [], len = arguments.length - 1; - while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ]; - - var locale = this.locale; - var key = null; - - if (args.length === 1) { - if (isString(args[0])) { - key = args[0]; - } else if (isObject(args[0])) { - if (args[0].locale) { - locale = args[0].locale; - } - if (args[0].key) { - key = args[0].key; - } - } - } else if (args.length === 2) { - if (isString(args[0])) { - key = args[0]; - } - if (isString(args[1])) { - locale = args[1]; - } - } - - return this._d(value, locale, key) - }; - - VueI18n.prototype.getNumberFormat = function getNumberFormat (locale) { - return looseClone(this._vm.numberFormats[locale] || {}) - }; - - VueI18n.prototype.setNumberFormat = function setNumberFormat (locale, format) { - this._vm.$set(this._vm.numberFormats, locale, format); - this._clearNumberFormat(locale, format); - }; - - VueI18n.prototype.mergeNumberFormat = function mergeNumberFormat (locale, format) { - this._vm.$set(this._vm.numberFormats, locale, merge(this._vm.numberFormats[locale] || {}, format)); - this._clearNumberFormat(locale, format); - }; - - VueI18n.prototype._clearNumberFormat = function _clearNumberFormat (locale, format) { - for (var key in format) { - var id = locale + "__" + key; - - if (!this._numberFormatters.hasOwnProperty(id)) { - continue - } - - delete this._numberFormatters[id]; - } - }; - - VueI18n.prototype._getNumberFormatter = function _getNumberFormatter ( - value, - locale, - fallback, - numberFormats, - key, - options - ) { - var _locale = locale; - var formats = numberFormats[_locale]; - - var chain = this._getLocaleChain(locale, fallback); - for (var i = 0; i < chain.length; i++) { - var current = _locale; - var step = chain[i]; - formats = numberFormats[step]; - _locale = step; - // fallback locale - if (isNull(formats) || isNull(formats[key])) { - if (step !== locale && "development" !== 'production' && !this._isSilentTranslationWarn(key) && !this._isSilentFallbackWarn(key)) { - warn(("Fall back to '" + step + "' number formats from '" + current + "' number formats.")); - } - } else { - break - } - } - - if (isNull(formats) || isNull(formats[key])) { - return null - } else { - var format = formats[key]; - - var formatter; - if (options) { - // If options specified - create one time number formatter - formatter = new Intl.NumberFormat(_locale, Object.assign({}, format, options)); - } else { - var id = _locale + "__" + key; - formatter = this._numberFormatters[id]; - if (!formatter) { - formatter = this._numberFormatters[id] = new Intl.NumberFormat(_locale, format); - } - } - return formatter - } - }; - - VueI18n.prototype._n = function _n (value, locale, key, options) { - /* istanbul ignore if */ - if (!VueI18n.availabilities.numberFormat) { - { - warn('Cannot format a Number value due to not supported Intl.NumberFormat.'); - } - return '' - } - - if (!key) { - var nf = !options ? new Intl.NumberFormat(locale) : new Intl.NumberFormat(locale, options); - return nf.format(value) - } - - var formatter = this._getNumberFormatter(value, locale, this.fallbackLocale, this._getNumberFormats(), key, options); - var ret = formatter && formatter.format(value); - if (this._isFallbackRoot(ret)) { - if (!this._isSilentTranslationWarn(key) && !this._isSilentFallbackWarn(key)) { - warn(("Fall back to number localization of root: key '" + key + "'.")); - } - /* istanbul ignore if */ - if (!this._root) { throw Error('unexpected error') } - return this._root.$i18n.n(value, Object.assign({}, { key: key, locale: locale }, options)) - } else { - return ret || '' - } - }; - - VueI18n.prototype.n = function n (value) { - var args = [], len = arguments.length - 1; - while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ]; - - var locale = this.locale; - var key = null; - var options = null; - - if (args.length === 1) { - if (isString(args[0])) { - key = args[0]; - } else if (isObject(args[0])) { - if (args[0].locale) { - locale = args[0].locale; - } - if (args[0].key) { - key = args[0].key; - } - - // Filter out number format options only - options = Object.keys(args[0]).reduce(function (acc, key) { - var obj; - - if (includes(numberFormatKeys, key)) { - return Object.assign({}, acc, ( obj = {}, obj[key] = args[0][key], obj )) - } - return acc - }, null); - } - } else if (args.length === 2) { - if (isString(args[0])) { - key = args[0]; - } - if (isString(args[1])) { - locale = args[1]; - } - } - - return this._n(value, locale, key, options) - }; - - VueI18n.prototype._ntp = function _ntp (value, locale, key, options) { - /* istanbul ignore if */ - if (!VueI18n.availabilities.numberFormat) { - { - warn('Cannot format to parts a Number value due to not supported Intl.NumberFormat.'); - } - return [] - } - - if (!key) { - var nf = !options ? new Intl.NumberFormat(locale) : new Intl.NumberFormat(locale, options); - return nf.formatToParts(value) - } - - var formatter = this._getNumberFormatter(value, locale, this.fallbackLocale, this._getNumberFormats(), key, options); - var ret = formatter && formatter.formatToParts(value); - if (this._isFallbackRoot(ret)) { - if (!this._isSilentTranslationWarn(key)) { - warn(("Fall back to format number to parts of root: key '" + key + "' .")); - } - /* istanbul ignore if */ - if (!this._root) { throw Error('unexpected error') } - return this._root.$i18n._ntp(value, locale, key, options) - } else { - return ret || [] - } - }; - - Object.defineProperties( VueI18n.prototype, prototypeAccessors ); - - var availabilities; - // $FlowFixMe - Object.defineProperty(VueI18n, 'availabilities', { - get: function get () { - if (!availabilities) { - var intlDefined = typeof Intl !== 'undefined'; - availabilities = { - dateTimeFormat: intlDefined && typeof Intl.DateTimeFormat !== 'undefined', - numberFormat: intlDefined && typeof Intl.NumberFormat !== 'undefined' - }; - } - - return availabilities - } - }); - - VueI18n.install = install; - VueI18n.version = '8.20.0'; - - return VueI18n; - -}))); diff --git a/node_modules/vue-i18n/dist/vue-i18n.min.js b/node_modules/vue-i18n/dist/vue-i18n.min.js deleted file mode 100644 index 8d0a5c0..0000000 --- a/node_modules/vue-i18n/dist/vue-i18n.min.js +++ /dev/null @@ -1,6 +0,0 @@ -/*! - * vue-i18n v8.20.0 - * (c) 2020 kazuya kawaguchi - * Released under the MIT License. - */ -var t,e;t=this,e=function(){"use strict";var t=["style","currency","currencyDisplay","useGrouping","minimumIntegerDigits","minimumFractionDigits","maximumFractionDigits","minimumSignificantDigits","maximumSignificantDigits","localeMatcher","formatMatcher","unit"];function e(t,e){"undefined"!=typeof console&&(console.warn("[vue-i18n] "+t),e&&console.warn(e.stack))}var n=Array.isArray;function r(t){return null!==t&&"object"==typeof t}function a(t){return"string"==typeof t}var i=Object.prototype.toString,o="[object Object]";function s(t){return i.call(t)===o}function l(t){return null==t}function c(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];var n=null,a=null;return 1===t.length?r(t[0])||Array.isArray(t[0])?a=t[0]:"string"==typeof t[0]&&(n=t[0]):2===t.length&&("string"==typeof t[0]&&(n=t[0]),(r(t[1])||Array.isArray(t[1]))&&(a=t[1])),{locale:n,params:a}}function u(t){return JSON.parse(JSON.stringify(t))}function h(t,e){return!!~t.indexOf(e)}var f=Object.prototype.hasOwnProperty;function p(t,e){return f.call(t,e)}function m(t){for(var e=arguments,n=Object(t),a=1;a0;)e[n]=arguments[n+1];var r=this.$i18n;return r._t.apply(r,[t,r.locale,r._getMessages(),this].concat(e))},t.prototype.$tc=function(t,e){for(var n=[],r=arguments.length-2;r-- >0;)n[r]=arguments[r+2];var a=this.$i18n;return a._tc.apply(a,[t,a.locale,a._getMessages(),this,e].concat(n))},t.prototype.$te=function(t,e){var n=this.$i18n;return n._te(t,n.locale,n._getMessages(),e)},t.prototype.$d=function(t){for(var e,n=[],r=arguments.length-1;r-- >0;)n[r]=arguments[r+1];return(e=this.$i18n).d.apply(e,[t].concat(n))},t.prototype.$n=function(t){for(var e,n=[],r=arguments.length-1;r-- >0;)n[r]=arguments[r+1];return(e=this.$i18n).n.apply(e,[t].concat(n))}}(F),F.mixin(g),F.directive("t",{bind:w,update:$,unbind:M}),F.component(v.name,v),F.component(k.name,k),F.config.optionMergeStrategies.i18n=function(t,e){return void 0===e?t:e}}var D=function(){this._caches=Object.create(null)};D.prototype.interpolate=function(t,e){if(!e)return[t];var n=this._caches[t];return n||(n=function(t){var e=[],n=0,r="";for(;n0)h--,u=R,f[W]();else{if(h=0,void 0===n)return!1;if(!1===(n=J(n)))return!1;f[j]()}};null!==u;)if("\\"!==(e=t[++c])||!p()){if(a=U(e),(i=(s=z[u])[a]||s.else||E)===E)return;if(u=i[0],(o=f[i[1]])&&(r=void 0===(r=i[2])?e:r,!1===o()))return;if(u===V)return l}}(t))&&(this._cache[t]=e),e||[]},q.prototype.getPathValue=function(t,e){if(!r(t))return null;var n=this.parsePath(e);if(0===n.length)return null;for(var a=n.length,i=t,o=0;o/,Z=/(?:@(?:\.[a-z]+)?:(?:[\w\-_|.]+|\([\w\-_|.]+\)))/g,K=/^@(?:\.([a-z]+))?:/,Q=/[()]/g,Y={upper:function(t){return t.toLocaleUpperCase()},lower:function(t){return t.toLocaleLowerCase()},capitalize:function(t){return""+t.charAt(0).toLocaleUpperCase()+t.substr(1)}},tt=new D,et=function(t){var e=this;void 0===t&&(t={}),!F&&"undefined"!=typeof window&&window.Vue&&I(window.Vue);var n=t.locale||"en-US",r=!1!==t.fallbackLocale&&(t.fallbackLocale||"en-US"),a=t.messages||{},i=t.dateTimeFormats||{},o=t.numberFormats||{};this._vm=null,this._formatter=t.formatter||tt,this._modifiers=t.modifiers||{},this._missing=t.missing||null,this._root=t.root||null,this._sync=void 0===t.sync||!!t.sync,this._fallbackRoot=void 0===t.fallbackRoot||!!t.fallbackRoot,this._formatFallbackMessages=void 0!==t.formatFallbackMessages&&!!t.formatFallbackMessages,this._silentTranslationWarn=void 0!==t.silentTranslationWarn&&t.silentTranslationWarn,this._silentFallbackWarn=void 0!==t.silentFallbackWarn&&!!t.silentFallbackWarn,this._dateTimeFormatters={},this._numberFormatters={},this._path=new q,this._dataListeners=[],this._componentInstanceCreatedListener=t.componentInstanceCreatedListener||null,this._preserveDirectiveContent=void 0!==t.preserveDirectiveContent&&!!t.preserveDirectiveContent,this.pluralizationRules=t.pluralizationRules||{},this._warnHtmlInMessage=t.warnHtmlInMessage||"off",this._postTranslation=t.postTranslation||null,this.getChoiceIndex=function(t,n){var r=Object.getPrototypeOf(e);if(r&&r.getChoiceIndex)return r.getChoiceIndex.call(e,t,n);var a,i;return e.locale in e.pluralizationRules?e.pluralizationRules[e.locale].apply(e,[t,n]):(a=t,i=n,a=Math.abs(a),2===i?a?a>1?1:0:1:a?Math.min(a,2):0)},this._exist=function(t,n){return!(!t||!n)&&(!l(e._path.getPathValue(t,n))||!!t[n])},"warn"!==this._warnHtmlInMessage&&"error"!==this._warnHtmlInMessage||Object.keys(a).forEach(function(t){e._checkLocaleMessage(t,e._warnHtmlInMessage,a[t])}),this._initVM({locale:n,fallbackLocale:r,messages:a,dateTimeFormats:i,numberFormats:o})},nt={vm:{configurable:!0},messages:{configurable:!0},dateTimeFormats:{configurable:!0},numberFormats:{configurable:!0},availableLocales:{configurable:!0},locale:{configurable:!0},fallbackLocale:{configurable:!0},formatFallbackMessages:{configurable:!0},missing:{configurable:!0},formatter:{configurable:!0},silentTranslationWarn:{configurable:!0},silentFallbackWarn:{configurable:!0},preserveDirectiveContent:{configurable:!0},warnHtmlInMessage:{configurable:!0},postTranslation:{configurable:!0}};return et.prototype._checkLocaleMessage=function(t,n,r){var i=function(t,n,r,o){if(s(r))Object.keys(r).forEach(function(e){var a=r[e];s(a)?(o.push(e),o.push("."),i(t,n,a,o),o.pop(),o.pop()):(o.push(e),i(t,n,a,o),o.pop())});else if(Array.isArray(r))r.forEach(function(e,r){s(e)?(o.push("["+r+"]"),o.push("."),i(t,n,e,o),o.pop(),o.pop()):(o.push("["+r+"]"),i(t,n,e,o),o.pop())});else if(a(r)){if(X.test(r)){var l="Detected HTML in message '"+r+"' of keypath '"+o.join("")+"' at '"+n+"'. Consider component interpolation with '' to avoid XSS. See https://bit.ly/2ZqJzkp";"warn"===t?e(l):"error"===t&&function(t,e){"undefined"!=typeof console&&(console.error("[vue-i18n] "+t),e&&console.error(e.stack))}(l)}}};i(n,t,r,[])},et.prototype._initVM=function(t){var e=F.config.silent;F.config.silent=!0,this._vm=new F({data:t}),F.config.silent=e},et.prototype.destroyVM=function(){this._vm.$destroy()},et.prototype.subscribeDataChanging=function(t){this._dataListeners.push(t)},et.prototype.unsubscribeDataChanging=function(t){!function(t,e){if(t.length){var n=t.indexOf(e);if(n>-1)t.splice(n,1)}}(this._dataListeners,t)},et.prototype.watchI18nData=function(){var t=this;return this._vm.$watch("$data",function(){for(var e=t._dataListeners.length;e--;)F.nextTick(function(){t._dataListeners[e]&&t._dataListeners[e].$forceUpdate()})},{deep:!0})},et.prototype.watchLocale=function(){if(!this._sync||!this._root)return null;var t=this._vm;return this._root.$i18n.vm.$watch("locale",function(e){t.$set(t,"locale",e),t.$forceUpdate()},{immediate:!0})},et.prototype.onComponentInstanceCreated=function(t){this._componentInstanceCreatedListener&&this._componentInstanceCreatedListener(t,this)},nt.vm.get=function(){return this._vm},nt.messages.get=function(){return u(this._getMessages())},nt.dateTimeFormats.get=function(){return u(this._getDateTimeFormats())},nt.numberFormats.get=function(){return u(this._getNumberFormats())},nt.availableLocales.get=function(){return Object.keys(this.messages).sort()},nt.locale.get=function(){return this._vm.locale},nt.locale.set=function(t){this._vm.$set(this._vm,"locale",t)},nt.fallbackLocale.get=function(){return this._vm.fallbackLocale},nt.fallbackLocale.set=function(t){this._localeChainCache={},this._vm.$set(this._vm,"fallbackLocale",t)},nt.formatFallbackMessages.get=function(){return this._formatFallbackMessages},nt.formatFallbackMessages.set=function(t){this._formatFallbackMessages=t},nt.missing.get=function(){return this._missing},nt.missing.set=function(t){this._missing=t},nt.formatter.get=function(){return this._formatter},nt.formatter.set=function(t){this._formatter=t},nt.silentTranslationWarn.get=function(){return this._silentTranslationWarn},nt.silentTranslationWarn.set=function(t){this._silentTranslationWarn=t},nt.silentFallbackWarn.get=function(){return this._silentFallbackWarn},nt.silentFallbackWarn.set=function(t){this._silentFallbackWarn=t},nt.preserveDirectiveContent.get=function(){return this._preserveDirectiveContent},nt.preserveDirectiveContent.set=function(t){this._preserveDirectiveContent=t},nt.warnHtmlInMessage.get=function(){return this._warnHtmlInMessage},nt.warnHtmlInMessage.set=function(t){var e=this,n=this._warnHtmlInMessage;if(this._warnHtmlInMessage=t,n!==t&&("warn"===t||"error"===t)){var r=this._getMessages();Object.keys(r).forEach(function(t){e._checkLocaleMessage(t,e._warnHtmlInMessage,r[t])})}},nt.postTranslation.get=function(){return this._postTranslation},nt.postTranslation.set=function(t){this._postTranslation=t},et.prototype._getMessages=function(){return this._vm.messages},et.prototype._getDateTimeFormats=function(){return this._vm.dateTimeFormats},et.prototype._getNumberFormats=function(){return this._vm.numberFormats},et.prototype._warnDefault=function(t,e,n,r,i,o){if(!l(n))return n;if(this._missing){var s=this._missing.apply(null,[t,e,r,i]);if(a(s))return s}if(this._formatFallbackMessages){var u=c.apply(void 0,i);return this._render(e,o,u.params,e)}return e},et.prototype._isFallbackRoot=function(t){return!t&&!l(this._root)&&this._fallbackRoot},et.prototype._isSilentFallbackWarn=function(t){return this._silentFallbackWarn instanceof RegExp?this._silentFallbackWarn.test(t):this._silentFallbackWarn},et.prototype._isSilentFallback=function(t,e){return this._isSilentFallbackWarn(e)&&(this._isFallbackRoot()||t!==this.fallbackLocale)},et.prototype._isSilentTranslationWarn=function(t){return this._silentTranslationWarn instanceof RegExp?this._silentTranslationWarn.test(t):this._silentTranslationWarn},et.prototype._interpolate=function(t,e,n,r,i,o,c){if(!e)return null;var u,h=this._path.getPathValue(e,n);if(Array.isArray(h)||s(h))return h;if(l(h)){if(!s(e))return null;if(!a(u=e[n]))return null}else{if(!a(h))return null;u=h}return(u.indexOf("@:")>=0||u.indexOf("@.")>=0)&&(u=this._link(t,e,u,r,"raw",o,c)),this._render(u,i,o,n)},et.prototype._link=function(t,e,n,r,a,i,o){var s=n,l=s.match(Z);for(var c in l)if(l.hasOwnProperty(c)){var u=l[c],f=u.match(K),p=f[0],m=f[1],_=u.replace(p,"").replace(Q,"");if(h(o,_))return s;o.push(_);var g=this._interpolate(t,e,_,r,"raw"===a?"string":a,"raw"===a?void 0:i,o);if(this._isFallbackRoot(g)){if(!this._root)throw Error("unexpected error");var v=this._root.$i18n;g=v._translate(v._getMessages(),v.locale,v.fallbackLocale,_,r,a,i)}g=this._warnDefault(t,_,g,r,Array.isArray(i)?i:[i],a),this._modifiers.hasOwnProperty(m)?g=this._modifiers[m](g):Y.hasOwnProperty(m)&&(g=Y[m](g)),o.pop(),s=g?s.replace(u,g):s}return s},et.prototype._render=function(t,e,n,r){var i=this._formatter.interpolate(t,n,r);return i||(i=tt.interpolate(t,n,r)),"string"!==e||a(i)?i:i.join("")},et.prototype._appendItemToChain=function(t,e,n){var r=!1;return h(t,e)||(r=!0,e&&(r="!"!==e[e.length-1],e=e.replace(/!/g,""),t.push(e),n&&n[e]&&(r=n[e]))),r},et.prototype._appendLocaleToChain=function(t,e,n){var r,a=e.split("-");do{var i=a.join("-");r=this._appendItemToChain(t,i,n),a.splice(-1,1)}while(a.length&&!0===r);return r},et.prototype._appendBlockToChain=function(t,e,n){for(var r=!0,i=0;i0;)i[o]=arguments[o+4];if(!t)return"";var s=c.apply(void 0,i),l=s.locale||e,u=this._translate(n,l,this.fallbackLocale,t,r,"string",s.params);if(this._isFallbackRoot(u)){if(!this._root)throw Error("unexpected error");return(a=this._root).$t.apply(a,[t].concat(i))}return u=this._warnDefault(l,t,u,r,i,"string"),this._postTranslation&&null!=u&&(u=this._postTranslation(u,t)),u},et.prototype.t=function(t){for(var e,n=[],r=arguments.length-1;r-- >0;)n[r]=arguments[r+1];return(e=this)._t.apply(e,[t,this.locale,this._getMessages(),null].concat(n))},et.prototype._i=function(t,e,n,r,a){var i=this._translate(n,e,this.fallbackLocale,t,r,"raw",a);if(this._isFallbackRoot(i)){if(!this._root)throw Error("unexpected error");return this._root.$i18n.i(t,e,a)}return this._warnDefault(e,t,i,r,[a],"raw")},et.prototype.i=function(t,e,n){return t?(a(e)||(e=this.locale),this._i(t,e,this._getMessages(),null,n)):""},et.prototype._tc=function(t,e,n,r,a){for(var i,o=[],s=arguments.length-5;s-- >0;)o[s]=arguments[s+5];if(!t)return"";void 0===a&&(a=1);var l={count:a,n:a},u=c.apply(void 0,o);return u.params=Object.assign(l,u.params),o=null===u.locale?[u.params]:[u.locale,u.params],this.fetchChoice((i=this)._t.apply(i,[t,e,n,r].concat(o)),a)},et.prototype.fetchChoice=function(t,e){if(!t&&!a(t))return null;var n=t.split("|");return n[e=this.getChoiceIndex(e,n.length)]?n[e].trim():t},et.prototype.tc=function(t,e){for(var n,r=[],a=arguments.length-2;a-- >0;)r[a]=arguments[a+2];return(n=this)._tc.apply(n,[t,this.locale,this._getMessages(),null,e].concat(r))},et.prototype._te=function(t,e,n){for(var r=[],a=arguments.length-3;a-- >0;)r[a]=arguments[a+3];var i=c.apply(void 0,r).locale||e;return this._exist(n[i],t)},et.prototype.te=function(t,e){return this._te(t,this.locale,this._getMessages(),e)},et.prototype.getLocaleMessage=function(t){return u(this._vm.messages[t]||{})},et.prototype.setLocaleMessage=function(t,e){"warn"!==this._warnHtmlInMessage&&"error"!==this._warnHtmlInMessage||this._checkLocaleMessage(t,this._warnHtmlInMessage,e),this._vm.$set(this._vm.messages,t,e)},et.prototype.mergeLocaleMessage=function(t,e){"warn"!==this._warnHtmlInMessage&&"error"!==this._warnHtmlInMessage||this._checkLocaleMessage(t,this._warnHtmlInMessage,e),this._vm.$set(this._vm.messages,t,m({},this._vm.messages[t]||{},e))},et.prototype.getDateTimeFormat=function(t){return u(this._vm.dateTimeFormats[t]||{})},et.prototype.setDateTimeFormat=function(t,e){this._vm.$set(this._vm.dateTimeFormats,t,e),this._clearDateTimeFormat(t,e)},et.prototype.mergeDateTimeFormat=function(t,e){this._vm.$set(this._vm.dateTimeFormats,t,m(this._vm.dateTimeFormats[t]||{},e)),this._clearDateTimeFormat(t,e)},et.prototype._clearDateTimeFormat=function(t,e){for(var n in e){var r=t+"__"+n;this._dateTimeFormatters.hasOwnProperty(r)&&delete this._dateTimeFormatters[r]}},et.prototype._localizeDateTime=function(t,e,n,r,a){for(var i=e,o=r[i],s=this._getLocaleChain(e,n),c=0;c0;)e[n]=arguments[n+1];var i=this.locale,o=null;return 1===e.length?a(e[0])?o=e[0]:r(e[0])&&(e[0].locale&&(i=e[0].locale),e[0].key&&(o=e[0].key)):2===e.length&&(a(e[0])&&(o=e[0]),a(e[1])&&(i=e[1])),this._d(t,i,o)},et.prototype.getNumberFormat=function(t){return u(this._vm.numberFormats[t]||{})},et.prototype.setNumberFormat=function(t,e){this._vm.$set(this._vm.numberFormats,t,e),this._clearNumberFormat(t,e)},et.prototype.mergeNumberFormat=function(t,e){this._vm.$set(this._vm.numberFormats,t,m(this._vm.numberFormats[t]||{},e)),this._clearNumberFormat(t,e)},et.prototype._clearNumberFormat=function(t,e){for(var n in e){var r=t+"__"+n;this._numberFormatters.hasOwnProperty(r)&&delete this._numberFormatters[r]}},et.prototype._getNumberFormatter=function(t,e,n,r,a,i){for(var o=e,s=r[o],c=this._getLocaleChain(e,n),u=0;u0;)n[i]=arguments[i+1];var o=this.locale,s=null,l=null;return 1===n.length?a(n[0])?s=n[0]:r(n[0])&&(n[0].locale&&(o=n[0].locale),n[0].key&&(s=n[0].key),l=Object.keys(n[0]).reduce(function(e,r){var a;return h(t,r)?Object.assign({},e,((a={})[r]=n[0][r],a)):e},null)):2===n.length&&(a(n[0])&&(s=n[0]),a(n[1])&&(o=n[1])),this._n(e,o,s,l)},et.prototype._ntp=function(t,e,n,r){if(!et.availabilities.numberFormat)return[];if(!n)return(r?new Intl.NumberFormat(e,r):new Intl.NumberFormat(e)).formatToParts(t);var a=this._getNumberFormatter(t,e,this.fallbackLocale,this._getNumberFormats(),n,r),i=a&&a.formatToParts(t);if(this._isFallbackRoot(i)){if(!this._root)throw Error("unexpected error");return this._root.$i18n._ntp(t,e,n,r)}return i||[]},Object.defineProperties(et.prototype,nt),Object.defineProperty(et,"availabilities",{get:function(){if(!G){var t="undefined"!=typeof Intl;G={dateTimeFormat:t&&void 0!==Intl.DateTimeFormat,numberFormat:t&&void 0!==Intl.NumberFormat}}return G}}),et.install=I,et.version="8.20.0",et},"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):t.VueI18n=e(); \ No newline at end of file diff --git a/node_modules/vue-i18n/package.json b/node_modules/vue-i18n/package.json deleted file mode 100644 index ff4d7d1..0000000 --- a/node_modules/vue-i18n/package.json +++ /dev/null @@ -1,174 +0,0 @@ -{ - "_from": "vue-i18n", - "_id": "vue-i18n@8.20.0", - "_inBundle": false, - "_integrity": "sha512-ZiAOoeR4d/JtKpbjipx3I80ey7cYG1ki5gQ7HwzWm4YFio9brA15BEYHjalEoBaEfzF5OBEZP+Y2MvAaWnyXXg==", - "_location": "/vue-i18n", - "_phantomChildren": {}, - "_requested": { - "type": "tag", - "registry": true, - "raw": "vue-i18n", - "name": "vue-i18n", - "escapedName": "vue-i18n", - "rawSpec": "", - "saveSpec": null, - "fetchSpec": "latest" - }, - "_requiredBy": [ - "#USER", - "/" - ], - "_resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-8.20.0.tgz", - "_shasum": "c81b01d6541182b28565316cafe881b65a3c0f1b", - "_spec": "vue-i18n", - "_where": "E:\\www\\uniapp\\uView", - "author": { - "name": "kazuya kawaguchi", - "email": "kawakazu80@gmail.com" - }, - "bugs": { - "url": "https://github.com/kazupon/vue-i18n/issues" - }, - "bundleDependencies": false, - "changelog": { - "labels": { - "Type: Feature": ":star: New Features", - "Type: Bug": ":bug: Bug Fixes", - "Type: Security": ":lock: Security Fixes", - "Type: Performance": ":chart_with_upwards_trend: Performance Fixes", - "Type: Improvement": ":zap: Improved Features", - "Type: Breaking": ":boom: Breaking Change", - "Type: Deprecated": ":warning: Deprecated Features", - "Type: I18n": ":globe_with_meridians: Internationalization", - "Type: A11y": ":wheelchair: Accessibility", - "Type: Documentation": ":pencil: Documentation" - } - }, - "deprecated": false, - "description": "Internationalization plugin for Vue.js", - "devDependencies": { - "@babel/core": "^7.1.0", - "@babel/plugin-proposal-class-properties": "^7.1.0", - "@babel/plugin-syntax-flow": "^7.0.0", - "@babel/plugin-transform-flow-strip-types": "^7.0.0", - "@typescript-eslint/eslint-plugin": "^3.0.0", - "@typescript-eslint/parser": "^3.0.0", - "@vue/babel-preset-app": "^4.4.1", - "babel-eslint": "^10.1.0", - "babel-loader": "^8.1.0", - "babel-plugin-istanbul": "^6.0.0", - "babel-preset-power-assert": "^3.0.0", - "buble": "^0.19.3", - "chromedriver": "^83.0.0", - "core-js": "^3.6.5", - "cross-env": "^7.0.2", - "cross-spawn": "^7.0.3", - "eslint": "^6.8.0", - "eslint-loader": "^4.0.2", - "eslint-plugin-flowtype": "^4.7.0", - "eslint-plugin-ie11": "^1.0.0", - "eslint-plugin-no-autofix": "^1.0.1", - "eslint-plugin-vue": "^6.2.2", - "eslint-plugin-vue-libs": "^4.0.0", - "flow-bin": "^0.38.0", - "http-server": "^0.12.3", - "intl": "^1.2.5", - "karma": "^5.0.9", - "karma-chrome-launcher": "^3.1.0", - "karma-coverage": "^2.0.2", - "karma-firefox-launcher": "^1.1.0", - "karma-mocha": "^2.0.1", - "karma-mocha-reporter": "^2.2.5", - "karma-safari-launcher": "^1.0.0", - "karma-sauce-launcher": "^4.1.5", - "karma-sourcemap-loader": "^0.3.7", - "karma-webpack": "^4.0.2", - "lerna-changelog": "^1.0.0", - "lerna-changelog-label-schema": "^3.0.0", - "mocha": "^7.2.0", - "mocha-loader": "^5.0.0", - "nightwatch": "^1.3.5", - "nightwatch-helpers": "^1.2.0", - "power-assert": "^1.6.0", - "rollup": "^0.66.0", - "rollup-plugin-buble": "^0.19.2", - "rollup-plugin-commonjs": "^9.1.8", - "rollup-plugin-flow-no-whitespace": "^1.0.0", - "rollup-plugin-node-resolve": "^3.4.0", - "rollup-plugin-replace": "^2.0.0", - "selenium-server": "^3.141.59", - "shipjs": "^0.17.0", - "sinon": "^9.0.2", - "terser": "^3.17.0", - "typescript": "^3.9.3", - "vue": "^2.5.17", - "vue-github-button": "^1.1.2", - "vue-template-compiler": "^2.5.17", - "vuepress": "^1.5.0", - "webpack": "^4.43.0", - "webpack-cli": "^3.1.1", - "webpack-dev-middleware": "^3.7.2", - "webpack-dev-server": "^3.11.0" - }, - "files": [ - "dist/vue-i18n.js", - "dist/vue-i18n.min.js", - "dist/vue-i18n.common.js", - "dist/vue-i18n.esm.js", - "dist/vue-i18n.esm.browser.js", - "dist/vue-i18n.esm.browser.min.js", - "src/**/*.js", - "types/*.d.ts", - "decls", - "vetur/tags.json", - "vetur/attributes.json" - ], - "homepage": "https://github.com/kazupon/vue-i18n#readme", - "keywords": [ - "i18n", - "internationalization", - "plugin", - "vue", - "vue.js" - ], - "license": "MIT", - "main": "dist/vue-i18n.common.js", - "module": "dist/vue-i18n.esm.js", - "name": "vue-i18n", - "repository": { - "type": "git", - "url": "git+https://github.com/kazupon/vue-i18n.git" - }, - "scripts": { - "build": "node config/build.js", - "clean": "rm -rf coverage && rm -rf dist/*.js* && rm ./*.log", - "coverage": "cat ./coverage/lcov.info", - "dev": "cross-env BABEL_ENV=test webpack-dev-server --inline --hot --open --content-base ./test/unit/ --config config/webpack.dev.conf.js", - "docs:build": "cross-env NODE_ENV=production node config/version.js && cross-env NODE_ENV=production vuepress build vuepress -d docs", - "docs:clean": "rm -rf docs/**", - "docs:dev": "vuepress dev vuepress", - "flow": "flow check", - "lint": "eslint --fix src test types/**/*.ts", - "release:prepare": "shipjs prepare", - "release:trigger": "shipjs trigger", - "sauce": "npm run sauce:coolkids && npm run sauce:ie && npm run sauce:mobile", - "sauce:coolkids": "karma start config/karma.sauce.conf.js -- 0", - "sauce:ie": "karma start config/karma.sauce.conf.js -- 1", - "sauce:mobile": "karma start config/karma.sauce.conf.js -- 2", - "test": "npm run lint && npm run flow && npm run test:types && npm run test:cover && npm run test:e2e", - "test:cover": "cross-env BABEL_ENV=test karma start config/karma.cover.conf.js", - "test:e2e": "npm run build && node test/e2e/runner.js", - "test:types": "tsc -p types", - "test:unit": "cross-env BABEL_ENV=test karma start config/karma.unit.conf.js", - "test:unit:ci": "cross-env BABEL_ENV=test karma start config/karma.unit.ci.conf.js" - }, - "sideEffects": false, - "types": "types/index.d.ts", - "unpkg": "dist/vue-i18n.js", - "version": "8.20.0", - "vetur": { - "tags": "vetur/tags.json", - "attributes": "vetur/attributes.json" - } -} diff --git a/node_modules/vue-i18n/src/components/interpolation.js b/node_modules/vue-i18n/src/components/interpolation.js deleted file mode 100644 index 7d31457..0000000 --- a/node_modules/vue-i18n/src/components/interpolation.js +++ /dev/null @@ -1,101 +0,0 @@ -/* @flow */ - -import { warn } from '../util' - -export default { - name: 'i18n', - functional: true, - props: { - tag: { - type: [String, Boolean, Object], - default: 'span' - }, - path: { - type: String, - required: true - }, - locale: { - type: String - }, - places: { - type: [Array, Object] - } - }, - render (h: Function, { data, parent, props, slots }: Object) { - const { $i18n } = parent - if (!$i18n) { - if (process.env.NODE_ENV !== 'production') { - warn('Cannot find VueI18n instance!') - } - return - } - - const { path, locale, places } = props - const params = slots() - const children = $i18n.i( - path, - locale, - onlyHasDefaultPlace(params) || places - ? useLegacyPlaces(params.default, places) - : params - ) - - const tag = (!!props.tag && props.tag !== true) || props.tag === false ? props.tag : 'span' - return tag ? h(tag, data, children) : children - } -} - -function onlyHasDefaultPlace (params) { - let prop - for (prop in params) { - if (prop !== 'default') { return false } - } - return Boolean(prop) -} - -function useLegacyPlaces (children, places) { - const params = places ? createParamsFromPlaces(places) : {} - - if (!children) { return params } - - // Filter empty text nodes - children = children.filter(child => { - return child.tag || child.text.trim() !== '' - }) - - const everyPlace = children.every(vnodeHasPlaceAttribute) - if (process.env.NODE_ENV !== 'production' && everyPlace) { - warn('`place` attribute is deprecated in next major version. Please switch to Vue slots.') - } - - return children.reduce( - everyPlace ? assignChildPlace : assignChildIndex, - params - ) -} - -function createParamsFromPlaces (places) { - if (process.env.NODE_ENV !== 'production') { - warn('`places` prop is deprecated in next major version. Please switch to Vue slots.') - } - - return Array.isArray(places) - ? places.reduce(assignChildIndex, {}) - : Object.assign({}, places) -} - -function assignChildPlace (params, child) { - if (child.data && child.data.attrs && child.data.attrs.place) { - params[child.data.attrs.place] = child - } - return params -} - -function assignChildIndex (params, child, index) { - params[index] = child - return params -} - -function vnodeHasPlaceAttribute (vnode) { - return Boolean(vnode.data && vnode.data.attrs && vnode.data.attrs.place) -} diff --git a/node_modules/vue-i18n/src/components/number.js b/node_modules/vue-i18n/src/components/number.js deleted file mode 100644 index bb7c6ff..0000000 --- a/node_modules/vue-i18n/src/components/number.js +++ /dev/null @@ -1,70 +0,0 @@ -/* @flow */ - -import { warn, isString, isObject, includes, numberFormatKeys } from '../util' - -export default { - name: 'i18n-n', - functional: true, - props: { - tag: { - type: [String, Boolean, Object], - default: 'span' - }, - value: { - type: Number, - required: true - }, - format: { - type: [String, Object] - }, - locale: { - type: String - } - }, - render (h: Function, { props, parent, data }: Object) { - const i18n = parent.$i18n - - if (!i18n) { - if (process.env.NODE_ENV !== 'production') { - warn('Cannot find VueI18n instance!') - } - return null - } - - let key: ?string = null - let options: ?NumberFormatOptions = null - - if (isString(props.format)) { - key = props.format - } else if (isObject(props.format)) { - if (props.format.key) { - key = props.format.key - } - - // Filter out number format options only - options = Object.keys(props.format).reduce((acc, prop) => { - if (includes(numberFormatKeys, prop)) { - return Object.assign({}, acc, { [prop]: props.format[prop] }) - } - return acc - }, null) - } - - const locale: Locale = props.locale || i18n.locale - const parts: NumberFormatToPartsResult = i18n._ntp(props.value, locale, key, options) - - const values = parts.map((part, index) => { - const slot: ?Function = data.scopedSlots && data.scopedSlots[part.type] - return slot ? slot({ [part.type]: part.value, index, parts }) : part.value - }) - - const tag = (!!props.tag && props.tag !== true) || props.tag === false ? props.tag : 'span' - return tag - ? h(tag, { - attrs: data.attrs, - 'class': data['class'], - staticClass: data.staticClass - }, values) - : values - } -} diff --git a/node_modules/vue-i18n/src/directive.js b/node_modules/vue-i18n/src/directive.js deleted file mode 100644 index ea1b2a8..0000000 --- a/node_modules/vue-i18n/src/directive.js +++ /dev/null @@ -1,112 +0,0 @@ -/* @flow */ - -import { warn, isString, isPlainObject, looseEqual } from './util' - -export function bind (el: any, binding: Object, vnode: any): void { - if (!assert(el, vnode)) { return } - - t(el, binding, vnode) -} - -export function update (el: any, binding: Object, vnode: any, oldVNode: any): void { - if (!assert(el, vnode)) { return } - - const i18n: any = vnode.context.$i18n - if (localeEqual(el, vnode) && - (looseEqual(binding.value, binding.oldValue) && - looseEqual(el._localeMessage, i18n.getLocaleMessage(i18n.locale)))) { return } - - t(el, binding, vnode) -} - -export function unbind (el: any, binding: Object, vnode: any, oldVNode: any): void { - const vm: any = vnode.context - if (!vm) { - warn('Vue instance does not exists in VNode context') - return - } - - const i18n: any = vnode.context.$i18n || {} - if (!binding.modifiers.preserve && !i18n.preserveDirectiveContent) { - el.textContent = '' - } - el._vt = undefined - delete el['_vt'] - el._locale = undefined - delete el['_locale'] - el._localeMessage = undefined - delete el['_localeMessage'] -} - -function assert (el: any, vnode: any): boolean { - const vm: any = vnode.context - if (!vm) { - warn('Vue instance does not exists in VNode context') - return false - } - - if (!vm.$i18n) { - warn('VueI18n instance does not exists in Vue instance') - return false - } - - return true -} - -function localeEqual (el: any, vnode: any): boolean { - const vm: any = vnode.context - return el._locale === vm.$i18n.locale -} - -function t (el: any, binding: Object, vnode: any): void { - const value: any = binding.value - - const { path, locale, args, choice } = parseValue(value) - if (!path && !locale && !args) { - warn('value type not supported') - return - } - - if (!path) { - warn('`path` is required in v-t directive') - return - } - - const vm: any = vnode.context - if (choice != null) { - el._vt = el.textContent = vm.$i18n.tc(path, choice, ...makeParams(locale, args)) - } else { - el._vt = el.textContent = vm.$i18n.t(path, ...makeParams(locale, args)) - } - el._locale = vm.$i18n.locale - el._localeMessage = vm.$i18n.getLocaleMessage(vm.$i18n.locale) -} - -function parseValue (value: any): Object { - let path: ?string - let locale: ?Locale - let args: any - let choice: ?number - - if (isString(value)) { - path = value - } else if (isPlainObject(value)) { - path = value.path - locale = value.locale - args = value.args - choice = value.choice - } - - return { path, locale, args, choice } -} - -function makeParams (locale: Locale, args: any): Array { - const params: Array = [] - - locale && params.push(locale) - if (args && (Array.isArray(args) || isPlainObject(args))) { - params.push(args) - } - - return params -} diff --git a/node_modules/vue-i18n/src/extend.js b/node_modules/vue-i18n/src/extend.js deleted file mode 100644 index c845d7c..0000000 --- a/node_modules/vue-i18n/src/extend.js +++ /dev/null @@ -1,33 +0,0 @@ -/* @flow */ - -export default function extend (Vue: any): void { - if (!Vue.prototype.hasOwnProperty('$i18n')) { - // $FlowFixMe - Object.defineProperty(Vue.prototype, '$i18n', { - get () { return this._i18n } - }) - } - - Vue.prototype.$t = function (key: Path, ...values: any): TranslateResult { - const i18n = this.$i18n - return i18n._t(key, i18n.locale, i18n._getMessages(), this, ...values) - } - - Vue.prototype.$tc = function (key: Path, choice?: number, ...values: any): TranslateResult { - const i18n = this.$i18n - return i18n._tc(key, i18n.locale, i18n._getMessages(), this, choice, ...values) - } - - Vue.prototype.$te = function (key: Path, locale?: Locale): boolean { - const i18n = this.$i18n - return i18n._te(key, i18n.locale, i18n._getMessages(), locale) - } - - Vue.prototype.$d = function (value: number | Date, ...args: any): DateTimeFormatResult { - return this.$i18n.d(value, ...args) - } - - Vue.prototype.$n = function (value: number, ...args: any): NumberFormatResult { - return this.$i18n.n(value, ...args) - } -} diff --git a/node_modules/vue-i18n/src/format.js b/node_modules/vue-i18n/src/format.js deleted file mode 100644 index 5b26d11..0000000 --- a/node_modules/vue-i18n/src/format.js +++ /dev/null @@ -1,114 +0,0 @@ -/* @flow */ - -import { warn, isObject } from './util' - -export default class BaseFormatter { - _caches: { [key: string]: Array } - - constructor () { - this._caches = Object.create(null) - } - - interpolate (message: string, values: any): Array { - if (!values) { - return [message] - } - let tokens: Array = this._caches[message] - if (!tokens) { - tokens = parse(message) - this._caches[message] = tokens - } - return compile(tokens, values) - } -} - -type Token = { - type: 'text' | 'named' | 'list' | 'unknown', - value: string -} - -const RE_TOKEN_LIST_VALUE: RegExp = /^(?:\d)+/ -const RE_TOKEN_NAMED_VALUE: RegExp = /^(?:\w)+/ - -export function parse (format: string): Array { - const tokens: Array = [] - let position: number = 0 - - let text: string = '' - while (position < format.length) { - let char: string = format[position++] - if (char === '{') { - if (text) { - tokens.push({ type: 'text', value: text }) - } - - text = '' - let sub: string = '' - char = format[position++] - while (char !== undefined && char !== '}') { - sub += char - char = format[position++] - } - const isClosed = char === '}' - - const type = RE_TOKEN_LIST_VALUE.test(sub) - ? 'list' - : isClosed && RE_TOKEN_NAMED_VALUE.test(sub) - ? 'named' - : 'unknown' - tokens.push({ value: sub, type }) - } else if (char === '%') { - // when found rails i18n syntax, skip text capture - if (format[(position)] !== '{') { - text += char - } - } else { - text += char - } - } - - text && tokens.push({ type: 'text', value: text }) - - return tokens -} - -export function compile (tokens: Array, values: Object | Array): Array { - const compiled: Array = [] - let index: number = 0 - - const mode: string = Array.isArray(values) - ? 'list' - : isObject(values) - ? 'named' - : 'unknown' - if (mode === 'unknown') { return compiled } - - while (index < tokens.length) { - const token: Token = tokens[index] - switch (token.type) { - case 'text': - compiled.push(token.value) - break - case 'list': - compiled.push(values[parseInt(token.value, 10)]) - break - case 'named': - if (mode === 'named') { - compiled.push((values: any)[token.value]) - } else { - if (process.env.NODE_ENV !== 'production') { - warn(`Type of token '${token.type}' and format of value '${mode}' don't match!`) - } - } - break - case 'unknown': - if (process.env.NODE_ENV !== 'production') { - warn(`Detect 'unknown' type of token!`) - } - break - } - index++ - } - - return compiled -} diff --git a/node_modules/vue-i18n/src/index.js b/node_modules/vue-i18n/src/index.js deleted file mode 100644 index c5f6ed4..0000000 --- a/node_modules/vue-i18n/src/index.js +++ /dev/null @@ -1,1049 +0,0 @@ -/* @flow */ - -import { install, Vue } from './install' -import { - warn, - error, - isNull, - parseArgs, - isPlainObject, - isObject, - isArray, - isBoolean, - isString, - looseClone, - remove, - includes, - merge, - numberFormatKeys -} from './util' -import BaseFormatter from './format' -import I18nPath from './path' - -import type { PathValue } from './path' - -const htmlTagMatcher = /<\/?[\w\s="/.':;#-\/]+>/ -const linkKeyMatcher = /(?:@(?:\.[a-z]+)?:(?:[\w\-_|.]+|\([\w\-_|.]+\)))/g -const linkKeyPrefixMatcher = /^@(?:\.([a-z]+))?:/ -const bracketsMatcher = /[()]/g -const defaultModifiers = { - 'upper': str => str.toLocaleUpperCase(), - 'lower': str => str.toLocaleLowerCase(), - 'capitalize': str => `${str.charAt(0).toLocaleUpperCase()}${str.substr(1)}` -} - -const defaultFormatter = new BaseFormatter() - -export default class VueI18n { - static install: () => void - static version: string - static availabilities: IntlAvailability - - _vm: any - _formatter: Formatter - _modifiers: Modifiers - _root: any - _sync: boolean - _fallbackRoot: boolean - _localeChainCache: { [key: string]: Array; } - _missing: ?MissingHandler - _exist: Function - _silentTranslationWarn: boolean | RegExp - _silentFallbackWarn: boolean | RegExp - _formatFallbackMessages: boolean - _dateTimeFormatters: Object - _numberFormatters: Object - _path: I18nPath - _dataListeners: Array - _componentInstanceCreatedListener: ?ComponentInstanceCreatedListener - _preserveDirectiveContent: boolean - _warnHtmlInMessage: WarnHtmlInMessageLevel - _postTranslation: ?PostTranslationHandler - pluralizationRules: { - [lang: string]: (choice: number, choicesLength: number) => number - } - getChoiceIndex: GetChoiceIndex - - constructor (options: I18nOptions = {}) { - // Auto install if it is not done yet and `window` has `Vue`. - // To allow users to avoid auto-installation in some cases, - // this code should be placed here. See #290 - /* istanbul ignore if */ - if (!Vue && typeof window !== 'undefined' && window.Vue) { - install(window.Vue) - } - - const locale: Locale = options.locale || 'en-US' - const fallbackLocale: FallbackLocale = options.fallbackLocale === false - ? false - : options.fallbackLocale || 'en-US' - const messages: LocaleMessages = options.messages || {} - const dateTimeFormats = options.dateTimeFormats || {} - const numberFormats = options.numberFormats || {} - - this._vm = null - this._formatter = options.formatter || defaultFormatter - this._modifiers = options.modifiers || {} - this._missing = options.missing || null - this._root = options.root || null - this._sync = options.sync === undefined ? true : !!options.sync - this._fallbackRoot = options.fallbackRoot === undefined - ? true - : !!options.fallbackRoot - this._formatFallbackMessages = options.formatFallbackMessages === undefined - ? false - : !!options.formatFallbackMessages - this._silentTranslationWarn = options.silentTranslationWarn === undefined - ? false - : options.silentTranslationWarn - this._silentFallbackWarn = options.silentFallbackWarn === undefined - ? false - : !!options.silentFallbackWarn - this._dateTimeFormatters = {} - this._numberFormatters = {} - this._path = new I18nPath() - this._dataListeners = [] - this._componentInstanceCreatedListener = options.componentInstanceCreatedListener || null - this._preserveDirectiveContent = options.preserveDirectiveContent === undefined - ? false - : !!options.preserveDirectiveContent - this.pluralizationRules = options.pluralizationRules || {} - this._warnHtmlInMessage = options.warnHtmlInMessage || 'off' - this._postTranslation = options.postTranslation || null - - /** - * @param choice {number} a choice index given by the input to $tc: `$tc('path.to.rule', choiceIndex)` - * @param choicesLength {number} an overall amount of available choices - * @returns a final choice index - */ - this.getChoiceIndex = (choice: number, choicesLength: number): number => { - const thisPrototype = Object.getPrototypeOf(this) - if (thisPrototype && thisPrototype.getChoiceIndex) { - const prototypeGetChoiceIndex = (thisPrototype.getChoiceIndex: any) - return (prototypeGetChoiceIndex: GetChoiceIndex).call(this, choice, choicesLength) - } - - // Default (old) getChoiceIndex implementation - english-compatible - const defaultImpl = (_choice: number, _choicesLength: number) => { - _choice = Math.abs(_choice) - - if (_choicesLength === 2) { - return _choice - ? _choice > 1 - ? 1 - : 0 - : 1 - } - - return _choice ? Math.min(_choice, 2) : 0 - } - - if (this.locale in this.pluralizationRules) { - return this.pluralizationRules[this.locale].apply(this, [choice, choicesLength]) - } else { - return defaultImpl(choice, choicesLength) - } - } - - - this._exist = (message: Object, key: Path): boolean => { - if (!message || !key) { return false } - if (!isNull(this._path.getPathValue(message, key))) { return true } - // fallback for flat key - if (message[key]) { return true } - return false - } - - if (this._warnHtmlInMessage === 'warn' || this._warnHtmlInMessage === 'error') { - Object.keys(messages).forEach(locale => { - this._checkLocaleMessage(locale, this._warnHtmlInMessage, messages[locale]) - }) - } - - this._initVM({ - locale, - fallbackLocale, - messages, - dateTimeFormats, - numberFormats - }) - } - - _checkLocaleMessage (locale: Locale, level: WarnHtmlInMessageLevel, message: LocaleMessageObject): void { - const paths: Array = [] - - const fn = (level: WarnHtmlInMessageLevel, locale: Locale, message: any, paths: Array) => { - if (isPlainObject(message)) { - Object.keys(message).forEach(key => { - const val = message[key] - if (isPlainObject(val)) { - paths.push(key) - paths.push('.') - fn(level, locale, val, paths) - paths.pop() - paths.pop() - } else { - paths.push(key) - fn(level, locale, val, paths) - paths.pop() - } - }) - } else if (Array.isArray(message)) { - message.forEach((item, index) => { - if (isPlainObject(item)) { - paths.push(`[${index}]`) - paths.push('.') - fn(level, locale, item, paths) - paths.pop() - paths.pop() - } else { - paths.push(`[${index}]`) - fn(level, locale, item, paths) - paths.pop() - } - }) - } else if (isString(message)) { - const ret = htmlTagMatcher.test(message) - if (ret) { - const msg = `Detected HTML in message '${message}' of keypath '${paths.join('')}' at '${locale}'. Consider component interpolation with '' to avoid XSS. See https://bit.ly/2ZqJzkp` - if (level === 'warn') { - warn(msg) - } else if (level === 'error') { - error(msg) - } - } - } - } - - fn(level, locale, message, paths) - } - - _initVM (data: { - locale: Locale, - fallbackLocale: FallbackLocale, - messages: LocaleMessages, - dateTimeFormats: DateTimeFormats, - numberFormats: NumberFormats - }): void { - const silent = Vue.config.silent - Vue.config.silent = true - this._vm = new Vue({ data }) - Vue.config.silent = silent - } - - destroyVM (): void { - this._vm.$destroy() - } - - subscribeDataChanging (vm: any): void { - this._dataListeners.push(vm) - } - - unsubscribeDataChanging (vm: any): void { - remove(this._dataListeners, vm) - } - - watchI18nData (): Function { - const self = this - return this._vm.$watch('$data', () => { - let i = self._dataListeners.length - while (i--) { - Vue.nextTick(() => { - self._dataListeners[i] && self._dataListeners[i].$forceUpdate() - }) - } - }, { deep: true }) - } - - watchLocale (): ?Function { - /* istanbul ignore if */ - if (!this._sync || !this._root) { return null } - const target: any = this._vm - return this._root.$i18n.vm.$watch('locale', (val) => { - target.$set(target, 'locale', val) - target.$forceUpdate() - }, { immediate: true }) - } - - onComponentInstanceCreated (newI18n: I18n) { - if (this._componentInstanceCreatedListener) { - this._componentInstanceCreatedListener(newI18n, this) - } - } - - get vm (): any { return this._vm } - - get messages (): LocaleMessages { return looseClone(this._getMessages()) } - get dateTimeFormats (): DateTimeFormats { return looseClone(this._getDateTimeFormats()) } - get numberFormats (): NumberFormats { return looseClone(this._getNumberFormats()) } - get availableLocales (): Locale[] { return Object.keys(this.messages).sort() } - - get locale (): Locale { return this._vm.locale } - set locale (locale: Locale): void { - this._vm.$set(this._vm, 'locale', locale) - } - - get fallbackLocale (): FallbackLocale { return this._vm.fallbackLocale } - set fallbackLocale (locale: FallbackLocale): void { - this._localeChainCache = {} - this._vm.$set(this._vm, 'fallbackLocale', locale) - } - - get formatFallbackMessages (): boolean { return this._formatFallbackMessages } - set formatFallbackMessages (fallback: boolean): void { this._formatFallbackMessages = fallback } - - get missing (): ?MissingHandler { return this._missing } - set missing (handler: MissingHandler): void { this._missing = handler } - - get formatter (): Formatter { return this._formatter } - set formatter (formatter: Formatter): void { this._formatter = formatter } - - get silentTranslationWarn (): boolean | RegExp { return this._silentTranslationWarn } - set silentTranslationWarn (silent: boolean | RegExp): void { this._silentTranslationWarn = silent } - - get silentFallbackWarn (): boolean | RegExp { return this._silentFallbackWarn } - set silentFallbackWarn (silent: boolean | RegExp): void { this._silentFallbackWarn = silent } - - get preserveDirectiveContent (): boolean { return this._preserveDirectiveContent } - set preserveDirectiveContent (preserve: boolean): void { this._preserveDirectiveContent = preserve } - - get warnHtmlInMessage (): WarnHtmlInMessageLevel { return this._warnHtmlInMessage } - set warnHtmlInMessage (level: WarnHtmlInMessageLevel): void { - const orgLevel = this._warnHtmlInMessage - this._warnHtmlInMessage = level - if (orgLevel !== level && (level === 'warn' || level === 'error')) { - const messages = this._getMessages() - Object.keys(messages).forEach(locale => { - this._checkLocaleMessage(locale, this._warnHtmlInMessage, messages[locale]) - }) - } - } - - get postTranslation (): ?PostTranslationHandler { return this._postTranslation } - set postTranslation (handler: PostTranslationHandler): void { this._postTranslation = handler } - - _getMessages (): LocaleMessages { return this._vm.messages } - _getDateTimeFormats (): DateTimeFormats { return this._vm.dateTimeFormats } - _getNumberFormats (): NumberFormats { return this._vm.numberFormats } - - _warnDefault (locale: Locale, key: Path, result: ?any, vm: ?any, values: any, interpolateMode: string): ?string { - if (!isNull(result)) { return result } - if (this._missing) { - const missingRet = this._missing.apply(null, [locale, key, vm, values]) - if (isString(missingRet)) { - return missingRet - } - } else { - if (process.env.NODE_ENV !== 'production' && !this._isSilentTranslationWarn(key)) { - warn( - `Cannot translate the value of keypath '${key}'. ` + - 'Use the value of keypath as default.' - ) - } - } - - if (this._formatFallbackMessages) { - const parsedArgs = parseArgs(...values) - return this._render(key, interpolateMode, parsedArgs.params, key) - } else { - return key - } - } - - _isFallbackRoot (val: any): boolean { - return !val && !isNull(this._root) && this._fallbackRoot - } - - _isSilentFallbackWarn (key: Path): boolean { - return this._silentFallbackWarn instanceof RegExp - ? this._silentFallbackWarn.test(key) - : this._silentFallbackWarn - } - - _isSilentFallback (locale: Locale, key: Path): boolean { - return this._isSilentFallbackWarn(key) && (this._isFallbackRoot() || locale !== this.fallbackLocale) - } - - _isSilentTranslationWarn (key: Path): boolean { - return this._silentTranslationWarn instanceof RegExp - ? this._silentTranslationWarn.test(key) - : this._silentTranslationWarn - } - - _interpolate ( - locale: Locale, - message: LocaleMessageObject, - key: Path, - host: any, - interpolateMode: string, - values: any, - visitedLinkStack: Array - ): any { - if (!message) { return null } - - const pathRet: PathValue = this._path.getPathValue(message, key) - if (Array.isArray(pathRet) || isPlainObject(pathRet)) { return pathRet } - - let ret: mixed - if (isNull(pathRet)) { - /* istanbul ignore else */ - if (isPlainObject(message)) { - ret = message[key] - if (!isString(ret)) { - if (process.env.NODE_ENV !== 'production' && !this._isSilentTranslationWarn(key) && !this._isSilentFallback(locale, key)) { - warn(`Value of key '${key}' is not a string!`) - } - return null - } - } else { - return null - } - } else { - /* istanbul ignore else */ - if (isString(pathRet)) { - ret = pathRet - } else { - if (process.env.NODE_ENV !== 'production' && !this._isSilentTranslationWarn(key) && !this._isSilentFallback(locale, key)) { - warn(`Value of key '${key}' is not a string!`) - } - return null - } - } - - // Check for the existence of links within the translated string - if (ret.indexOf('@:') >= 0 || ret.indexOf('@.') >= 0) { - ret = this._link(locale, message, ret, host, 'raw', values, visitedLinkStack) - } - - return this._render(ret, interpolateMode, values, key) - } - - _link ( - locale: Locale, - message: LocaleMessageObject, - str: string, - host: any, - interpolateMode: string, - values: any, - visitedLinkStack: Array - ): any { - let ret: string = str - - // Match all the links within the local - // We are going to replace each of - // them with its translation - const matches: any = ret.match(linkKeyMatcher) - for (let idx in matches) { - // ie compatible: filter custom array - // prototype method - if (!matches.hasOwnProperty(idx)) { - continue - } - const link: string = matches[idx] - const linkKeyPrefixMatches: any = link.match(linkKeyPrefixMatcher) - const [linkPrefix, formatterName] = linkKeyPrefixMatches - - // Remove the leading @:, @.case: and the brackets - const linkPlaceholder: string = link.replace(linkPrefix, '').replace(bracketsMatcher, '') - - if (includes(visitedLinkStack, linkPlaceholder)) { - if (process.env.NODE_ENV !== 'production') { - warn(`Circular reference found. "${link}" is already visited in the chain of ${visitedLinkStack.reverse().join(' <- ')}`) - } - return ret - } - visitedLinkStack.push(linkPlaceholder) - - // Translate the link - let translated: any = this._interpolate( - locale, message, linkPlaceholder, host, - interpolateMode === 'raw' ? 'string' : interpolateMode, - interpolateMode === 'raw' ? undefined : values, - visitedLinkStack - ) - - if (this._isFallbackRoot(translated)) { - if (process.env.NODE_ENV !== 'production' && !this._isSilentTranslationWarn(linkPlaceholder)) { - warn(`Fall back to translate the link placeholder '${linkPlaceholder}' with root locale.`) - } - /* istanbul ignore if */ - if (!this._root) { throw Error('unexpected error') } - const root: any = this._root.$i18n - translated = root._translate( - root._getMessages(), root.locale, root.fallbackLocale, - linkPlaceholder, host, interpolateMode, values - ) - } - translated = this._warnDefault( - locale, linkPlaceholder, translated, host, - Array.isArray(values) ? values : [values], - interpolateMode - ) - - if (this._modifiers.hasOwnProperty(formatterName)) { - translated = this._modifiers[formatterName](translated) - } else if (defaultModifiers.hasOwnProperty(formatterName)) { - translated = defaultModifiers[formatterName](translated) - } - - visitedLinkStack.pop() - - // Replace the link with the translated - ret = !translated ? ret : ret.replace(link, translated) - } - - return ret - } - - _render (message: string, interpolateMode: string, values: any, path: string): any { - let ret = this._formatter.interpolate(message, values, path) - - // If the custom formatter refuses to work - apply the default one - if (!ret) { - ret = defaultFormatter.interpolate(message, values, path) - } - - // if interpolateMode is **not** 'string' ('row'), - // return the compiled data (e.g. ['foo', VNode, 'bar']) with formatter - return interpolateMode === 'string' && !isString(ret) ? ret.join('') : ret - } - - _appendItemToChain (chain: Array, item: Locale, blocks: any): any { - let follow = false - if (!includes(chain, item)) { - follow = true - if (item) { - follow = item[item.length - 1] !== '!' - item = item.replace(/!/g, '') - chain.push(item) - if (blocks && blocks[item]) { - follow = blocks[item] - } - } - } - return follow - } - - _appendLocaleToChain (chain: Array, locale: Locale, blocks: any): any { - let follow - const tokens = locale.split('-') - do { - const item = tokens.join('-') - follow = this._appendItemToChain(chain, item, blocks) - tokens.splice(-1, 1) - } while (tokens.length && (follow === true)) - return follow - } - - _appendBlockToChain (chain: Array, block: Array | Object, blocks: any): any { - let follow = true - for (let i = 0; (i < block.length) && (isBoolean(follow)); i++) { - const locale = block[i] - if (isString(locale)) { - follow = this._appendLocaleToChain(chain, locale, blocks) - } - } - return follow - } - - _getLocaleChain (start: Locale, fallbackLocale: FallbackLocale): Array { - if (start === '') { return [] } - - if (!this._localeChainCache) { - this._localeChainCache = {} - } - - let chain = this._localeChainCache[start] - if (!chain) { - if (!fallbackLocale) { - fallbackLocale = this.fallbackLocale - } - chain = [] - - // first block defined by start - let block = [start] - - // while any intervening block found - while (isArray(block)) { - block = this._appendBlockToChain( - chain, - block, - fallbackLocale - ) - } - - // last block defined by default - let defaults - if (isArray(fallbackLocale)) { - defaults = fallbackLocale - } else if (isObject(fallbackLocale)) { - /* $FlowFixMe */ - if (fallbackLocale['default']) { - defaults = fallbackLocale['default'] - } else { - defaults = null - } - } else { - defaults = fallbackLocale - } - - // convert defaults to array - if (isString(defaults)) { - block = [defaults] - } else { - block = defaults - } - if (block) { - this._appendBlockToChain( - chain, - block, - null - ) - } - this._localeChainCache[start] = chain - } - return chain - } - - _translate ( - messages: LocaleMessages, - locale: Locale, - fallback: FallbackLocale, - key: Path, - host: any, - interpolateMode: string, - args: any - ): any { - const chain = this._getLocaleChain(locale, fallback) - let res - for (let i = 0; i < chain.length; i++) { - const step = chain[i] - res = - this._interpolate(step, messages[step], key, host, interpolateMode, args, [key]) - if (!isNull(res)) { - if (step !== locale && process.env.NODE_ENV !== 'production' && !this._isSilentTranslationWarn(key) && !this._isSilentFallbackWarn(key)) { - warn(("Fall back to translate the keypath '" + key + "' with '" + step + "' locale.")) - } - return res - } - } - return null - } - - _t (key: Path, _locale: Locale, messages: LocaleMessages, host: any, ...values: any): any { - if (!key) { return '' } - - const parsedArgs = parseArgs(...values) - const locale: Locale = parsedArgs.locale || _locale - - let ret: any = this._translate( - messages, locale, this.fallbackLocale, key, - host, 'string', parsedArgs.params - ) - if (this._isFallbackRoot(ret)) { - if (process.env.NODE_ENV !== 'production' && !this._isSilentTranslationWarn(key) && !this._isSilentFallbackWarn(key)) { - warn(`Fall back to translate the keypath '${key}' with root locale.`) - } - /* istanbul ignore if */ - if (!this._root) { throw Error('unexpected error') } - return this._root.$t(key, ...values) - } else { - ret = this._warnDefault(locale, key, ret, host, values, 'string') - if (this._postTranslation && ret !== null && ret !== undefined) { - ret = this._postTranslation(ret, key) - } - return ret - } - } - - t (key: Path, ...values: any): TranslateResult { - return this._t(key, this.locale, this._getMessages(), null, ...values) - } - - _i (key: Path, locale: Locale, messages: LocaleMessages, host: any, values: Object): any { - const ret: any = - this._translate(messages, locale, this.fallbackLocale, key, host, 'raw', values) - if (this._isFallbackRoot(ret)) { - if (process.env.NODE_ENV !== 'production' && !this._isSilentTranslationWarn(key)) { - warn(`Fall back to interpolate the keypath '${key}' with root locale.`) - } - if (!this._root) { throw Error('unexpected error') } - return this._root.$i18n.i(key, locale, values) - } else { - return this._warnDefault(locale, key, ret, host, [values], 'raw') - } - } - - i (key: Path, locale: Locale, values: Object): TranslateResult { - /* istanbul ignore if */ - if (!key) { return '' } - - if (!isString(locale)) { - locale = this.locale - } - - return this._i(key, locale, this._getMessages(), null, values) - } - - _tc ( - key: Path, - _locale: Locale, - messages: LocaleMessages, - host: any, - choice?: number, - ...values: any - ): any { - if (!key) { return '' } - if (choice === undefined) { - choice = 1 - } - - const predefined = { 'count': choice, 'n': choice } - const parsedArgs = parseArgs(...values) - parsedArgs.params = Object.assign(predefined, parsedArgs.params) - values = parsedArgs.locale === null ? [parsedArgs.params] : [parsedArgs.locale, parsedArgs.params] - return this.fetchChoice(this._t(key, _locale, messages, host, ...values), choice) - } - - fetchChoice (message: string, choice: number): ?string { - /* istanbul ignore if */ - if (!message && !isString(message)) { return null } - const choices: Array = message.split('|') - - choice = this.getChoiceIndex(choice, choices.length) - if (!choices[choice]) { return message } - return choices[choice].trim() - } - - tc (key: Path, choice?: number, ...values: any): TranslateResult { - return this._tc(key, this.locale, this._getMessages(), null, choice, ...values) - } - - _te (key: Path, locale: Locale, messages: LocaleMessages, ...args: any): boolean { - const _locale: Locale = parseArgs(...args).locale || locale - return this._exist(messages[_locale], key) - } - - te (key: Path, locale?: Locale): boolean { - return this._te(key, this.locale, this._getMessages(), locale) - } - - getLocaleMessage (locale: Locale): LocaleMessageObject { - return looseClone(this._vm.messages[locale] || {}) - } - - setLocaleMessage (locale: Locale, message: LocaleMessageObject): void { - if (this._warnHtmlInMessage === 'warn' || this._warnHtmlInMessage === 'error') { - this._checkLocaleMessage(locale, this._warnHtmlInMessage, message) - } - this._vm.$set(this._vm.messages, locale, message) - } - - mergeLocaleMessage (locale: Locale, message: LocaleMessageObject): void { - if (this._warnHtmlInMessage === 'warn' || this._warnHtmlInMessage === 'error') { - this._checkLocaleMessage(locale, this._warnHtmlInMessage, message) - } - this._vm.$set(this._vm.messages, locale, merge({}, this._vm.messages[locale] || {}, message)) - } - - getDateTimeFormat (locale: Locale): DateTimeFormat { - return looseClone(this._vm.dateTimeFormats[locale] || {}) - } - - setDateTimeFormat (locale: Locale, format: DateTimeFormat): void { - this._vm.$set(this._vm.dateTimeFormats, locale, format) - this._clearDateTimeFormat(locale, format) - } - - mergeDateTimeFormat (locale: Locale, format: DateTimeFormat): void { - this._vm.$set(this._vm.dateTimeFormats, locale, merge(this._vm.dateTimeFormats[locale] || {}, format)) - this._clearDateTimeFormat(locale, format) - } - - _clearDateTimeFormat (locale: Locale, format: DateTimeFormat): void { - for (let key in format) { - const id = `${locale}__${key}` - - if (!this._dateTimeFormatters.hasOwnProperty(id)) { - continue - } - - delete this._dateTimeFormatters[id] - } - } - - _localizeDateTime ( - value: number | Date, - locale: Locale, - fallback: FallbackLocale, - dateTimeFormats: DateTimeFormats, - key: string - ): ?DateTimeFormatResult { - let _locale: Locale = locale - let formats: DateTimeFormat = dateTimeFormats[_locale] - - const chain = this._getLocaleChain(locale, fallback) - for (let i = 0; i < chain.length; i++) { - const current = _locale - const step = chain[i] - formats = dateTimeFormats[step] - _locale = step - // fallback locale - if (isNull(formats) || isNull(formats[key])) { - if (step !== locale && process.env.NODE_ENV !== 'production' && !this._isSilentTranslationWarn(key) && !this._isSilentFallbackWarn(key)) { - warn(`Fall back to '${step}' datetime formats from '${current}' datetime formats.`) - } - } else { - break - } - } - - if (isNull(formats) || isNull(formats[key])) { - return null - } else { - const format: ?DateTimeFormatOptions = formats[key] - const id = `${_locale}__${key}` - let formatter = this._dateTimeFormatters[id] - if (!formatter) { - formatter = this._dateTimeFormatters[id] = new Intl.DateTimeFormat(_locale, format) - } - return formatter.format(value) - } - } - - _d (value: number | Date, locale: Locale, key: ?string): DateTimeFormatResult { - /* istanbul ignore if */ - if (process.env.NODE_ENV !== 'production' && !VueI18n.availabilities.dateTimeFormat) { - warn('Cannot format a Date value due to not supported Intl.DateTimeFormat.') - return '' - } - - if (!key) { - return new Intl.DateTimeFormat(locale).format(value) - } - - const ret: ?DateTimeFormatResult = - this._localizeDateTime(value, locale, this.fallbackLocale, this._getDateTimeFormats(), key) - if (this._isFallbackRoot(ret)) { - if (process.env.NODE_ENV !== 'production' && !this._isSilentTranslationWarn(key) && !this._isSilentFallbackWarn(key)) { - warn(`Fall back to datetime localization of root: key '${key}'.`) - } - /* istanbul ignore if */ - if (!this._root) { throw Error('unexpected error') } - return this._root.$i18n.d(value, key, locale) - } else { - return ret || '' - } - } - - d (value: number | Date, ...args: any): DateTimeFormatResult { - let locale: Locale = this.locale - let key: ?string = null - - if (args.length === 1) { - if (isString(args[0])) { - key = args[0] - } else if (isObject(args[0])) { - if (args[0].locale) { - locale = args[0].locale - } - if (args[0].key) { - key = args[0].key - } - } - } else if (args.length === 2) { - if (isString(args[0])) { - key = args[0] - } - if (isString(args[1])) { - locale = args[1] - } - } - - return this._d(value, locale, key) - } - - getNumberFormat (locale: Locale): NumberFormat { - return looseClone(this._vm.numberFormats[locale] || {}) - } - - setNumberFormat (locale: Locale, format: NumberFormat): void { - this._vm.$set(this._vm.numberFormats, locale, format) - this._clearNumberFormat(locale, format) - } - - mergeNumberFormat (locale: Locale, format: NumberFormat): void { - this._vm.$set(this._vm.numberFormats, locale, merge(this._vm.numberFormats[locale] || {}, format)) - this._clearNumberFormat(locale, format) - } - - _clearNumberFormat (locale: Locale, format: NumberFormat): void { - for (let key in format) { - const id = `${locale}__${key}` - - if (!this._numberFormatters.hasOwnProperty(id)) { - continue - } - - delete this._numberFormatters[id] - } - } - - _getNumberFormatter ( - value: number, - locale: Locale, - fallback: FallbackLocale, - numberFormats: NumberFormats, - key: string, - options: ?NumberFormatOptions - ): ?Object { - let _locale: Locale = locale - let formats: NumberFormat = numberFormats[_locale] - - const chain = this._getLocaleChain(locale, fallback) - for (let i = 0; i < chain.length; i++) { - const current = _locale - const step = chain[i] - formats = numberFormats[step] - _locale = step - // fallback locale - if (isNull(formats) || isNull(formats[key])) { - if (step !== locale && process.env.NODE_ENV !== 'production' && !this._isSilentTranslationWarn(key) && !this._isSilentFallbackWarn(key)) { - warn(`Fall back to '${step}' number formats from '${current}' number formats.`) - } - } else { - break - } - } - - if (isNull(formats) || isNull(formats[key])) { - return null - } else { - const format: ?NumberFormatOptions = formats[key] - - let formatter - if (options) { - // If options specified - create one time number formatter - formatter = new Intl.NumberFormat(_locale, Object.assign({}, format, options)) - } else { - const id = `${_locale}__${key}` - formatter = this._numberFormatters[id] - if (!formatter) { - formatter = this._numberFormatters[id] = new Intl.NumberFormat(_locale, format) - } - } - return formatter - } - } - - _n (value: number, locale: Locale, key: ?string, options: ?NumberFormatOptions): NumberFormatResult { - /* istanbul ignore if */ - if (!VueI18n.availabilities.numberFormat) { - if (process.env.NODE_ENV !== 'production') { - warn('Cannot format a Number value due to not supported Intl.NumberFormat.') - } - return '' - } - - if (!key) { - const nf = !options ? new Intl.NumberFormat(locale) : new Intl.NumberFormat(locale, options) - return nf.format(value) - } - - const formatter: ?Object = this._getNumberFormatter(value, locale, this.fallbackLocale, this._getNumberFormats(), key, options) - const ret: ?NumberFormatResult = formatter && formatter.format(value) - if (this._isFallbackRoot(ret)) { - if (process.env.NODE_ENV !== 'production' && !this._isSilentTranslationWarn(key) && !this._isSilentFallbackWarn(key)) { - warn(`Fall back to number localization of root: key '${key}'.`) - } - /* istanbul ignore if */ - if (!this._root) { throw Error('unexpected error') } - return this._root.$i18n.n(value, Object.assign({}, { key, locale }, options)) - } else { - return ret || '' - } - } - - n (value: number, ...args: any): NumberFormatResult { - let locale: Locale = this.locale - let key: ?string = null - let options: ?NumberFormatOptions = null - - if (args.length === 1) { - if (isString(args[0])) { - key = args[0] - } else if (isObject(args[0])) { - if (args[0].locale) { - locale = args[0].locale - } - if (args[0].key) { - key = args[0].key - } - - // Filter out number format options only - options = Object.keys(args[0]).reduce((acc, key) => { - if (includes(numberFormatKeys, key)) { - return Object.assign({}, acc, { [key]: args[0][key] }) - } - return acc - }, null) - } - } else if (args.length === 2) { - if (isString(args[0])) { - key = args[0] - } - if (isString(args[1])) { - locale = args[1] - } - } - - return this._n(value, locale, key, options) - } - - _ntp (value: number, locale: Locale, key: ?string, options: ?NumberFormatOptions): NumberFormatToPartsResult { - /* istanbul ignore if */ - if (!VueI18n.availabilities.numberFormat) { - if (process.env.NODE_ENV !== 'production') { - warn('Cannot format to parts a Number value due to not supported Intl.NumberFormat.') - } - return [] - } - - if (!key) { - const nf = !options ? new Intl.NumberFormat(locale) : new Intl.NumberFormat(locale, options) - return nf.formatToParts(value) - } - - const formatter: ?Object = this._getNumberFormatter(value, locale, this.fallbackLocale, this._getNumberFormats(), key, options) - const ret: ?NumberFormatToPartsResult = formatter && formatter.formatToParts(value) - if (this._isFallbackRoot(ret)) { - if (process.env.NODE_ENV !== 'production' && !this._isSilentTranslationWarn(key)) { - warn(`Fall back to format number to parts of root: key '${key}' .`) - } - /* istanbul ignore if */ - if (!this._root) { throw Error('unexpected error') } - return this._root.$i18n._ntp(value, locale, key, options) - } else { - return ret || [] - } - } -} - -let availabilities: IntlAvailability -// $FlowFixMe -Object.defineProperty(VueI18n, 'availabilities', { - get () { - if (!availabilities) { - const intlDefined = typeof Intl !== 'undefined' - availabilities = { - dateTimeFormat: intlDefined && typeof Intl.DateTimeFormat !== 'undefined', - numberFormat: intlDefined && typeof Intl.NumberFormat !== 'undefined' - } - } - - return availabilities - } -}) - -VueI18n.install = install -VueI18n.version = '__VERSION__' diff --git a/node_modules/vue-i18n/src/install.js b/node_modules/vue-i18n/src/install.js deleted file mode 100644 index 62edbc2..0000000 --- a/node_modules/vue-i18n/src/install.js +++ /dev/null @@ -1,40 +0,0 @@ -import { warn } from './util' -import extend from './extend' -import mixin from './mixin' -import interpolationComponent from './components/interpolation' -import numberComponent from './components/number' -import { bind, update, unbind } from './directive' - -export let Vue - -export function install (_Vue) { - /* istanbul ignore if */ - if (process.env.NODE_ENV !== 'production' && install.installed && _Vue === Vue) { - warn('already installed.') - return - } - install.installed = true - - Vue = _Vue - - const version = (Vue.version && Number(Vue.version.split('.')[0])) || -1 - /* istanbul ignore if */ - if (process.env.NODE_ENV !== 'production' && version < 2) { - warn(`vue-i18n (${install.version}) need to use Vue 2.0 or later (Vue: ${Vue.version}).`) - return - } - - extend(Vue) - Vue.mixin(mixin) - Vue.directive('t', { bind, update, unbind }) - Vue.component(interpolationComponent.name, interpolationComponent) - Vue.component(numberComponent.name, numberComponent) - - // use simple mergeStrategies to prevent i18n instance lose '__proto__' - const strats = Vue.config.optionMergeStrategies - strats.i18n = function (parentVal, childVal) { - return childVal === undefined - ? parentVal - : childVal - } -} diff --git a/node_modules/vue-i18n/src/mixin.js b/node_modules/vue-i18n/src/mixin.js deleted file mode 100644 index 0190b16..0000000 --- a/node_modules/vue-i18n/src/mixin.js +++ /dev/null @@ -1,139 +0,0 @@ -/* @flow */ - -import VueI18n from './index' -import { isPlainObject, warn, error, merge } from './util' - -export default { - beforeCreate (): void { - const options: any = this.$options - options.i18n = options.i18n || (options.__i18n ? {} : null) - - if (options.i18n) { - if (options.i18n instanceof VueI18n) { - // init locale messages via custom blocks - if (options.__i18n) { - try { - let localeMessages = {} - options.__i18n.forEach(resource => { - localeMessages = merge(localeMessages, JSON.parse(resource)) - }) - Object.keys(localeMessages).forEach((locale: Locale) => { - options.i18n.mergeLocaleMessage(locale, localeMessages[locale]) - }) - } catch (e) { - if (process.env.NODE_ENV !== 'production') { - error(`Cannot parse locale messages via custom blocks.`, e) - } - } - } - this._i18n = options.i18n - this._i18nWatcher = this._i18n.watchI18nData() - } else if (isPlainObject(options.i18n)) { - const rootI18n = this.$root && this.$root.$i18n && this.$root.$i18n instanceof VueI18n - ? this.$root.$i18n - : null - // component local i18n - if (rootI18n) { - options.i18n.root = this.$root - options.i18n.formatter = rootI18n.formatter - options.i18n.fallbackLocale = rootI18n.fallbackLocale - options.i18n.formatFallbackMessages = rootI18n.formatFallbackMessages - options.i18n.silentTranslationWarn = rootI18n.silentTranslationWarn - options.i18n.silentFallbackWarn = rootI18n.silentFallbackWarn - options.i18n.pluralizationRules = rootI18n.pluralizationRules - options.i18n.preserveDirectiveContent = rootI18n.preserveDirectiveContent - } - - // init locale messages via custom blocks - if (options.__i18n) { - try { - let localeMessages = {} - options.__i18n.forEach(resource => { - localeMessages = merge(localeMessages, JSON.parse(resource)) - }) - options.i18n.messages = localeMessages - } catch (e) { - if (process.env.NODE_ENV !== 'production') { - warn(`Cannot parse locale messages via custom blocks.`, e) - } - } - } - - const { sharedMessages } = options.i18n - if (sharedMessages && isPlainObject(sharedMessages)) { - options.i18n.messages = merge(options.i18n.messages, sharedMessages) - } - - this._i18n = new VueI18n(options.i18n) - this._i18nWatcher = this._i18n.watchI18nData() - - if (options.i18n.sync === undefined || !!options.i18n.sync) { - this._localeWatcher = this.$i18n.watchLocale() - } - - if (rootI18n) { - rootI18n.onComponentInstanceCreated(this._i18n) - } - } else { - if (process.env.NODE_ENV !== 'production') { - warn(`Cannot be interpreted 'i18n' option.`) - } - } - } else if (this.$root && this.$root.$i18n && this.$root.$i18n instanceof VueI18n) { - // root i18n - this._i18n = this.$root.$i18n - } else if (options.parent && options.parent.$i18n && options.parent.$i18n instanceof VueI18n) { - // parent i18n - this._i18n = options.parent.$i18n - } - }, - - beforeMount (): void { - const options: any = this.$options - options.i18n = options.i18n || (options.__i18n ? {} : null) - - if (options.i18n) { - if (options.i18n instanceof VueI18n) { - // init locale messages via custom blocks - this._i18n.subscribeDataChanging(this) - this._subscribing = true - } else if (isPlainObject(options.i18n)) { - this._i18n.subscribeDataChanging(this) - this._subscribing = true - } else { - if (process.env.NODE_ENV !== 'production') { - warn(`Cannot be interpreted 'i18n' option.`) - } - } - } else if (this.$root && this.$root.$i18n && this.$root.$i18n instanceof VueI18n) { - this._i18n.subscribeDataChanging(this) - this._subscribing = true - } else if (options.parent && options.parent.$i18n && options.parent.$i18n instanceof VueI18n) { - this._i18n.subscribeDataChanging(this) - this._subscribing = true - } - }, - - beforeDestroy (): void { - if (!this._i18n) { return } - - const self = this - this.$nextTick(() => { - if (self._subscribing) { - self._i18n.unsubscribeDataChanging(self) - delete self._subscribing - } - - if (self._i18nWatcher) { - self._i18nWatcher() - self._i18n.destroyVM() - delete self._i18nWatcher - } - - if (self._localeWatcher) { - self._localeWatcher() - delete self._localeWatcher - } - }) - } -} diff --git a/node_modules/vue-i18n/src/path.js b/node_modules/vue-i18n/src/path.js deleted file mode 100644 index 3be65af..0000000 --- a/node_modules/vue-i18n/src/path.js +++ /dev/null @@ -1,302 +0,0 @@ -/* @flow */ - -import { isObject } from './util' - -/** - * Path parser - * - Inspired: - * Vue.js Path parser - */ - -// actions -const APPEND = 0 -const PUSH = 1 -const INC_SUB_PATH_DEPTH = 2 -const PUSH_SUB_PATH = 3 - -// states -const BEFORE_PATH = 0 -const IN_PATH = 1 -const BEFORE_IDENT = 2 -const IN_IDENT = 3 -const IN_SUB_PATH = 4 -const IN_SINGLE_QUOTE = 5 -const IN_DOUBLE_QUOTE = 6 -const AFTER_PATH = 7 -const ERROR = 8 - -const pathStateMachine: any = [] - -pathStateMachine[BEFORE_PATH] = { - 'ws': [BEFORE_PATH], - 'ident': [IN_IDENT, APPEND], - '[': [IN_SUB_PATH], - 'eof': [AFTER_PATH] -} - -pathStateMachine[IN_PATH] = { - 'ws': [IN_PATH], - '.': [BEFORE_IDENT], - '[': [IN_SUB_PATH], - 'eof': [AFTER_PATH] -} - -pathStateMachine[BEFORE_IDENT] = { - 'ws': [BEFORE_IDENT], - 'ident': [IN_IDENT, APPEND], - '0': [IN_IDENT, APPEND], - 'number': [IN_IDENT, APPEND] -} - -pathStateMachine[IN_IDENT] = { - 'ident': [IN_IDENT, APPEND], - '0': [IN_IDENT, APPEND], - 'number': [IN_IDENT, APPEND], - 'ws': [IN_PATH, PUSH], - '.': [BEFORE_IDENT, PUSH], - '[': [IN_SUB_PATH, PUSH], - 'eof': [AFTER_PATH, PUSH] -} - -pathStateMachine[IN_SUB_PATH] = { - "'": [IN_SINGLE_QUOTE, APPEND], - '"': [IN_DOUBLE_QUOTE, APPEND], - '[': [IN_SUB_PATH, INC_SUB_PATH_DEPTH], - ']': [IN_PATH, PUSH_SUB_PATH], - 'eof': ERROR, - 'else': [IN_SUB_PATH, APPEND] -} - -pathStateMachine[IN_SINGLE_QUOTE] = { - "'": [IN_SUB_PATH, APPEND], - 'eof': ERROR, - 'else': [IN_SINGLE_QUOTE, APPEND] -} - -pathStateMachine[IN_DOUBLE_QUOTE] = { - '"': [IN_SUB_PATH, APPEND], - 'eof': ERROR, - 'else': [IN_DOUBLE_QUOTE, APPEND] -} - -/** - * Check if an expression is a literal value. - */ - -const literalValueRE: RegExp = /^\s?(?:true|false|-?[\d.]+|'[^']*'|"[^"]*")\s?$/ -function isLiteral (exp: string): boolean { - return literalValueRE.test(exp) -} - -/** - * Strip quotes from a string - */ - -function stripQuotes (str: string): string | boolean { - const a: number = str.charCodeAt(0) - const b: number = str.charCodeAt(str.length - 1) - return a === b && (a === 0x22 || a === 0x27) - ? str.slice(1, -1) - : str -} - -/** - * Determine the type of a character in a keypath. - */ - -function getPathCharType (ch: ?string): string { - if (ch === undefined || ch === null) { return 'eof' } - - const code: number = ch.charCodeAt(0) - - switch (code) { - case 0x5B: // [ - case 0x5D: // ] - case 0x2E: // . - case 0x22: // " - case 0x27: // ' - return ch - - case 0x5F: // _ - case 0x24: // $ - case 0x2D: // - - return 'ident' - - case 0x09: // Tab - case 0x0A: // Newline - case 0x0D: // Return - case 0xA0: // No-break space - case 0xFEFF: // Byte Order Mark - case 0x2028: // Line Separator - case 0x2029: // Paragraph Separator - return 'ws' - } - - return 'ident' -} - -/** - * Format a subPath, return its plain form if it is - * a literal string or number. Otherwise prepend the - * dynamic indicator (*). - */ - -function formatSubPath (path: string): boolean | string { - const trimmed: string = path.trim() - // invalid leading 0 - if (path.charAt(0) === '0' && isNaN(path)) { return false } - - return isLiteral(trimmed) ? stripQuotes(trimmed) : '*' + trimmed -} - -/** - * Parse a string path into an array of segments - */ - -function parse (path: Path): ?Array { - const keys: Array = [] - let index: number = -1 - let mode: number = BEFORE_PATH - let subPathDepth: number = 0 - let c: ?string - let key: any - let newChar: any - let type: string - let transition: number - let action: Function - let typeMap: any - const actions: Array = [] - - actions[PUSH] = function () { - if (key !== undefined) { - keys.push(key) - key = undefined - } - } - - actions[APPEND] = function () { - if (key === undefined) { - key = newChar - } else { - key += newChar - } - } - - actions[INC_SUB_PATH_DEPTH] = function () { - actions[APPEND]() - subPathDepth++ - } - - actions[PUSH_SUB_PATH] = function () { - if (subPathDepth > 0) { - subPathDepth-- - mode = IN_SUB_PATH - actions[APPEND]() - } else { - subPathDepth = 0 - if (key === undefined) { return false } - key = formatSubPath(key) - if (key === false) { - return false - } else { - actions[PUSH]() - } - } - } - - function maybeUnescapeQuote (): ?boolean { - const nextChar: string = path[index + 1] - if ((mode === IN_SINGLE_QUOTE && nextChar === "'") || - (mode === IN_DOUBLE_QUOTE && nextChar === '"')) { - index++ - newChar = '\\' + nextChar - actions[APPEND]() - return true - } - } - - while (mode !== null) { - index++ - c = path[index] - - if (c === '\\' && maybeUnescapeQuote()) { - continue - } - - type = getPathCharType(c) - typeMap = pathStateMachine[mode] - transition = typeMap[type] || typeMap['else'] || ERROR - - if (transition === ERROR) { - return // parse error - } - - mode = transition[0] - action = actions[transition[1]] - if (action) { - newChar = transition[2] - newChar = newChar === undefined - ? c - : newChar - if (action() === false) { - return - } - } - - if (mode === AFTER_PATH) { - return keys - } - } -} - -export type PathValue = PathValueObject | PathValueArray | string | number | boolean | null -export type PathValueObject = { [key: string]: PathValue } -export type PathValueArray = Array - -export default class I18nPath { - _cache: Object - - constructor () { - this._cache = Object.create(null) - } - - /** - * External parse that check for a cache hit first - */ - parsePath (path: Path): Array { - let hit: ?Array = this._cache[path] - if (!hit) { - hit = parse(path) - if (hit) { - this._cache[path] = hit - } - } - return hit || [] - } - - /** - * Get path value from path string - */ - getPathValue (obj: mixed, path: Path): PathValue { - if (!isObject(obj)) { return null } - - const paths: Array = this.parsePath(path) - if (paths.length === 0) { - return null - } else { - const length: number = paths.length - let last: any = obj - let i: number = 0 - while (i < length) { - const value: any = last[paths[i]] - if (value === undefined) { - return null - } - last = value - i++ - } - - return last - } - } -} diff --git a/node_modules/vue-i18n/src/util.js b/node_modules/vue-i18n/src/util.js deleted file mode 100644 index 61b04de..0000000 --- a/node_modules/vue-i18n/src/util.js +++ /dev/null @@ -1,165 +0,0 @@ -/* @flow */ - -/** - * constants - */ - -export const numberFormatKeys = [ - 'style', - 'currency', - 'currencyDisplay', - 'useGrouping', - 'minimumIntegerDigits', - 'minimumFractionDigits', - 'maximumFractionDigits', - 'minimumSignificantDigits', - 'maximumSignificantDigits', - 'localeMatcher', - 'formatMatcher', - 'unit' -] - -/** - * utilities - */ - -export function warn (msg: string, err: ?Error): void { - if (typeof console !== 'undefined') { - console.warn('[vue-i18n] ' + msg) - /* istanbul ignore if */ - if (err) { - console.warn(err.stack) - } - } -} - -export function error (msg: string, err: ?Error): void { - if (typeof console !== 'undefined') { - console.error('[vue-i18n] ' + msg) - /* istanbul ignore if */ - if (err) { - console.error(err.stack) - } - } -} - -export const isArray = Array.isArray - -export function isObject (obj: mixed): boolean %checks { - return obj !== null && typeof obj === 'object' -} - -export function isBoolean (val: mixed): boolean %checks { - return typeof val === 'boolean' -} - -export function isString (val: mixed): boolean %checks { - return typeof val === 'string' -} - -const toString: Function = Object.prototype.toString -const OBJECT_STRING: string = '[object Object]' -export function isPlainObject (obj: any): boolean { - return toString.call(obj) === OBJECT_STRING -} - -export function isNull (val: mixed): boolean { - return val === null || val === undefined -} - -export function parseArgs (...args: Array): Object { - let locale: ?string = null - let params: mixed = null - if (args.length === 1) { - if (isObject(args[0]) || Array.isArray(args[0])) { - params = args[0] - } else if (typeof args[0] === 'string') { - locale = args[0] - } - } else if (args.length === 2) { - if (typeof args[0] === 'string') { - locale = args[0] - } - /* istanbul ignore if */ - if (isObject(args[1]) || Array.isArray(args[1])) { - params = args[1] - } - } - - return { locale, params } -} - -export function looseClone (obj: Object): Object { - return JSON.parse(JSON.stringify(obj)) -} - -export function remove (arr: Array, item: any): Array | void { - if (arr.length) { - const index = arr.indexOf(item) - if (index > -1) { - return arr.splice(index, 1) - } - } -} - -export function includes (arr: Array, item: any): boolean { - return !!~arr.indexOf(item) -} - -const hasOwnProperty = Object.prototype.hasOwnProperty -export function hasOwn (obj: Object | Array<*>, key: string): boolean { - return hasOwnProperty.call(obj, key) -} - -export function merge (target: Object): Object { - const output = Object(target) - for (let i = 1; i < arguments.length; i++) { - const source = arguments[i] - if (source !== undefined && source !== null) { - let key - for (key in source) { - if (hasOwn(source, key)) { - if (isObject(source[key])) { - output[key] = merge(output[key], source[key]) - } else { - output[key] = source[key] - } - } - } - } - } - return output -} - -export function looseEqual (a: any, b: any): boolean { - if (a === b) { return true } - const isObjectA: boolean = isObject(a) - const isObjectB: boolean = isObject(b) - if (isObjectA && isObjectB) { - try { - const isArrayA: boolean = Array.isArray(a) - const isArrayB: boolean = Array.isArray(b) - if (isArrayA && isArrayB) { - return a.length === b.length && a.every((e: any, i: number): boolean => { - return looseEqual(e, b[i]) - }) - } else if (!isArrayA && !isArrayB) { - const keysA: Array = Object.keys(a) - const keysB: Array = Object.keys(b) - return keysA.length === keysB.length && keysA.every((key: string): boolean => { - return looseEqual(a[key], b[key]) - }) - } else { - /* istanbul ignore next */ - return false - } - } catch (e) { - /* istanbul ignore next */ - return false - } - } else if (!isObjectA && !isObjectB) { - return String(a) === String(b) - } else { - return false - } -} diff --git a/node_modules/vue-i18n/types/index.d.ts b/node_modules/vue-i18n/types/index.d.ts deleted file mode 100644 index 03b767c..0000000 --- a/node_modules/vue-i18n/types/index.d.ts +++ /dev/null @@ -1,269 +0,0 @@ -import Vue, { PluginFunction } from 'vue'; - -declare namespace VueI18n { - type Path = string; - type Locale = string; - type FallbackLocale = string | string[] | false | { [locale: string]: string[] } - type Values = any[] | { [key: string]: any }; - type Choice = number; - type LocaleMessage = string | LocaleMessageObject | LocaleMessageArray; - interface LocaleMessageObject { [key: string]: LocaleMessage; } - interface LocaleMessageArray { [index: number]: LocaleMessage; } - interface LocaleMessages { [key: string]: LocaleMessageObject; } - type TranslateResult = string | LocaleMessages; - - type LocaleMatcher = 'lookup' | 'best-fit'; - type FormatMatcher = 'basic' | 'best-fit'; - - type DateTimeHumanReadable = 'long' | 'short' | 'narrow'; - type DateTimeDigital = 'numeric' | '2-digit'; - - interface SpecificDateTimeFormatOptions extends Intl.DateTimeFormatOptions { - year?: DateTimeDigital; - month?: DateTimeDigital | DateTimeHumanReadable; - day?: DateTimeDigital; - hour?: DateTimeDigital; - minute?: DateTimeDigital; - second?: DateTimeDigital; - weekday?: DateTimeHumanReadable; - era?: DateTimeHumanReadable; - timeZoneName?: 'long' | 'short'; - localeMatcher?: LocaleMatcher; - formatMatcher?: FormatMatcher; - } - - type DateTimeFormatOptions = Intl.DateTimeFormatOptions | SpecificDateTimeFormatOptions; - - interface DateTimeFormat { [key: string]: DateTimeFormatOptions; } - interface DateTimeFormats { [locale: string]: DateTimeFormat; } - type DateTimeFormatResult = string; - - type CurrencyDisplay = 'symbol' | 'code' | 'name'; - - interface SpecificNumberFormatOptions extends Intl.NumberFormatOptions { - style?: 'decimal' | 'percent'; - currency?: string; - currencyDisplay?: CurrencyDisplay; - localeMatcher?: LocaleMatcher; - formatMatcher?: FormatMatcher; - } - - interface CurrencyNumberFormatOptions extends Intl.NumberFormatOptions { - style: 'currency'; - currency: string; // Obligatory if style is 'currency' - currencyDisplay?: CurrencyDisplay; - localeMatcher?: LocaleMatcher; - formatMatcher?: FormatMatcher; - } - - type NumberFormatOptions = Intl.NumberFormatOptions | SpecificNumberFormatOptions | CurrencyNumberFormatOptions; - - interface NumberFormat { [key: string]: NumberFormatOptions; } - interface NumberFormats { [locale: string]: NumberFormat; } - type NumberFormatResult = string; - type PluralizationRulesMap = { - /** - * @param choice {number} a choice index given by the input to $tc: `$tc('path.to.rule', choiceIndex)` - * @param choicesLength {number} an overall amount of available choices - * @returns a final choice index - */ - [lang: string]: (choice: number, choicesLength: number) => number; - }; - type Modifiers = { [key: string]: (str : string) => string }; - - type FormattedNumberPartType = 'currency' | 'decimal' | 'fraction' | 'group' | 'infinity' | 'integer' | 'literal' | 'minusSign' | 'nan' | 'plusSign' | 'percentSign'; - - type WarnHtmlInMessageLevel = 'off' | 'warn' | 'error'; - - interface FormattedNumberPart { - type: FormattedNumberPartType; - value: string; - } - interface NumberFormatToPartsResult { [index: number]: FormattedNumberPart; } - - interface Formatter { - interpolate(message: string, values: Values | undefined, path: string): (any[] | null); - } - - type MissingHandler = (locale: Locale, key: Path, vm: Vue | null, values: any) => string | void; - type PostTranslationHandler = (str: string, key?: string) => string; - type ComponentInstanceCreatedListener = (newVm: VueI18n & IVueI18n, rootVm: VueI18n & IVueI18n) => void; - - interface IntlAvailability { - dateTimeFormat: boolean; - numberFormat: boolean; - } - - // tslint:disable-next-line:interface-name - interface I18nOptions { - locale?: Locale; - fallbackLocale?: FallbackLocale; - messages?: LocaleMessages; - dateTimeFormats?: DateTimeFormats; - numberFormats?: NumberFormats; - formatter?: Formatter; - modifiers?: Modifiers, - missing?: MissingHandler; - fallbackRoot?: boolean; - formatFallbackMessages?: boolean; - sync?: boolean; - silentTranslationWarn?: boolean | RegExp; - silentFallbackWarn?: boolean | RegExp; - preserveDirectiveContent?: boolean; - pluralizationRules?: PluralizationRulesMap; - warnHtmlInMessage?: WarnHtmlInMessageLevel; - sharedMessages?: LocaleMessages; - postTranslation?: PostTranslationHandler; - componentInstanceCreatedListener?: ComponentInstanceCreatedListener; - } -} - -export type Path = VueI18n.Path; -export type Locale = VueI18n.Locale; -export type FallbackLocale = VueI18n.FallbackLocale; -export type Values = VueI18n.Values; -export type Choice = VueI18n.Choice; -export type LocaleMessage = VueI18n.LocaleMessage; -export type LocaleMessageObject = VueI18n.LocaleMessageObject; -export type LocaleMessageArray = VueI18n.LocaleMessageArray; -export type LocaleMessages = VueI18n.LocaleMessages; -export type TranslateResult = VueI18n.TranslateResult; -export type DateTimeFormatOptions = VueI18n.DateTimeFormatOptions; -export type DateTimeFormat = VueI18n.DateTimeFormat; -export type DateTimeFormats = VueI18n.DateTimeFormats; -export type DateTimeFormatResult = VueI18n.DateTimeFormatResult; -export type NumberFormatOptions = VueI18n.NumberFormatOptions; -export type NumberFormat = VueI18n.NumberFormat; -export type NumberFormats = VueI18n.NumberFormats; -export type NumberFormatResult = VueI18n.NumberFormatResult; -export type NumberFormatToPartsResult = VueI18n.NumberFormatToPartsResult; -export type WarnHtmlInMessageLevel = VueI18n.WarnHtmlInMessageLevel; -export type Formatter = VueI18n.Formatter; -export type MissingHandler = VueI18n.MissingHandler; -export type PostTranslationHandler = VueI18n.PostTranslationHandler; -export type IntlAvailability = VueI18n.IntlAvailability; -export type I18nOptions = VueI18n.I18nOptions; - -export declare interface IVueI18n { - readonly messages: VueI18n.LocaleMessages; - readonly dateTimeFormats: VueI18n.DateTimeFormats; - readonly numberFormats: VueI18n.NumberFormats; - - locale: VueI18n.Locale; - fallbackLocale: VueI18n.FallbackLocale; - missing: VueI18n.MissingHandler; - formatter: VueI18n.Formatter; - formatFallbackMessages: boolean; - silentTranslationWarn: boolean | RegExp; - silentFallbackWarn: boolean | RegExp; - preserveDirectiveContent: boolean; - pluralizationRules: VueI18n.PluralizationRulesMap; - warnHtmlInMessage: VueI18n.WarnHtmlInMessageLevel; - postTranslation: VueI18n.PostTranslationHandler; - t(key: VueI18n.Path, values?: VueI18n.Values): VueI18n.TranslateResult; - t(key: VueI18n.Path, locale: VueI18n.Locale, values?: VueI18n.Values): VueI18n.TranslateResult; - tc(key: VueI18n.Path, choice?: VueI18n.Choice, values?: VueI18n.Values): string; - tc( - key: VueI18n.Path, - choice: VueI18n.Choice, - locale: VueI18n.Locale, - values?: VueI18n.Values, - ): string; - te(key: VueI18n.Path, locale?: VueI18n.Locale): boolean; - d( - value: number | Date, - key?: VueI18n.Path, - locale?: VueI18n.Locale, - ): VueI18n.DateTimeFormatResult; - d(value: number | Date, args?: { [key: string]: string }): VueI18n.DateTimeFormatResult; - n(value: number, key?: VueI18n.Path, locale?: VueI18n.Locale): VueI18n.NumberFormatResult; - n(value: number, args?: { [key: string]: string }): VueI18n.NumberFormatResult; - getLocaleMessage(locale: VueI18n.Locale): VueI18n.LocaleMessageObject; - setLocaleMessage(locale: VueI18n.Locale, message: VueI18n.LocaleMessageObject): void; - mergeLocaleMessage(locale: VueI18n.Locale, message: VueI18n.LocaleMessageObject): void; - getDateTimeFormat(locale: VueI18n.Locale): VueI18n.DateTimeFormat; - setDateTimeFormat(locale: VueI18n.Locale, format: VueI18n.DateTimeFormat): void; - mergeDateTimeFormat(locale: VueI18n.Locale, format: VueI18n.DateTimeFormat): void; - getNumberFormat(locale: VueI18n.Locale): VueI18n.NumberFormat; - setNumberFormat(locale: VueI18n.Locale, format: VueI18n.NumberFormat): void; - mergeNumberFormat(locale: VueI18n.Locale, format: VueI18n.NumberFormat): void; - getChoiceIndex: (choice: number, choicesLength: number) => number; -} - -declare class VueI18n { - constructor(options?: VueI18n.I18nOptions) - - readonly messages: VueI18n.LocaleMessages; - readonly dateTimeFormats: VueI18n.DateTimeFormats; - readonly numberFormats: VueI18n.NumberFormats; - readonly availableLocales: VueI18n.Locale[]; - - locale: VueI18n.Locale; - fallbackLocale: VueI18n.FallbackLocale; - missing: VueI18n.MissingHandler; - formatter: VueI18n.Formatter; - formatFallbackMessages: boolean; - silentTranslationWarn: boolean | RegExp; - silentFallbackWarn: boolean | RegExp; - preserveDirectiveContent: boolean; - pluralizationRules: VueI18n.PluralizationRulesMap; - warnHtmlInMessage: VueI18n.WarnHtmlInMessageLevel; - postTranslation: VueI18n.PostTranslationHandler; - - t(key: VueI18n.Path, values?: VueI18n.Values): VueI18n.TranslateResult; - t(key: VueI18n.Path, locale: VueI18n.Locale, values?: VueI18n.Values): VueI18n.TranslateResult; - tc(key: VueI18n.Path, choice?: VueI18n.Choice, values?: VueI18n.Values): string; - tc(key: VueI18n.Path, choice: VueI18n.Choice, locale: VueI18n.Locale, values?: VueI18n.Values): string; - te(key: VueI18n.Path, locale?: VueI18n.Locale): boolean; - d(value: number | Date, key?: VueI18n.Path, locale?: VueI18n.Locale): VueI18n.DateTimeFormatResult; - d(value: number | Date, args?: { [key: string]: string }): VueI18n.DateTimeFormatResult; - n(value: number, key?: VueI18n.Path, locale?: VueI18n.Locale): VueI18n.NumberFormatResult; - n(value: number, args?: { [key: string]: string }): VueI18n.NumberFormatResult; - - getLocaleMessage(locale: VueI18n.Locale): VueI18n.LocaleMessageObject; - setLocaleMessage(locale: VueI18n.Locale, message: VueI18n.LocaleMessageObject): void; - mergeLocaleMessage(locale: VueI18n.Locale, message: VueI18n.LocaleMessageObject): void; - - getDateTimeFormat(locale: VueI18n.Locale): VueI18n.DateTimeFormat; - setDateTimeFormat(locale: VueI18n.Locale, format: VueI18n.DateTimeFormat): void; - mergeDateTimeFormat(locale: VueI18n.Locale, format: VueI18n.DateTimeFormat): void; - - getNumberFormat(locale: VueI18n.Locale): VueI18n.NumberFormat; - setNumberFormat(locale: VueI18n.Locale, format: VueI18n.NumberFormat): void; - mergeNumberFormat(locale: VueI18n.Locale, format: VueI18n.NumberFormat): void; - - /** - * @param choice {number} a choice index given by the input to $tc: `$tc('path.to.rule', choiceIndex)` - * @param choicesLength {number} an overall amount of available choices - * @returns a final choice index - */ - getChoiceIndex: (choice: number, choicesLength: number) => number; - - static install: PluginFunction; - static version: string; - static availabilities: VueI18n.IntlAvailability; -} - -declare module 'vue/types/vue' { - interface Vue { - readonly $i18n: VueI18n & IVueI18n; - $t: typeof VueI18n.prototype.t; - $tc: typeof VueI18n.prototype.tc; - $te: typeof VueI18n.prototype.te; - $d: typeof VueI18n.prototype.d; - $n: typeof VueI18n.prototype.n; - } -} - -declare module 'vue/types/options' { - interface ComponentOptions { - i18n?: { - messages?: VueI18n.LocaleMessages; - dateTimeFormats?: VueI18n.DateTimeFormats; - numberFormats?: VueI18n.NumberFormats; - sharedMessages?: VueI18n.LocaleMessages; - }; - } -} - -export default VueI18n; diff --git a/node_modules/vue-i18n/vetur/attributes.json b/node_modules/vue-i18n/vetur/attributes.json deleted file mode 100644 index 2b64f23..0000000 --- a/node_modules/vue-i18n/vetur/attributes.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "i18n/path" : { - "description": "[required]\nKeypath of the locale message", - "type": "string" - }, - "i18n/locale" : { - "description": "[optional]\nLocale to be used in this translation", - "type": "string" - }, - "i18n/tag" : { - "description": "[optional]\nWhich tag to render, default is \"span\"", - "type": "string" - }, - "i18n/places": { - "description": "[optional after v8.14]\nWill be removed in the next major version, use the slot syntax instead\n\nhttp://kazupon.github.io/vue-i18n/guide/interpolation.html#slots-syntax-usage", - "type": "array|object" - }, - "i18n-n/value" : { - "description": "[required]\nNumber to be used in formatting", - "type": "number" - }, - "i18n-n/format": { - "description": "[optional]\nNumber format name or object with explicit format options", - "type": "string|object" - }, - "i18n-n/locale" : { - "description": "[optional]\nLocale to be used in this translation", - "type": "string" - }, - "i18n-n/tag" : { - "description": "[optional]\nWhich tag to render, default is `span`", - "type": "string" - } -} diff --git a/node_modules/vue-i18n/vetur/tags.json b/node_modules/vue-i18n/vetur/tags.json deleted file mode 100644 index f6f4222..0000000 --- a/node_modules/vue-i18n/vetur/tags.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "i18n": { - "attributes": [ - "path", - "locale", - "tag", - "places" - ], - "description": "This is a functional component that can be used when HTML interpolation is needed.\n\nhttp://kazupon.github.io/vue-i18n/guide/interpolation.html#basic-usage" - }, - "i18n-n": { - "attributes": [ - "value", - "format", - "locale", - "tag" - ], - "description": "This functional component provides a way to use HTML interpolation in pair with number formatting.\n\nhttp://kazupon.github.io/vue-i18n/guide/number.html#custom-formatting" - } -} diff --git a/package-lock.json b/package-lock.json index 08f3600..8b0e1bc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,13 +1,31 @@ { - "name": "uView", + "name": "zyplayer", "version": "1.0.0", "lockfileVersion": 1, "requires": true, "dependencies": { - "vue-i18n": { - "version": "8.20.0", - "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-8.20.0.tgz", - "integrity": "sha512-ZiAOoeR4d/JtKpbjipx3I80ey7cYG1ki5gQ7HwzWm4YFio9brA15BEYHjalEoBaEfzF5OBEZP+Y2MvAaWnyXXg==" + "axios": { + "version": "0.21.0", + "resolved": "https://registry.npm.taobao.org/axios/download/axios-0.21.0.tgz", + "integrity": "sha1-Jt8IiAOiNQ3/LCf5b++Z/klEKso=", + "requires": { + "follow-redirects": "^1.10.0" + } + }, + "fast-xml-parser": { + "version": "3.17.4", + "resolved": "https://registry.npm.taobao.org/fast-xml-parser/download/fast-xml-parser-3.17.4.tgz", + "integrity": "sha1-1mhJX7Pku895cPPCSsABnYLnZHc=" + }, + "follow-redirects": { + "version": "1.13.0", + "resolved": "https://registry.npm.taobao.org/follow-redirects/download/follow-redirects-1.13.0.tgz?cache=0&sync_timestamp=1597057976909&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffollow-redirects%2Fdownload%2Ffollow-redirects-1.13.0.tgz", + "integrity": "sha1-tC6Nk6Kn7qXtiGM2dtZZe8jjhNs=" + }, + "uview-ui": { + "version": "1.8.1", + "resolved": "https://registry.npm.taobao.org/uview-ui/download/uview-ui-1.8.1.tgz", + "integrity": "sha1-HVeMmx2fVsTdtIXFgP4669pFTyQ=" } } } diff --git a/package.json b/package.json index 58e7ac8..12d4b26 100644 --- a/package.json +++ b/package.json @@ -1,23 +1,18 @@ { - "name": "uView", + "name": "zyplayer", "version": "1.0.0", - "description": "

    \r \"logo\"\r

    \r

    uView

    \r

    多平台快速开发的UI框架

    ", + "description": "", "main": "main.js", + "dependencies": { + "axios": "^0.21.0", + "fast-xml-parser": "^3.17.4", + "uview-ui": "^1.8.1" + }, + "devDependencies": {}, "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, - "repository": { - "type": "git", - "url": "git+https://github.com/YanxinNet/uView.git" - }, "keywords": [], "author": "", - "license": "ISC", - "bugs": { - "url": "https://github.com/YanxinNet/uView/issues" - }, - "homepage": "https://github.com/YanxinNet/uView#readme", - "dependencies": { - "vue-i18n": "^8.20.0" - } + "license": "ISC" } diff --git a/pages.json b/pages.json index 048f7ee..b6f1591 100644 --- a/pages.json +++ b/pages.json @@ -1,920 +1,43 @@ { - "easycom": { - "^u-(.*)": "@/uview-ui/components/u-$1/u-$1.vue" - }, - // "condition": { //模式配置,仅开发期间生效 - // "current": 0, //当前激活的模式(list 的索引项) - // "list": [{ - // "name": "test", //模式名称 - // "path": "pages/componentsC/test/index", //启动页面,必选 - // "query": "uuid=c4bba940-f69e-11ea-a419-6bafda9d095e&__id__=1" //启动参数,在页面的onLoad函数里面得到 - // }] - // }, + "easycom": { + "^u-(.*)": "uview-ui/components/u-$1/u-$1.vue" + }, "pages": [ - // 演示-组件 { - "path": "pages/example/components", + "path": "pages/film/film", "style": { - "navigationBarTitleText": "组件" + "navigationBarTitleText": "首页" } }, - // avatarCropper-头像裁剪 - { - "path": "uview-ui/components/u-avatar-cropper/u-avatar-cropper", - "style": { - "navigationBarTitleText": "头像裁剪", - "navigationBarBackgroundColor": "#000000" - } - }, - // 演示-工具 - { - "path": "pages/example/js", - "style": { - "navigationBarTitleText": "工具" - } - }, - // 演示-模板 - { - "path": "pages/example/template", - "style": { - "navigationBarTitleText": "模板" - } - }, - // fullScreen-压窗屏 - { - "path": "uview-ui/components/u-full-screen/u-full-screen", - "style": { - "navigationStyle": "custom", - "app-plus": { - "animationType": "fade-in", - "background": "transparent", - "backgroundColor": "rgba(0,0,0,0)", - "popGesture": "none" - } - } - }, - { - "path" : "pages/film/film", - "style" : - { - "navigationBarTitleText": "首页", - "enablePullDownRefresh": false - } - - }, - { - "path" : "pages/detail/detail", - "style" : - { - "navigationStyle": "custom", - "enablePullDownRefresh": false - } - - } - ,{ - "path" : "pages/player/player", - "style" : - { - "navigationBarTitleText": "", - "enablePullDownRefresh": false - } - - } - ,{ - "path" : "pages/star/star", - "style" : - { - "navigationBarTitleText": "收藏", - "enablePullDownRefresh": false - } - - } - ,{ - "path" : "pages/me/me", - "style" : - { - "navigationBarTitleText": "我的", - "enablePullDownRefresh": false - } - - } - ], - "subPackages": [ - { - "root": "pages/componentsC", - "pages": [ - // test-测试 - { - "path": "test/index", - "style": { - "navigationBarTitleText": "Test" - // "navigationStyle": "custom" ,// 隐藏系统导航栏 - // "navigationBarTextStyle": "white" // 状态栏字体为白色 - } - }, - // gap-间隔槽 - { - "path": "gap/index", - "style": { - "navigationBarTitleText": "gap-间隔槽" - } - }, - // subsection分段器 - { - "path": "subsection/index", - "style": { - "navigationBarTitleText": "subsection-分段器" - } - }, - // section 查看更多 - { - "path": "section/index", - "style": { - "navigationBarTitleText": "section-查看更多" - } - }, - // link链接 - { - "path": "link/index", - "style": { - "navigationBarTitleText": "link-链接" - } - }, - // mask遮罩层 - { - "path": "mask/index", - "style": { - "navigationBarTitleText": "mask-遮罩层" - } - }, - // countTo数字滚动 - { - "path": "countTo/index", - "style": { - "navigationBarTitleText": "countTo-数字滚动" - } - }, - // color颜色 - { - "path": "color/index", - "style": { - "navigationBarTitleText": "color-颜色" - } - }, - // countDown倒计时 - { - "path": "countDown/index", - "style": { - "navigationBarTitleText": "countDown-倒计时" - } - }, - // progress进度条 - { - "path": "progress/index", - "style": { - "navigationBarTitleText": "progress-进度条" - } - }, - // alertTips警告提示 - { - "path": "alertTips/index", - "style": { - "navigationBarTitleText": "alertTips-警告提示" - } - }, - // badge 徽标数 - { - "path": "badge/index", - "style": { - "navigationBarTitleText": "badge-徽标数" - } - }, - // button按钮 - { - "path": "button/index", - "style": { - "navigationBarTitleText": "button-按钮" - } - }, - // collapse折叠面板 - { - "path": "collapse/index", - "style": { - "navigationBarTitleText": "collapse-折叠面板" - } - }, - // actionSheet操作菜单 - { - "path": "actionSheet/index", - "style": { - "navigationBarTitleText": "actionSheet-操作菜单" - } - }, - // messageInput验证码输入 - { - "path": "messageInput/index", - "style": { - "navigationBarTitleText": "messageInput-验证码输入" - } - }, - // popup弹窗 - { - "path": "popup/index", - "style": { - "navigationBarTitleText": "popup-弹窗" - } - }, - // listCell - { - "path": "cell/index", - "style": { - "navigationBarTitleText": "listCell-列表" - } - }, - // numberBox数字输入框 - { - "path": "numberBox/index", - "style": { - "navigationBarTitleText": "numberBox-步进器" - } - }, - // grid宫格布局 - { - "path": "grid/index", - "style": { - "navigationBarTitleText": "grid-宫格布局" - } - }, - // layout栅格布局 - { - "path": "layout/index", - "style": { - "navigationBarTitleText": "layout-栅格布局" - } - }, - // 加载更多 - { - "path": "loadmore/index", - "style": { - "navigationBarTitleText": "loadmore-加载更多" - } - } - ] - }, - { - "root": "pages/template", - "pages": [ - // wxCenter 仿微信个人中心 - { - "path": "wxCenter/index", - "style": { - "navigationBarTitleText": "wxCenter 仿微信个人中心", - "navigationStyle": "custom" - } - }, - // keyboardPay 自定义键盘支付 - { - "path": "keyboardPay/index", - "style": { - "navigationBarTitleText": "keyboardPay 自定义键盘支付" - } - }, - // douyin 仿抖音 - // { - // "path": "douyin/index", - // "style": { - // "navigationBarTitleText": "douyin 仿抖音" - // } - // }, - // mallMenu商城分类 - { - "path": "mallMenu/index2", - "style": { - "navigationBarTitleText": "mallMenu-商城分类" - } - }, - // mallMenu商城分类 - { - "path": "mallMenu/index1", - "style": { - "navigationBarTitleText": "mallMenu-商城分类" - } - }, - // coupon优惠券 - { - "path": "coupon/index", - "style": { - "navigationBarTitleText": "coupon-优惠券" - } - }, - { - "path": "login/index", - "style": { - "navigationBarTitleText": "美团登录" - } - }, - // 城市选择 - { - "path": "citySelect/index", - "style": { - "navigationBarTitleText": "城市选择" - } - }, - // SubmitBar提交订单栏 - { - "path": "submitBar/index", - "style": { - "navigationBarTitleText": "提交订单栏" - } - }, - // comment评论 - { - "path": "comment/index", - "style": { - "navigationBarTitleText": "评论" - } - }, - // comment评论详情 - { - "path": "comment/reply", - "style": { - "navigationBarTitleText": "评论详情" - } - }, - // order订单 - { - "path": "order/index", - "style": { - "navigationBarTitleText": "订单" - } - }, - // login登录获取验证码 - { - "path": "login/code", - "style": { - "navigationBarTitleText": "登录获取验证码" - } - }, - // address用户地址 - { - "path": "address/index", - "style": { - "navigationBarTitleText": "用户地址" - } - }, - // address添加用户地址 - { - "path": "address/addSite", - "style": { - "navigationBarTitleText": "添加用户地址" - } - } - ] - }, - { - "root": "pages/library", - "pages": [ - // debounce-节流防抖 - { - "path": "debounce/index", - "style": { - "navigationBarTitleText": "throttle | debounce-节流防抖" - } - }, - // deepClone-对象深度克隆 - { - "path": "deepClone/index", - "style": { - "navigationBarTitleText": "deepClone-对象深度克隆" - } - }, - // deepMerge-对象深度合并 - { - "path": "deepMerge/index", - "style": { - "navigationBarTitleText": "deepMerge-对象深度合并" - } - }, - // getRect-元素节点 - { - "path": "getRect/index", - "style": { - "navigationBarTitleText": "getRect-元素节点" - } - }, - // timeFrom-多久之前 - { - "path": "timeFrom/index", - "style": { - "navigationBarTitleText": "timeFrom-多久之前" - } - }, - // globalData-全局变量 - { - "path": "globalVariable/globalData", - "style": { - "navigationBarTitleText": "globalData-全局变量" - } - }, - // prototype-全局变量 - { - "path": "globalVariable/prototype", - "style": { - "navigationBarTitleText": "prototype-全局变量" - } - }, - // vuex-全局变量 - { - "path": "globalVariable/vuex", - "style": { - "navigationBarTitleText": "vuex-全局变量" - } - }, - // globalVariable-全局变量 - { - "path": "globalVariable/index", - "style": { - "navigationBarTitleText": "globalVariable-全局变量" - } - }, - // http-请求 - { - "path": "http/index", - "style": { - "navigationBarTitleText": "http-请求" - } - }, - // test-规则验证 - { - "path": "test/index", - "style": { - "navigationBarTitleText": "test-规则验证" - } - }, - // mpShare-小程序分享 - { - "path": "mpShare/index", - "style": { - "navigationBarTitleText": "mpShare-小程序分享" - } - }, - // color-JS调用颜色 - { - "path": "color/index", - "style": { - "navigationBarTitleText": "color-JS调用颜色" - } - }, - // trim-去除空格 - { - "path": "trim/index", - "style": { - "navigationBarTitleText": "trim-去除空格" - } - }, - // random-随机数生成 - { - "path": "random/index", - "style": { - "navigationBarTitleText": "random-随机数生成" - } - }, - // md5加密 - { - "path": "md5/index", - "style": { - "navigationBarTitleText": "md5-加密" - } - }, - // colorSwitch颜色转换 - { - "path": "colorSwitch/index", - "style": { - "navigationBarTitleText": "colorSwitch-颜色转换" - } - }, - // randomArray数组乱序 - { - "path": "randomArray/index", - "style": { - "navigationBarTitleText": "randomArray-数组乱序" - } - }, - // guid全局唯一标识符 - { - "path": "guid/index", - "style": { - "navigationBarTitleText": "guid-全局唯一标识符" - } - }, - // timeFormat时间格式化 - { - "path": "timeFormat/index", - "style": { - "navigationBarTitleText": "timeFormat-时间格式化" - } - }, // route-路由 - { - "path": "route/index", - "style": { - "navigationBarTitleText": "route-路由" - } - }, - // route-路由跳转 - { - "path": "route/routeTo", - "style": { - "navigationBarTitleText": "route-路由跳转" - } - }, - // queryParams-对象转URL参数 - { - "path": "queryParams/index", - "style": { - "navigationBarTitleText": "queryParams-对象转URL参数" - } - } - ] - }, - { - "root": "pages/componentsA", - "pages": [ - // parse-富文本解析器 - { - "path": "parse/index", - "style": { - "navigationBarTitleText": "parse-富文本解析器" - } - }, - // backTop-返回顶部 - { - "path": "backTop/index", - "style": { - "navigationBarTitleText": "backTop-返回顶部" - } - }, - // calendar-日历 - { - "path": "calendar/index", - "style": { - "navigationBarTitleText": "calendar-日历" - } - }, - // form-表单 - { - "path": "form/index", - "style": { - "navigationBarTitleText": "form-表单" - } - }, - // select-列选择器 - { - "path": "select/index", - "style": { - "navigationBarTitleText": "select-列选择器" - } - }, - // slider-滑动选择器 - { - "path": "slider/index", - "style": { - "navigationBarTitleText": "slider-滑动选择器" - } - }, - // fullScreen-压窗屏 - { - "path": "fullScreen/index", - "style": { - "navigationBarTitleText": "fullScreen-压窗屏" - } - }, - // navbar-自定义导航栏 - { - "path": "navbar/index", - "style": { - // "navigationBarTitleText": "navbar-自定义导航栏", - "navigationStyle": "custom", // 隐藏系统导航栏 - "navigationBarTextStyle": "white" // 状态栏字体为白色 - } - }, - // field-输入框 - { - "path": "field/index", - "style": { - "navigationBarTitleText": "field-输入框" - } - }, - // modal-模态框 - { - "path": "modal/index", - "style": { - "navigationBarTitleText": "modal-模态框" - } - }, - // indexList索引列表 - { - "path": "indexList/index", - "style": { - "navigationBarTitleText": "indexList-索引列表" - } - }, - // empty内容为空 - { - "path": "empty/index", - "style": { - "navigationBarTitleText": "empty-内容为空" - } - }, - // avatarCropper-头像裁剪 - { - "path": "avatarCropper/index", - "style": { - "navigationBarTitleText": "avatarCropper-头像裁剪" - } - }, // noNetwork没有网络 - { - "path": "noNetwork/index", - "style": { - "navigationBarTitleText": "noNetwork-没有网络" - } - }, // icon字体图标 - { - "path": "icon/index", - "style": { - "navigationBarTitleText": "icon-字体图标" - } - }, // avatar-用户头像展示 - { - "path": "avatar/index", - "style": { - "navigationBarTitleText": "avatar-用户头像展示" - } - }, // keyboard键盘 - { - "path": "keyboard/index", - "style": { - "navigationBarTitleText": "keyboard-键盘" - } - }, // 图片懒加载 - { - "path": "lazyLoad/index", - "style": { - "navigationBarTitleText": "lazyLoad-懒加载" - } - }, - // tabs切换 - { - "path": "tabs/index", - "style": { - "navigationBarTitleText": "Tabs-切换" - } - }, - // tag标签 - { - "path": "tag/index", - "style": { - "navigationBarTitleText": "tag-标签" - } - }, - // timeLine时间轴 - { - "path": "timeLine/index", - "style": { - "navigationBarTitleText": "timeLine-时间轴" - } - }, - // toast轻提示 - { - "path": "toast/index", - "style": { - "navigationBarTitleText": "toast-轻提示" - } - }, - // topTips消息提示 - { - "path": "topTips/index", - "style": { - "navigationBarTitleText": "topTips-消息提示" - } - }, - // Code-验证码倒计时 - { - "path": "verificationCode/index", - "style": { - "navigationBarTitleText": "Code-验证码倒计时" - } - } - ] - }, - { - "root": "pages/componentsB", - "pages": [ - // dropdown-下拉菜单 - { - "path": "dropdown/index", - "style": { - "navigationBarTitleText": "dropdown-下拉菜单" - } - }, - // tabbar-底部导航栏 - { - "path": "tabbar/index", - "style": { - "navigationBarTitleText": "tabbar-底部导航栏" - } - }, - // line-线条 - { - "path": "line/index", - "style": { - "navigationBarTitleText": "line-线条" - } - }, - // image-图片 - { - "path": "image/index", - "style": { - "navigationBarTitleText": "image-图片" - } - }, - // card-卡片 - { - "path": "card/index", - "style": { - "navigationBarTitleText": "card-卡片" - } - }, - // divider-分割线 - { - "path": "divider/index", - "style": { - "navigationBarTitleText": "divider-分割线" - } - }, - // picker选择器 - { - "path": "picker/index", - "style": { - "navigationBarTitleText": "picker-选择器" - } - }, // noticeBar通告栏 - { - "path": "noticeBar/index", - "style": { - "navigationBarTitleText": "noticeBar-通告栏" - } - }, - // checkbox-复选框 - { - "path": "checkbox/index", - "style": { - "navigationBarTitleText": "checkbox-复选框" - } - }, - // radio-单选框 - { - "path": "radio/index", - "style": { - "navigationBarTitleText": "radio-单选框" - } - }, - // loading-加载动画 - { - "path": "loading/index", - "style": { - "navigationBarTitleText": "loading-加载动画" - } - }, - // switch-开关选择器 - { - "path": "switch/index", - "style": { - "navigationBarTitleText": "switch-开关选择器" - } - }, - // 骨架屏 - { - "path": "skeleton/index", - "style": { - "navigationBarTitleText": "skeleton-骨架屏" - } - }, // upload上传 - { - "path": "upload/index", - "style": { - "navigationBarTitleText": "upload-上传" - } - }, - // waterfall瀑布流 - // #ifndef MP-TOUTIAO - { - "path": "waterfall/index", - "style": { - "navigationBarTitleText": "waterfall-瀑布流" - } - }, - // #endif - // table表格 - { - "path": "table/index", - "style": { - "navigationBarTitleText": "table-表格" - } - }, - // rate评分 - { - "path": "rate/index", - "style": { - "navigationBarTitleText": "rate-评分" - } - }, - // readMore显示更多 - { - "path": "readMore/index", - "style": { - "navigationBarTitleText": "readMore-查看更多" - } - }, - // search搜索框 - { - "path": "search/index", - "style": { - "navigationBarTitleText": "search-搜索框" - } - }, - // steps步骤条 - { - "path": "steps/index", - "style": { - "navigationBarTitleText": "steps-步骤条" - } - }, - // sticky吸顶 - { - "path": "sticky/index", - "style": { - "navigationBarTitleText": "sticky-吸顶" - } - }, - // swiper轮播图 - { - "path": "swiper/index", - "style": { - "navigationBarTitleText": "swiper-轮播图" - } - }, - // swipeAction-左滑删除 - { - "path": "swipeAction/index", - "style": { - "navigationBarTitleText": "swipeAction-左滑删除" - } - } - ] - } + { + "path": "pages/star/star", + "style": { + "navigationBarTitleText": "收藏" + } + }, + { + "path": "pages/me/me", + "style": { + "navigationBarTitleText": "我" + } + }, + { + "path": "pages/detail/detail", + "style": { + "navigationStyle": "custom" + } + }, + { + "path": "pages/play/play", + "style": { + "navigationBarTitleText": "播放" + } + } ], - "preloadRule": { - "pages/example/components": { - "network": "all", - "packages": ["pages/componentsA", "pages/componentsB", "pages/componentsC"] - } - }, "globalStyle": { "navigationBarTextStyle": "black", - "navigationBarTitleText": "uView", - "navigationBarBackgroundColor": "#FFFFFF", - "backgroundColor": "#FFFFFF" - }, - "tabBar": { - "color": "#909399", - "selectedColor": "#303133", - "backgroundColor": "#FFFFFF", - "borderStyle": "black", - "list": [ - { - "pagePath": "pages/film/film", - "iconPath": "static/uview/example/component.png", - "selectedIconPath": "static/uview/example/component_select.png", - "text": "首页" - }, - { - "pagePath": "pages/star/star", - "iconPath": "static/uview/example/component.png", - "selectedIconPath": "static/uview/example/component_select.png", - "text": "收藏" - }, - { - "pagePath": "pages/example/components", - "iconPath": "static/uview/example/component.png", - "selectedIconPath": "static/uview/example/component_select.png", - "text": "组件" - }, - { - "pagePath": "pages/example/js", - "iconPath": "static/uview/example/js.png", - "selectedIconPath": "static/uview/example/js_select.png", - "text": "工具" - } - ] + "navigationBarTitleText": "ZY Player", + "navigationBarBackgroundColor": "#FFFFFF", + "backgroundColor": "#FFFFFF" } } diff --git a/pages/componentsA/avatar/index.vue b/pages/componentsA/avatar/index.vue deleted file mode 100644 index 2689091..0000000 --- a/pages/componentsA/avatar/index.vue +++ /dev/null @@ -1,90 +0,0 @@ - - - - - diff --git a/pages/componentsA/avatarCropper/index.vue b/pages/componentsA/avatarCropper/index.vue deleted file mode 100644 index b98210e..0000000 --- a/pages/componentsA/avatarCropper/index.vue +++ /dev/null @@ -1,110 +0,0 @@ - - - - - diff --git a/pages/componentsA/backTop/index.vue b/pages/componentsA/backTop/index.vue deleted file mode 100644 index 64b115b..0000000 --- a/pages/componentsA/backTop/index.vue +++ /dev/null @@ -1,105 +0,0 @@ - - - - - diff --git a/pages/componentsA/calendar/index.vue b/pages/componentsA/calendar/index.vue deleted file mode 100644 index e95227f..0000000 --- a/pages/componentsA/calendar/index.vue +++ /dev/null @@ -1,111 +0,0 @@ - - - - - diff --git a/pages/componentsA/empty/index.vue b/pages/componentsA/empty/index.vue deleted file mode 100644 index 8b9d42c..0000000 --- a/pages/componentsA/empty/index.vue +++ /dev/null @@ -1,115 +0,0 @@ - - - - - diff --git a/pages/componentsA/field/index.vue b/pages/componentsA/field/index.vue deleted file mode 100644 index 33781e8..0000000 --- a/pages/componentsA/field/index.vue +++ /dev/null @@ -1,103 +0,0 @@ - - - - - diff --git a/pages/componentsA/form/index.vue b/pages/componentsA/form/index.vue deleted file mode 100644 index 6288a55..0000000 --- a/pages/componentsA/form/index.vue +++ /dev/null @@ -1,454 +0,0 @@ - - - - - diff --git a/pages/componentsA/fullScreen/index.vue b/pages/componentsA/fullScreen/index.vue deleted file mode 100644 index 244afc0..0000000 --- a/pages/componentsA/fullScreen/index.vue +++ /dev/null @@ -1,49 +0,0 @@ - - - - - diff --git a/pages/componentsA/icon/index.vue b/pages/componentsA/icon/index.vue deleted file mode 100644 index 5a65f08..0000000 --- a/pages/componentsA/icon/index.vue +++ /dev/null @@ -1,652 +0,0 @@ - - - - - diff --git a/pages/componentsA/indexList/index.vue b/pages/componentsA/indexList/index.vue deleted file mode 100644 index 18c1f25..0000000 --- a/pages/componentsA/indexList/index.vue +++ /dev/null @@ -1,43 +0,0 @@ - - - - - diff --git a/pages/componentsA/keyboard/index.vue b/pages/componentsA/keyboard/index.vue deleted file mode 100644 index e82b5a6..0000000 --- a/pages/componentsA/keyboard/index.vue +++ /dev/null @@ -1,113 +0,0 @@ - - - - - diff --git a/pages/componentsA/lazyLoad/index.vue b/pages/componentsA/lazyLoad/index.vue deleted file mode 100644 index bed40e5..0000000 --- a/pages/componentsA/lazyLoad/index.vue +++ /dev/null @@ -1,253 +0,0 @@ - - - - - diff --git a/pages/componentsA/modal/index.vue b/pages/componentsA/modal/index.vue deleted file mode 100644 index 54f0ea7..0000000 --- a/pages/componentsA/modal/index.vue +++ /dev/null @@ -1,91 +0,0 @@ - - - - - diff --git a/pages/componentsA/navbar/index.vue b/pages/componentsA/navbar/index.vue deleted file mode 100644 index 47badd7..0000000 --- a/pages/componentsA/navbar/index.vue +++ /dev/null @@ -1,258 +0,0 @@ - - - - - - diff --git a/pages/componentsA/noNetwork/index.vue b/pages/componentsA/noNetwork/index.vue deleted file mode 100644 index 0b9a49b..0000000 --- a/pages/componentsA/noNetwork/index.vue +++ /dev/null @@ -1,51 +0,0 @@ - - - - - \ No newline at end of file diff --git a/pages/componentsA/parse/index.vue b/pages/componentsA/parse/index.vue deleted file mode 100644 index f93ff4a..0000000 --- a/pages/componentsA/parse/index.vue +++ /dev/null @@ -1,70 +0,0 @@ - - - - - diff --git a/pages/componentsA/select/index.vue b/pages/componentsA/select/index.vue deleted file mode 100644 index 39ad8aa..0000000 --- a/pages/componentsA/select/index.vue +++ /dev/null @@ -1,211 +0,0 @@ - - - - - diff --git a/pages/componentsA/slider/index.vue b/pages/componentsA/slider/index.vue deleted file mode 100644 index 4daf5e0..0000000 --- a/pages/componentsA/slider/index.vue +++ /dev/null @@ -1,127 +0,0 @@ - - - - - diff --git a/pages/componentsA/tabs/index.vue b/pages/componentsA/tabs/index.vue deleted file mode 100644 index f702ee5..0000000 --- a/pages/componentsA/tabs/index.vue +++ /dev/null @@ -1,147 +0,0 @@ - - - - - diff --git a/pages/componentsA/tag/index.vue b/pages/componentsA/tag/index.vue deleted file mode 100644 index d23b90f..0000000 --- a/pages/componentsA/tag/index.vue +++ /dev/null @@ -1,91 +0,0 @@ - - - - - diff --git a/pages/componentsA/test/index.vue b/pages/componentsA/test/index.vue deleted file mode 100644 index 0748679..0000000 --- a/pages/componentsA/test/index.vue +++ /dev/null @@ -1,90 +0,0 @@ - - - diff --git a/pages/componentsA/timeLine/index.vue b/pages/componentsA/timeLine/index.vue deleted file mode 100644 index e8435b8..0000000 --- a/pages/componentsA/timeLine/index.vue +++ /dev/null @@ -1,144 +0,0 @@ - - - - - diff --git a/pages/componentsA/toast/index.vue b/pages/componentsA/toast/index.vue deleted file mode 100644 index d25c068..0000000 --- a/pages/componentsA/toast/index.vue +++ /dev/null @@ -1,83 +0,0 @@ - - - - - diff --git a/pages/componentsA/topTips/index.vue b/pages/componentsA/topTips/index.vue deleted file mode 100644 index 0b52409..0000000 --- a/pages/componentsA/topTips/index.vue +++ /dev/null @@ -1,57 +0,0 @@ - - - - - \ No newline at end of file diff --git a/pages/componentsA/verificationCode/index.vue b/pages/componentsA/verificationCode/index.vue deleted file mode 100644 index 01a57ed..0000000 --- a/pages/componentsA/verificationCode/index.vue +++ /dev/null @@ -1,98 +0,0 @@ - - - - - diff --git a/pages/componentsB/card/index.vue b/pages/componentsB/card/index.vue deleted file mode 100644 index 731a5a4..0000000 --- a/pages/componentsB/card/index.vue +++ /dev/null @@ -1,106 +0,0 @@ - - - - - diff --git a/pages/componentsB/checkbox/index.vue b/pages/componentsB/checkbox/index.vue deleted file mode 100644 index 283ba76..0000000 --- a/pages/componentsB/checkbox/index.vue +++ /dev/null @@ -1,161 +0,0 @@ - - - - - diff --git a/pages/componentsB/divider/index.vue b/pages/componentsB/divider/index.vue deleted file mode 100644 index 55a9292..0000000 --- a/pages/componentsB/divider/index.vue +++ /dev/null @@ -1,81 +0,0 @@ - - - - - diff --git a/pages/componentsB/dropdown/index.vue b/pages/componentsB/dropdown/index.vue deleted file mode 100644 index 68c6552..0000000 --- a/pages/componentsB/dropdown/index.vue +++ /dev/null @@ -1,167 +0,0 @@ - - - - - diff --git a/pages/componentsB/image/index.vue b/pages/componentsB/image/index.vue deleted file mode 100644 index 82f620b..0000000 --- a/pages/componentsB/image/index.vue +++ /dev/null @@ -1,96 +0,0 @@ - - - - - diff --git a/pages/componentsB/line/index.vue b/pages/componentsB/line/index.vue deleted file mode 100644 index 9d54f54..0000000 --- a/pages/componentsB/line/index.vue +++ /dev/null @@ -1,68 +0,0 @@ - - - - - diff --git a/pages/componentsB/loading/index.vue b/pages/componentsB/loading/index.vue deleted file mode 100644 index 42bc909..0000000 --- a/pages/componentsB/loading/index.vue +++ /dev/null @@ -1,77 +0,0 @@ - - - - - diff --git a/pages/componentsB/noticeBar/index.vue b/pages/componentsB/noticeBar/index.vue deleted file mode 100644 index 018074d..0000000 --- a/pages/componentsB/noticeBar/index.vue +++ /dev/null @@ -1,144 +0,0 @@ - - - - - diff --git a/pages/componentsB/picker/index.vue b/pages/componentsB/picker/index.vue deleted file mode 100644 index 34b0bd0..0000000 --- a/pages/componentsB/picker/index.vue +++ /dev/null @@ -1,199 +0,0 @@ - - - - - diff --git a/pages/componentsB/radio/index.vue b/pages/componentsB/radio/index.vue deleted file mode 100644 index d72b12c..0000000 --- a/pages/componentsB/radio/index.vue +++ /dev/null @@ -1,142 +0,0 @@ - - - - - diff --git a/pages/componentsB/rate/index.vue b/pages/componentsB/rate/index.vue deleted file mode 100644 index 16794a6..0000000 --- a/pages/componentsB/rate/index.vue +++ /dev/null @@ -1,123 +0,0 @@ - - - - - diff --git a/pages/componentsB/readMore/index.vue b/pages/componentsB/readMore/index.vue deleted file mode 100644 index 3003e8f..0000000 --- a/pages/componentsB/readMore/index.vue +++ /dev/null @@ -1,67 +0,0 @@ - - - - - \ No newline at end of file diff --git a/pages/componentsB/search/index.vue b/pages/componentsB/search/index.vue deleted file mode 100644 index 0d08818..0000000 --- a/pages/componentsB/search/index.vue +++ /dev/null @@ -1,96 +0,0 @@ - - - - - diff --git a/pages/componentsB/skeleton/index.vue b/pages/componentsB/skeleton/index.vue deleted file mode 100644 index fbd8146..0000000 --- a/pages/componentsB/skeleton/index.vue +++ /dev/null @@ -1,128 +0,0 @@ - - - - - diff --git a/pages/componentsB/steps/index.vue b/pages/componentsB/steps/index.vue deleted file mode 100644 index e14f619..0000000 --- a/pages/componentsB/steps/index.vue +++ /dev/null @@ -1,77 +0,0 @@ - - - - - diff --git a/pages/componentsB/sticky/index.vue b/pages/componentsB/sticky/index.vue deleted file mode 100644 index ccd9931..0000000 --- a/pages/componentsB/sticky/index.vue +++ /dev/null @@ -1,87 +0,0 @@ - - - - - diff --git a/pages/componentsB/swipeAction/index.vue b/pages/componentsB/swipeAction/index.vue deleted file mode 100644 index 9f7b7d0..0000000 --- a/pages/componentsB/swipeAction/index.vue +++ /dev/null @@ -1,153 +0,0 @@ - - - - - diff --git a/pages/componentsB/swiper/index.vue b/pages/componentsB/swiper/index.vue deleted file mode 100644 index 7d87eba..0000000 --- a/pages/componentsB/swiper/index.vue +++ /dev/null @@ -1,89 +0,0 @@ - - - - - diff --git a/pages/componentsB/switch/index.vue b/pages/componentsB/switch/index.vue deleted file mode 100644 index 3605997..0000000 --- a/pages/componentsB/switch/index.vue +++ /dev/null @@ -1,113 +0,0 @@ - - - - - diff --git a/pages/componentsB/tabbar/index.vue b/pages/componentsB/tabbar/index.vue deleted file mode 100644 index a160853..0000000 --- a/pages/componentsB/tabbar/index.vue +++ /dev/null @@ -1,133 +0,0 @@ - - - - - diff --git a/pages/componentsB/table/index.vue b/pages/componentsB/table/index.vue deleted file mode 100644 index 382c27a..0000000 --- a/pages/componentsB/table/index.vue +++ /dev/null @@ -1,83 +0,0 @@ - - - - - diff --git a/pages/componentsB/upload/index.vue b/pages/componentsB/upload/index.vue deleted file mode 100644 index ae74a5f..0000000 --- a/pages/componentsB/upload/index.vue +++ /dev/null @@ -1,224 +0,0 @@ - - - - - diff --git a/pages/componentsB/waterfall/index.vue b/pages/componentsB/waterfall/index.vue deleted file mode 100644 index e7d4ce8..0000000 --- a/pages/componentsB/waterfall/index.vue +++ /dev/null @@ -1,224 +0,0 @@ - - - - - - - diff --git a/pages/componentsC/actionSheet/index.vue b/pages/componentsC/actionSheet/index.vue deleted file mode 100644 index ee05688..0000000 --- a/pages/componentsC/actionSheet/index.vue +++ /dev/null @@ -1,82 +0,0 @@ - - - - - diff --git a/pages/componentsC/alertTips/index.vue b/pages/componentsC/alertTips/index.vue deleted file mode 100644 index 3210dd9..0000000 --- a/pages/componentsC/alertTips/index.vue +++ /dev/null @@ -1,90 +0,0 @@ - - - - - diff --git a/pages/componentsC/badge/index.vue b/pages/componentsC/badge/index.vue deleted file mode 100644 index 3f4a545..0000000 --- a/pages/componentsC/badge/index.vue +++ /dev/null @@ -1,83 +0,0 @@ - - - - - diff --git a/pages/componentsC/button/index.vue b/pages/componentsC/button/index.vue deleted file mode 100644 index 52c0801..0000000 --- a/pages/componentsC/button/index.vue +++ /dev/null @@ -1,121 +0,0 @@ - - - - - diff --git a/pages/componentsC/cell/index.vue b/pages/componentsC/cell/index.vue deleted file mode 100644 index 94b9570..0000000 --- a/pages/componentsC/cell/index.vue +++ /dev/null @@ -1,113 +0,0 @@ - - - - - diff --git a/pages/componentsC/circleProgress/index.vue b/pages/componentsC/circleProgress/index.vue deleted file mode 100644 index ed1e7f1..0000000 --- a/pages/componentsC/circleProgress/index.vue +++ /dev/null @@ -1,65 +0,0 @@ - - - - - diff --git a/pages/componentsC/collapse/index.vue b/pages/componentsC/collapse/index.vue deleted file mode 100644 index 15d58e6..0000000 --- a/pages/componentsC/collapse/index.vue +++ /dev/null @@ -1,142 +0,0 @@ - - - - - - - diff --git a/pages/componentsC/color/index.vue b/pages/componentsC/color/index.vue deleted file mode 100644 index 01c9fc0..0000000 --- a/pages/componentsC/color/index.vue +++ /dev/null @@ -1,364 +0,0 @@ - - - - - diff --git a/pages/componentsC/countDown/index.vue b/pages/componentsC/countDown/index.vue deleted file mode 100644 index 45679d4..0000000 --- a/pages/componentsC/countDown/index.vue +++ /dev/null @@ -1,100 +0,0 @@ - - - - - diff --git a/pages/componentsC/countTo/index.vue b/pages/componentsC/countTo/index.vue deleted file mode 100644 index 4f54e8f..0000000 --- a/pages/componentsC/countTo/index.vue +++ /dev/null @@ -1,132 +0,0 @@ - - - - - diff --git a/pages/componentsC/gap/index.vue b/pages/componentsC/gap/index.vue deleted file mode 100644 index 0ba6347..0000000 --- a/pages/componentsC/gap/index.vue +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - diff --git a/pages/componentsC/grid/index.vue b/pages/componentsC/grid/index.vue deleted file mode 100644 index e6046fa..0000000 --- a/pages/componentsC/grid/index.vue +++ /dev/null @@ -1,180 +0,0 @@ - - - - - diff --git a/pages/componentsC/layout/index.vue b/pages/componentsC/layout/index.vue deleted file mode 100644 index 8d05468..0000000 --- a/pages/componentsC/layout/index.vue +++ /dev/null @@ -1,145 +0,0 @@ - - - - - diff --git a/pages/componentsC/link/index.vue b/pages/componentsC/link/index.vue deleted file mode 100644 index bda7e5d..0000000 --- a/pages/componentsC/link/index.vue +++ /dev/null @@ -1,54 +0,0 @@ - - - - - diff --git a/pages/componentsC/loadmore/index.vue b/pages/componentsC/loadmore/index.vue deleted file mode 100644 index 5631429..0000000 --- a/pages/componentsC/loadmore/index.vue +++ /dev/null @@ -1,96 +0,0 @@ - - - - - \ No newline at end of file diff --git a/pages/componentsC/mask/index.vue b/pages/componentsC/mask/index.vue deleted file mode 100644 index 420bb76..0000000 --- a/pages/componentsC/mask/index.vue +++ /dev/null @@ -1,89 +0,0 @@ - - - - - diff --git a/pages/componentsC/messageInput/index.vue b/pages/componentsC/messageInput/index.vue deleted file mode 100644 index 1b7fefd..0000000 --- a/pages/componentsC/messageInput/index.vue +++ /dev/null @@ -1,97 +0,0 @@ - - - - - diff --git a/pages/componentsC/numberBox/index.vue b/pages/componentsC/numberBox/index.vue deleted file mode 100644 index b9cd13c..0000000 --- a/pages/componentsC/numberBox/index.vue +++ /dev/null @@ -1,77 +0,0 @@ - - - - - diff --git a/pages/componentsC/popup/index.vue b/pages/componentsC/popup/index.vue deleted file mode 100644 index fc83892..0000000 --- a/pages/componentsC/popup/index.vue +++ /dev/null @@ -1,103 +0,0 @@ - - - - - diff --git a/pages/componentsC/progress/index.vue b/pages/componentsC/progress/index.vue deleted file mode 100644 index f154bf5..0000000 --- a/pages/componentsC/progress/index.vue +++ /dev/null @@ -1,102 +0,0 @@ - - - - - diff --git a/pages/componentsC/section/index.vue b/pages/componentsC/section/index.vue deleted file mode 100644 index 5054192..0000000 --- a/pages/componentsC/section/index.vue +++ /dev/null @@ -1,71 +0,0 @@ - - - - - diff --git a/pages/componentsC/subsection/index.vue b/pages/componentsC/subsection/index.vue deleted file mode 100644 index 5aa225d..0000000 --- a/pages/componentsC/subsection/index.vue +++ /dev/null @@ -1,88 +0,0 @@ - - - - - diff --git a/pages/componentsC/test/index.vue b/pages/componentsC/test/index.vue deleted file mode 100644 index 33247b0..0000000 --- a/pages/componentsC/test/index.vue +++ /dev/null @@ -1,3 +0,0 @@ - \ No newline at end of file diff --git a/pages/detail/detail.vue b/pages/detail/detail.vue index e57fc5c..f70d60c 100644 --- a/pages/detail/detail.vue +++ b/pages/detail/detail.vue @@ -2,13 +2,46 @@ - - - + + + + + + + + + + + + + 死士死士死士死士死士死士死士死士死士死士死士死士死士死士死士死士死士死士 + + + 日本 + | + 日语 + | + 动作片 + | + 2019 + + + 导演: + + + 演员: + + + 简介: + + + + + @@ -19,30 +52,58 @@ site: '', uuid: '', moreShow: false, - list: [ - { - value: 'star', - label: '收藏' - }, - { - value: 'share', - label: '分享' - } - ] + moreList: [ + { + value: 'star', + label: '收藏' + }, + { + value: 'share', + label: '分享' + } + ], + playShow: false, + playList: [ + { + value: '.m3u8', + label: '第一集', + extra: { + site: 'okzyw', + uuid: '451', + url: 'https://www.baidu.com' + } + } + ] } }, methods: { + BackEvent () { + this.$u.route({ type: 'back' }); + }, moreShowEvent () { - this.moreShow = !this.moreShow - } + this.moreShow = !this.moreShow; + }, + moreConfirm (e) { + const val = e[0].value + if (val === 'share') {} + console.log(e, 'eeee') + }, + playEvent () { + this.playShow = !this.playShow; + }, + playConfirm (e) { + console.log(e, 'eee') + const d = e[0] + const url = `/pages/play/play?site=${d.extra.site}&uuid=${d.extra.uuid}&url=${d.extra.url}` + this.$u.route({url: url}) + } }, onLoad(opt) { - this.site = opt.site - this.uuid = opt.uuid + this.site = opt.site; + this.uuid = opt.uuid; } } - diff --git a/pages/example/components.config.js b/pages/example/components.config.js deleted file mode 100644 index ebc6f09..0000000 --- a/pages/example/components.config.js +++ /dev/null @@ -1,389 +0,0 @@ - -export default [{ - groupName: '基础组件', - groupName_en: 'Basic components', - list: [{ - path: '/pages/componentsC/color/index', - icon: 'color', - title: 'Color 色彩', - title_en: 'Color', - }, { - path: '/pages/componentsA/icon/index', - icon: 'icon', - title: 'Icon 图标', - title_en: 'Icon', - },{ - path: '/pages/componentsB/image/index', - icon: 'image', - title: 'Image 图片', - title_en: 'Image', - }, { - path: '/pages/componentsC/button/index', - icon: 'button', - title: 'Button 按钮', - title_en: 'Button', - }, { - path: '/pages/componentsC/layout/index', - icon: 'layout', - title: 'Layout 布局', - title_en: 'Layout', - }, { - path: '/pages/componentsC/cell/index', - icon: 'cell', - title: 'Cell 单元格', - title_en: 'Cell', - }, { - path: '/pages/componentsC/badge/index', - icon: 'badge', - title: 'Badge 徽标数', - title_en: 'Badge', - }, { - path: '/pages/componentsA/tag/index', - icon: 'tag', - title: 'Tag 标签', - title_en: 'Tag', - }] - }, - { - groupName: '表单组件', - groupName_en: 'Form components', - list: [{ - path: '/pages/componentsA/form/index', - icon: 'form', - title: 'Form 表单', - title_en: 'Form', - }, { - path: '/pages/componentsA/calendar/index', - icon: 'calendar', - title: 'Calendar 日历', - title_en: 'Calendar', - }, { - path: '/pages/componentsA/select/index', - icon: 'select', - title: 'Select 列选择器', - title_en: 'Select', - }, { - path: '/pages/componentsA/keyboard/index', - icon: 'keyboard', - title: 'Keyboard 键盘', - title_en: 'Keyboard', - }, { - path: '/pages/componentsB/picker/index', - icon: 'picker', - title: 'Picker 选择器', - title_en: 'Picker', - }, { - path: '/pages/componentsB/rate/index', - icon: 'rate', - title: 'Rate 评分', - title_en: 'Rate', - }, { - path: '/pages/componentsB/search/index', - icon: 'search', - title: 'Search 搜索', - title_en: 'Search', - }, { - path: '/pages/componentsC/numberBox/index', - icon: 'numberBox', - title: 'NumberBox 步进器', - title_en: 'NumberBox', - }, { - path: '/pages/componentsB/upload/index', - icon: 'upload', - title: 'Upload 上传', - title_en: 'Upload', - }, { - path: '/pages/componentsA/verificationCode/index', - icon: 'verificationCode', - title: 'VerificationCode 验证码倒计时', - title_en: 'VerificationCode', - }, { - path: '/pages/componentsA/field/index', - icon: 'field', - title: 'Field 输入框', - title_en: 'Field', - }, { - path: '/pages/componentsB/checkbox/index', - icon: 'checkbox', - title: 'Checkbox 复选框', - title_en: 'Checkbox', - }, { - path: '/pages/componentsB/radio/index', - icon: 'radio', - title: 'Radio 单选框', - title_en: 'Radio', - }, { - path: '/pages/componentsB/switch/index', - icon: 'switch', - title: 'Switch 开关选择器', - title_en: 'Switch', - }, { - path: '/pages/componentsA/slider/index', - icon: 'slider', - title: 'Slider 滑动选择器', - title_en: 'Slider', - }] - }, { - groupName: '数据组件', - groupName_en: 'Data components', - list: [{ - path: '/pages/componentsC/progress/index', - icon: 'progress', - title: 'Progress 进度条', - title_en: 'Progress', - }, { - path: '/pages/componentsB/table/index', - icon: 'table', - title: 'Table 表格', - title_en: 'Table', - }, { - path: '/pages/componentsC/countDown/index', - icon: 'countDown', - title: 'CountDown 倒计时', - title_en: 'CountDown', - }, { - path: '/pages/componentsC/countTo/index', - icon: 'countTo', - title: 'CountTo 数字滚动', - title_en: 'CountTo', - }] - }, { - groupName: '反馈组件', - groupName_en: 'Feedback components', - list: [{ - path: '/pages/componentsC/actionSheet/index', - icon: 'actionSheet', - title: 'ActionSheet 操作菜单', - title_en: 'ActionSheet', - }, { - path: '/pages/componentsC/alertTips/index', - icon: 'alertTips', - title: 'AlertTips 警告提示', - title_en: 'AlertTips', - }, { - path: '/pages/componentsA/toast/index', - icon: 'toast', - title: 'Toast 消息提示', - title_en: 'Toast', - }, { - path: '/pages/componentsB/noticeBar/index', - icon: 'noticeBar', - title: 'NoticeBar 滚动通知', - title_en: 'NoticeBar', - }, { - path: '/pages/componentsA/topTips/index', - icon: 'topTips', - title: 'TopTips 顶部提示', - title_en: 'TopTips', - }, { - path: '/pages/componentsB/swipeAction/index', - icon: 'swipeAction', - title: 'SwipeAction 滑动单元格', - title_en: 'SwipeAction', - }, { - path: '/pages/componentsC/collapse/index', - icon: 'collapse', - title: 'Collapse 折叠面板', - title_en: 'Collapse', - }, { - path: '/pages/componentsC/popup/index', - icon: 'popup', - title: 'Popup 弹出层', - title_en: 'Popup', - }, { - path: '/pages/componentsA/modal/index', - icon: 'modal', - title: 'Modal 模态框', - title_en: 'Modal', - }, { - path: '/pages/componentsA/fullScreen/index', - icon: 'pressingScreen', - title: 'fullScreen 压窗屏', - title_en: 'fullScreen', - }] - }, { - groupName: '布局组件', - groupName_en: 'Layout components', - list: [{ - path: '/pages/componentsB/line/index', - icon: 'line', - title: 'Line 线条', - title_en: 'Line', - }, { - path: '/pages/componentsB/card/index', - icon: 'card', - title: 'Card 卡片', - title_en: 'Card', - }, { - path: '/pages/componentsC/mask/index', - icon: 'mask', - title: 'Mask 遮罩层', - title_en: 'Mask', - }, - // #ifndef MP-TOUTIAO - { - path: '/pages/componentsA/noNetwork/index', - icon: 'noNetwork', - title: 'NoNetwork 无网络提示', - title_en: 'NoNetwork', - }, - // #endif - { - path: '/pages/componentsC/grid/index', - icon: 'grid', - title: 'Grid 宫格布局', - title_en: 'Grid', - }, { - path: '/pages/componentsB/swiper/index', - icon: 'swiper', - title: 'Swiper 轮播图', - title_en: 'Swiper', - }, { - path: '/pages/componentsA/timeLine/index', - icon: 'timeLine', - title: 'TimeLine 时间轴', - title_en: 'TimeLine', - }, { - path: '/pages/componentsB/skeleton/index', - icon: 'skeleton', - title: 'Skeleton 骨架屏', - title_en: 'Skeleton', - }, { - path: '/pages/componentsB/sticky/index', - icon: 'sticky', - title: 'Sticky 吸顶', - title_en: 'Sticky', - }, - // #ifndef MP-TOUTIAO - { - path: '/pages/componentsB/waterfall/index', - icon: 'waterfall', - title: 'Waterfall 瀑布流', - title_en: 'Waterfall', - }, - // #endif - { - path: '/pages/componentsB/divider/index', - icon: 'divider', - title: 'Divider 分割线', - title_en: 'Divider', - }] - }, { - groupName: '导航组件', - groupName_en: 'Navigation components', - list: [{ - path: '/pages/componentsB/dropdown/index', - icon: 'dropdown', - title: 'Dropdown 下拉菜单', - title_en: 'Dropdown', - },{ - path: '/pages/componentsB/tabbar/index', - icon: 'tabbar', - title: 'Tabbar 底部导航栏', - title_en: 'Tabbar', - },{ - path: '/pages/componentsA/backTop/index', - icon: 'backTop', - title: 'BackTop 返回顶部', - title_en: 'BackTop', - },{ - path: '/pages/componentsA/navbar/index', - icon: 'navbar', - title: 'Navbar 导航栏', - title_en: 'Navbar', - }, { - path: '/pages/componentsA/tabs/index', - icon: 'tabs', - title: 'Tabs 标签', - title_en: 'Tabs', - }, - // #ifndef MP-ALIPAY - { - path: '/pages/template/order/index', - icon: 'tabsSwiper', - title: 'TabsSwiper 全屏选项卡', - title_en: 'TabsSwiper', - }, - // #endif - { - path: '/pages/componentsC/subsection/index', - icon: 'subsection', - title: 'Subsection 分段器', - title_en: 'Subsection', - }, { - path: '/pages/componentsA/indexList/index', - icon: 'indexList', - title: 'IndexList 索引列表', - title_en: 'IndexList', - }, { - path: '/pages/componentsB/steps/index', - icon: 'steps', - title: 'Steps 步骤条', - title_en: 'Steps', - }, { - path: '/pages/componentsA/empty/index', - icon: 'empty', - title: 'Empty 内容为空', - title_en: 'Empty', - }, { - path: '/pages/componentsC/section/index', - icon: 'section', - title: 'Section 查看更多', - title_en: 'Section', - }] - }, { - groupName: '其他组件', - groupName_en: 'Other components', - list: [{ - path: '/pages/componentsA/parse/index', - icon: 'parse', - title: 'Parse 富文本解析器', - title_en: 'Parse', - },{ - path: '/pages/componentsC/messageInput/index', - icon: 'messageInput', - title: 'MessageInput 验证码输入', - title_en: 'MessageInput', - }, { - path: '/pages/componentsA/avatarCropper/index', - icon: 'avatarCropper', - title: 'AvatarCropper 头像裁剪', - title_en: 'AvatarCropper', - }, { - path: '/pages/componentsC/loadmore/index', - icon: 'loadmore', - title: 'Loadmore 加载更多', - title_en: 'Loadmore', - }, { - path: '/pages/componentsB/readMore/index', - icon: 'readMore', - title: 'ReadMore 展开阅读更多', - title_en: 'ReadMore', - }, { - path: '/pages/componentsA/lazyLoad/index', - icon: 'lazyLoad', - title: 'LazyLoad 懒加载', - title_en: 'LazyLoad', - }, { - path: '/pages/componentsC/gap/index', - icon: 'gap', - title: 'Gap 间隔槽', - title_en: 'Gap', - }, { - path: '/pages/componentsA/avatar/index', - icon: 'avatar', - title: 'Avatar 头像', - title_en: 'Avatar', - }, { - path: '/pages/componentsC/link/index', - icon: 'link', - title: 'Link 超链接', - title_en: 'Link', - }, { - path: '/pages/componentsB/loading/index', - icon: 'loading', - title: 'Loading 加载动画', - title_en: 'Loading', - }] - }, -] diff --git a/pages/example/components.vue b/pages/example/components.vue deleted file mode 100644 index c763ee6..0000000 --- a/pages/example/components.vue +++ /dev/null @@ -1,73 +0,0 @@ - - - - - - - diff --git a/pages/example/js.config.js b/pages/example/js.config.js deleted file mode 100644 index 7365cab..0000000 --- a/pages/example/js.config.js +++ /dev/null @@ -1,120 +0,0 @@ -export default [ - { - groupName: '网络', - groupName_en: 'Network', - list: [ - { - path: 'http', - icon: 'http', - title: 'Http 请求', - title_en: 'Http', - } - ] - }, - { - groupName: '全局变量', - groupName_en: 'Global variable', - list: [ - { - path: 'globalVariable', - icon: 'globalVariable', - title: 'GlobalVariable 全局变量', - title_en: 'GlobalVariable', - } - ] - }, - { - groupName: '工具库', - groupName_en: 'Tool library', - list: [ - { - path: 'debounce', - icon: 'debounce', - title: 'Throttle | Debounce 节流防抖', - title_en: 'Throttle | Debounce', - }, - { - path: 'deepMerge', - icon: 'deepMerge', - title: 'DeepMerge 对象深度合并', - title_en: 'DeepMerge', - },{ - path: 'deepClone', - icon: 'deepClone', - title: 'DeepClone 对象深度克隆', - title_en: 'DeepClone', - }, - { - path: 'timeFormat', - icon: 'timeFormat', - title: 'TimeFormat 时间格式化', - title_en: 'TimeFormat', - },{ - path: 'timeFrom', - icon: 'timeFrom', - title: 'TimeFrom 多久之前', - title_en: 'TimeFrom', - },{ - path: 'guid', - icon: 'guid', - title: 'Guid 全局唯一id', - title_en: 'Guid', - },{ - path: 'route', - icon: 'route', - title: 'Route 路由跳转', - title_en: 'Route', - },{ - path: 'randomArray', - icon: 'randomArray', - title: 'RandomArray 数组乱序', - title_en: 'RandomArray', - },{ - path: 'colorSwitch', - icon: 'colorSwitch', - title: 'ColorSwitch 颜色转换', - title_en: 'ColorSwitch', - },{ - path: 'color', - icon: 'color', - title: 'Color 颜色值', - title_en: 'Color', - },{ - path: 'queryParams', - icon: 'queryParams', - title: 'QueryParams 对象转URL参数', - title_en: 'QueryParams', - },{ - path: 'test', - icon: 'test', - title: 'Test 规则校验', - title_en: 'Test', - },{ - path: 'md5', - icon: 'md5', - title: 'Md5 md5加密', - title_en: 'Md5', - },{ - path: 'random', - icon: 'random', - title: 'Random 随机数值', - title_en: 'Random', - },{ - path: 'trim', - icon: 'trim', - title: 'Trim 去除空格', - title_en: 'Trim', - },{ - path: 'getRect', - icon: 'getRect', - title: 'GetRect 节点信息', - title_en: 'GetRect', - },{ - path: 'mpShare', - icon: 'mpShare', - title: 'MpShare 小程序分享', - title_en: 'MpShare', - } - ] - } -] \ No newline at end of file diff --git a/pages/example/js.vue b/pages/example/js.vue deleted file mode 100644 index e9848b8..0000000 --- a/pages/example/js.vue +++ /dev/null @@ -1,69 +0,0 @@ - - - - - - - diff --git a/pages/example/template.config.js b/pages/example/template.config.js deleted file mode 100644 index 9a4bdc1..0000000 --- a/pages/example/template.config.js +++ /dev/null @@ -1,78 +0,0 @@ -export default [ - { - groupName: '部件', - groupName_en: 'Parts', - list: [ - { - path: 'coupon', - icon: 'coupon', - title: 'Coupon 优惠券', - title_en: 'Coupon', - } - ] - }, - { - groupName: '页面', - groupName_en: 'Page', - list: [ - { - path: '/pages/template/wxCenter/index', - icon: 'wxCenter', - title: 'WxCenter 仿微信个人中心', - title_en: 'WxCenter', - }, - // { - // path: '/pages/template/douyin/index', - // icon: 'douyin', - // title: 'Douyin 仿抖音', - // }, - { - path: '/pages/template/keyboardPay/index', - icon: 'keyboardPay', - title: 'KeyboardPay 自定义键盘支付模板', - title_en: 'KeyboardPay', - }, - { - path: '/pages/template/mallMenu/index1', - icon: 'mall_menu_1', - title: 'MallMenu 垂直分类(左右独立)', - title_en: 'MallMenu 1', - },{ - path: '/pages/template/mallMenu/index2', - icon: 'mall_menu_2', - title: 'MallMenu 垂直分类(左右联动)', - title_en: 'MallMenu 2', - },{ - path: 'submitBar', - icon: 'submitBar', - title: 'SubmitBar 提交订单栏', - title_en: 'SubmitBar', - },{ - path: 'comment', - icon: 'comment', - title: 'Comment 评论列表', - title_en: 'Comment', - },{ - path: 'order', - icon: 'order', - title: 'Order 订单列表', - title_en: 'Order', - },{ - path: 'login', - icon: 'login', - title: 'Login 登录界面', - title_en: 'Login', - },{ - path: 'address', - icon: 'address', - title: 'Address 收货地址', - title_en: 'Address', - },{ - path: 'citySelect', - icon: 'citySelect', - title: 'CitySelect 城市选择', - title_en: 'CitySelect', - } - ] - } -] \ No newline at end of file diff --git a/pages/example/template.vue b/pages/example/template.vue deleted file mode 100644 index 8fb9ef9..0000000 --- a/pages/example/template.vue +++ /dev/null @@ -1,69 +0,0 @@ - - - - - - - diff --git a/pages/film/film.vue b/pages/film/film.vue index 3bc9723..81ac12a 100644 --- a/pages/film/film.vue +++ b/pages/film/film.vue @@ -100,7 +100,8 @@ } ], loadStatus: 'loadmore', - scrollTop: 0 + scrollTop: 0, + res: null }; }, methods: { @@ -128,12 +129,16 @@ openDetail (item) { const url = `/pages/detail/detail?site=${this.site}&uuid=${item.id}` this.$u.route({url: url}) - } + }, + getClass () { + console.log('get class') + } }, onPageScroll(e) { this.scrollTop = e.scrollTop; }, onLoad() { + this.getClass(); this.addRandomData(); }, onReachBottom() { diff --git a/pages/index/index.vue b/pages/index/index.vue new file mode 100644 index 0000000..ec0ec26 --- /dev/null +++ b/pages/index/index.vue @@ -0,0 +1,52 @@ + + + + + diff --git a/pages/library/color/index.vue b/pages/library/color/index.vue deleted file mode 100644 index d9faab5..0000000 --- a/pages/library/color/index.vue +++ /dev/null @@ -1,54 +0,0 @@ - - - - - diff --git a/pages/library/colorSwitch/index.vue b/pages/library/colorSwitch/index.vue deleted file mode 100644 index 3ba04f6..0000000 --- a/pages/library/colorSwitch/index.vue +++ /dev/null @@ -1,62 +0,0 @@ - - - - - diff --git a/pages/library/debounce/index.vue b/pages/library/debounce/index.vue deleted file mode 100644 index dbbe447..0000000 --- a/pages/library/debounce/index.vue +++ /dev/null @@ -1,94 +0,0 @@ - - - - - diff --git a/pages/library/deepClone/index.vue b/pages/library/deepClone/index.vue deleted file mode 100644 index 1d639d2..0000000 --- a/pages/library/deepClone/index.vue +++ /dev/null @@ -1,37 +0,0 @@ - - - - - diff --git a/pages/library/deepMerge/index.vue b/pages/library/deepMerge/index.vue deleted file mode 100644 index c967694..0000000 --- a/pages/library/deepMerge/index.vue +++ /dev/null @@ -1,74 +0,0 @@ - - - - - diff --git a/pages/library/getRect/index.vue b/pages/library/getRect/index.vue deleted file mode 100644 index 91d5687..0000000 --- a/pages/library/getRect/index.vue +++ /dev/null @@ -1,98 +0,0 @@ - - - - - diff --git a/pages/library/globalVariable/globalData.vue b/pages/library/globalVariable/globalData.vue deleted file mode 100644 index 8f38d6f..0000000 --- a/pages/library/globalVariable/globalData.vue +++ /dev/null @@ -1,49 +0,0 @@ - - - - - diff --git a/pages/library/globalVariable/index.vue b/pages/library/globalVariable/index.vue deleted file mode 100644 index f9ab949..0000000 --- a/pages/library/globalVariable/index.vue +++ /dev/null @@ -1,82 +0,0 @@ - - - - - diff --git a/pages/library/globalVariable/prototype.vue b/pages/library/globalVariable/prototype.vue deleted file mode 100644 index 27d3248..0000000 --- a/pages/library/globalVariable/prototype.vue +++ /dev/null @@ -1,48 +0,0 @@ - - - - - diff --git a/pages/library/globalVariable/vuex.vue b/pages/library/globalVariable/vuex.vue deleted file mode 100644 index e5c04e9..0000000 --- a/pages/library/globalVariable/vuex.vue +++ /dev/null @@ -1,40 +0,0 @@ - - - - - \ No newline at end of file diff --git a/pages/library/guid/index.vue b/pages/library/guid/index.vue deleted file mode 100644 index 5c536dd..0000000 --- a/pages/library/guid/index.vue +++ /dev/null @@ -1,66 +0,0 @@ - - - - - diff --git a/pages/library/http/index.vue b/pages/library/http/index.vue deleted file mode 100644 index 7933c70..0000000 --- a/pages/library/http/index.vue +++ /dev/null @@ -1,61 +0,0 @@ - - - - - diff --git a/pages/library/md5/index.vue b/pages/library/md5/index.vue deleted file mode 100644 index 07a9401..0000000 --- a/pages/library/md5/index.vue +++ /dev/null @@ -1,46 +0,0 @@ - - - - - diff --git a/pages/library/mpShare/index.vue b/pages/library/mpShare/index.vue deleted file mode 100644 index 9ad826d..0000000 --- a/pages/library/mpShare/index.vue +++ /dev/null @@ -1,19 +0,0 @@ - - - - - diff --git a/pages/library/queryParams/index.vue b/pages/library/queryParams/index.vue deleted file mode 100644 index f9acff0..0000000 --- a/pages/library/queryParams/index.vue +++ /dev/null @@ -1,53 +0,0 @@ - - - - - diff --git a/pages/library/random/index.vue b/pages/library/random/index.vue deleted file mode 100644 index edd4278..0000000 --- a/pages/library/random/index.vue +++ /dev/null @@ -1,60 +0,0 @@ - - - - - diff --git a/pages/library/randomArray/index.vue b/pages/library/randomArray/index.vue deleted file mode 100644 index f1c953d..0000000 --- a/pages/library/randomArray/index.vue +++ /dev/null @@ -1,47 +0,0 @@ - - - - - diff --git a/pages/library/route/index.vue b/pages/library/route/index.vue deleted file mode 100644 index 8cb2d83..0000000 --- a/pages/library/route/index.vue +++ /dev/null @@ -1,86 +0,0 @@ - - - - - diff --git a/pages/library/route/routeTo.vue b/pages/library/route/routeTo.vue deleted file mode 100644 index acccaf3..0000000 --- a/pages/library/route/routeTo.vue +++ /dev/null @@ -1,51 +0,0 @@ - - - - - diff --git a/pages/library/test/index.vue b/pages/library/test/index.vue deleted file mode 100644 index b0e5f41..0000000 --- a/pages/library/test/index.vue +++ /dev/null @@ -1,96 +0,0 @@ - - - - - diff --git a/pages/library/timeFormat/index.vue b/pages/library/timeFormat/index.vue deleted file mode 100644 index 0160911..0000000 --- a/pages/library/timeFormat/index.vue +++ /dev/null @@ -1,58 +0,0 @@ - - - - - diff --git a/pages/library/timeFrom/index.vue b/pages/library/timeFrom/index.vue deleted file mode 100644 index e804c19..0000000 --- a/pages/library/timeFrom/index.vue +++ /dev/null @@ -1,62 +0,0 @@ - - - - - diff --git a/pages/library/trim/index.vue b/pages/library/trim/index.vue deleted file mode 100644 index 5096b8c..0000000 --- a/pages/library/trim/index.vue +++ /dev/null @@ -1,62 +0,0 @@ - - - - - diff --git a/pages/play/play.vue b/pages/play/play.vue new file mode 100644 index 0000000..332679c --- /dev/null +++ b/pages/play/play.vue @@ -0,0 +1,67 @@ + + + + + diff --git a/pages/player/player.vue b/pages/player/player.vue deleted file mode 100644 index 14e8d4c..0000000 --- a/pages/player/player.vue +++ /dev/null @@ -1,22 +0,0 @@ - - - - - diff --git a/pages/template/address/addSite.vue b/pages/template/address/addSite.vue deleted file mode 100644 index c31340e..0000000 --- a/pages/template/address/addSite.vue +++ /dev/null @@ -1,173 +0,0 @@ -