1
jhzh
2026-05-29 bbf6d337c9641c0d1bf2c57f05310e59c104990b
1
19 files modified
293 ■■■■ changed files
.env 2 ●●● patch | view | raw | blame | history
index.html 2 ●●● patch | view | raw | blame | history
relicon.png patch | view | raw | blame | history
src/assets/imgs/logo.png patch | view | raw | blame | history
src/components/Transform/entrust-item/index.vue 17 ●●●●● patch | view | raw | blame | history
src/components/Transform/perpetual-open/index.vue 122 ●●●●● patch | view | raw | blame | history
src/components/Transform/perpetual-position-list/index.vue 2 ●●● patch | view | raw | blame | history
src/config/index.js 6 ●●●● patch | view | raw | blame | history
src/i18n/en.js 12 ●●●●● patch | view | raw | blame | history
src/i18n/zhcn.js 2 ●●●●● patch | view | raw | blame | history
src/views/authentication/index.vue 9 ●●●● patch | view | raw | blame | history
src/views/cryptos/AccountChange/index.vue 2 ●●● patch | view | raw | blame | history
src/views/cryptos/PerpetualContract/orderDetail.vue 31 ●●●● patch | view | raw | blame | history
src/views/cryptos/Recharge/rechargeDetail.vue 2 ●●● patch | view | raw | blame | history
src/views/customerService/index.vue 4 ●●●● patch | view | raw | blame | history
src/views/login/index.vue 13 ●●●● patch | view | raw | blame | history
src/views/my/index.vue 24 ●●●● patch | view | raw | blame | history
src/views/register/index.vue 32 ●●●●● patch | view | raw | blame | history
yarn.lock 11 ●●●● patch | view | raw | blame | history
.env
@@ -1,2 +1,2 @@
VITE_APP__TITLE = "Orion X"
VITE_APP__TITLE = "Bitx"
VUE_APP_THEME = "dark"
index.html
@@ -11,7 +11,7 @@
  <meta name="theme-color" content="#131a2e">
  <meta name="apple-mobile-web-app-status-bar-style" content="#131a2e" />
  <link rel="apple-touch-icon" href="./public/img/App.png">
  <title>Orion X</title>
  <title>Bitx</title>
</head>
<body>
relicon.png

src/assets/imgs/logo.png

src/components/Transform/entrust-item/index.vue
@@ -10,7 +10,7 @@
        </div>
      </div>
      <div class="text-grey font-26 flex flex-col justify-between">
        {{ entrust.create_time_ts ? dayjs(entrust.create_time_ts * 1000).format('YYYY-MM-DD HH:mm:ss') : '--' }}
        {{ entrust.create_time ? entrust.create_time : '--' }}
      </div>
    </div>
    <div class="flex justify-between pb-34">
@@ -41,13 +41,16 @@
      <div class="btn-wrap mt-64">
        <button class="detailBtn order-btn text-blue  h-54 lh-54 " @click.stop="goDetail(entrust.order_no)">
          {{ $t('详情') }}</button>
        <button v-if="state == 'submitted'" class="ml-19 order-btn border-none h-54 lh-54 cancel-btn yellow-bg textColor"
        <button v-if="state == 'submitted'"
          class="ml-19 order-btn border-none h-54 lh-54 cancel-btn yellow-bg textColor"
          @click.stop="cancelSingle(entrust.order_no)">
          {{ $t('撤单') }}</button>
        <button v-if="state == 'created'" class="ml-19 order-btn border-none h-54 lh-54 cancel-btn textColor yellow-bg">{{
          $t('已完成') }}</button>
        <button v-if="state == 'canceled'" class="ml-19 order-btn border-none h-54 lh-54 cancel-btn yellow-bg textColor">{{
          $t('canceled') }}</button>
        <button v-if="state == 'created'"
          class="ml-19 order-btn border-none h-54 lh-54 cancel-btn textColor yellow-bg">{{
            $t('已完成') }}</button>
        <button v-if="state == 'canceled'"
          class="ml-19 order-btn border-none h-54 lh-54 cancel-btn yellow-bg textColor">{{
            $t('canceled') }}</button>
      </div>
    </div>
  </div>
@@ -97,7 +100,7 @@
  }
}
</script>
<style lang="scss"  scoped>
<style lang="scss" scoped>
@import "@/assets/init.scss";
#cryptos {
src/components/Transform/perpetual-open/index.vue
@@ -364,19 +364,9 @@
            <div class="lever-popup-seg-item lever-popup-seg-right" :class="{ 'lever-popup-seg-active': leverPopupMargin === 0 }"
              @click="leverPopupMargin = 0">Part</div>
          </div>
          <div class="lever-popup-row">
            <div class="lever-popup-btn lever-popup-btn-minus" @click="leverPopupValue = Math.max(1, (leverPopupValue || 1) - 1)">−</div>
            <input v-model.number="leverPopupValue" type="number" class="lever-popup-input" min="1" :max="maxLever"
              @input="onLeverInput" />
            <div class="lever-popup-btn lever-popup-btn-plus" @click="leverPopupValue = Math.min(maxLever, (leverPopupValue || 1) + 1)">+</div>
          </div>
          <div class="lever-popup-slider-wrap">
            <span class="lever-popup-slider-label">1X</span>
            <div class="lever-popup-slider-inner">
              <van-slider v-model="leverPopupValue" :min="1" :max="maxLever" :step="1" class="lever-popup-slider"
                bar-height="6px" active-color="#7c3aed" />
            </div>
            <span class="lever-popup-slider-label">{{ maxLever }}X</span>
          <div class="lever-popup-presets">
            <div v-for="lv in leverPresetList" :key="lv" class="lever-popup-preset-item"
              :class="{ 'lever-popup-preset-active': leverPopupValue === lv }" @click="leverPopupValue = lv">{{ lv }}X</div>
          </div>
          <div class="lever-popup-confirm" @click="confirmLeverPopup">Confirm</div>
        </div>
@@ -566,7 +556,7 @@
      return max
    },
    maxLever() {
      return 100 // 杠杆倍率固定 1~100,不从接口获取
      return Math.max(...this.leverPresetList)
    },
    leverDisplayMode() {
      return this.locationVal === 1 ? 'Cross' : 'Part'
@@ -636,6 +626,7 @@
      locationTitle: this.$t('全仓'),
      locationVal: 1,
      showLeverPopup: false,
      leverPresetList: [30, 50, 100, 200, 300],
      leverPopupValue: 100,
      leverPopupMargin: 1, // 1=全仓 Cross, 0=逐仓 Part
    }
@@ -816,7 +807,7 @@
    },
    handleChoose(item) {
      this.showOptions = !this.showOptions
      this.form.lever_rate = item.lever_rate
      this.form.lever_rate = this.snapLeverToPreset(item.lever_rate)
      console.log('handleChoose')
      this.handleInitSliderOption()
    },
@@ -873,24 +864,32 @@
      this.locationShow = false;
    },
    openLeverPopup() {
      this.leverPopupValue = this.form.lever_rate || 1;
      this.leverPopupValue = this.snapLeverToPreset(this.form.lever_rate);
      this.leverPopupMargin = this.locationVal !== undefined ? this.locationVal : 1;
      this.showLeverPopup = true;
    },
    onLeverInput() {
      let v = parseInt(this.leverPopupValue, 10);
      if (isNaN(v) || v < 1) this.leverPopupValue = 1;
      else if (v > this.maxLever) this.leverPopupValue = this.maxLever;
      else this.leverPopupValue = v;
    snapLeverToPreset(v) {
      const list = this.leverPresetList;
      const n = parseInt(v, 10);
      if (isNaN(n) || n <= 0) return 100;
      if (list.includes(n)) return n;
      let best = list[0];
      let bestD = Infinity;
      for (const x of list) {
        const d = Math.abs(x - n);
        if (d < bestD || (d === bestD && x < best)) {
          bestD = d;
          best = x;
        }
      }
      return best;
    },
    onLeverPopupClosed() {
      this.leverPopupValue = this.form.lever_rate || 1;
      this.leverPopupValue = this.snapLeverToPreset(this.form.lever_rate);
      this.leverPopupMargin = this.locationVal !== undefined ? this.locationVal : 1;
    },
    confirmLeverPopup() {
      let val = parseInt(this.leverPopupValue, 10);
      if (isNaN(val) || val < 1) val = 1;
      if (val > this.maxLever) val = this.maxLever;
      const val = this.snapLeverToPreset(this.leverPopupValue);
      this.form.lever_rate = val;
      this.locationVal = this.leverPopupMargin;
      this.locationTitle = this.leverPopupMargin === 1 ? this.$t('全仓') : this.$t('逐仓');
@@ -1461,66 +1460,33 @@
  font-weight: 600;
  box-shadow: 0 1px 6px rgba(0,0,0,0.06);
}
.lever-popup-row {
  display: flex;
  align-items: stretch;
.lever-popup-presets {
  margin-top: 30px;
  border-radius: 15px;
  overflow: hidden;
  border: 1px solid #eee;
}
.lever-popup-btn {
  width: 78px;
  min-width: 78px;
  background: #f7f7f7;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 43px;
  color: #333;
  cursor: pointer;
  font-weight: 400;
  flex-wrap: wrap;
  gap: 18px;
  justify-content: flex-start;
}
.lever-popup-btn-minus { border-radius: 15px 0 0 15px; }
.lever-popup-btn-plus { border-radius: 0 15px 15px 0; }
.lever-popup-input {
  flex: 1;
  min-width: 0;
.lever-popup-preset-item {
  flex: 1 1 calc(33.33% - 12px);
  min-width: calc(33.33% - 12px);
  box-sizing: border-box;
  padding: 21px 12px;
  text-align: center;
  border: none;
  font-size: 35px;
  font-size: 30px;
  font-weight: 600;
  color: #868e9a;
  background: #f7f7f7;
  border-radius: 15px;
  border: 2px solid transparent;
  cursor: pointer;
  transition: background 0.2s, color 0.2s, border-color 0.2s;
}
.lever-popup-preset-item.lever-popup-preset-active {
  color: #1e1e1e;
  background: #fff;
  padding: 21px 12px;
}
.lever-popup-input:focus { outline: none; }
.lever-popup-slider-wrap {
  margin-top: 36px;
  display: flex;
  align-items: center;
  gap: 18px;
}
.lever-popup-slider-label {
  font-size: 23px;
  color: #868e9a;
  flex-shrink: 0;
}
.lever-popup-slider-inner {
  flex: 1;
  min-width: 0;
}
.lever-popup-slider :deep(.van-slider__bar) {
  height: 6px;
  background: linear-gradient(90deg, #7c3aed 0%, #5b21b6 100%) !important;
  border-radius: 3px;
}
.lever-popup-slider :deep(.van-slider__button) {
  width: 30px;
  height: 30px;
  background: #666;
  border: none;
  box-shadow: 0 1px 4px rgba(0,0,0,0.2);
  border-color: #7c3aed;
  box-shadow: 0 1px 8px rgba(124, 58, 237, 0.15);
}
.lever-popup-confirm {
  margin-top: 42px;
src/components/Transform/perpetual-position-list/index.vue
@@ -46,7 +46,7 @@
        </div>
        <div class="flex-1 text-right">
          <div class="text-grey">{{ $t('Margin Ratio') || 'Margin Ratio' }}</div>
          <div class="mt-12 textColor">{{ item.margin_ratio != null ? item.margin_ratio + '%' : '-' }}</div>
          <div class="mt-12 textColor">{{ item.change_ratio != null ? item.change_ratio + '%' : '-' }}</div>
        </div>
      </div>
      <!-- Entry Price / Mark Price / Liq. Price -->
src/config/index.js
@@ -35,12 +35,12 @@
// const ENV_DEV = 'zhapi.coinbtcs.com' // dev
// const ENV_DEV = 'openapi.yanshiz.com' // dev
const ENV_DEV = 'api.orionx.cyou' // dev
const ENV_DEV = 'api.bitxworld.com' // dev
// const ENV_DEV = '192.168.10.6:8086' // dev
// const ENV_PRO = 'qheufhj.site' //  app域名
// const ENV_PRO = window.location.hostname // 接口域名跟随 H5zhapi.coinbtcs.com
const ENV_PRO = 'api.orionx.cyou' // 接口域名跟随 H5zhapi.coinbtcs.com
const ENV_PRO = 'api.bitxworld.com' // 接口域名跟随 H5zhapi.coinbtcs.com
// const ENV_PRO = '192.168.10.6:8086' // 接口域名跟随 H5zhapi.coinbtcs.com
let base_url = ''
@@ -56,7 +56,7 @@
    ws_url = 'wss://' + ENV_PRO + '/api/websocket'
}
let imgUrl = 'https://img.orionx.cyou' // 暂时的 单独的图片地址
let imgUrl = 'https://img.bitxworld.com' // 暂时的 单独的图片地址
export const BASE_URL = base_url
export const WS_URL = ws_url
src/i18n/en.js
@@ -187,9 +187,9 @@
    setLanguage: "Set Language",
    quotes: "Quote",
    chart: "Chart",
    trade: "Trade",
    trade: "Contract",
    history: "History",
    my: "My",
    my: "Assets",
    welcome: "Welcome",
    notCertified: "Not Certified",
    verified: "Verified",
@@ -1842,7 +1842,7 @@
    "质押挖矿、DeFi等": "Staking Mining、Defi etc",
    "24H量": "24h vol",
    "推广总人数:": "Total referral",
    "永续": "Perpetual",
    "永续": "Contract",
    "全仓": "Cross",
    "开仓": "Open",
    "平仓": "Close",
@@ -2115,7 +2115,7 @@
    "账变记录": "Record",
    "选择账户类型": "Select account type",
    "查询": "Search",
    "永续合约": "Perpetual",
    "永续合约": "Contract",
    "交割合约": "Delivery",
    "最新价格": "Last price",
    "24h最高价": "24h High",
@@ -2900,12 +2900,14 @@
    "订金": "Deposit",
    "提取": "Withdraw",
    "人工智能交易": "AI Trading",
    "Privacy Of BitX": "Privacy Of BitX",
    "About BitX": "About BitX",
    "贸易竞争": "Trade Competition",
    "空投": "Airdrop",
    "加密货币交易": "Crypto Trading",
    "申请成为交易员": "Apply as Trader",
    "不适用": "N/A",
    "期货订单": "Futures Orders",
    "期货订单": "Contract Orders",
    "现货订单": "Spot Orders",
    "当日成交": "Daily Deal",
    "当日成交汇总": "Daily Deal Summary",
src/i18n/zhcn.js
@@ -2905,6 +2905,8 @@
    "订金": "订金",
    "提取": "提取",
    "人工智能交易": "人工智能交易",
    "Privacy Of BitX": "BitX 隐私政策",
    "About BitX": "关于 BitX",
    "贸易竞争": "贸易竞争",
    "空投": "空投",
    "加密货币交易": "加密货币交易",
src/views/authentication/index.vue
@@ -180,7 +180,14 @@
    showToast(t('pleaseSelectBirth'));
    return;
  }
  // 证件照非必填,不校验 frontFile/reverseFile
  if (!frontFile.value.length || !frontFile.value[0]?.resURL) {
    showToast(frontFile.value[0]?.status === 'uploading' ? t('uploading') : t('uploadComplete'));
    return;
  }
  if (!reverseFile.value.length || !reverseFile.value[0]?.resURL) {
    showToast(reverseFile.value[0]?.status === 'uploading' ? t('uploading') : t('uploadComplete'));
    return;
  }
  _applyIdentify({
    countryName: countryCode.value,
src/views/cryptos/AccountChange/index.vue
@@ -16,7 +16,7 @@
                  <div class="font-32 textColor">{{ orderTypes[item.content_type] }}</div>
                  <div class="text-grey font-26 mt-6">
                    {{ item.createTime }}
                    (UTC+8)
                    <!-- (UTC+8) -->
                  </div>
                  <!-- <div class="text-grey font-26 mt-6">{{ orderTypes[item.content_type] }}</div> -->
                </div>
src/views/cryptos/PerpetualContract/orderDetail.vue
@@ -51,14 +51,12 @@
          <div class="text-grey">{{ $t('开仓时间') }}</div>
          <div class="textColor">
            {{ detail.create_time }}
            (UTC+8)
            <!-- (UTC+8) -->
          </div>
        </div>
        <div class="flex justify-between cell-item ">
          <div class="text-grey">{{ $t('平仓时间') }}</div>
          <div class="textColor">{{ detail.close_time ? dayjs(detail.close_time * 1000).format('YYYY-MM-DD HH:mm:ss')
            + '(UTC+8)'
            : '--' }}</div>
          <div class="textColor">{{ detail.close_time ? formatUsTime(detail.close_time * 1000) : '--' }}</div>
        </div>
      </div>
    </div>
@@ -70,6 +68,8 @@
import assetsHead from "@/components/Transform/assets-head/index.vue";
import { Popup } from "vant";
import dayjs from 'dayjs'
const US_TIMEZONE = 'America/New_York'
export default {
  name: "orderDetail",
  data() {
@@ -93,6 +93,29 @@
  methods: {
    dayjs,
    formatUsTime(timestampMs) {
      if (!timestampMs) return '--'
      try {
        const dtf = new Intl.DateTimeFormat('en', {
          hour12: false,
          timeZone: US_TIMEZONE,
          year: 'numeric',
          month: '2-digit',
          day: '2-digit',
          hour: '2-digit',
          minute: '2-digit',
          second: '2-digit',
        })
        const parts = dtf.formatToParts(new Date(timestampMs))
        const map = parts.reduce((acc, p) => {
          acc[p.type] = p.value
          return acc
        }, {})
        return `${map.year}-${map.month}-${map.day} ${map.hour}:${map.minute}:${map.second}`
      } catch (e) {
        return dayjs(timestampMs).format('YYYY-MM-DD HH:mm:ss')
      }
    },
    handleText(state) {
      let str = '';
      if (state == 'created') {
src/views/cryptos/Recharge/rechargeDetail.vue
@@ -55,7 +55,7 @@
                <div class="text-grey">{{ $t('日期') }}</div>
                <div class="textColor">
                    {{ info.create_time }}
                    (UTC+8)
                    <!-- (UTC+8) -->
                </div>
            </div>
            <div class="flex justify-between mb74">
src/views/customerService/index.vue
@@ -329,7 +329,7 @@
.right-chatBg {
  position: relative;
  background: $color_main;
  background: #e3e3e3;
  color: $text_color;
  &::after {
@@ -338,7 +338,7 @@
    height: 0;
    border-top: 5px solid transparent;
    border-bottom: 5px solid transparent;
    border-left: 10px solid $color_main;
    border-left: 10px solid #e3e3e3;
    position: absolute;
    right: -8px;
    top: 14px;
src/views/login/index.vue
@@ -128,18 +128,19 @@
/* Logo:紫色渐变圆角方框 */
.login-logo-wrap {
    width: 72px;
    height: 72px;
    border-radius: 18px;
    background: linear-gradient(135deg, #2c1a5c 0%, #5a37a5 100%);
    width: 100px;
    height: 100%;
    border-radius: 6px;
    // background: linear-gradient(135deg, #2c1a5c 0%, #5a37a5 100%);
    display: flex;
    align-items: center;
    justify-content: center;
    margin-bottom: 24px;
}
.login-logo {
    width: 44px;
    height: 44px;
    width: 100%;
    height: 100%;
    border-radius: 6px;
    object-fit: contain;
}
src/views/my/index.vue
@@ -64,23 +64,23 @@
        
      </div>
      <!-- 列表块1:人工智能交易、资金明细、空投 -->
      <!-- 列表块1:资金明细 -->
      <div class="my-list-card">
        <div class="my-list-item" @click="onRoute('/my/aiDetail')">
        <!-- <div class="my-list-item" @click="onRoute('/my/aiDetail')">
          <van-icon name="cluster-o" size="20" class="my-list-icon" />
          <span class="my-list-title">{{ $t('人工智能交易') }}</span>
          <van-icon name="arrow" size="16" class="my-list-arrow" />
        </div>
        </div> -->
        <div class="my-list-item" @click="onRoute('/cryptos/accountChange')">
          <van-icon name="chart-trending-o" size="20" class="my-list-icon" />
          <span class="my-list-title">{{ $t('资金明细') }}</span>
          <van-icon name="arrow" size="16" class="my-list-arrow" />
        </div>
        <div class="my-list-item" @click="onRoute('/my/airdrop')">
        <!-- <div class="my-list-item" @click="onRoute('/my/airdrop')">
          <van-icon name="gift-o" size="20" class="my-list-icon" />
          <span class="my-list-title">{{ $t('空投') }}</span>
          <van-icon name="arrow" size="16" class="my-list-arrow" />
        </div>
        </div> -->
      </div>
      <!-- 列表块2:加密货币交易、申请成为交易员、期货订单、现货订单 -->
@@ -120,6 +120,20 @@
          <van-icon name="arrow" size="16" class="my-list-arrow" />
        </div>
      </div>
      <!-- 列表块4:Privacy Of BitX、About BitX -->
      <div class="my-list-card">
        <div class="my-list-item" @click="onRoute('/aboutUs?serviceTerm=24')">
          <van-icon name="shield-o" size="20" class="my-list-icon" />
          <span class="my-list-title">{{ $t('Privacy Of BitX') }}</span>
          <van-icon name="arrow" size="16" class="my-list-arrow" />
        </div>
        <div class="my-list-item" @click="onRoute('/aboutUs?serviceTerm=20')">
          <van-icon name="info-o" size="20" class="my-list-icon" />
          <span class="my-list-title">{{ $t('About BitX') }}</span>
          <van-icon name="arrow" size="16" class="my-list-arrow" />
        </div>
      </div>
    </div>
  </section>
</template>
src/views/register/index.vue
@@ -64,13 +64,13 @@
                    <van-icon :name="repwdVisible ? 'eye-o' : 'closed-eye'" size="20" />
                </span>
            </div>
            <!-- Referral Code (optional) -->
            <!-- Referral Code -->
            <div class="reg-field">
                <input
                    v-model="invitCode"
                    type="text"
                    class="reg-input"
                    :placeholder="`${$t('entryInvitCode')} (optional)`"
                    :placeholder="$t('entryInvitCode')"
                />
            </div>
@@ -173,19 +173,22 @@
        showToast(t('entryPassword'));
        return;
    }
    if (!validatePassword(password.value)) {
    if (!password.value || password.value.length < 6 || password.value.length > 16) {
        showToast(t('passwordTips'));
        return;
    }
    if (repassword.value !== password.value) {
        showToast(t('noSamePassword'));
        return;
    }
    if (!invitCode.value.trim()) {
        showToast(t('请输入邀请码'));
        return;
    }
    if (!agree.value) {
        showToast(t('agreeServiceCond'));
        return;
    }
        return;
    }
    // 推荐码可选,无则传空
    registerApi();
};
@@ -195,14 +198,14 @@
        password: password.value,
        type: '2',
        verifcode: verifyCode.value,
        usercode: invitCode.value.trim() || '',
        usercode: invitCode.value.trim(),
        safeword: password.value
    }).then((res) => {
        userStore[GET_USERINFO](res);
        store.state.user.userInfo = res;
        router.push('/login');
    }).catch((err) => {
        showToast(err?.msg || t('register'));
        showToast(err);
    });
};
@@ -247,18 +250,19 @@
}
.reg-logo-wrap {
    width: 72px;
    height: 72px;
    border-radius: 18px;
    background: linear-gradient(135deg, #2c1a5c 0%, #5a37a5 100%);
    width: 100px;
    height: 100%;
    border-radius: 6px;
    // background: linear-gradient(135deg, #2c1a5c 0%, #5a37a5 100%);
    display: flex;
    align-items: center;
    justify-content: center;
    margin-bottom: 24px;
}
.reg-logo {
    width: 44px;
    height: 44px;
    width: 100%;
    height: 100%;
    border-radius: 6px;
    object-fit: contain;
}
yarn.lock
@@ -1128,9 +1128,9 @@
  dependencies:
    "is-arrayish" "^0.2.1"
"esbuild-darwin-64@0.15.18":
  "integrity" "sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg=="
  "resolved" "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.18.tgz"
"esbuild-windows-64@0.15.18":
  "integrity" "sha512-qinug1iTTaIIrCorAUjR0fcBk24fjzEedFYhhispP8Oc7SFvs+XeW3YpAKiKp8dRpizl4YYAhxMjlftAMJiaUw=="
  "resolved" "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.18.tgz"
  "version" "0.15.18"
"esbuild@^0.15.9":
@@ -1420,11 +1420,6 @@
  "integrity" "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
  "resolved" "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz"
  "version" "1.0.0"
"fsevents@~2.3.2":
  "integrity" "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA=="
  "resolved" "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz"
  "version" "2.3.2"
"function-bind@^1.1.1":
  "integrity" "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="